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 #ifdef CONFIG_OPTEE_V2 54 typedef struct optee_msg_arg_v2 t_teesmc32_arg; 55 typedef struct optee_msg_param_v2 t_teesmc32_param; 56 57 #define TEESMC32_GET_ARG_SIZE(num_params) \ 58 (sizeof(struct optee_msg_arg_v2) + \ 59 sizeof(struct optee_msg_param_v2) * (num_params)) 60 61 #define TEESMC32_GET_PARAMS(x) \ 62 (struct optee_msg_param_v2 *)(((struct optee_msg_arg_v2 *)(x)) + 1) 63 64 #endif 65 66 #define OPTEE_MSG_ATTR_TYPE_NONE_V2 0x0 67 #define OPTEE_MSG_ATTR_TYPE_VALUE_INPUT_V2 0x1 68 #define OPTEE_MSG_ATTR_TYPE_VALUE_OUTPUT_V2 0x2 69 #define OPTEE_MSG_ATTR_TYPE_VALUE_INOUT_V2 0x3 70 #define OPTEE_MSG_ATTR_TYPE_RMEM_INPUT_V2 0x5 71 #define OPTEE_MSG_ATTR_TYPE_RMEM_OUTPUT_V2 0x6 72 #define OPTEE_MSG_ATTR_TYPE_RMEM_INOUT_V2 0x7 73 #define OPTEE_MSG_ATTR_TYPE_TMEM_INPUT_V2 0x9 74 #define OPTEE_MSG_ATTR_TYPE_TMEM_OUTPUT_V2 0xa 75 #define OPTEE_MSG_ATTR_TYPE_TMEM_INOUT_V2 0xb 76 77 #define OPTEE_MSG_ATTR_META_V2 (1 << (8)) 78 79 #define OPTEE_MSG_RPC_CMD_SHM_ALLOC_V2 6 80 #define OPTEE_MSG_RPC_CMD_SHM_FREE_V2 7 81 82 #define OPTEE_MSG_RPC_CMD_LOAD_TA_V2 0 83 84 #define OPTEE_MSG_RPC_CMD_RPMB_V2 1 85 86 #define OPTEE_MSG_RPC_CMD_FS_V2 2 87 88 #define OPTEE_SMC_32_V2 0 89 #define OPTEE_SMC_64_V2 0x40000000 90 #define OPTEE_SMC_FAST_CALL_V2 0x80000000 91 #define OPTEE_SMC_STD_CALL_V2 0 92 93 #define OPTEE_SMC_OWNER_MASK_V2 0x3F 94 #define OPTEE_SMC_OWNER_SHIFT_V2 24 95 96 #define OPTEE_SMC_FUNC_MASK_V2 0xFFFF 97 98 #define OPTEE_SMC_OWNER_TRUSTED_OS_V2 50 99 100 #define OPTEE_SMC_FUNCID_GET_SHM_CONFIG_V2 7 101 #define OPTEE_SMC_GET_SHM_CONFIG_V2 \ 102 OPTEE_SMC_FAST_CALL_VAL_V2(OPTEE_SMC_FUNCID_GET_SHM_CONFIG_V2) 103 104 #define OPTEE_SMC_FAST_CALL_VAL_V2(func_num) \ 105 OPTEE_SMC_CALL_VAL_V2(OPTEE_SMC_32_V2, OPTEE_SMC_FAST_CALL_V2, \ 106 OPTEE_SMC_OWNER_TRUSTED_OS_V2, (func_num)) 107 108 #define OPTEE_SMC_CALL_VAL_V2(type, calling_convention, owner, func_num) \ 109 ((type) | (calling_convention) | \ 110 (((owner) & OPTEE_SMC_OWNER_MASK_V2) << \ 111 OPTEE_SMC_OWNER_SHIFT_V2) |\ 112 ((func_num) & OPTEE_SMC_FUNC_MASK_V2)) 113 114 #endif /* TEESMC_V2_H */ 115