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 45 struct tc_ns_client_login { 46 __u32 method; 47 __u32 mdata; 48 }; 49 50 union 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 67 struct tc_ns_client_return { 68 int code; 69 __u32 origin; 70 }; 71 72 struct 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 92 struct tc_ns_client_time { 93 uint32_t seconds; 94 uint32_t millis; 95 }; 96 97 enum 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 106 struct sec_file_info { 107 enum secfile_type_t secfile_type; 108 uint32_t file_size; 109 int32_t sec_load_err; 110 }; 111 112 struct 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 124 struct 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 133 struct 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 145 struct 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