17777dab0Sopenharmony_ci/* 27777dab0Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 37777dab0Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 47777dab0Sopenharmony_ci * you may not use this file except in compliance with the License. 57777dab0Sopenharmony_ci * You may obtain a copy of the License at 67777dab0Sopenharmony_ci * 77777dab0Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 87777dab0Sopenharmony_ci * 97777dab0Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 107777dab0Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 117777dab0Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 127777dab0Sopenharmony_ci * See the License for the specific language governing permissions and 137777dab0Sopenharmony_ci * limitations under the License. 147777dab0Sopenharmony_ci */ 157777dab0Sopenharmony_ci 167777dab0Sopenharmony_ci#ifndef _TEE_DYNAMIC_SRV_H_ 177777dab0Sopenharmony_ci#define _TEE_DYNAMIC_SRV_H_ 187777dab0Sopenharmony_ci 197777dab0Sopenharmony_ci/** 207777dab0Sopenharmony_ci * @addtogroup TeeTrusted 217777dab0Sopenharmony_ci * @{ 227777dab0Sopenharmony_ci * 237777dab0Sopenharmony_ci * @brief TEE(Trusted Excution Environment) API. 247777dab0Sopenharmony_ci * Provides security capability APIs such as trusted storage, encryption and decryption, 257777dab0Sopenharmony_ci * and trusted time for trusted application development. 267777dab0Sopenharmony_ci * 277777dab0Sopenharmony_ci * @since 12 287777dab0Sopenharmony_ci */ 297777dab0Sopenharmony_ci 307777dab0Sopenharmony_ci/** 317777dab0Sopenharmony_ci * @file tee_dynamic_srv.h 327777dab0Sopenharmony_ci * 337777dab0Sopenharmony_ci * @brief Provides APIs related to dynamic service development. 347777dab0Sopenharmony_ci * 357777dab0Sopenharmony_ci * @library NA 367777dab0Sopenharmony_ci * @kit TEEKit 377777dab0Sopenharmony_ci * @syscap SystemCapability.Tee.TeeClient 387777dab0Sopenharmony_ci * @since 12 397777dab0Sopenharmony_ci * @version 1.0 407777dab0Sopenharmony_ci */ 417777dab0Sopenharmony_ci 427777dab0Sopenharmony_ci#include <pthread.h> 437777dab0Sopenharmony_ci#include "tee_service_public.h" 447777dab0Sopenharmony_ci 457777dab0Sopenharmony_ci#ifdef __cplusplus 467777dab0Sopenharmony_ciextern "C" { 477777dab0Sopenharmony_ci#endif 487777dab0Sopenharmony_ci 497777dab0Sopenharmony_ci/** 507777dab0Sopenharmony_ci * @brief Defines thread initialization information of the dynamic service. 517777dab0Sopenharmony_ci * 527777dab0Sopenharmony_ci * @since 12 537777dab0Sopenharmony_ci */ 547777dab0Sopenharmony_cistruct srv_thread_init_info { 557777dab0Sopenharmony_ci void *(*func)(void *arg); 567777dab0Sopenharmony_ci /** The maximum number of parallel threads. */ 577777dab0Sopenharmony_ci uint32_t max_thread; 587777dab0Sopenharmony_ci int32_t shadow; 597777dab0Sopenharmony_ci /** The stack size of the thread. */ 607777dab0Sopenharmony_ci uint32_t stack_size; 617777dab0Sopenharmony_ci /** The timeout period for thread (in seconds).*/ 627777dab0Sopenharmony_ci uint32_t time_out_sec; 637777dab0Sopenharmony_ci}; 647777dab0Sopenharmony_ci 657777dab0Sopenharmony_citypedef void (*srv_dispatch_fn_t)(tee_service_ipc_msg *msg, 667777dab0Sopenharmony_ci uint32_t sndr, tee_service_ipc_msg_rsp *rsp); 677777dab0Sopenharmony_ci 687777dab0Sopenharmony_cistruct srv_dispatch_t { 697777dab0Sopenharmony_ci uint32_t cmd; 707777dab0Sopenharmony_ci srv_dispatch_fn_t fn; 717777dab0Sopenharmony_ci}; 727777dab0Sopenharmony_ci 737777dab0Sopenharmony_ci/** 747777dab0Sopenharmony_ci * @brief Get UUID by sender. 757777dab0Sopenharmony_ci * 767777dab0Sopenharmony_ci * @param sender [IN] Indicates the sender's task Id. 777777dab0Sopenharmony_ci * @param uuid [OUT] Indicates the universally unique identifier. 787777dab0Sopenharmony_ci * 797777dab0Sopenharmony_ci * @return Returns {@code TEE_SUCCESS} if the operation is successful. 807777dab0Sopenharmony_ci * Returns {@code TEE_ERROR_BAD_PARAMETERS} if the input parameter is incorrect, 817777dab0Sopenharmony_ci * or the file name is longer than 64 bytes. 827777dab0Sopenharmony_ci * Returns {@code TEE_ERROR_ITEM_NOT_FOUND} if failed to find the corresponding UUID by sender. 837777dab0Sopenharmony_ci * Returns {@code TEE_ERROR_GENERIC} if failed to obtain the UUID. 847777dab0Sopenharmony_ci * 857777dab0Sopenharmony_ci * @since 12 867777dab0Sopenharmony_ci * @version 1.0 877777dab0Sopenharmony_ci */ 887777dab0Sopenharmony_ciTEE_Result tee_srv_get_uuid_by_sender(uint32_t sender, TEE_UUID *uuid); 897777dab0Sopenharmony_ci 907777dab0Sopenharmony_ci/** 917777dab0Sopenharmony_ci * @brief Releasing the object mapping of a specified address area. 927777dab0Sopenharmony_ci * 937777dab0Sopenharmony_ci * @param va_addr [IN] Indicates the address of the memory area to be released. 947777dab0Sopenharmony_ci * @param size [IN] Indicates the size of the released memory area. 957777dab0Sopenharmony_ci * 967777dab0Sopenharmony_ci * @since 12 977777dab0Sopenharmony_ci * @version 1.0 987777dab0Sopenharmony_ci */ 997777dab0Sopenharmony_civoid tee_srv_unmap_from_task(uint32_t va_addr, uint32_t size); 1007777dab0Sopenharmony_ci 1017777dab0Sopenharmony_ci/** 1027777dab0Sopenharmony_ci * @brief Create a new mapping in the virtual address space of the calling process. 1037777dab0Sopenharmony_ci * 1047777dab0Sopenharmony_ci * @param in_task_id [IN] Indicates the task Id. 1057777dab0Sopenharmony_ci * @param va_addr [IN] Indicates the address of the memory area to be mapped. 1067777dab0Sopenharmony_ci * @param size [IN] Indicates the size of the memory area to be mapped. 1077777dab0Sopenharmony_ci * @param virt_addr [OUT] Indicates the new mapping vitural address. 1087777dab0Sopenharmony_ci * 1097777dab0Sopenharmony_ci * @return Returns <b>0</b> if the operation is successful. 1107777dab0Sopenharmony_ci * @return Returns <b>-1</b> if the operation is failed. 1117777dab0Sopenharmony_ci * 1127777dab0Sopenharmony_ci * @since 12 1137777dab0Sopenharmony_ci * @version 1.0 1147777dab0Sopenharmony_ci */ 1157777dab0Sopenharmony_ciint tee_srv_map_from_task(uint32_t in_task_id, uint32_t va_addr, uint32_t size, uint32_t *virt_addr); 1167777dab0Sopenharmony_ci 1177777dab0Sopenharmony_ci/** 1187777dab0Sopenharmony_ci * @brief Dispatch task by task name. 1197777dab0Sopenharmony_ci * 1207777dab0Sopenharmony_ci * @param task_name [IN] Indicates the task name. 1217777dab0Sopenharmony_ci * @param dispatch [IN] Indicates the dispatch information. 1227777dab0Sopenharmony_ci * @param n_dispatch [IN] Indicates the dispatch number. 1237777dab0Sopenharmony_ci * @param cur_thread [IN] Indicates the current thread information. 1247777dab0Sopenharmony_ci * 1257777dab0Sopenharmony_ci * @since 12 1267777dab0Sopenharmony_ci * @version 1.0 1277777dab0Sopenharmony_ci */ 1287777dab0Sopenharmony_civoid tee_srv_cs_server_loop(const char *task_name, const struct srv_dispatch_t *dispatch, 1297777dab0Sopenharmony_ci uint32_t n_dispatch, struct srv_thread_init_info *cur_thread); 1307777dab0Sopenharmony_ci#ifdef __cplusplus 1317777dab0Sopenharmony_ci} 1327777dab0Sopenharmony_ci#endif 1337777dab0Sopenharmony_ci/** @} */ 1347777dab0Sopenharmony_ci#endif 135