• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 */