cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

amdtee_if.h (5060B)


      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 */
    126struct tee_cmd_load_ta {
    127	u32 low_addr;
    128	u32 hi_addr;
    129	u32 size;
    130	u32 ta_handle;
    131};
    132
    133/**
    134 * struct tee_cmd_unload_ta - command to unload TA binary from TEE environment
    135 * @ta_handle:    [in] handle of the loaded TA to be unloaded
    136 */
    137struct tee_cmd_unload_ta {
    138	u32 ta_handle;
    139};
    140
    141/**
    142 * struct tee_cmd_open_session - command to call TA_OpenSessionEntryPoint in TA
    143 * @ta_handle:      [in] handle of the loaded TA
    144 * @session_info:   [out] pointer to TA allocated session data
    145 * @op:             [in/out] operation parameters
    146 * @return_origin:  [out] origin of return code after TEE processing
    147 */
    148struct tee_cmd_open_session {
    149	u32 ta_handle;
    150	u32 session_info;
    151	struct tee_operation op;
    152	u32 return_origin;
    153};
    154
    155/**
    156 * struct tee_cmd_close_session - command to call TA_CloseSessionEntryPoint()
    157 *                                in TA
    158 * @ta_handle:      [in] handle of the loaded TA
    159 * @session_info:   [in] pointer to TA allocated session data
    160 */
    161struct tee_cmd_close_session {
    162	u32 ta_handle;
    163	u32 session_info;
    164};
    165
    166/**
    167 * struct tee_cmd_invoke_cmd - command to call TA_InvokeCommandEntryPoint() in
    168 *                             TA
    169 * @ta_handle:     [in] handle of the loaded TA
    170 * @cmd_id:        [in] TA command ID
    171 * @session_info:  [in] pointer to TA allocated session data
    172 * @op:            [in/out] operation parameters
    173 * @return_origin: [out] origin of return code after TEE processing
    174 */
    175struct tee_cmd_invoke_cmd {
    176	u32 ta_handle;
    177	u32 cmd_id;
    178	u32 session_info;
    179	struct tee_operation op;
    180	u32 return_origin;
    181};
    182
    183#endif /*AMDTEE_IF_H*/