1 /* 2 * Copyright (C) 2022 Huawei Technologies Co., Ltd. 3 * Licensed under the Mulan PSL v2. 4 * You can use this software according to the terms and conditions of the Mulan PSL v2. 5 * You may obtain a copy of Mulan PSL v2 at: 6 * http://license.coscl.org.cn/MulanPSL2 7 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 8 * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 9 * PURPOSE. 10 * See the Mulan PSL v2 for more details. 11 */ 12 13 #ifndef TA_CONFIG_BUILDER_H 14 #define TA_CONFIG_BUILDER_H 15 16 #include <tee_defines.h> 17 #include "dyn_conf_dispatch_inf.h" 18 19 enum ta_config_tags { 20 CONFIGINFO = 0x0, 21 CONFIGINFO_TA_BASIC_INFO = 0x1, 22 CONFIGINFO_TA_BASIC_INFO_SERVICE_NAME, 23 CONFIGINFO_TA_BASIC_INFO_SERVICE_NAME_SERVICE_NAME, 24 CONFIGINFO_TA_BASIC_INFO_UUID, 25 CONFIGINFO_TA_BASIC_INFO_UUID_UUID, 26 CONFIGINFO_TA_MANIFEST_INFO, 27 CONFIGINFO_TA_MANIFEST_INFO_INSTANCE_KEEP_ALIVE, 28 CONFIGINFO_TA_MANIFEST_INFO_INSTANCE_KEEP_ALIVE_INSTANCE_KEEP_ALIVE, 29 CONFIGINFO_TA_MANIFEST_INFO_STACK_SIZE, 30 CONFIGINFO_TA_MANIFEST_INFO_STACK_SIZE_STACK_SIZE, 31 CONFIGINFO_TA_MANIFEST_INFO_HEAP_SIZE, 32 CONFIGINFO_TA_MANIFEST_INFO_HEAP_SIZE_HEAP_SIZE, 33 CONFIGINFO_TA_MANIFEST_INFO_TARGET_TYPE, 34 CONFIGINFO_TA_MANIFEST_INFO_TARGET_TYPE_TARGET_TYPE, 35 CONFIGINFO_TA_MANIFEST_INFO_MULTI_COMMAND, 36 CONFIGINFO_TA_MANIFEST_INFO_MULTI_COMMAND_MULTI_COMMAND, 37 CONFIGINFO_TA_MANIFEST_INFO_MULTI_SESSION, 38 CONFIGINFO_TA_MANIFEST_INFO_MULTI_SESSION_MULTI_SESSION, 39 CONFIGINFO_TA_MANIFEST_INFO_SINGLE_INSTANCE, 40 CONFIGINFO_TA_MANIFEST_INFO_SINGLE_INSTANCE_SINGLE_INSTANCE, 41 CONFIGINFO_TA_CONTROL_INFO, 42 #if defined(CONFIG_APP_TEE_SE) 43 CONFIGINFO_TA_CONTROL_INFO_SE_INFO, 44 CONFIGINFO_TA_CONTROL_INFO_SE_INFO_SE_OPEN_SESSION, 45 CONFIGINFO_TA_CONTROL_INFO_SE_INFO_SE_OPEN_SESSION_SE_OPEN_SESSION, 46 #endif 47 CONFIGINFO_TA_CONTROL_INFO_DEBUG_INFO, 48 CONFIGINFO_TA_CONTROL_INFO_DEBUG_INFO_DEBUG_STATUS, 49 CONFIGINFO_TA_CONTROL_INFO_DEBUG_INFO_DEBUG_STATUS_DEBUG_STATUS, 50 CONFIGINFO_TA_CONTROL_INFO_DEBUG_INFO_DEBUG_DEVICE_ID, 51 CONFIGINFO_TA_CONTROL_INFO_DEBUG_INFO_DEBUG_DEVICE_ID_DEBUG_DEVICE_ID, 52 CONFIGINFO_UNUSED, 53 }; 54 55 #define SE_OPEN_SESSION_PERMISSION 0x01U 56 #define CERT_GENERAL_PERMISSION 0x01U 57 58 /* CN format in TA's certificate: "uuid string" + "_" + "service name" */ 59 #define TA_CERT_MAX_CN_INFO_LEN 64 60 #define TA_CERT_CN_UNDERLINE_SIZE 1 61 #define UUID_STR_LEN 36 62 #define TLV_DEVICE_ID_LEN 64U 63 #define POLICY_OLD_VERSION 0 64 #define POLICY_VERSION_ONE 1 65 #define MAX_CALLEE_TA_COUNT 100 66 #define MAX_CALLEE_COMMAND_COUNT 100 67 #define DEVICE_ID_LEN 32 68 #define LEN_OFFSET_VALUE 4U 69 #define MAX_SERVICE_NAME_LEN 40 70 71 struct ta_manifest_info { 72 bool single_instance; 73 bool multi_session; 74 bool multi_command; 75 bool instance_keep_alive; 76 uint32_t heap_size; 77 uint32_t stack_size; 78 bool mem_page_align; 79 uint32_t target_type; 80 bool sys_verify_ta; 81 }; 82 83 struct ta_sfs_info { 84 uint64_t permissions; 85 }; 86 87 struct ta_se_info { 88 uint64_t permissions; 89 }; 90 91 struct ta_cert_perm_info { 92 uint64_t permissions; 93 }; 94 95 struct ta_debug_info { 96 bool status; 97 bool valid_device; 98 }; 99 100 struct callee_ta_info { 101 struct callee_ta_info *next; 102 TEE_UUID uuid; 103 uint32_t command_num; 104 uint32_t *command_id; 105 }; 106 107 struct ta_control_info { 108 struct ta_sfs_info sfs_info; 109 struct ta_se_info se_info; 110 struct ta_cert_perm_info cert_info; 111 uint32_t ta_manager; 112 struct callee_ta_info *callee_info; 113 struct ta_debug_info debug_info; 114 }; 115 struct config_info { 116 struct dlist_node head; 117 TEE_UUID uuid; 118 char service_name[MAX_SERVICE_NAME_LEN]; 119 uint32_t service_name_len; 120 uint32_t version; 121 struct ta_manifest_info manifest_info; 122 struct ta_control_info control_info; 123 struct dlist_node task_config_list; 124 }; 125 126 int32_t install_ta_config(void *obj, uint32_t obj_size, const struct conf_queue_t *conf_queue); 127 TEE_Result check_device_id(struct config_info *config, const uint8_t *buff, uint32_t len); 128 129 #endif 130