• 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 #ifndef TEE_DRV_INTERNAL_H
13 #define TEE_DRV_INTERNAL_H
14 #include <stdint.h>
15 #include <dlist.h>
16 #include <ipclib.h>
17 
18 #define FD_COUNT_MAX 1024U
19 
20 #define DRV_NAME_MAX_LEN 32U
21 #define DRV_FRAM_CMD_INDEX 0U
22 #define DRV_NAME_INDEX 3U /* used in open */
23 #define DRV_IOCTL_FD_INDEX 3U /* used in ioctl */
24 #define DRV_CLOSE_FD_INDEX 1U /* used in close */
25 #define DRV_CMD_ID_INDEX 4U /* used in ioctl */
26 #define DRV_NAME_LEN_INDEX 4U
27 #define DRV_PARAM_INDEX 1U /* used in open and ioctl */
28 #define DRV_PARAM_LEN_INDEX 2U /* used in open and ioctl */
29 #define DRV_PERM_INDEX 3U /* used in open */
30 #define DRV_CALLER_PID_INDEX 4U /* used in open and close */
31 #define DRV_UUID_TIME_INDEX 5U /* used in open and close */
32 #define DRV_UUID_CLOCK_INDEX 6U /* used in open and close */
33 #define DRV_REGISTER_CMD_ADDR_INDEX 0U /* used in register drv cmd */
34 #define DRV_REGISTER_CMD_SIZE_INDEX 1U /* used in register drv cmd */
35 
36 /*
37  * open return fd is : ((drv_index << DRV_INDEX_OFFSET) | fd)
38  * add drv_index to fd inorder to make each fd is unique,
39  * and to get drv channel by drv_index in drv api lib
40  */
41 #define DRV_INDEX_OFFSET 32U
42 #define DRV_INDEX_MASK 0xFFFFFFFFULL
43 #define DRV_FD_MASK 0xFFFFFFFFULL
44 
45 #define UUID_TIME_LOW_OFFSET 32
46 #define UUID_TIME_MID_OFFSET 16
47 #define UUID_CLOCK_OFFSET 8
48 #define UUID_TIME_LOW_MASK 0xFFFFFFFFULL /* uuid->timeLow */
49 #define UUID_TIME_MASK 0xFFFFULL /* uuid->timeMid and uuid->timeHiAndVersion */
50 #define UUID_TIME_CLOCK_MASK 0xFFULL /* uuid->clockSeqAndNode */
51 #define BITS_NUM_PER_BYTE 8
52 
53 enum drv_general_cmd_id {
54     CALL_DRV_OPEN = 1,
55     CALL_DRV_IOCTL,
56     CALL_DRV_CLOSE,
57 };
58 
59 enum drv_msg_cmd_id {
60     DRV_GENERAL_CMD_ID,
61     DRV_EXCEPTION_CMD_ID,
62     DRV_DUMP_CMD_ID,
63     REGISTER_DRV_CONF,
64     UNREGISTER_DRV_CONF,
65     DUMP_DRV_CONF,
66     REGISTER_DRVCALL_CONF,
67     UNREGISTER_DRVCALL_CONF,
68     DUMP_DRVCALL_CONF,
69     REGISTER_DRV_CMD_PERM,
70 };
71 
72 struct drv_channel {
73     struct dlist_node drv_list;
74     cref_t drv_channel;
75     uint32_t drv_index;
76     uint32_t ref_cnt;
77     char drv_name[DRV_NAME_MAX_LEN];
78 };
79 
80 struct drv_cmd_perm_info_t {
81     uint32_t cmd;
82     uint64_t perm;
83 };
84 
85 void tee_drv_task_exit(uint32_t exit_pid);
86 void tee_drv_task_dump(void);
87 
88 #endif
89