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 #ifdef CONFIG_OPTEE_V2 541f25ada2SHisping Lin typedef struct optee_msg_arg_v2 t_teesmc32_arg; 551f25ada2SHisping Lin typedef struct optee_msg_param_v2 t_teesmc32_param; 561f25ada2SHisping Lin 571f25ada2SHisping Lin #define TEESMC32_GET_ARG_SIZE(num_params) \ 581f25ada2SHisping Lin (sizeof(struct optee_msg_arg_v2) + \ 591f25ada2SHisping Lin sizeof(struct optee_msg_param_v2) * (num_params)) 601f25ada2SHisping Lin 611f25ada2SHisping Lin #define TEESMC32_GET_PARAMS(x) \ 621f25ada2SHisping Lin (struct optee_msg_param_v2 *)(((struct optee_msg_arg_v2 *)(x)) + 1) 631f25ada2SHisping Lin 641f25ada2SHisping Lin #endif 651f25ada2SHisping Lin 661f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_NONE_V2 0x0 671f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_VALUE_INPUT_V2 0x1 681f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_VALUE_OUTPUT_V2 0x2 691f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_VALUE_INOUT_V2 0x3 701f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_RMEM_INPUT_V2 0x5 711f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_RMEM_OUTPUT_V2 0x6 721f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_RMEM_INOUT_V2 0x7 731f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_TMEM_INPUT_V2 0x9 741f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_TMEM_OUTPUT_V2 0xa 751f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_TMEM_INOUT_V2 0xb 761f25ada2SHisping Lin 771f25ada2SHisping Lin #define OPTEE_MSG_ATTR_META_V2 (1 << (8)) 781f25ada2SHisping Lin 791f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_SHM_ALLOC_V2 6 801f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_SHM_FREE_V2 7 811f25ada2SHisping Lin 821f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_LOAD_TA_V2 0 831f25ada2SHisping Lin 841f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_RPMB_V2 1 851f25ada2SHisping Lin 861f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_FS_V2 2 871f25ada2SHisping Lin 88*981b7916SHisping Lin #define OPTEE_SMC_32_V2 0 89*981b7916SHisping Lin #define OPTEE_SMC_64_V2 0x40000000 90*981b7916SHisping Lin #define OPTEE_SMC_FAST_CALL_V2 0x80000000 91*981b7916SHisping Lin #define OPTEE_SMC_STD_CALL_V2 0 92*981b7916SHisping Lin 93*981b7916SHisping Lin #define OPTEE_SMC_OWNER_MASK_V2 0x3F 94*981b7916SHisping Lin #define OPTEE_SMC_OWNER_SHIFT_V2 24 95*981b7916SHisping Lin 96*981b7916SHisping Lin #define OPTEE_SMC_FUNC_MASK_V2 0xFFFF 97*981b7916SHisping Lin 98*981b7916SHisping Lin #define OPTEE_SMC_OWNER_TRUSTED_OS_V2 50 99*981b7916SHisping Lin 100*981b7916SHisping Lin #define OPTEE_SMC_FUNCID_GET_SHM_CONFIG_V2 7 101*981b7916SHisping Lin #define OPTEE_SMC_GET_SHM_CONFIG_V2 \ 102*981b7916SHisping Lin OPTEE_SMC_FAST_CALL_VAL_V2(OPTEE_SMC_FUNCID_GET_SHM_CONFIG_V2) 103*981b7916SHisping Lin 104*981b7916SHisping Lin #define OPTEE_SMC_FAST_CALL_VAL_V2(func_num) \ 105*981b7916SHisping Lin OPTEE_SMC_CALL_VAL_V2(OPTEE_SMC_32_V2, OPTEE_SMC_FAST_CALL_V2, \ 106*981b7916SHisping Lin OPTEE_SMC_OWNER_TRUSTED_OS_V2, (func_num)) 107*981b7916SHisping Lin 108*981b7916SHisping Lin #define OPTEE_SMC_CALL_VAL_V2(type, calling_convention, owner, func_num) \ 109*981b7916SHisping Lin ((type) | (calling_convention) | \ 110*981b7916SHisping Lin (((owner) & OPTEE_SMC_OWNER_MASK_V2) << \ 111*981b7916SHisping Lin OPTEE_SMC_OWNER_SHIFT_V2) |\ 112*981b7916SHisping Lin ((func_num) & OPTEE_SMC_FUNC_MASK_V2)) 1131f25ada2SHisping Lin 1141f25ada2SHisping Lin #endif /* TEESMC_V2_H */ 115