| /* SPDX-License-Identifier: MIT */ |
| |
| /* |
| * Copyright 2019 Advanced Micro Devices, Inc. |
| */ |
| |
| /* |
| * This file has definitions related to Host and AMD-TEE Trusted OS interface. |
| * These definitions must match the definitions on the TEE side. |
| */ |
| |
| #ifndef AMDTEE_IF_H |
| #define AMDTEE_IF_H |
| |
| #include <linux/types.h> |
| |
| /***************************************************************************** |
| ** TEE Param |
| ******************************************************************************/ |
| #define TEE_MAX_PARAMS 4 |
| |
| /** |
| * struct memref - memory reference structure |
| * @buf_id: buffer ID of the buffer mapped by TEE_CMD_ID_MAP_SHARED_MEM |
| * @offset: offset in bytes from beginning of the buffer |
| * @size: data size in bytes |
| */ |
| struct memref { |
| u32 buf_id; |
| u32 offset; |
| u32 size; |
| }; |
| |
| struct value { |
| u32 a; |
| u32 b; |
| }; |
| |
| /* |
| * Parameters passed to open_session or invoke_command |
| */ |
| union tee_op_param { |
| struct memref mref; |
| struct value val; |
| }; |
| |
| struct tee_operation { |
| u32 param_types; |
| union tee_op_param params[TEE_MAX_PARAMS]; |
| }; |
| |
| /* Must be same as in GP TEE specification */ |
| #define TEE_OP_PARAM_TYPE_NONE 0 |
| #define TEE_OP_PARAM_TYPE_VALUE_INPUT 1 |
| #define TEE_OP_PARAM_TYPE_VALUE_OUTPUT 2 |
| #define TEE_OP_PARAM_TYPE_VALUE_INOUT 3 |
| #define TEE_OP_PARAM_TYPE_INVALID 4 |
| #define TEE_OP_PARAM_TYPE_MEMREF_INPUT 5 |
| #define TEE_OP_PARAM_TYPE_MEMREF_OUTPUT 6 |
| #define TEE_OP_PARAM_TYPE_MEMREF_INOUT 7 |
| |
| #define TEE_PARAM_TYPE_GET(t, i) (((t) >> ((i) * 4)) & 0xF) |
| #define TEE_PARAM_TYPES(t0, t1, t2, t3) \ |
| ((t0) | ((t1) << 4) | ((t2) << 8) | ((t3) << 12)) |
| |
| /***************************************************************************** |
| ** TEE Commands |
| *****************************************************************************/ |
| |
| /* |
| * The shared memory between rich world and secure world may be physically |
| * non-contiguous. Below structures are meant to describe a shared memory region |
| * via scatter/gather (sg) list |
| */ |
| |
| /** |
| * struct tee_sg_desc - sg descriptor for a physically contiguous buffer |
| * @low_addr: [in] bits[31:0] of buffer's physical address. Must be 4KB aligned |
| * @hi_addr: [in] bits[63:32] of the buffer's physical address |
| * @size: [in] size in bytes (must be multiple of 4KB) |
| */ |
| struct tee_sg_desc { |
| u32 low_addr; |
| u32 hi_addr; |
| u32 size; |
| }; |
| |
| /** |
| * struct tee_sg_list - structure describing a scatter/gather list |
| * @count: [in] number of sg descriptors |
| * @size: [in] total size of all buffers in the list. Must be multiple of 4KB |
| * @buf: [in] list of sg buffer descriptors |
| */ |
| #define TEE_MAX_SG_DESC 64 |
| struct tee_sg_list { |
| u32 count; |
| u32 size; |
| struct tee_sg_desc buf[TEE_MAX_SG_DESC]; |
| }; |
| |
| /** |
| * struct tee_cmd_map_shared_mem - command to map shared memory |
| * @buf_id: [out] return buffer ID value |
| * @sg_list: [in] list describing memory to be mapped |
| */ |
| struct tee_cmd_map_shared_mem { |
| u32 buf_id; |
| struct tee_sg_list sg_list; |
| }; |
| |
| /** |
| * struct tee_cmd_unmap_shared_mem - command to unmap shared memory |
| * @buf_id: [in] buffer ID of memory to be unmapped |
| */ |
| struct tee_cmd_unmap_shared_mem { |
| u32 buf_id; |
| }; |
| |
| /** |
| * struct tee_cmd_load_ta - load Trusted Application (TA) binary into TEE |
| * @low_addr: [in] bits [31:0] of the physical address of the TA binary |
| * @hi_addr: [in] bits [63:32] of the physical address of the TA binary |
| * @size: [in] size of TA binary in bytes |
| * @ta_handle: [out] return handle of the loaded TA |
| * @return_origin: [out] origin of return code after TEE processing |
| */ |
| struct tee_cmd_load_ta { |
| u32 low_addr; |
| u32 hi_addr; |
| u32 size; |
| u32 ta_handle; |
| u32 return_origin; |
| }; |
| |
| /** |
| * struct tee_cmd_unload_ta - command to unload TA binary from TEE environment |
| * @ta_handle: [in] handle of the loaded TA to be unloaded |
| */ |
| struct tee_cmd_unload_ta { |
| u32 ta_handle; |
| }; |
| |
| /** |
| * struct tee_cmd_open_session - command to call TA_OpenSessionEntryPoint in TA |
| * @ta_handle: [in] handle of the loaded TA |
| * @session_info: [out] pointer to TA allocated session data |
| * @op: [in/out] operation parameters |
| * @return_origin: [out] origin of return code after TEE processing |
| */ |
| struct tee_cmd_open_session { |
| u32 ta_handle; |
| u32 session_info; |
| struct tee_operation op; |
| u32 return_origin; |
| }; |
| |
| /** |
| * struct tee_cmd_close_session - command to call TA_CloseSessionEntryPoint() |
| * in TA |
| * @ta_handle: [in] handle of the loaded TA |
| * @session_info: [in] pointer to TA allocated session data |
| */ |
| struct tee_cmd_close_session { |
| u32 ta_handle; |
| u32 session_info; |
| }; |
| |
| /** |
| * struct tee_cmd_invoke_cmd - command to call TA_InvokeCommandEntryPoint() in |
| * TA |
| * @ta_handle: [in] handle of the loaded TA |
| * @cmd_id: [in] TA command ID |
| * @session_info: [in] pointer to TA allocated session data |
| * @op: [in/out] operation parameters |
| * @return_origin: [out] origin of return code after TEE processing |
| */ |
| struct tee_cmd_invoke_cmd { |
| u32 ta_handle; |
| u32 cmd_id; |
| u32 session_info; |
| struct tee_operation op; |
| u32 return_origin; |
| }; |
| |
| #endif /*AMDTEE_IF_H*/ |