• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 TEE_CLIENT_INNER_API_H
14 #define TEE_CLIENT_INNER_API_H
15 
16 #include <pthread.h>
17 #include <stdint.h>
18 #include <stdio.h>
19 #include <unistd.h>
20 #include "tee_auth_common.h"
21 #include "tee_client_constants.h"
22 #include "tee_client_inner.h"
23 #include "tee_client_type.h"
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
29 /* TEE GLOBAL CMD */
30 enum SVC_GLOBAL_CMD_ID {
31     GLOBAL_CMD_ID_INVALID                   = 0x0,  /* Global Task invalid cmd ID */
32     GLOBAL_CMD_ID_BOOT_ACK                  = 0x1,  /* Global Task boot ack */
33     GLOBAL_CMD_ID_OPEN_SESSION              = 0x2,  /* Global Task open Session */
34     GLOBAL_CMD_ID_CLOSE_SESSION             = 0x3,  /* Global Task close Session */
35     GLOBAL_CMD_ID_LOAD_SECURE_APP           = 0x4,  /* Global Task load dyn ta */
36     GLOBAL_CMD_ID_NEED_LOAD_APP             = 0x5,  /* Global Task judge if need load ta */
37     GLOBAL_CMD_ID_REGISTER_AGENT            = 0x6,  /* Global Task register agent */
38     GLOBAL_CMD_ID_UNREGISTER_AGENT          = 0x7,  /* Global Task unregister agent */
39     GLOBAL_CMD_ID_REGISTER_NOTIFY_MEMORY    = 0x8,  /* Global Task register notify memory */
40     GLOBAL_CMD_ID_UNREGISTER_NOTIFY_MEMORY  = 0x9,  /* Global Task unregister notify memory */
41     GLOBAL_CMD_ID_INIT_CONTENT_PATH         = 0xa,  /* Global Task init content path */
42     GLOBAL_CMD_ID_TERMINATE_CONTENT_PATH    = 0xb,  /* Global Task terminate content path */
43     GLOBAL_CMD_ID_ALLOC_EXCEPTION_MEM       = 0xc,  /* Global Task alloc exception memory */
44     GLOBAL_CMD_ID_TEE_TIME                  = 0xd,  /* Global Task get tee secure time */
45     GLOBAL_CMD_ID_TEE_INFO                  = 0xe,  /* Global Task tlogcat get tee info */
46     GLOBAL_CMD_ID_MAX,
47 };
48 
49 enum ExceptionType {
50     TYPE_INITIALIZE_FAIL = 0,
51     TYPE_OPEN_SESSION_FAIL = 1,
52     TYPE_CONNECT_GET_FD_ERROR = 2,
53     TYPE_READ_APP_FILE_FAIL = 3,
54     TYPE_CLOSE_SESSION_FAIL = 4,
55     TYPE_CLOSE_SESSION_FAIL_FINALIZE = 5,
56 };
57 
58 void LogException(int errCode, const TEEC_UUID *srvUuid, uint32_t origin, int type);
59 void SetBit(uint32_t i, uint32_t byteMax, uint8_t *bitMap);
60 void ClearBit(uint32_t i, uint32_t byteMax, uint8_t *bitMap);
61 bool CheckBit(uint32_t i, uint32_t byteMax, const uint8_t *bitMap);
62 int32_t GetAndSetBit(uint8_t *bitMap, uint32_t byteMax);
63 int32_t GetAndCleartBit(uint8_t *bitMap, uint32_t byteMax);
64 TEEC_Result TEEC_InitializeContextInner(TEEC_ContextInner *context, CaAuthInfo *caInfo);
65 TEEC_Result TEEC_OpenSessionInner(int callingPid, const TaFileInfo *taFile, TEEC_ContextInner *context,
66     TEEC_Session *session, const TEEC_UUID *destination, uint32_t connectionMethod,
67     const void *connectionData, TEEC_Operation *operation, uint32_t *returnOrigin);
68 TEEC_Result TEEC_InvokeCommandInner(TEEC_ContextInner *context, const TEEC_Session *session,
69     uint32_t commandID, const TEEC_Operation *operation, uint32_t *returnOrigin);
70 int32_t TEEC_CloseSessionInner(TEEC_Session *session, const TEEC_ContextInner *context);
71 void TEEC_FinalizeContextInner(TEEC_ContextInner *context);
72 TEEC_Result TEEC_RegisterSharedMemoryInner(TEEC_ContextInner *context, TEEC_SharedMemoryInner *sharedMem);
73 TEEC_Result TEEC_AllocateSharedMemoryInner(TEEC_ContextInner *context, TEEC_SharedMemoryInner *sharedMem);
74 void TEEC_ReleaseSharedMemoryInner(TEEC_SharedMemoryInner *sharedMem);
75 TEEC_ContextInner *GetBnContext(const TEEC_Context *context);
76 bool PutBnContext(TEEC_ContextInner *context);
77 TEEC_ContextInner *FindAndRemoveBnContext(const TEEC_Context *context);
78 TEEC_Session *GetBnSession(const TEEC_Session *session, TEEC_ContextInner *context);
79 void PutBnSession(TEEC_Session *session);
80 TEEC_Session *FindAndRemoveSession(const TEEC_Session *session, TEEC_ContextInner *context);
81 TEEC_SharedMemoryInner *GetBnShmByOffset(uint32_t shmOffset, TEEC_ContextInner *context);
82 void PutBnShrMem(TEEC_SharedMemoryInner *shrMem);
83 TEEC_Result TEEC_SendSecfileInner(const char *path, int tzFd, FILE *fp);
84 TEEC_Result TEEC_CheckOperation(TEEC_ContextInner *context, const TEEC_Operation *operation);
85 
86 #ifdef __cplusplus
87 }
88 #endif
89 #endif
90