1e656c62eSopenharmony_ci/* 2e656c62eSopenharmony_ci * Copyright (C) 2022 Huawei Technologies Co., Ltd. 3e656c62eSopenharmony_ci * Licensed under the Mulan PSL v2. 4e656c62eSopenharmony_ci * You can use this software according to the terms and conditions of the Mulan PSL v2. 5e656c62eSopenharmony_ci * You may obtain a copy of Mulan PSL v2 at: 6e656c62eSopenharmony_ci * http://license.coscl.org.cn/MulanPSL2 7e656c62eSopenharmony_ci * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 8e656c62eSopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 9e656c62eSopenharmony_ci * PURPOSE. 10e656c62eSopenharmony_ci * See the Mulan PSL v2 for more details. 11e656c62eSopenharmony_ci */ 12e656c62eSopenharmony_ci 13e656c62eSopenharmony_ci#ifndef _TC_NS_CLIENT_H_ 14e656c62eSopenharmony_ci#define _TC_NS_CLIENT_H_ 15e656c62eSopenharmony_ci#include "tee_client_type.h" 16e656c62eSopenharmony_ci#include "tee_ioctl_cmd.h" 17e656c62eSopenharmony_ci 18e656c62eSopenharmony_ci#ifndef ZERO_SIZE_PTR 19e656c62eSopenharmony_ci#define ZERO_SIZE_PTR ((void *)16) 20e656c62eSopenharmony_ci#define ZERO_OR_NULL_PTR(x) ((unsigned long)(x) <= (unsigned long)ZERO_SIZE_PTR) 21e656c62eSopenharmony_ci#endif 22e656c62eSopenharmony_ci 23e656c62eSopenharmony_ci#define UUID_SIZE 16 24e656c62eSopenharmony_ci 25e656c62eSopenharmony_ci#define TC_NS_CLIENT_IOC_MAGIC 't' 26e656c62eSopenharmony_ci#define TC_NS_CLIENT_DEV "tc_ns_client" 27e656c62eSopenharmony_ci#define TC_NS_CLIENT_DEV_NAME "/dev/tc_ns_client" 28e656c62eSopenharmony_ci#define TC_PRIVATE_DEV_NAME "/dev/tc_private" 29e656c62eSopenharmony_ci#define TUI_LISTEN_PATH "/sys/kernel/tui/c_state" 30e656c62eSopenharmony_ci 31e656c62eSopenharmony_cienum ConnectCmd { 32e656c62eSopenharmony_ci GET_FD, 33e656c62eSopenharmony_ci GET_TEEVERSION, 34e656c62eSopenharmony_ci}; 35e656c62eSopenharmony_citypedef struct { 36e656c62eSopenharmony_ci unsigned int method; 37e656c62eSopenharmony_ci unsigned int mdata; 38e656c62eSopenharmony_ci} TC_NS_ClientLogin; 39e656c62eSopenharmony_ci 40e656c62eSopenharmony_citypedef union { 41e656c62eSopenharmony_ci struct { 42e656c62eSopenharmony_ci unsigned int buffer; 43e656c62eSopenharmony_ci unsigned int buffer_h_addr; 44e656c62eSopenharmony_ci unsigned int offset; 45e656c62eSopenharmony_ci unsigned int h_offset; 46e656c62eSopenharmony_ci unsigned int size_addr; 47e656c62eSopenharmony_ci unsigned int size_h_addr; 48e656c62eSopenharmony_ci } memref; 49e656c62eSopenharmony_ci struct { 50e656c62eSopenharmony_ci unsigned int a_addr; 51e656c62eSopenharmony_ci unsigned int a_h_addr; 52e656c62eSopenharmony_ci unsigned int b_addr; 53e656c62eSopenharmony_ci unsigned int b_h_addr; 54e656c62eSopenharmony_ci } value; 55e656c62eSopenharmony_ci} TC_NS_ClientParam; 56e656c62eSopenharmony_ci 57e656c62eSopenharmony_citypedef struct { 58e656c62eSopenharmony_ci unsigned int code; 59e656c62eSopenharmony_ci unsigned int origin; 60e656c62eSopenharmony_ci} TC_NS_ClientReturn; 61e656c62eSopenharmony_ci 62e656c62eSopenharmony_citypedef struct { 63e656c62eSopenharmony_ci unsigned char uuid[UUID_SIZE]; 64e656c62eSopenharmony_ci unsigned int session_id; 65e656c62eSopenharmony_ci unsigned int cmd_id; 66e656c62eSopenharmony_ci TC_NS_ClientReturn returns; 67e656c62eSopenharmony_ci TC_NS_ClientLogin login; 68e656c62eSopenharmony_ci TC_NS_ClientParam params[TEEC_PARAM_NUM]; 69e656c62eSopenharmony_ci unsigned int paramTypes; 70e656c62eSopenharmony_ci bool started; 71e656c62eSopenharmony_ci unsigned int callingPid; 72e656c62eSopenharmony_ci unsigned int file_size; 73e656c62eSopenharmony_ci union { 74e656c62eSopenharmony_ci char *file_buffer; 75e656c62eSopenharmony_ci unsigned long long file_addr; 76e656c62eSopenharmony_ci }; 77e656c62eSopenharmony_ci} TC_NS_ClientContext; 78e656c62eSopenharmony_ci 79e656c62eSopenharmony_citypedef struct { 80e656c62eSopenharmony_ci uint32_t seconds; 81e656c62eSopenharmony_ci uint32_t millis; 82e656c62eSopenharmony_ci} TC_NS_Time; 83e656c62eSopenharmony_ci 84e656c62eSopenharmony_cienum SecFileType { 85e656c62eSopenharmony_ci LOAD_TA = 0, 86e656c62eSopenharmony_ci LOAD_SERVICE, 87e656c62eSopenharmony_ci LOAD_LIB, 88e656c62eSopenharmony_ci LOAD_DYNAMIC_DRV, 89e656c62eSopenharmony_ci}; 90e656c62eSopenharmony_ci 91e656c62eSopenharmony_cistruct SecFileInfo { 92e656c62eSopenharmony_ci enum SecFileType fileType; 93e656c62eSopenharmony_ci uint32_t fileSize; 94e656c62eSopenharmony_ci int32_t secLoadErr; 95e656c62eSopenharmony_ci}; 96e656c62eSopenharmony_cistruct SecLoadIoctlStruct { 97e656c62eSopenharmony_ci struct SecFileInfo secFileInfo; 98e656c62eSopenharmony_ci TEEC_UUID uuid; 99e656c62eSopenharmony_ci union { 100e656c62eSopenharmony_ci char *fileBuffer; 101e656c62eSopenharmony_ci struct { 102e656c62eSopenharmony_ci uint32_t file_addr; 103e656c62eSopenharmony_ci uint32_t file_h_addr; 104e656c62eSopenharmony_ci } memref; 105e656c62eSopenharmony_ci }; 106e656c62eSopenharmony_ci}__attribute__((packed)); 107e656c62eSopenharmony_ci 108e656c62eSopenharmony_cistruct AgentIoctlArgs { 109e656c62eSopenharmony_ci uint32_t id; 110e656c62eSopenharmony_ci uint32_t bufferSize; 111e656c62eSopenharmony_ci union { 112e656c62eSopenharmony_ci void *buffer; 113e656c62eSopenharmony_ci unsigned long long addr; 114e656c62eSopenharmony_ci }; 115e656c62eSopenharmony_ci}; 116e656c62eSopenharmony_ci 117e656c62eSopenharmony_ci#endif 118