1*1f25ada2SHisping Lin /* 2*1f25ada2SHisping Lin * (C) Copyright 2017 Rockchip Electronics Co., Ltd 3*1f25ada2SHisping Lin * 4*1f25ada2SHisping Lin * SPDX-License-Identifier: GPL-2.0+ 5*1f25ada2SHisping Lin */ 6*1f25ada2SHisping Lin 7*1f25ada2SHisping Lin #ifndef TEESMC_V2_H 8*1f25ada2SHisping Lin #define TEESMC_V2_H 9*1f25ada2SHisping Lin 10*1f25ada2SHisping Lin #define OPTEE_SMC_CALL_WITH_ARG_V2 0x32000004 11*1f25ada2SHisping Lin 12*1f25ada2SHisping Lin struct optee_msg_param_tmem_v2 { 13*1f25ada2SHisping Lin uint64_t buf_ptr; 14*1f25ada2SHisping Lin uint64_t size; 15*1f25ada2SHisping Lin uint64_t shm_ref; 16*1f25ada2SHisping Lin }; 17*1f25ada2SHisping Lin 18*1f25ada2SHisping Lin struct optee_msg_param_rmem_v2 { 19*1f25ada2SHisping Lin uint64_t offs; 20*1f25ada2SHisping Lin uint64_t size; 21*1f25ada2SHisping Lin uint64_t shm_ref; 22*1f25ada2SHisping Lin }; 23*1f25ada2SHisping Lin 24*1f25ada2SHisping Lin struct optee_msg_param_value_v2 { 25*1f25ada2SHisping Lin uint64_t a; 26*1f25ada2SHisping Lin uint64_t b; 27*1f25ada2SHisping Lin uint64_t c; 28*1f25ada2SHisping Lin }; 29*1f25ada2SHisping Lin 30*1f25ada2SHisping Lin struct optee_msg_param_v2 { 31*1f25ada2SHisping Lin uint64_t attr; 32*1f25ada2SHisping Lin union { 33*1f25ada2SHisping Lin struct optee_msg_param_tmem_v2 memref; 34*1f25ada2SHisping Lin struct optee_msg_param_rmem_v2 rmem; 35*1f25ada2SHisping Lin struct optee_msg_param_value_v2 value; 36*1f25ada2SHisping Lin } u; 37*1f25ada2SHisping Lin }; 38*1f25ada2SHisping Lin 39*1f25ada2SHisping Lin struct optee_msg_arg_v2 { 40*1f25ada2SHisping Lin uint32_t cmd; 41*1f25ada2SHisping Lin uint32_t ta_func; 42*1f25ada2SHisping Lin uint32_t session; 43*1f25ada2SHisping Lin uint32_t cancel_id; 44*1f25ada2SHisping Lin uint32_t pad; 45*1f25ada2SHisping Lin uint32_t ret; 46*1f25ada2SHisping Lin uint32_t ret_origin; 47*1f25ada2SHisping Lin uint32_t num_params; 48*1f25ada2SHisping Lin 49*1f25ada2SHisping Lin /* num_params tells the actual number of element in params */ 50*1f25ada2SHisping Lin struct optee_msg_param_v2 params[]; 51*1f25ada2SHisping Lin }; 52*1f25ada2SHisping Lin 53*1f25ada2SHisping Lin #ifdef CONFIG_OPTEE_V2 54*1f25ada2SHisping Lin typedef struct optee_msg_arg_v2 t_teesmc32_arg; 55*1f25ada2SHisping Lin typedef struct optee_msg_param_v2 t_teesmc32_param; 56*1f25ada2SHisping Lin 57*1f25ada2SHisping Lin #define TEESMC32_GET_ARG_SIZE(num_params) \ 58*1f25ada2SHisping Lin (sizeof(struct optee_msg_arg_v2) + \ 59*1f25ada2SHisping Lin sizeof(struct optee_msg_param_v2) * (num_params)) 60*1f25ada2SHisping Lin 61*1f25ada2SHisping Lin #define TEESMC32_GET_PARAMS(x) \ 62*1f25ada2SHisping Lin (struct optee_msg_param_v2 *)(((struct optee_msg_arg_v2 *)(x)) + 1) 63*1f25ada2SHisping Lin 64*1f25ada2SHisping Lin #endif 65*1f25ada2SHisping Lin 66*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_NONE_V2 0x0 67*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_VALUE_INPUT_V2 0x1 68*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_VALUE_OUTPUT_V2 0x2 69*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_VALUE_INOUT_V2 0x3 70*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_RMEM_INPUT_V2 0x5 71*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_RMEM_OUTPUT_V2 0x6 72*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_RMEM_INOUT_V2 0x7 73*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_TMEM_INPUT_V2 0x9 74*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_TMEM_OUTPUT_V2 0xa 75*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_TMEM_INOUT_V2 0xb 76*1f25ada2SHisping Lin 77*1f25ada2SHisping Lin #define OPTEE_MSG_ATTR_META_V2 (1 << (8)) 78*1f25ada2SHisping Lin 79*1f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_SHM_ALLOC_V2 6 80*1f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_SHM_FREE_V2 7 81*1f25ada2SHisping Lin 82*1f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_LOAD_TA_V2 0 83*1f25ada2SHisping Lin 84*1f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_RPMB_V2 1 85*1f25ada2SHisping Lin 86*1f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_FS_V2 2 87*1f25ada2SHisping Lin 88*1f25ada2SHisping Lin 89*1f25ada2SHisping Lin #endif /* TEESMC_V2_H */ 90