Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.15.
  1/* SPDX-License-Identifier: MIT */
  2
  3/*
  4 * Copyright 2019 Advanced Micro Devices, Inc.
  5 */
  6
  7/*
  8 * This file has definitions related to Host and AMD-TEE Trusted OS interface.
  9 * These definitions must match the definitions on the TEE side.
 10 */
 11
 12#ifndef AMDTEE_IF_H
 13#define AMDTEE_IF_H
 14
 15#include <linux/types.h>
 16
 17/*****************************************************************************
 18 ** TEE Param
 19 ******************************************************************************/
 20#define TEE_MAX_PARAMS		4
 21
 22/**
 23 * struct memref - memory reference structure
 24 * @buf_id:    buffer ID of the buffer mapped by TEE_CMD_ID_MAP_SHARED_MEM
 25 * @offset:    offset in bytes from beginning of the buffer
 26 * @size:      data size in bytes
 27 */
 28struct memref {
 29	u32 buf_id;
 30	u32 offset;
 31	u32 size;
 32};
 33
 34struct value {
 35	u32 a;
 36	u32 b;
 37};
 38
 39/*
 40 * Parameters passed to open_session or invoke_command
 41 */
 42union tee_op_param {
 43	struct memref mref;
 44	struct value val;
 45};
 46
 47struct tee_operation {
 48	u32 param_types;
 49	union tee_op_param params[TEE_MAX_PARAMS];
 50};
 51
 52/* Must be same as in GP TEE specification */
 53#define TEE_OP_PARAM_TYPE_NONE                  0
 54#define TEE_OP_PARAM_TYPE_VALUE_INPUT           1
 55#define TEE_OP_PARAM_TYPE_VALUE_OUTPUT          2
 56#define TEE_OP_PARAM_TYPE_VALUE_INOUT           3
 57#define TEE_OP_PARAM_TYPE_INVALID               4
 58#define TEE_OP_PARAM_TYPE_MEMREF_INPUT          5
 59#define TEE_OP_PARAM_TYPE_MEMREF_OUTPUT         6
 60#define TEE_OP_PARAM_TYPE_MEMREF_INOUT          7
 61
 62#define TEE_PARAM_TYPE_GET(t, i)        (((t) >> ((i) * 4)) & 0xF)
 63#define TEE_PARAM_TYPES(t0, t1, t2, t3) \
 64	((t0) | ((t1) << 4) | ((t2) << 8) | ((t3) << 12))
 65
 66/*****************************************************************************
 67 ** TEE Commands
 68 *****************************************************************************/
 69
 70/*
 71 * The shared memory between rich world and secure world may be physically
 72 * non-contiguous. Below structures are meant to describe a shared memory region
 73 * via scatter/gather (sg) list
 74 */
 75
 76/**
 77 * struct tee_sg_desc - sg descriptor for a physically contiguous buffer
 78 * @low_addr: [in] bits[31:0] of buffer's physical address. Must be 4KB aligned
 79 * @hi_addr:  [in] bits[63:32] of the buffer's physical address
 80 * @size:     [in] size in bytes (must be multiple of 4KB)
 81 */
 82struct tee_sg_desc {
 83	u32 low_addr;
 84	u32 hi_addr;
 85	u32 size;
 86};
 87
 88/**
 89 * struct tee_sg_list - structure describing a scatter/gather list
 90 * @count:   [in] number of sg descriptors
 91 * @size:    [in] total size of all buffers in the list. Must be multiple of 4KB
 92 * @buf:     [in] list of sg buffer descriptors
 93 */
 94#define TEE_MAX_SG_DESC 64
 95struct tee_sg_list {
 96	u32 count;
 97	u32 size;
 98	struct tee_sg_desc buf[TEE_MAX_SG_DESC];
 99};
100
101/**
102 * struct tee_cmd_map_shared_mem - command to map shared memory
103 * @buf_id:    [out] return buffer ID value
104 * @sg_list:   [in] list describing memory to be mapped
105 */
106struct tee_cmd_map_shared_mem {
107	u32 buf_id;
108	struct tee_sg_list sg_list;
109};
110
111/**
112 * struct tee_cmd_unmap_shared_mem - command to unmap shared memory
113 * @buf_id:    [in] buffer ID of memory to be unmapped
114 */
115struct tee_cmd_unmap_shared_mem {
116	u32 buf_id;
117};
118
119/**
120 * struct tee_cmd_load_ta - load Trusted Application (TA) binary into TEE
121 * @low_addr:       [in] bits [31:0] of the physical address of the TA binary
122 * @hi_addr:        [in] bits [63:32] of the physical address of the TA binary
123 * @size:           [in] size of TA binary in bytes
124 * @ta_handle:      [out] return handle of the loaded TA
125 * @return_origin:  [out] origin of return code after TEE processing
126 */
127struct tee_cmd_load_ta {
128	u32 low_addr;
129	u32 hi_addr;
130	u32 size;
131	u32 ta_handle;
132	u32 return_origin;
133};
134
135/**
136 * struct tee_cmd_unload_ta - command to unload TA binary from TEE environment
137 * @ta_handle:    [in] handle of the loaded TA to be unloaded
138 */
139struct tee_cmd_unload_ta {
140	u32 ta_handle;
141};
142
143/**
144 * struct tee_cmd_open_session - command to call TA_OpenSessionEntryPoint in TA
145 * @ta_handle:      [in] handle of the loaded TA
146 * @session_info:   [out] pointer to TA allocated session data
147 * @op:             [in/out] operation parameters
148 * @return_origin:  [out] origin of return code after TEE processing
149 */
150struct tee_cmd_open_session {
151	u32 ta_handle;
152	u32 session_info;
153	struct tee_operation op;
154	u32 return_origin;
155};
156
157/**
158 * struct tee_cmd_close_session - command to call TA_CloseSessionEntryPoint()
159 *                                in TA
160 * @ta_handle:      [in] handle of the loaded TA
161 * @session_info:   [in] pointer to TA allocated session data
162 */
163struct tee_cmd_close_session {
164	u32 ta_handle;
165	u32 session_info;
166};
167
168/**
169 * struct tee_cmd_invoke_cmd - command to call TA_InvokeCommandEntryPoint() in
170 *                             TA
171 * @ta_handle:     [in] handle of the loaded TA
172 * @cmd_id:        [in] TA command ID
173 * @session_info:  [in] pointer to TA allocated session data
174 * @op:            [in/out] operation parameters
175 * @return_origin: [out] origin of return code after TEE processing
176 */
177struct tee_cmd_invoke_cmd {
178	u32 ta_handle;
179	u32 cmd_id;
180	u32 session_info;
181	struct tee_operation op;
182	u32 return_origin;
183};
184
185#endif /*AMDTEE_IF_H*/