LF OS
Hobby operating system for amd64 with high ambitions
Loading...
Searching...
No Matches
syscalls.h
Go to the documentation of this file.
1// AUTOMATICALLY GENERATED FILE
2// Generated by src/syscall-generator.pl
3
4#include <stdbool.h>
5#include <sys/types.h>
6#include <stdint.h>
8
9// Syscall group scheduler:
10// Syscalls changing the scheduling of the calling process.
11
18static inline __attribute__((artificial)) void sc_do_scheduler_exit(uint8_t exit_code) {
19 uint64_t rax = (uint64_t)(exit_code & 255);
20 uint64_t rdx = ((0 & 0xFF) << 24) | (0 & 0xFFFFFF);
21
22 asm("syscall"::"a"(rax), "d"(rdx):"rbx", "rcx", "r11", "memory");
23
24}
25
34static inline __attribute__((artificial)) void sc_do_scheduler_clone(bool share_memory, void* entry, pid_t* pid) {
36 uint64_t rax = (uint64_t)(share_memory & 1);
37 uint64_t rdx = ((0 & 0xFF) << 24) | (1 & 0xFFFFFF);
38
39 asm("syscall":"=a"(rax):"D"(rdi), "a"(rax), "d"(rdx):"rbx", "rcx", "r11", "memory");
40
41 *pid = (rax);
42}
43
50static inline __attribute__((artificial)) void sc_do_scheduler_sleep(uint64_t nanoseconds) {
51 uint64_t rax = (uint64_t)(nanoseconds);
52 uint64_t rdx = ((0 & 0xFF) << 24) | (2 & 0xFFFFFF);
53
54 asm("syscall"::"a"(rax), "d"(rdx):"rbx", "rcx", "r11", "memory");
55
56}
57
64static inline __attribute__((artificial)) void sc_do_scheduler_get_pid(bool parent, pid_t* pid) {
65 uint64_t rax = (uint64_t)(parent & 1);
66 uint64_t rdx = ((0 & 0xFF) << 24) | (3 & 0xFFFFFF);
67
68 asm("syscall":"=a"(rax):"a"(rax), "d"(rdx):"rbx", "rcx", "r11", "memory");
69
70 *pid = (rax);
71}
72
73// Syscall group memory:
74// Syscalls affecting memory mappings for this or other processes
75
82static inline __attribute__((artificial)) void sc_do_memory_sbrk(int64_t inc, void** data_end) {
83 uint64_t rax = (uint64_t)(inc);
84 uint64_t rdx = ((1 & 0xFF) << 24) | (0 & 0xFFFFFF);
85
86 asm("syscall":"=a"(rax):"a"(rax), "d"(rdx):"rbx", "rcx", "r11", "memory");
87
88 *data_end = (void*)(rax);
89}
90
91// Syscall group hardware:
92// Various syscalls to access hardware resources
93
104static inline __attribute__((artificial)) void sc_do_hardware_framebuffer(uint32_t** framebuffer, uint16_t* width, uint16_t* height, uint16_t* stride, uint16_t* colorFormat) {
105 uint64_t rdx = ((2 & 0xFF) << 24) | (0 & 0xFFFFFF);
108
109 asm("syscall":"=D"(rdi), "=a"(rax):"d"(rdx):"rbx", "rcx", "r11", "memory");
110
111 *width = (rdi & 65535);
112 *height = ((rdi >> 16) & 65535);
113 *stride = ((rdi >> 32) & 65535);
114 *colorFormat = ((rdi >> 48) & 65535);
116}
117
126static inline __attribute__((artificial)) void sc_do_hardware_ioperm(uint16_t from, uint16_t num, bool turn_on, uint64_t* error) {
127 uint64_t rax = (uint64_t)(from & 65535) | ((uint64_t)(num & 65535) << 16) | ((uint64_t)(turn_on & 1) << 32);
128 uint64_t rdx = ((2 & 0xFF) << 24) | (1 & 0xFFFFFF);
129
130 asm("syscall":"=a"(rax):"a"(rax), "d"(rdx):"rbx", "rcx", "r11", "memory");
131
132 *error = (rax);
133}
134
143static inline __attribute__((artificial)) void sc_do_hardware_interrupt_notify(uint8_t interrupt, bool notify, uint64_t queue, uint64_t* error) {
144 uint64_t rax = (uint64_t)(interrupt & 255) | ((uint64_t)(notify & 1) << 8);
146 uint64_t rdx = ((2 & 0xFF) << 24) | (2 & 0xFFFFFF);
147
148 asm("syscall":"=a"(rax):"a"(rax), "D"(rdi), "d"(rdx):"rbx", "rcx", "r11", "memory");
149
150 *error = (rax);
151}
152
153// Syscall group locking:
154// Mutexes, Semaphores, and co
155
163static inline __attribute__((artificial)) void sc_do_locking_create_mutex(uint64_t* mutex, uint64_t* error) {
164 uint64_t rdx = ((3 & 0xFF) << 24) | (0 & 0xFFFFFF);
167
168 asm("syscall":"=D"(rdi), "=a"(rax):"d"(rdx):"rbx", "rcx", "r11", "memory");
169
170 *error = (rdi);
171 *mutex = (rax);
172}
173
180static inline __attribute__((artificial)) void sc_do_locking_destroy_mutex(uint64_t mutex, uint64_t* error) {
182 uint64_t rdx = ((3 & 0xFF) << 24) | (1 & 0xFFFFFF);
184
185 asm("syscall":"=D"(rdi):"a"(rax), "d"(rdx):"rbx", "rcx", "r11", "memory");
186
187 *error = (rdi);
188}
189
197static inline __attribute__((artificial)) void sc_do_locking_lock_mutex(uint64_t mutex, bool trylock, uint64_t* error) {
199 uint64_t rdi = (uint64_t)(trylock & 1);
200 uint64_t rdx = ((3 & 0xFF) << 24) | (2 & 0xFFFFFF);
201
202 asm("syscall":"=a"(rax):"a"(rax), "D"(rdi), "d"(rdx):"rbx", "rcx", "r11", "memory");
203
204 *error = (rax);
205}
206
213static inline __attribute__((artificial)) void sc_do_locking_unlock_mutex(uint64_t mutex, uint64_t* error) {
215 uint64_t rdx = ((3 & 0xFF) << 24) | (3 & 0xFFFFFF);
216
217 asm("syscall":"=a"(rax):"a"(rax), "d"(rdx):"rbx", "rcx", "r11", "memory");
218
219 *error = (rax);
220}
221
229static inline __attribute__((artificial)) void sc_do_locking_create_condvar(uint64_t* condvar, uint64_t* error) {
230 uint64_t rdx = ((3 & 0xFF) << 24) | (4 & 0xFFFFFF);
233
234 asm("syscall":"=D"(rdi), "=a"(rax):"d"(rdx):"rbx", "rcx", "r11", "memory");
235
236 *error = (rdi);
238}
239
246static inline __attribute__((artificial)) void sc_do_locking_destroy_condvar(uint64_t condvar, uint64_t* error) {
248 uint64_t rdx = ((3 & 0xFF) << 24) | (5 & 0xFFFFFF);
250
251 asm("syscall":"=D"(rdi):"a"(rax), "d"(rdx):"rbx", "rcx", "r11", "memory");
252
253 *error = (rdi);
254}
255
263static inline __attribute__((artificial)) void sc_do_locking_signal_condvar(uint64_t condvar, uint64_t amount, uint64_t* error) {
266 uint64_t rdx = ((3 & 0xFF) << 24) | (6 & 0xFFFFFF);
267
268 asm("syscall":"=D"(rdi):"a"(rax), "D"(rdi), "d"(rdx):"rbx", "rcx", "r11", "memory");
269
270 *error = (rdi);
271}
272
280static inline __attribute__((artificial)) void sc_do_locking_wait_condvar(uint64_t condvar, uint64_t timeout, uint64_t* error) {
283 uint64_t rdx = ((3 & 0xFF) << 24) | (7 & 0xFFFFFF);
284
285 asm("syscall":"=D"(rdi):"D"(rdi), "a"(rax), "d"(rdx):"rbx", "rcx", "r11", "memory");
286
287 *error = (rdi);
288}
289
290// Syscall group ipc:
291// Interprocess-communication
292
303static inline __attribute__((artificial)) void sc_do_ipc_mq_create(bool global_read, bool global_write, size_t message_limit, size_t data_limit, uint64_t* mq, uint64_t* error) {
305 uint64_t rax = (uint64_t)(global_read & 1) | ((uint64_t)(global_write & 1) << 1);
307 uint64_t rdx = ((4 & 0xFF) << 24) | (0 & 0xFFFFFF);
308
309 asm("syscall":"=D"(rdi), "=a"(rax):"S"(rsi), "a"(rax), "D"(rdi), "d"(rdx):"rbx", "rcx", "r11", "memory");
310
311 *error = (rdi);
312 *mq = (rax);
313}
314
321static inline __attribute__((artificial)) void sc_do_ipc_mq_destroy(uint64_t mq, uint64_t* error) {
322 uint64_t rax = (uint64_t)(mq);
323 uint64_t rdx = ((4 & 0xFF) << 24) | (1 & 0xFFFFFF);
324
325 asm("syscall":"=a"(rax):"a"(rax), "d"(rdx):"rbx", "rcx", "r11", "memory");
326
327 *error = (rax);
328}
329
338static inline __attribute__((artificial)) void sc_do_ipc_mq_poll(uint64_t queue, bool wait, struct Message* message, uint64_t* error) {
341 uint64_t rdi = (uint64_t)(wait & 1);
342 uint64_t rdx = ((4 & 0xFF) << 24) | (2 & 0xFFFFFF);
343
344 asm("syscall":"=a"(rax):"S"(rsi), "a"(rax), "D"(rdi), "d"(rdx):"rbx", "rcx", "r11", "memory");
345
346 *error = (rax);
347}
348
357static inline __attribute__((artificial)) void sc_do_ipc_mq_send(uint64_t queue, uint64_t process, struct Message* message, uint64_t* error) {
361 uint64_t rdx = ((4 & 0xFF) << 24) | (3 & 0xFFFFFF);
362
363 asm("syscall":"=a"(rax):"S"(rsi), "D"(rdi), "a"(rax), "d"(rdx):"rbx", "rcx", "r11", "memory");
364
365 *error = (rax);
366}
367
375static inline __attribute__((artificial)) void sc_do_ipc_service_register(const uuid_t* uuid, uint64_t queue, uint64_t* error) {
377 uint64_t rax = (uint64_t)(uuid);
378 uint64_t rdx = ((4 & 0xFF) << 24) | (4 & 0xFFFFFF);
379
380 asm("syscall":"=a"(rax):"D"(rdi), "a"(rax), "d"(rdx):"rbx", "rcx", "r11", "memory");
381
382 *error = (rax);
383}
384
393static inline __attribute__((artificial)) void sc_do_ipc_service_discover(const uuid_t* uuid, uint64_t queue, struct Message* message, uint64_t* error) {
394 uint64_t rax = (uint64_t)(uuid);
397 uint64_t rdx = ((4 & 0xFF) << 24) | (5 & 0xFFFFFF);
398
399 asm("syscall":"=a"(rax):"a"(rax), "D"(rdi), "S"(rsi), "d"(rdx):"rbx", "rcx", "r11", "memory");
400
401 *error = (rax);
402}
403
404// Syscall group clock:
405// Clock syscalls (time since system start, current time once a driver loaded it into the kernel, sleep, ...)
406
413static inline __attribute__((artificial)) void sc_do_clock_read(uint64_t* nanoseconds) {
414 uint64_t rdx = ((5 & 0xFF) << 24) | (0 & 0xFFFFFF);
416
417 asm("syscall":"=a"(rax):"d"(rdx):"rbx", "rcx", "r11", "memory");
418
419 *nanoseconds = (rax);
420}
421
422// Syscall group debug:
423// Debugging syscalls (simple text output, logging, ...)
424
431static inline __attribute__((artificial)) void sc_do_debug_print(char* str) {
432 uint64_t rax = (uint64_t)(str);
433 uint64_t rdx = ((255 & 0xFF) << 24) | (0 & 0xFFFFFF);
434
435 asm("syscall"::"a"(rax), "d"(rdx):"rbx", "rcx", "r11", "memory");
436
437}
438
unsigned short uint16_t
Definition arch.h:8
unsigned int uint32_t
Definition arch.h:11
unsigned long uint64_t
Definition arch.h:14
int64_t pid_t
Definition arch.h:21
unsigned char uint8_t
Definition arch.h:5
signed long int64_t
Definition arch.h:13
static uint64_t timeout
Definition syscalls.h:280
* condvar
Definition syscalls.h:237
* mutex
Definition syscalls.h:171
static bool size_t message_limit
Definition syscalls.h:303
static void pid_t * pid
Definition syscalls.h:34
static void * entry
Definition syscalls.h:34
static uint64_t amount
Definition syscalls.h:263
static uint16_t uint16_t uint16_t uint16_t * colorFormat
Definition syscalls.h:104
static bool notify
Definition syscalls.h:143
static uint16_t uint16_t * height
Definition syscalls.h:104
uint64_t rdi
Definition syscalls.h:106
static bool uint64_t queue
Definition syscalls.h:143
static bool size_t size_t uint64_t * mq
Definition syscalls.h:303
static uint16_t * width
Definition syscalls.h:104
static uint64_t process
Definition syscalls.h:357
uint64_t rdx
Definition syscalls.h:37
static uint16_t num
Definition syscalls.h:126
static bool trylock
Definition syscalls.h:197
static bool wait
Definition syscalls.h:338
static bool size_t size_t data_limit
Definition syscalls.h:303
static bool global_write
Definition syscalls.h:303
* framebuffer
Definition syscalls.h:115
uint64_t rsi
Definition syscalls.h:396
static void ** data_end
Definition syscalls.h:82
static bool struct Message * message
Definition syscalls.h:338
static uint16_t uint16_t uint16_t * stride
Definition syscalls.h:104
static uint16_t bool turn_on
Definition syscalls.h:126
static uint16_t bool uint64_t * error
Definition syscalls.h:126
uint64_t rax
Definition syscalls.h:36
Definition uuid.h:6