blob: f9e7c07124aae1d809844281df639305f997ce26 [file] [log] [blame]
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2014, STMicroelectronics International N.V.
* Copyright (c) 2018, Linaro Limited.
*/
#ifndef USER_TA_HEADER_H
#define USER_TA_HEADER_H
#include <tee_api_types.h>
#include <util.h>
#define TA_FLAG_USER_MODE 0 /* Deprecated, was (1 << 0) */
#define TA_FLAG_EXEC_DDR 0 /* Deprecated, was (1 << 1) */
#define TA_FLAG_SINGLE_INSTANCE (1 << 2)
#define TA_FLAG_MULTI_SESSION (1 << 3)
#define TA_FLAG_INSTANCE_KEEP_ALIVE (1 << 4) /* remains after last close */
#define TA_FLAG_SECURE_DATA_PATH (1 << 5) /* accesses SDP memory */
#define TA_FLAG_REMAP_SUPPORT 0 /* Deprecated, was (1 << 6) */
#define TA_FLAG_CACHE_MAINTENANCE (1 << 7) /* use cache flush syscall */
/*
* TA instance can execute multiple sessions concurrently
* (pseudo-TAs only).
*/
#define TA_FLAG_CONCURRENT (1 << 8)
#define TA_FLAG_DEVICE_ENUM (1 << 9) /* device enumeration */
#define TA_FLAGS_MASK GENMASK_32(9, 0)
struct ta_head {
TEE_UUID uuid;
uint32_t stack_size;
uint32_t flags;
uint64_t depr_entry;
};
#if defined(CFG_FTRACE_SUPPORT)
#define FTRACE_RETFUNC_DEPTH 50
union compat_ptr {
uint64_t ptr64;
struct {
uint32_t lo;
uint32_t hi;
} ptr32;
};
struct __ftrace_info {
union compat_ptr buf_start;
union compat_ptr buf_end;
union compat_ptr ret_ptr;
};
struct ftrace_buf {
uint64_t ret_func_ptr; /* __ftrace_return pointer */
uint64_t ret_stack[FTRACE_RETFUNC_DEPTH]; /* Return stack */
uint32_t ret_idx; /* Return stack index */
uint32_t lr_idx; /* lr index used for stack unwinding */
uint64_t begin_time[FTRACE_RETFUNC_DEPTH]; /* Timestamp */
uint64_t suspend_time; /* Suspend timestamp */
uint32_t curr_size; /* Size of ftrace buffer */
uint32_t max_size; /* Max allowed size of ftrace buffer */
uint32_t head_off; /* Ftrace buffer header offset */
uint32_t buf_off; /* Ftrace buffer offset */
bool syscall_trace_enabled; /* Some syscalls are never traced */
bool syscall_trace_suspended; /* By foreign interrupt or RPC */
};
/* Defined by the linker script */
extern struct ftrace_buf __ftrace_buf_start;
extern uint8_t __ftrace_buf_end[];
unsigned long ftrace_return(void);
void __ftrace_return(void);
#endif
#define TA_PROP_STR_SINGLE_INSTANCE "gpd.ta.singleInstance"
#define TA_PROP_STR_MULTI_SESSION "gpd.ta.multiSession"
#define TA_PROP_STR_KEEP_ALIVE "gpd.ta.instanceKeepAlive"
#define TA_PROP_STR_DATA_SIZE "gpd.ta.dataSize"
#define TA_PROP_STR_STACK_SIZE "gpd.ta.stackSize"
#define TA_PROP_STR_VERSION "gpd.ta.version"
#define TA_PROP_STR_DESCRIPTION "gpd.ta.description"
#define TA_PROP_STR_UNSAFE_PARAM "op-tee.unsafe_param"
#define TA_PROP_STR_REMAP "op-tee.remap"
#define TA_PROP_STR_CACHE_SYNC "op-tee.cache_sync"
enum user_ta_prop_type {
USER_TA_PROP_TYPE_BOOL, /* bool */
USER_TA_PROP_TYPE_U32, /* uint32_t */
USER_TA_PROP_TYPE_UUID, /* TEE_UUID */
USER_TA_PROP_TYPE_IDENTITY, /* TEE_Identity */
USER_TA_PROP_TYPE_STRING, /* zero terminated string of char */
USER_TA_PROP_TYPE_BINARY_BLOCK, /* zero terminated base64 coded string */
};
enum user_ta_core_service_id {
USER_TA_CORE_ENTRY_MATH_INIT = 0x00000010,
USER_TA_CORE_ENTRY_GARBAGE = 0x00000011,
USER_TA_CORE_ENTRY_CLOSESESSION = 0x00000012,
};
struct user_ta_property {
const char *name;
enum user_ta_prop_type type;
const void *value;
};
extern const struct user_ta_property ta_props[];
extern const size_t ta_num_props;
/* Needed by TEE_CheckMemoryAccessRights() */
extern uint32_t ta_param_types;
extern TEE_Param ta_params[TEE_NUM_PARAMS];
/* Trusted Application Function header */
typedef struct ta_func_head {
uint32_t cmd_id; /* Trusted Application Function ID */
uint32_t start; /* offset to start func */
} ta_func_head_t;
int tahead_get_trace_level(void);
#endif /* USER_TA_HEADER_H */