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