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