xref: /OK3568_Linux_fs/u-boot/include/optee_include/teesmc_v2.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * (C) Copyright 2017 Rockchip Electronics Co., Ltd
3  *
4  * SPDX-License-Identifier:     GPL-2.0+
5  */
6 
7 #ifndef TEESMC_V2_H
8 #define TEESMC_V2_H
9 
10 #define OPTEE_SMC_CALL_WITH_ARG_V2 0x32000004
11 
12 struct optee_msg_param_tmem_v2 {
13 	uint64_t buf_ptr;
14 	uint64_t size;
15 	uint64_t shm_ref;
16 };
17 
18 struct optee_msg_param_rmem_v2 {
19 	uint64_t offs;
20 	uint64_t size;
21 	uint64_t shm_ref;
22 };
23 
24 struct optee_msg_param_value_v2 {
25 	uint64_t a;
26 	uint64_t b;
27 	uint64_t c;
28 };
29 
30 struct optee_msg_param_v2 {
31 	uint64_t attr;
32 	union {
33 		struct optee_msg_param_tmem_v2 memref;
34 		struct optee_msg_param_rmem_v2 rmem;
35 		struct optee_msg_param_value_v2 value;
36 	} u;
37 };
38 
39 struct optee_msg_arg_v2 {
40 	uint32_t cmd;
41 	uint32_t ta_func;
42 	uint32_t session;
43 	uint32_t cancel_id;
44 	uint32_t pad;
45 	uint32_t ret;
46 	uint32_t ret_origin;
47 	uint32_t num_params;
48 
49 	/* num_params tells the actual number of element in params */
50 	struct optee_msg_param_v2 params[];
51 };
52 
53 typedef struct optee_msg_arg_v2        t_teesmc32_arg;
54 typedef struct optee_msg_param_v2      t_teesmc32_param;
55 
56 #define TEESMC32_GET_ARG_SIZE(num_params) \
57 	(sizeof(struct optee_msg_arg_v2) + \
58 	 sizeof(struct optee_msg_param_v2) * (num_params))
59 
60 #define TEESMC32_GET_PARAMS(x) \
61 	(struct optee_msg_param_v2 *)(((struct optee_msg_arg_v2 *)(x)) + 1)
62 
63 #define OPTEE_MSG_ATTR_TYPE_NONE_V2		0x0
64 #define OPTEE_MSG_ATTR_TYPE_VALUE_INPUT_V2		0x1
65 #define OPTEE_MSG_ATTR_TYPE_VALUE_OUTPUT_V2		0x2
66 #define OPTEE_MSG_ATTR_TYPE_VALUE_INOUT_V2		0x3
67 #define OPTEE_MSG_ATTR_TYPE_RMEM_INPUT_V2		0x5
68 #define OPTEE_MSG_ATTR_TYPE_RMEM_OUTPUT_V2		0x6
69 #define OPTEE_MSG_ATTR_TYPE_RMEM_INOUT_V2		0x7
70 #define OPTEE_MSG_ATTR_TYPE_TMEM_INPUT_V2		0x9
71 #define OPTEE_MSG_ATTR_TYPE_TMEM_OUTPUT_V2		0xa
72 #define OPTEE_MSG_ATTR_TYPE_TMEM_INOUT_V2		0xb
73 
74 #define OPTEE_MSG_ATTR_META_V2			(1 << (8))
75 
76 #define OPTEE_MSG_RPC_CMD_SHM_ALLOC_V2	6
77 #define OPTEE_MSG_RPC_CMD_SHM_FREE_V2	7
78 
79 #define OPTEE_MSG_RPC_CMD_LOAD_TA_V2	0
80 
81 #define OPTEE_MSG_RPC_CMD_RPMB_V2		1
82 
83 #define OPTEE_MSG_RPC_CMD_FS_V2		2
84 
85 #define OPTEE_SMC_32_V2			0
86 #define OPTEE_SMC_64_V2			0x40000000
87 #define OPTEE_SMC_FAST_CALL_V2		0x80000000
88 #define OPTEE_SMC_STD_CALL_V2		0
89 
90 #define OPTEE_SMC_OWNER_MASK_V2		0x3F
91 #define OPTEE_SMC_OWNER_SHIFT_V2		24
92 
93 #define OPTEE_SMC_FUNC_MASK_V2		0xFFFF
94 
95 #define OPTEE_SMC_OWNER_TRUSTED_OS_V2	50
96 #define OPTEE_SMC_OWNER_TRUSTED_OS_API	63
97 
98 #define OPTEE_SMC_FUNCID_GET_SHM_CONFIG_V2	7
99 #define OPTEE_SMC_GET_SHM_CONFIG_V2 \
100 	OPTEE_SMC_FAST_CALL_VAL_V2(OPTEE_SMC_FUNCID_GET_SHM_CONFIG_V2)
101 
102 
103 /* Secure world is built with virtualization support */
104 #define OPTEE_SMC_SEC_CAP_VIRTUALIZATION	(1 << 3)
105 
106 #define OPTEE_SMC_FUNCID_EXCHANGE_CAPABILITIES	9
107 #define OPTEE_SMC_EXCHANGE_CAPABILITIES \
108 	OPTEE_SMC_FAST_CALL_VAL_V2(OPTEE_SMC_FUNCID_EXCHANGE_CAPABILITIES)
109 
110 #define OPTEE_SMC_FUNCID_VM_CREATED	13
111 #define OPTEE_SMC_VM_CREATED \
112 	OPTEE_SMC_FAST_CALL_VAL_V2(OPTEE_SMC_FUNCID_VM_CREATED)
113 
114 #define OPTEE_SMC_FUNCID_VM_DESTROYED	14
115 #define OPTEE_SMC_VM_DESTROYED \
116 	OPTEE_SMC_FAST_CALL_VAL_V2(OPTEE_SMC_FUNCID_VM_DESTROYED)
117 
118 #define OPTEE_SMC_FUNCID_CALLS_REVISION	0xFF03
119 #define OPTEE_SMC_CALLS_REVISION \
120 	OPTEE_SMC_CALL_VAL_V2(OPTEE_SMC_32_V2, OPTEE_SMC_FAST_CALL_V2, \
121 			      OPTEE_SMC_OWNER_TRUSTED_OS_API, \
122 			      OPTEE_SMC_FUNCID_CALLS_REVISION)
123 
124 #define OPTEE_SMC_FAST_CALL_VAL_V2(func_num) \
125 	OPTEE_SMC_CALL_VAL_V2(OPTEE_SMC_32_V2, OPTEE_SMC_FAST_CALL_V2, \
126 			   OPTEE_SMC_OWNER_TRUSTED_OS_V2, (func_num))
127 
128 #define OPTEE_SMC_CALL_VAL_V2(type, calling_convention, owner, func_num) \
129 			((type) | (calling_convention) | \
130 			(((owner) & OPTEE_SMC_OWNER_MASK_V2) << \
131 				OPTEE_SMC_OWNER_SHIFT_V2) |\
132 			((func_num) & OPTEE_SMC_FUNC_MASK_V2))
133 
134 #endif /* TEESMC_V2_H */
135