1/* 2 * tc_ns_client.h 3 * 4 * data structure declaration for nonsecure world 5 * 6 * Copyright (C) 2022 Huawei Technologies Co., Ltd. 7 * 8 * This software is licensed under the terms of the GNU General Public 9 * License version 2, as published by the Free Software Foundation, and 10 * may be copied, distributed, and modified under those terms. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 */ 17#ifndef TC_NS_CLIENT_H 18#define TC_NS_CLIENT_H 19 20#include <linux/types.h> 21#include <linux/version.h> 22 23#define UUID_LEN 16 24#define PARAM_NUM 4 25#define ADDR_TRANS_NUM 32 26 27#define teec_param_types(param0_type, param1_type, param2_type, param3_type) \ 28 ((param3_type) << 12 | (param2_type) << 8 | \ 29 (param1_type) << 4 | (param0_type)) 30 31#define teec_param_type_get(param_types, index) \ 32 (((param_types) >> ((index) << 2)) & 0x0F) 33 34#ifndef ZERO_SIZE_PTR 35#define ZERO_SIZE_PTR ((void *)16) 36#define ZERO_OR_NULL_PTR(x) ((unsigned long)(x) <= (unsigned long)ZERO_SIZE_PTR) 37#endif 38 39#if (KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE) 40#define mm_sem_lock(mm) (mm)->mmap_lock 41#else 42#define mm_sem_lock(mm) (mm)->mmap_sem 43#endif 44 45struct tc_ns_client_login { 46 __u32 method; 47 __u32 mdata; 48}; 49 50union tc_ns_client_param { 51 struct { 52 __u32 buffer; 53 __u32 buffer_h_addr; 54 __u32 offset; 55 __u32 h_offset; 56 __u32 size_addr; 57 __u32 size_h_addr; 58 } memref; 59 struct { 60 __u32 a_addr; 61 __u32 a_h_addr; 62 __u32 b_addr; 63 __u32 b_h_addr; 64 } value; 65}; 66 67struct tc_ns_client_return { 68 int code; 69 __u32 origin; 70}; 71 72struct tc_ns_client_context { 73 unsigned char uuid[UUID_LEN]; 74 __u32 session_id; 75 __u32 cmd_id; 76 struct tc_ns_client_return returns; 77 struct tc_ns_client_login login; 78 union tc_ns_client_param params[PARAM_NUM]; 79 __u32 param_types; 80 __u8 started; 81 __u32 calling_pid; 82 unsigned int file_size; 83 union { 84 char *file_buffer; 85 struct { 86 uint32_t file_addr; 87 uint32_t file_h_addr; 88 } memref; 89 }; 90}; 91 92struct tc_ns_client_time { 93 uint32_t seconds; 94 uint32_t millis; 95}; 96 97enum secfile_type_t { 98 LOAD_TA = 0, 99 LOAD_SERVICE, 100 LOAD_LIB, 101 LOAD_DYNAMIC_DRV, 102 LOAD_PATCH, 103 LOAD_TYPE_MAX, 104}; 105 106struct sec_file_info { 107 enum secfile_type_t secfile_type; 108 uint32_t file_size; 109 int32_t sec_load_err; 110}; 111 112struct load_secfile_ioctl_struct { 113 struct sec_file_info sec_file_info; 114 unsigned char uuid[UUID_LEN]; 115 union { 116 char *file_buffer; 117 struct { 118 uint32_t file_addr; 119 uint32_t file_h_addr; 120 } memref; 121 }; 122}__attribute__((packed)); 123 124struct agent_ioctl_args { 125 uint32_t id; 126 uint32_t buffer_size; 127 union { 128 void *buffer; 129 unsigned long long addr; 130 }; 131}; 132 133struct tc_ns_client_crl { 134 union { 135 uint8_t *buffer; 136 struct { 137 uint32_t buffer_addr; 138 uint32_t buffer_h_addr; 139 } memref; 140 }; 141 uint32_t size; 142}; 143 144#ifdef CONFIG_LOG_POOL_ENABLE 145struct tc_ns_log_pool { 146 uint64_t addr; 147 uint64_t size; 148}; 149#endif 150 151#define MAX_SHA_256_SZ 32 152 153#define TC_NS_CLIENT_IOCTL_SES_OPEN_REQ \ 154 _IOW(TC_NS_CLIENT_IOC_MAGIC, 1, struct tc_ns_client_context) 155#define TC_NS_CLIENT_IOCTL_SES_CLOSE_REQ \ 156 _IOWR(TC_NS_CLIENT_IOC_MAGIC, 2, struct tc_ns_client_context) 157#define TC_NS_CLIENT_IOCTL_SEND_CMD_REQ \ 158 _IOWR(TC_NS_CLIENT_IOC_MAGIC, 3, struct tc_ns_client_context) 159#define TC_NS_CLIENT_IOCTL_SHRD_MEM_RELEASE \ 160 _IOWR(TC_NS_CLIENT_IOC_MAGIC, 4, unsigned int) 161#define TC_NS_CLIENT_IOCTL_WAIT_EVENT \ 162 _IOWR(TC_NS_CLIENT_IOC_MAGIC, 5, unsigned int) 163#define TC_NS_CLIENT_IOCTL_SEND_EVENT_RESPONSE \ 164 _IOWR(TC_NS_CLIENT_IOC_MAGIC, 6, unsigned int) 165#define TC_NS_CLIENT_IOCTL_REGISTER_AGENT \ 166 _IOWR(TC_NS_CLIENT_IOC_MAGIC, 7, struct agent_ioctl_args) 167#define TC_NS_CLIENT_IOCTL_UNREGISTER_AGENT \ 168 _IOWR(TC_NS_CLIENT_IOC_MAGIC, 8, unsigned int) 169#define TC_NS_CLIENT_IOCTL_LOAD_APP_REQ \ 170 _IOWR(TC_NS_CLIENT_IOC_MAGIC, 9, struct load_secfile_ioctl_struct) 171#define TC_NS_CLIENT_IOCTL_NEED_LOAD_APP \ 172 _IOWR(TC_NS_CLIENT_IOC_MAGIC, 10, struct tc_ns_client_context) 173#define TC_NS_CLIENT_IOCTL_ALLOC_EXCEPTING_MEM \ 174 _IOWR(TC_NS_CLIENT_IOC_MAGIC, 12, unsigned int) 175#define TC_NS_CLIENT_IOCTL_CANCEL_CMD_REQ \ 176 _IOWR(TC_NS_CLIENT_IOC_MAGIC, 13, struct tc_ns_client_context) 177#define TC_NS_CLIENT_IOCTL_LOGIN \ 178 _IOWR(TC_NS_CLIENT_IOC_MAGIC, 14, int) 179#define TC_NS_CLIENT_IOCTL_TUI_EVENT \ 180 _IOWR(TC_NS_CLIENT_IOC_MAGIC, 16, int) 181#define TC_NS_CLIENT_IOCTL_SYC_SYS_TIME \ 182 _IOWR(TC_NS_CLIENT_IOC_MAGIC, 17, struct tc_ns_client_time) 183#define TC_NS_CLIENT_IOCTL_SET_NATIVECA_IDENTITY \ 184 _IOWR(TC_NS_CLIENT_IOC_MAGIC, 18, int) 185#define TC_NS_CLIENT_IOCTL_LOAD_TTF_FILE_AND_NOTCH_HEIGHT \ 186 _IOWR(TC_NS_CLIENT_IOC_MAGIC, 19, unsigned int) 187#define TC_NS_CLIENT_IOCTL_LATEINIT \ 188 _IOWR(TC_NS_CLIENT_IOC_MAGIC, 20, unsigned int) 189#define TC_NS_CLIENT_IOCTL_GET_TEE_VERSION \ 190 _IOWR(TC_NS_CLIENT_IOC_MAGIC, 21, unsigned int) 191#define TC_NS_CLIENT_IOCTL_UPDATE_TA_CRL \ 192 _IOWR(TC_NS_CLIENT_IOC_MAGIC, 22, struct tc_ns_client_crl) 193#ifdef CONFIG_LOG_POOL_ENABLE 194#define TC_NS_CLIENT_IOCTL_GET_LOG_POOL \ 195 _IOWR(TC_NS_CLIENT_IOC_MAGIC, 23, struct tc_ns_log_pool) 196#endif 197#endif 198