diff options
Diffstat (limited to 'sys/syscall.h')
-rw-r--r-- | sys/syscall.h | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/sys/syscall.h b/sys/syscall.h new file mode 100644 index 0000000..d8b64bb --- /dev/null +++ b/sys/syscall.h @@ -0,0 +1,69 @@ +#ifndef _SYS_SYSCALL_H +#define _SYS_SYSCALL_H 1 + +#include <stdint.h> +#include <stddef.h> +#include "types.h" + +typedef struct syscall { + int id; +} syscall_t; + +struct syscall_log { + syscall_t syscall; + const char *message; +}; + +struct syscall_mem_phys_range_op { + syscall_t syscall; + uintptr_t base; + uintptr_t limit; +}; + +struct syscall_mem_phys_alloc { + syscall_t syscall; + size_t npages; + uintptr_t *result; +}; + +struct syscall_mem_virt_mapping { + syscall_t syscall; + linear_address_t addr; + page_mapping_t *result; +}; + +struct syscall_mem_virt_map { + syscall_t syscall; + linear_address_t addr; + page_mapping_t map; +}; + +struct syscall_mem_virt_alloc { + syscall_t syscall; + linear_address_t from; + uintptr_t to; + page_flags_t flg; +}; + +enum +{ + SYSCALL_LOG = 0, + SYSCALL_TID, + + SYSCALL_MEM_PHYS_RESV, + SYSCALL_MEM_PHYS_FREE, + SYSCALL_MEM_PHYS_ALLOC, + + SYSCALL_MEM_VIRT_MAPPING, + SYSCALL_MEM_VIRT_MAP, + SYSCALL_MEM_VIRT_ALLOC, + + SYSCALL_COUNT +}; + +#define _SYSCALL(data) \ + intmax_t ax; \ + __asm__ volatile("movq %0, %%rdi\nsyscall": "=a"(ax): "r"(data): "memory"); \ + return ax + +#endif |