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