11f25ada2SHisping Lin /* 21f25ada2SHisping Lin * (C) Copyright 2017 Rockchip Electronics Co., Ltd 31f25ada2SHisping Lin * 41f25ada2SHisping Lin * SPDX-License-Identifier: GPL-2.0+ 51f25ada2SHisping Lin */ 61f25ada2SHisping Lin 71f25ada2SHisping Lin #ifndef TEESMC_V2_H 81f25ada2SHisping Lin #define TEESMC_V2_H 91f25ada2SHisping Lin 101f25ada2SHisping Lin #define OPTEE_SMC_CALL_WITH_ARG_V2 0x32000004 111f25ada2SHisping Lin 121f25ada2SHisping Lin struct optee_msg_param_tmem_v2 { 131f25ada2SHisping Lin uint64_t buf_ptr; 141f25ada2SHisping Lin uint64_t size; 151f25ada2SHisping Lin uint64_t shm_ref; 161f25ada2SHisping Lin }; 171f25ada2SHisping Lin 181f25ada2SHisping Lin struct optee_msg_param_rmem_v2 { 191f25ada2SHisping Lin uint64_t offs; 201f25ada2SHisping Lin uint64_t size; 211f25ada2SHisping Lin uint64_t shm_ref; 221f25ada2SHisping Lin }; 231f25ada2SHisping Lin 241f25ada2SHisping Lin struct optee_msg_param_value_v2 { 251f25ada2SHisping Lin uint64_t a; 261f25ada2SHisping Lin uint64_t b; 271f25ada2SHisping Lin uint64_t c; 281f25ada2SHisping Lin }; 291f25ada2SHisping Lin 301f25ada2SHisping Lin struct optee_msg_param_v2 { 311f25ada2SHisping Lin uint64_t attr; 321f25ada2SHisping Lin union { 331f25ada2SHisping Lin struct optee_msg_param_tmem_v2 memref; 341f25ada2SHisping Lin struct optee_msg_param_rmem_v2 rmem; 351f25ada2SHisping Lin struct optee_msg_param_value_v2 value; 361f25ada2SHisping Lin } u; 371f25ada2SHisping Lin }; 381f25ada2SHisping Lin 391f25ada2SHisping Lin struct optee_msg_arg_v2 { 401f25ada2SHisping Lin uint32_t cmd; 411f25ada2SHisping Lin uint32_t ta_func; 421f25ada2SHisping Lin uint32_t session; 431f25ada2SHisping Lin uint32_t cancel_id; 441f25ada2SHisping Lin uint32_t pad; 451f25ada2SHisping Lin uint32_t ret; 461f25ada2SHisping Lin uint32_t ret_origin; 471f25ada2SHisping Lin uint32_t num_params; 481f25ada2SHisping Lin 491f25ada2SHisping Lin /* num_params tells the actual number of element in params */ 501f25ada2SHisping Lin struct optee_msg_param_v2 params[]; 511f25ada2SHisping Lin }; 521f25ada2SHisping Lin 531f25ada2SHisping Lin typedef struct optee_msg_arg_v2 t_teesmc32_arg; 541f25ada2SHisping Lin typedef struct optee_msg_param_v2 t_teesmc32_param; 551f25ada2SHisping Lin 561f25ada2SHisping Lin #define TEESMC32_GET_ARG_SIZE(num_params) \ 571f25ada2SHisping Lin (sizeof(struct optee_msg_arg_v2) + \ 581f25ada2SHisping Lin sizeof(struct optee_msg_param_v2) * (num_params)) 591f25ada2SHisping Lin 601f25ada2SHisping Lin #define TEESMC32_GET_PARAMS(x) \ 611f25ada2SHisping Lin (struct optee_msg_param_v2 *)(((struct optee_msg_arg_v2 *)(x)) + 1) 621f25ada2SHisping Lin 631f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_NONE_V2 0x0 641f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_VALUE_INPUT_V2 0x1 651f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_VALUE_OUTPUT_V2 0x2 661f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_VALUE_INOUT_V2 0x3 671f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_RMEM_INPUT_V2 0x5 681f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_RMEM_OUTPUT_V2 0x6 691f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_RMEM_INOUT_V2 0x7 701f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_TMEM_INPUT_V2 0x9 711f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_TMEM_OUTPUT_V2 0xa 721f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_TMEM_INOUT_V2 0xb 731f25ada2SHisping Lin 741f25ada2SHisping Lin #define OPTEE_MSG_ATTR_META_V2 (1 << (8)) 751f25ada2SHisping Lin 761f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_SHM_ALLOC_V2 6 771f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_SHM_FREE_V2 7 781f25ada2SHisping Lin 791f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_LOAD_TA_V2 0 801f25ada2SHisping Lin 811f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_RPMB_V2 1 821f25ada2SHisping Lin 831f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_FS_V2 2 841f25ada2SHisping Lin 85981b7916SHisping Lin #define OPTEE_SMC_32_V2 0 86981b7916SHisping Lin #define OPTEE_SMC_64_V2 0x40000000 87981b7916SHisping Lin #define OPTEE_SMC_FAST_CALL_V2 0x80000000 88981b7916SHisping Lin #define OPTEE_SMC_STD_CALL_V2 0 89981b7916SHisping Lin 90981b7916SHisping Lin #define OPTEE_SMC_OWNER_MASK_V2 0x3F 91981b7916SHisping Lin #define OPTEE_SMC_OWNER_SHIFT_V2 24 92981b7916SHisping Lin 93981b7916SHisping Lin #define OPTEE_SMC_FUNC_MASK_V2 0xFFFF 94981b7916SHisping Lin 95981b7916SHisping Lin #define OPTEE_SMC_OWNER_TRUSTED_OS_V2 50 9674eb6027SHisping Lin #define OPTEE_SMC_OWNER_TRUSTED_OS_API 63 97981b7916SHisping Lin 98981b7916SHisping Lin #define OPTEE_SMC_FUNCID_GET_SHM_CONFIG_V2 7 99981b7916SHisping Lin #define OPTEE_SMC_GET_SHM_CONFIG_V2 \ 100981b7916SHisping Lin OPTEE_SMC_FAST_CALL_VAL_V2(OPTEE_SMC_FUNCID_GET_SHM_CONFIG_V2) 101981b7916SHisping Lin 102*1d30eaa5SHisping Lin 103*1d30eaa5SHisping Lin /* Secure world is built with virtualization support */ 104*1d30eaa5SHisping Lin #define OPTEE_SMC_SEC_CAP_VIRTUALIZATION (1 << 3) 105*1d30eaa5SHisping Lin 106*1d30eaa5SHisping Lin #define OPTEE_SMC_FUNCID_EXCHANGE_CAPABILITIES 9 107*1d30eaa5SHisping Lin #define OPTEE_SMC_EXCHANGE_CAPABILITIES \ 108*1d30eaa5SHisping Lin OPTEE_SMC_FAST_CALL_VAL_V2(OPTEE_SMC_FUNCID_EXCHANGE_CAPABILITIES) 109*1d30eaa5SHisping Lin 110*1d30eaa5SHisping Lin #define OPTEE_SMC_FUNCID_VM_CREATED 13 111*1d30eaa5SHisping Lin #define OPTEE_SMC_VM_CREATED \ 112*1d30eaa5SHisping Lin OPTEE_SMC_FAST_CALL_VAL_V2(OPTEE_SMC_FUNCID_VM_CREATED) 113*1d30eaa5SHisping Lin 114*1d30eaa5SHisping Lin #define OPTEE_SMC_FUNCID_VM_DESTROYED 14 115*1d30eaa5SHisping Lin #define OPTEE_SMC_VM_DESTROYED \ 116*1d30eaa5SHisping Lin OPTEE_SMC_FAST_CALL_VAL_V2(OPTEE_SMC_FUNCID_VM_DESTROYED) 117*1d30eaa5SHisping Lin 11874eb6027SHisping Lin #define OPTEE_SMC_FUNCID_CALLS_REVISION 0xFF03 11974eb6027SHisping Lin #define OPTEE_SMC_CALLS_REVISION \ 12074eb6027SHisping Lin OPTEE_SMC_CALL_VAL_V2(OPTEE_SMC_32_V2, OPTEE_SMC_FAST_CALL_V2, \ 12174eb6027SHisping Lin OPTEE_SMC_OWNER_TRUSTED_OS_API, \ 12274eb6027SHisping Lin OPTEE_SMC_FUNCID_CALLS_REVISION) 12374eb6027SHisping Lin 124981b7916SHisping Lin #define OPTEE_SMC_FAST_CALL_VAL_V2(func_num) \ 125981b7916SHisping Lin OPTEE_SMC_CALL_VAL_V2(OPTEE_SMC_32_V2, OPTEE_SMC_FAST_CALL_V2, \ 126981b7916SHisping Lin OPTEE_SMC_OWNER_TRUSTED_OS_V2, (func_num)) 127981b7916SHisping Lin 128981b7916SHisping Lin #define OPTEE_SMC_CALL_VAL_V2(type, calling_convention, owner, func_num) \ 129981b7916SHisping Lin ((type) | (calling_convention) | \ 130981b7916SHisping Lin (((owner) & OPTEE_SMC_OWNER_MASK_V2) << \ 131981b7916SHisping Lin OPTEE_SMC_OWNER_SHIFT_V2) |\ 132981b7916SHisping Lin ((func_num) & OPTEE_SMC_FUNC_MASK_V2)) 1331f25ada2SHisping Lin 1341f25ada2SHisping Lin #endif /* TEESMC_V2_H */ 135