source: mainline/contrib/arch/kernel/kernel.adl@ 1a5eca4

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 1a5eca4 was 6fa9a99d, checked in by Martin Sucha <sucha14@…>, 11 years ago

Rename klog to kio

  • Property mode set to 100644
File size: 8.3 KB
Line 
1/*****************************
2 * Kernel syscall interfaces *
3 *****************************/
4
5interface sys_kio {
6 /* Print using kernel facility */
7 sysarg_t sys_kio(int fd, const void *buf, size_t size);
8 protocol:
9 ?sys_kio*
10};
11
12interface sys_console {
13 /* Enable kernel console */
14 sysarg_t sys_debug_enable_console(void);
15
16 /* Disable kernel console */
17 sysarg_t sys_debug_disable_console(void);
18 protocol:
19 (
20 ?sys_debug_enable_console +
21 ?sys_debug_disable_console
22 )*
23};
24
25interface sys_tls {
26 /* Set thread-local storage pointer (on architectures where kernel mode is required) */
27 sysarg_t sys_tls_set(sysarg_t addr);
28 protocol:
29 ?sys_tls_set*
30};
31
32interface sys_thread {
33 /* Create new thread */
34 sysarg_t sys_thread_create(uspace_arg_t *uspace_uarg, char *uspace_name, size_t name_len, thread_id_t *uspace_thread_id);
35
36 /* Terminate current thread */
37 sysarg_t sys_thread_exit(int uspace_status);
38
39 /* Get current thread id */
40 sysarg_t sys_thread_get_id(thread_id_t *uspace_thread_id);
41 protocol:
42 (
43 ?sys_thread_create +
44 ?sys_thread_get_id +
45 ?sys_thread_exit
46 )*
47};
48
49interface sys_task {
50 /* Set name fo the current task */
51 sysarg_t sys_task_set_name(const char *uspace_name, size_t name_len);
52
53 /* Get current task id */
54 sysarg_t sys_task_get_id(task_id_t *uspace_task_id);
55 protocol:
56 (
57 ?sys_task_set_name +
58 ?sys_task_get_id
59 )*
60};
61
62interface sys_program {
63 /* Spawn a new instance of clonable loader service */
64 sysarg_t sys_program_spawn_loader(char *uspace_name, size_t name_len);
65 protocol:
66 ?sys_program_spawn_loader*
67};
68
69interface sys_futex {
70 /* Sleep in a futex wait queue */
71 sysarg_t sys_futex_sleep_timeout(uintptr_t uaddr, uint32_t usec, int flags);
72
73 /* Wakeup one thread waiting in futex wait queue */
74 sysarg_t sys_futex_wakeup(uintptr_t uaddr);
75 protocol:
76 (
77 ?sys_futex_sleep_timeout +
78 ?sys_futex_wakeup
79 )*
80};
81
82interface sys_smc {
83 /* Enforce self-modifying code cache coherency */
84 sysarg_t sys_smc_coherence(uintptr_t va, size_t size);
85 protocol:
86 ?sys_smc_coherence*
87};
88
89interface sys_as {
90 /* Create new address space area */
91 sysarg_t sys_as_area_create(uintptr_t address, size_t size, int flags);
92
93 /* Resize an address space area */
94 sysarg_t sys_as_area_resize(uinptr_t address, size_t size, int flags);
95
96 /* Change flags of an address space area */
97 sysarg_t sys_as_area_change_flags(uintptr_t address, int flags);
98
99 /* Destroy an address space area */
100 sysarg_t sys_as_area_destroy(uintptr_t address);
101 protocol:
102 (
103 ?sys_as_area_create +
104 ?sys_as_area_resize +
105 ?sys_as_area_change_flags +
106 ?sys_as_area_destroy
107 )*
108};
109
110interface sys_ipc {
111 /* Fast synchronous IPC call */
112 sysarg_t sys_ipc_call_sync_fast(sysarg_t phoneid, sysarg_t method, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, ipc_data_t *data);
113
114 /* Slow synchronous IPC call */
115 sysarg_t sys_ipc_call_sync_slow(sysarg_t phoneid, ipc_data_t *question, ipc_data_t *answer);
116
117 /* Fast asynchronous IPC call */
118 sysarg_t sys_ipc_call_async_fast(sysarg_t phoneid, sysarg_t method, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4);
119
120 /* Slow asynchronous IPC call */
121 sysarg_t sys_ipc_call_async_slow(sysarg_t phoneid, ipc_data_t *data);
122
123 /* Fast forward a received IPC call to another destination */
124 sysarg_t sys_ipc_forward_fast(sysarg_t callid, sysarg_t phoneid, sysarg_t method, sysarg_t arg1, sysarg_t arg2, int mode);
125
126 /* Slow forward a received IPC call to another destination */
127 sysarg_t sys_ipc_forward_slow(sysarg_t callid, sysarg_t phoneid, ipc_data_t *data, int mode);
128
129 /* Fast answer an IPC call */
130 sysarg_t sys_ipc_answer_fast(sysarg_t callid, sysarg_t retval, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4);
131
132 /* Slow answer an IPC call */
133 sysarg_t sys_ipc_answer_slow(sysarg_t callid, ipc_data_t *data);
134
135 /* Hang up a phone */
136 sysarg_t sys_ipc_hangup(int phoneid);
137
138 /* Wait for an incoming IPC call or answer */
139 sysarg_t sys_ipc_wait_for_call(ipc_data_t *calldata, uint32_t usec, int flags);
140
141 /* Interrupt one thread of the current task from waiting on IPC call */
142 sysarg_t sys_ipc_poke(void);
143 protocol:
144 (
145 ?sys_ipc_call_sync_fast +
146 ?sys_ipc_call_sync_slow +
147 ?sys_ipc_call_async_fast +
148 ?sys_ipc_call_async_slow +
149 ?sys_ipc_forward_fast +
150 ?sys_ipc_forward_slow +
151 ?sys_ipc_answer_fast +
152 ?sys_ipc_answer_slow +
153 ?sys_ipc_hangup +
154 ?sys_ipc_wait_for_call +
155 ?sys_ipc_poke
156 )*
157};
158
159interface sys_event {
160 /* Subscribe to kernel event notifications */
161 sysarg_t sys_event_subscribe(sysarg_t evno, sysarg_t method);
162 protocol:
163 ?sys_event_subscribe*
164};
165
166interface sys_cap {
167 /* Grant capabilities to a task */
168#ifdef __32_BITS__
169 sysarg_t sys_cap_grant(sysarg64_t *uspace_taskid, cap_t caps);
170#endif
171
172#ifdef __64_BITS__
173 sysarg_t sys_cap_grant(sysarg_t taskid, cap_t caps);
174#endif
175
176 /* Revoke capabilities from a task */
177#ifdef __32_BITS__
178 sysarg_t sys_cap_revoke(sysarg64_t *uspace_taskid, cap_t caps);
179#endif
180
181#ifdef __64_BITS__
182 sysarg_t sys_cap_revoke(sysarg_t taskid, cap_t caps);
183#endif
184 protocol:
185 (
186 ?sys_cap_grant +
187 ?sys_cap_rewoke
188 )*
189};
190
191interface sys_ddi {
192 /* Enable access I/O address space for the current task */
193 sysarg_t sys_enable_iospace(ddi_ioarg_t *uspace_io_arg);
194
195 /* Map physical memory to the current task's address space */
196 sysarg_t sys_physmem_map(sysarg_t phys_base, sysarg_t virt_base, sysarg_t pages, sysarg_t flags);
197
198 /* Enable or disable preemption */
199 sysarg_t sys_preempt_control(int enable);
200
201 /* Assign unique device number */
202 sysarg_t sys_device_assign_devno(void);
203
204 /* Connect an IRQ handler to the current task */
205 sysarg_t sys_register_irq(inr_t inr, devno_t devno, sysarg_t method, irq_code_t *ucode);
206
207 /* Disconnect an IRQ handler from the current task */
208 sysarg_t sys_unregister_irq(inr_t inr, devno_t devno);
209 protocol:
210 (
211 ?sys_enable_iospace +
212 ?sys_physmem_map +
213 ?sys_device_assign_devno +
214 ?sys_preempt_control +
215 ?sys_register_irq +
216 ?sys_unregister_irq
217 )*
218};
219
220interface sys_sysinfo {
221 /* Check for sysinfo key validity */
222 sysarg_t sys_sysinfo_valid(sysarg_t ptr, sysarg_t len);
223
224 /* Get sysinfo key value */
225 sysarg_t sys_sysinfo_value(unatice_t ptr, sysarg_t len);
226 protocol:
227 (
228 ?sys_sysinfo_valid +
229 ?sys_sysinfo_value
230 )*
231};
232
233interface sys_debug {
234 /* Connect to the kernel debugging answerbox of a given task */
235#ifdef __32_BITS__
236 sysarg_t sys_ipc_connect_kbox(sysarg64_t *uspace_taskid);
237#endif
238
239#ifdef __64_BITS__
240 sysarg_t sys_ipc_connect_kbox(sysarg_t taskid);
241#endif
242 protocol:
243 ?sys_ipc_connect_kbox*
244};
245
246
247/*****************************************************
248 * Primitive kernel components (exported subsystems) *
249 *****************************************************/
250
251frame sys_console {
252 provides:
253 sys_kio sys_kio;
254 sys_console sys_console;
255};
256
257frame sys_proc {
258 provides:
259 sys_tls sys_tls;
260 sys_thread sys_thread;
261 sys_task sys_task;
262 sys_program sys_program;
263};
264
265frame sys_synch {
266 provides:
267 sys_futex sys_futex;
268 sys_smc sys_smc;
269};
270
271frame sys_mm {
272 provides:
273 sys_as sys_as;
274};
275
276frame sys_ipc {
277 provides:
278 sys_ipc sys_ipc;
279 sys_event sys_event;
280};
281
282frame sys_security {
283 provides:
284 sys_cap sys_cap;
285};
286
287frame sys_ddi {
288 provides:
289 sys_ddi sys_ddi;
290};
291
292frame sys_sysinfo {
293 provides:
294 sys_sysinfo sys_sysinfo;
295};
296
297frame sys_debug {
298 provides:
299 sys_debug sys_debug;
300};
301
302
303/******************************
304 * Composite kernel component *
305 ******************************/
306
307architecture kernel {
308 inst sys_console sys_console;
309 inst sys_proc sys_proc;
310 inst sys_synch sys_synch;
311 inst sys_mm sys_mm;
312 inst sys_ipc sys_ipc;
313 inst sys_security sys_security;
314 inst sys_ddi sys_ddi;
315 inst sys_sysinfo sys_sysinfo;
316 inst sys_debug sys_debug;
317
318 delegate sys_kio to sys_console:sys_kio;
319 delegate sys_console to sys_console:sys_console;
320 delegate sys_tls to sys_proc:sys_tls;
321 delegate sys_thread to sys_proc:sys_thread;
322 delegate sys_task to sys_proc:sys_task;
323 delegate sys_program to sys_proc:sys_program;
324 delegate sys_futex to sys_synch:sys_futex;
325 delegate sys_smc to sys_synch:sys_smc;
326 delegate sys_as to sys_mm:sys_as;
327 delegate sys_ipc to sys_ipc:sys_ipc;
328 delegate sys_event to sys_ipc:sys_event;
329 delegate sys_cap to sys_security:sys_cap;
330 delegate sys_ddi to sys_ddi:sys_ddi;
331 delegate sys_sysinfo to sys_sysinfo:sys_sysinfo;
332 delegate sys_debug to sys_debug:sys_debug;
333};
Note: See TracBrowser for help on using the repository browser.