secure_main.c(armv8)
void guest_load_image (va_t src, pa_t dest, unsigned long size)
src : 安全内核的虚拟地址
dest : 安全内核的物理地址
size : 内核的大小
int main(void )
Returns
secure_api.h
int open_session_from_ns (void *param)
调度命令方法处理来自于非安全世界的建立对话(通信)的请求
int close_session_from_ns (void *param)
调度命令方法处理来自于非安全世界的关闭对话(通信)的请求
int open_session_from_secure (int svc_id, int *session_id)
调度命令方法处理来自于安全世界的建立对话(通信)的请求
int close_session_from_secure (int svc_id, int session_id)
调度命令方法处理来自于安全世界的关闭对话(通信)的请求
int sa_create_entry_point (int svc_id, sa_config_t *psa_config)
调用服务作业(任务)的初始化方法
int sa_destroy_entry_point (int svc_id, void *data, int elf_flag)
调用服务作业(任务)的退出方法
int sa_open_session (sa_config_t *psa_config, void *session_context)
此方法建立安全应用程序与非安全应用程序的对话(通信),建立通信的依据是service ID
int sa_close_session (void *session_context)
此方法关闭安全应用程序与非安全应用程序的对话(通信),关闭通信的依据是service ID
void get_api_context (int *svc_id, int *task_id, int *cmd_id, int *cmd_type)
返回来自于安全监听器调用命令参数的service ID 、session_id(通信)、common_id的帮助函数
int decode_data (void *data, struct otzc_encode_meta *meta_data, int *type, int *offset, int *pos, int *mapped, void **out_data, int *out_len)
解码来自于非安全世界的通过的数据的帮助函数
int decode_ipi_out_data (void *data, struct otzc_encode_meta *meta_data, int *type, int *offset, int *pos, void **out_data, int *out_len)
解码来自于智能外围接口的响应数据的帮助函数
int update_response_len (struct otzc_encode_meta *meta_data, int pos, int len)
更新响应长度的帮助函数
int otz_encode_data (struct otz_secure_encode_cmd *enc, struct otzc_encode_meta **pmeta_data, struct otz_secure_encode_ctx **penc_context, int encode_type)
将安全应用程序发送的数据进行编码(加密)的帮助函数
void otz_release_data (struct otz_secure_encode_ctx *enc_context, struct otzc_encode_meta *meta_data)
发送加密数据
int ipc_connect (int svc_id, int *session_id)
两个任务之间建立通信( IPC中使用)
int ipc_disconnect (int svc_id, int session_id)
断开两个任务之间的通信(IPC)
int ipc_send (int src_svc_id, int src_context, int svc_id, int session_id, int cmd_id, struct otz_secure_encode_ctx *enc_ctx, struct otzc_encode_meta *meta_data)
两个任务之间发送数据
int ipc_api (int src_svc_id, int src_session_id, int target_svc_id, int target_cmd_id, void *req_buf, int req_buf_len, void *res_buf, int res_buf_len, int *ret_res_buf_len)
对两个任务进行一对一请求与响应的数据进行缓存的帮助函数
void ipc_test_crypto (int src_svc_id, int src_session_id)
测试进程间通信命令的加密操作
void ipc_test_echo (int src_svc_id, int src_session_id)
测试进程间通信命令的显示操作
void handle_task_return (int task_id, sw_tls *tls)
返回任务句柄的帮助函数
mon_main.c(armv8)
state_context context[2][MAX_CORES] attribute ((aligned(16)))
静态上下文的二维数组
强制编译器将静态上下文的对齐类型为十六个字节对齐方式
MAX_CORES:#define MAX_CORES 0x1
int main (void)
入口函数
hyp_main.c(armv8)
state_context context[MAX_GUESTS][MAX_CORES] attribute ((aligned(16)))
MAX_GUESTS:#define MAX_GUESTS 0x1
MAX_CORES:#define MAX_CORES 0x1
attribute机制如上
void guest_load_image (va_t, pa_t, unsigned long)
src : 安全内核的虚拟地址
dest : 安全内核的物理地址
size : 内核的大小
int main(void )
Returns
cpu_api.c(ARMV8)
void timer_init (void)
初始化安全内核的CPU时钟
void enable_timer (void)
给予安全内核的CPU时钟授权
void disable_timer (void)
挂起安全内核时钟
void trigger_tick (u64 usecs)
此方法在下一个标记到达标记计时器以及授予标记计时器权限之前写入时钟循环到达期限的次数
void clockcycles_to_timeval (pa_t clockcycles, timeval_t *ret_timeval)
此方法转换时钟循环时间(秒与纳秒之间),此方法的定义依赖于时钟的使用
void timeval_to_clockcycles (timeval_t *time, pa_t *ret_clockcycles)
此方法转换时钟循环的次数(秒与纳秒之间)
void schedule (void)
调用调度程序
cpu_data.c(ARMV8)
u64 elx_stack[STACK_SIZE *MAX_CORES] attribute ((aligned(16)))
STACK_SIZE :#define STACK_SIZE 0x1000
MAX_CORES:#define MAX_CORES 0x1
强制编译器对栈elx_stack使用16字节对齐的对齐机制
pa_t params_stack[PARAM_STACK_SIZE] attribute ((section(“.bss”)))
PARAM_STACK_SIZE:#define PARAM_STACK_SIZE 8
此栈类型为SMC(Secure monitor call)所使用
unsigned long get_sw_text_start (void)
此方法返回链接器脚本中设置的文本段的起始地址
unsigned long get_sw_text_size (void)
此方法返回链接器脚本中设置的文本段的大小
unsigned long get_sw_data_start (void)
此方法返回链接器脚本设置的数据段的起始地址
unsigned long get_sw_data_bss_size (void)
此方法返回链接器脚本设置的数据段以及bss段的大小
unsigned long get_sw_image_start (void)
此方法返回链接器脚本设置的镜像区域的起始地址
unsigned long get_sw_image_size (void)
此方法返回链接器脚本设置的镜像区域的大小
unsigned long get_sw_code_end (void)
此方法返回在链接器帮助下的安全世界代码的终止地址(虚拟地址)