1 /* 2 * Copyright (c) 2023 Institute of Parallel And Distributed Systems (IPADS), Shanghai Jiao Tong University (SJTU) 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 PROCMGR_DEFS_H 13 #define PROCMGR_DEFS_H 14 15 #include <chcore/ipc.h> 16 #include <sys/types.h> 17 18 #ifdef CHCORE_OH_TEE 19 #include "oh_tee.h" 20 #endif /* CHCORE_OH_TEE */ 21 22 #ifdef __cplusplus 23 extern "C" { 24 #endif 25 26 enum PROC_REQ { 27 PROC_REQ_NEWPROC = 1, 28 PROC_REQ_WAIT, 29 PROC_REQ_GET_MT_CAP, 30 PROC_REQ_GET_SERVER_CAP, 31 PROC_REQ_RECV_SIG, 32 PROC_REQ_CHECK_STATE, 33 PROC_REQ_GET_SHELL_CAP, 34 PROC_REQ_SET_SHELL_CAP, 35 PROC_REQ_GET_TERMINAL_CAP, 36 PROC_REQ_SET_TERMINAL_CAP, 37 #ifdef CHCORE_OH_TEE 38 PROC_REQ_KILL, 39 PROC_REQ_SPAWN, 40 PROC_REQ_INFO_PROC_BY_PID, 41 PROC_REQ_TASK_MAP_NS, 42 PROC_REQ_TASK_UNMAP_NS, 43 PROC_REQ_TEE_ALLOC_SHM, 44 PROC_REQ_TEE_GET_SHM, 45 PROC_REQ_TEE_FREE_SHM, 46 #endif /* CHCORE_OH_TEE */ 47 PROC_REQ_MAX 48 }; 49 50 enum CONFIGURABLE_SERVER { 51 SERVER_TMPFS = 1, 52 SERVER_SYSTEMV_SHMMGR, 53 SERVER_HDMI_DRIVER, 54 SERVER_SD_CARD, 55 SERVER_FAT32_FS, 56 SERVER_EXT4_FS, 57 SERVER_USB_DEVMGR, 58 SERVER_SERIAL, 59 SERVER_GPIO, 60 SERVER_GUI, 61 SERVER_CHANMGR, 62 SERVER_LITTLEFS, 63 SERVER_FLASH, 64 CONFIG_SERVER_MAX, 65 }; 66 67 #define PROC_REQ_NAME_LEN 255 68 #define PROC_REQ_TEXT_SIZE 1600 69 #define PROC_REQ_ARGC_MAX 128 70 #define PROC_REQ_ENVC_MAX 128 71 #define PROC_REQ_ENV_TEXT_SIZE 256 72 73 #ifdef CHCORE_OH_TEE 74 struct proc_info { 75 spawn_uuid_t uuid; 76 size_t stack_size; 77 }; 78 #endif /* CHCORE_OH_TEE */ 79 80 struct proc_request { 81 enum PROC_REQ req; 82 union { 83 struct { 84 int argc; 85 char argv_text[PROC_REQ_TEXT_SIZE]; 86 off_t argv_off[PROC_REQ_ARGC_MAX]; 87 } newproc; 88 struct { 89 pid_t pid; 90 int exitstatus; 91 } wait; 92 struct { 93 pid_t pid; 94 } get_mt_cap; 95 struct { 96 enum CONFIGURABLE_SERVER server_id; 97 } get_server_cap; 98 struct { 99 char sig; 100 } recv_sig; 101 struct { 102 pid_t pid; 103 } check_state; 104 struct { 105 /* no args */ 106 } get_shell_cap; 107 struct { 108 /* no args */ 109 } set_shell_cap; 110 struct { 111 /* no args */ 112 } get_terminal_cap; 113 struct { 114 /* no args */ 115 } set_terminal_cap; 116 struct { 117 pid_t pid; 118 } kill; 119 struct { 120 int argc; 121 char argv_text[PROC_REQ_TEXT_SIZE]; 122 int argv_off[PROC_REQ_ARGC_MAX]; 123 int envc; 124 char envp_text[PROC_REQ_ENV_TEXT_SIZE]; 125 int envp_off[PROC_REQ_ENVC_MAX]; 126 int attr_valid; 127 posix_spawnattr_t attr; 128 cap_t main_thread_id; 129 char path[PROC_REQ_NAME_LEN]; 130 } spawn; 131 struct { 132 pid_t pid; 133 struct proc_info info; 134 } info_proc_by_pid; 135 struct { 136 uint32_t task_id; 137 uint64_t phy_addr; 138 uint32_t size; 139 } task_map_ns; 140 struct { 141 uint32_t task_id; 142 cap_t pmo; 143 } task_unmap_ns; 144 struct { 145 vaddr_t vaddr; 146 uint32_t size; 147 struct tee_uuid uuid; 148 } tee_alloc_shm; 149 struct { 150 vaddr_t vaddr; 151 pid_t pid; 152 } tee_get_shm; 153 struct { 154 vaddr_t vaddr; 155 } tee_free_shm; 156 }; 157 }; 158 159 #ifdef __cplusplus 160 } 161 #endif 162 163 #endif /* PROCMGR_DEFS_H */