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