xref: /rk3399_rockchip-uboot/include/optee_include/teesmc_v2.h (revision 1f25ada2a8eccef6ea3d9844a40d05d7ce7027d4)
1*1f25ada2SHisping Lin /*
2*1f25ada2SHisping Lin  * (C) Copyright 2017 Rockchip Electronics Co., Ltd
3*1f25ada2SHisping Lin  *
4*1f25ada2SHisping Lin  * SPDX-License-Identifier:     GPL-2.0+
5*1f25ada2SHisping Lin  */
6*1f25ada2SHisping Lin 
7*1f25ada2SHisping Lin #ifndef TEESMC_V2_H
8*1f25ada2SHisping Lin #define TEESMC_V2_H
9*1f25ada2SHisping Lin 
10*1f25ada2SHisping Lin #define OPTEE_SMC_CALL_WITH_ARG_V2 0x32000004
11*1f25ada2SHisping Lin 
12*1f25ada2SHisping Lin struct optee_msg_param_tmem_v2 {
13*1f25ada2SHisping Lin 	uint64_t buf_ptr;
14*1f25ada2SHisping Lin 	uint64_t size;
15*1f25ada2SHisping Lin 	uint64_t shm_ref;
16*1f25ada2SHisping Lin };
17*1f25ada2SHisping Lin 
18*1f25ada2SHisping Lin struct optee_msg_param_rmem_v2 {
19*1f25ada2SHisping Lin 	uint64_t offs;
20*1f25ada2SHisping Lin 	uint64_t size;
21*1f25ada2SHisping Lin 	uint64_t shm_ref;
22*1f25ada2SHisping Lin };
23*1f25ada2SHisping Lin 
24*1f25ada2SHisping Lin struct optee_msg_param_value_v2 {
25*1f25ada2SHisping Lin 	uint64_t a;
26*1f25ada2SHisping Lin 	uint64_t b;
27*1f25ada2SHisping Lin 	uint64_t c;
28*1f25ada2SHisping Lin };
29*1f25ada2SHisping Lin 
30*1f25ada2SHisping Lin struct optee_msg_param_v2 {
31*1f25ada2SHisping Lin 	uint64_t attr;
32*1f25ada2SHisping Lin 	union {
33*1f25ada2SHisping Lin 		struct optee_msg_param_tmem_v2 memref;
34*1f25ada2SHisping Lin 		struct optee_msg_param_rmem_v2 rmem;
35*1f25ada2SHisping Lin 		struct optee_msg_param_value_v2 value;
36*1f25ada2SHisping Lin 	} u;
37*1f25ada2SHisping Lin };
38*1f25ada2SHisping Lin 
39*1f25ada2SHisping Lin struct optee_msg_arg_v2 {
40*1f25ada2SHisping Lin 	uint32_t cmd;
41*1f25ada2SHisping Lin 	uint32_t ta_func;
42*1f25ada2SHisping Lin 	uint32_t session;
43*1f25ada2SHisping Lin 	uint32_t cancel_id;
44*1f25ada2SHisping Lin 	uint32_t pad;
45*1f25ada2SHisping Lin 	uint32_t ret;
46*1f25ada2SHisping Lin 	uint32_t ret_origin;
47*1f25ada2SHisping Lin 	uint32_t num_params;
48*1f25ada2SHisping Lin 
49*1f25ada2SHisping Lin 	/* num_params tells the actual number of element in params */
50*1f25ada2SHisping Lin 	struct optee_msg_param_v2 params[];
51*1f25ada2SHisping Lin };
52*1f25ada2SHisping Lin 
53*1f25ada2SHisping Lin #ifdef CONFIG_OPTEE_V2
54*1f25ada2SHisping Lin typedef struct optee_msg_arg_v2        t_teesmc32_arg;
55*1f25ada2SHisping Lin typedef struct optee_msg_param_v2      t_teesmc32_param;
56*1f25ada2SHisping Lin 
57*1f25ada2SHisping Lin #define TEESMC32_GET_ARG_SIZE(num_params) \
58*1f25ada2SHisping Lin 	(sizeof(struct optee_msg_arg_v2) + \
59*1f25ada2SHisping Lin 	 sizeof(struct optee_msg_param_v2) * (num_params))
60*1f25ada2SHisping Lin 
61*1f25ada2SHisping Lin #define TEESMC32_GET_PARAMS(x) \
62*1f25ada2SHisping Lin 	(struct optee_msg_param_v2 *)(((struct optee_msg_arg_v2 *)(x)) + 1)
63*1f25ada2SHisping Lin 
64*1f25ada2SHisping Lin #endif
65*1f25ada2SHisping Lin 
66*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_NONE_V2		0x0
67*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_VALUE_INPUT_V2		0x1
68*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_VALUE_OUTPUT_V2		0x2
69*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_VALUE_INOUT_V2		0x3
70*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_RMEM_INPUT_V2		0x5
71*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_RMEM_OUTPUT_V2		0x6
72*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_RMEM_INOUT_V2		0x7
73*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_TMEM_INPUT_V2		0x9
74*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_TMEM_OUTPUT_V2		0xa
75*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_TMEM_INOUT_V2		0xb
76*1f25ada2SHisping Lin 
77*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_META_V2			(1 << (8))
78*1f25ada2SHisping Lin 
79*1f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_SHM_ALLOC_V2	6
80*1f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_SHM_FREE_V2	7
81*1f25ada2SHisping Lin 
82*1f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_LOAD_TA_V2	0
83*1f25ada2SHisping Lin 
84*1f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_RPMB_V2		1
85*1f25ada2SHisping Lin 
86*1f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_FS_V2		2
87*1f25ada2SHisping Lin 
88*1f25ada2SHisping Lin 
89*1f25ada2SHisping Lin #endif /* TEESMC_V2_H */
90