1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Copyright (c) 2023, Arm Limited 4 */ 5 6#ifndef TSTEE_PRIVATE_H 7#define TSTEE_PRIVATE_H 8 9#include <linux/arm_ffa.h> 10#include <linux/bitops.h> 11#include <linux/tee_core.h> 12#include <linux/types.h> 13#include <linux/uuid.h> 14#include <linux/xarray.h> 15 16/* 17 * The description of the ABI implemented in this file is available at 18 * https://trusted-services.readthedocs.io/en/v1.0.0/developer/service-access-protocols.html#abi 19 */ 20 21/* UUID of this protocol */ 22#define TS_RPC_UUID UUID_INIT(0xbdcd76d7, 0x825e, 0x4751, \ 23 0x96, 0x3b, 0x86, 0xd4, 0xf8, 0x49, 0x43, 0xac) 24 25/* Protocol version*/ 26#define TS_RPC_PROTOCOL_VERSION (1) 27 28/* Status codes */ 29#define TS_RPC_OK (0) 30 31/* RPC control register */ 32#define TS_RPC_CTRL_REG (0) 33#define OPCODE_MASK GENMASK(15, 0) 34#define IFACE_ID_MASK GENMASK(23, 16) 35#define TS_RPC_CTRL_OPCODE(x) ((u16)(FIELD_GET(OPCODE_MASK, (x)))) 36#define TS_RPC_CTRL_IFACE_ID(x) ((u8)(FIELD_GET(IFACE_ID_MASK, (x)))) 37#define TS_RPC_CTRL_PACK_IFACE_OPCODE(i, o) \ 38 (FIELD_PREP(IFACE_ID_MASK, (i)) | FIELD_PREP(OPCODE_MASK, (o))) 39#define TS_RPC_CTRL_SAP_RC BIT(30) 40#define TS_RPC_CTRL_SAP_ERR BIT(31) 41 42/* Interface ID for RPC management operations */ 43#define TS_RPC_MGMT_IFACE_ID (0xff) 44 45/* Management calls */ 46#define TS_RPC_OP_GET_VERSION (0x0000) 47#define TS_RPC_GET_VERSION_RESP (1) 48 49#define TS_RPC_OP_RETRIEVE_MEM (0x0001) 50#define TS_RPC_RETRIEVE_MEM_HANDLE_LSW (1) 51#define TS_RPC_RETRIEVE_MEM_HANDLE_MSW (2) 52#define TS_RPC_RETRIEVE_MEM_TAG_LSW (3) 53#define TS_RPC_RETRIEVE_MEM_TAG_MSW (4) 54#define TS_RPC_RETRIEVE_MEM_RPC_STATUS (1) 55 56#define TS_RPC_OP_RELINQ_MEM (0x0002) 57#define TS_RPC_RELINQ_MEM_HANDLE_LSW (1) 58#define TS_RPC_RELINQ_MEM_HANDLE_MSW (2) 59#define TS_RPC_RELINQ_MEM_RPC_STATUS (1) 60 61#define TS_RPC_OP_SERVICE_INFO (0x0003) 62#define TS_RPC_SERVICE_INFO_UUID0 (1) 63#define TS_RPC_SERVICE_INFO_UUID1 (2) 64#define TS_RPC_SERVICE_INFO_UUID2 (3) 65#define TS_RPC_SERVICE_INFO_UUID3 (4) 66#define TS_RPC_SERVICE_INFO_RPC_STATUS (1) 67#define TS_RPC_SERVICE_INFO_IFACE (2) 68 69/* Service call */ 70#define TS_RPC_SERVICE_MEM_HANDLE_LSW (1) 71#define TS_RPC_SERVICE_MEM_HANDLE_MSW (2) 72#define TS_RPC_SERVICE_REQ_LEN (3) 73#define TS_RPC_SERVICE_CLIENT_ID (4) 74#define TS_RPC_SERVICE_RPC_STATUS (1) 75#define TS_RPC_SERVICE_STATUS (2) 76#define TS_RPC_SERVICE_RESP_LEN (3) 77 78struct tstee { 79 struct ffa_device *ffa_dev; 80 struct tee_device *teedev; 81 struct tee_shm_pool *pool; 82}; 83 84struct ts_session { 85 u8 iface_id; 86}; 87 88struct ts_context_data { 89 struct xarray sess_list; 90}; 91 92#endif /* TSTEE_PRIVATE_H */ 93