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 _TEE_CLIENT_INNER_H_ 14e656c62eSopenharmony_ci#define _TEE_CLIENT_INNER_H_ 15e656c62eSopenharmony_ci 16e656c62eSopenharmony_ci#include <pthread.h> 17e656c62eSopenharmony_ci#include <unistd.h> 18e656c62eSopenharmony_ci#include "tee_client_constants.h" 19e656c62eSopenharmony_ci#include "tee_client_list.h" 20e656c62eSopenharmony_ci#include "tee_client_type.h" 21e656c62eSopenharmony_ci#include "tee_log.h" 22e656c62eSopenharmony_ci 23e656c62eSopenharmony_ci#ifdef __cplusplus 24e656c62eSopenharmony_ciextern "C" { 25e656c62eSopenharmony_ci#endif 26e656c62eSopenharmony_ci 27e656c62eSopenharmony_ci#define IS_TEMP_MEM(paramType) \ 28e656c62eSopenharmony_ci (((paramType) == TEEC_MEMREF_TEMP_INPUT) || ((paramType) == TEEC_MEMREF_TEMP_OUTPUT) || \ 29e656c62eSopenharmony_ci ((paramType) == TEEC_MEMREF_TEMP_INOUT)) 30e656c62eSopenharmony_ci 31e656c62eSopenharmony_ci#define IS_PARTIAL_MEM(paramType) \ 32e656c62eSopenharmony_ci (((paramType) == TEEC_MEMREF_WHOLE) || ((paramType) == TEEC_MEMREF_PARTIAL_INPUT) || \ 33e656c62eSopenharmony_ci ((paramType) == TEEC_MEMREF_PARTIAL_OUTPUT) || ((paramType) == TEEC_MEMREF_PARTIAL_INOUT)) 34e656c62eSopenharmony_ci 35e656c62eSopenharmony_ci#define IS_VALUE_MEM(paramType) \ 36e656c62eSopenharmony_ci (((paramType) == TEEC_VALUE_INPUT) || ((paramType) == TEEC_VALUE_OUTPUT) || ((paramType) == TEEC_VALUE_INOUT)) 37e656c62eSopenharmony_ci 38e656c62eSopenharmony_ci#define CHECK_ERR_RETURN(val, ref, ret) \ 39e656c62eSopenharmony_ci do { \ 40e656c62eSopenharmony_ci if ((val) != (ref)) { \ 41e656c62eSopenharmony_ci tloge("%{public}d: error: %{public}d\n", __LINE__, (int)val); \ 42e656c62eSopenharmony_ci return ret; \ 43e656c62eSopenharmony_ci } \ 44e656c62eSopenharmony_ci } while (0) 45e656c62eSopenharmony_ci 46e656c62eSopenharmony_ci#define CHECK_ERR_NO_RETURN(val, ref) \ 47e656c62eSopenharmony_ci do { \ 48e656c62eSopenharmony_ci if ((val) != (ref)) { \ 49e656c62eSopenharmony_ci tloge("%{public}d: error: %{public}d\n", __LINE__, (int)val); \ 50e656c62eSopenharmony_ci return; \ 51e656c62eSopenharmony_ci } \ 52e656c62eSopenharmony_ci } while (0) 53e656c62eSopenharmony_ci 54e656c62eSopenharmony_ci#define CHECK_ERR_GOTO(val, ref, label) \ 55e656c62eSopenharmony_ci do { \ 56e656c62eSopenharmony_ci if ((val) != (ref)) { \ 57e656c62eSopenharmony_ci tloge("%{public}d: error: %{public}d\n", __LINE__, (int)val); \ 58e656c62eSopenharmony_ci goto label; \ 59e656c62eSopenharmony_ci } \ 60e656c62eSopenharmony_ci } while (0) 61e656c62eSopenharmony_ci 62e656c62eSopenharmony_ci 63e656c62eSopenharmony_ci#define MAX_CXTCNT_ONECA 16 /* one ca only can get 16 contexts */ 64e656c62eSopenharmony_ci#define MAX_TA_PATH_LEN 256 65e656c62eSopenharmony_ci#define PARAM_SIZE_LIMIT (0x400000 + 0x100) /* 0x100 is for share mem flag etc */ 66e656c62eSopenharmony_ci#define NUM_OF_SHAREMEM_BITMAP 8 67e656c62eSopenharmony_ci 68e656c62eSopenharmony_ci#ifndef ZERO_SIZE_PTR 69e656c62eSopenharmony_ci#define ZERO_SIZE_PTR ((void *)16) 70e656c62eSopenharmony_ci#endif 71e656c62eSopenharmony_ci 72e656c62eSopenharmony_ci#define BUFF_LEN_MAX 4096 73e656c62eSopenharmony_ci 74e656c62eSopenharmony_ci#ifndef PAGE_SIZE 75e656c62eSopenharmony_ci#define PAGE_SIZE getpagesize() 76e656c62eSopenharmony_ci#endif 77e656c62eSopenharmony_ci 78e656c62eSopenharmony_citypedef struct { 79e656c62eSopenharmony_ci int32_t fd; /* file descriptor */ 80e656c62eSopenharmony_ci struct ListNode session_list; /* session list */ 81e656c62eSopenharmony_ci struct ListNode shrd_mem_list; /* share memory list */ 82e656c62eSopenharmony_ci struct { 83e656c62eSopenharmony_ci void *buffer; 84e656c62eSopenharmony_ci sem_t buffer_barrier; 85e656c62eSopenharmony_ci } share_buffer; 86e656c62eSopenharmony_ci uint8_t shm_bitmap[NUM_OF_SHAREMEM_BITMAP]; 87e656c62eSopenharmony_ci struct ListNode c_node; /* context list node */ 88e656c62eSopenharmony_ci uint32_t ops_cnt; 89e656c62eSopenharmony_ci pthread_mutex_t sessionLock; 90e656c62eSopenharmony_ci pthread_mutex_t shrMemLock; 91e656c62eSopenharmony_ci pthread_mutex_t shrMemBitMapLock; 92e656c62eSopenharmony_ci bool callFromService; /* true:from Service, false:from native */ 93e656c62eSopenharmony_ci} TEEC_ContextInner; 94e656c62eSopenharmony_ci 95e656c62eSopenharmony_citypedef struct { 96e656c62eSopenharmony_ci void *buffer; /* memory pointer */ 97e656c62eSopenharmony_ci uint32_t size; /* memory size */ 98e656c62eSopenharmony_ci uint32_t flags; /* memory flag, distinguish between input and output, range in #TEEC_SharedMemCtl */ 99e656c62eSopenharmony_ci uint32_t ops_cnt; /* memoty operation cnt */ 100e656c62eSopenharmony_ci bool is_allocated; /* memory allocated flag, distinguish between registered or distributed */ 101e656c62eSopenharmony_ci struct ListNode head; /* head of shared memory list */ 102e656c62eSopenharmony_ci TEEC_ContextInner *context; /* point to its own TEE environment */ 103e656c62eSopenharmony_ci uint32_t offset; 104e656c62eSopenharmony_ci} TEEC_SharedMemoryInner; 105e656c62eSopenharmony_ci 106e656c62eSopenharmony_citypedef struct { 107e656c62eSopenharmony_ci const uint8_t *taPath; 108e656c62eSopenharmony_ci FILE *taFp; 109e656c62eSopenharmony_ci} TaFileInfo; 110e656c62eSopenharmony_ci 111e656c62eSopenharmony_ci#ifdef __cplusplus 112e656c62eSopenharmony_ci} 113e656c62eSopenharmony_ci#endif 114e656c62eSopenharmony_ci#endif 115