#ifndef _SYS_SYSCALL_H #define _SYS_SYSCALL_H 1 #include #include #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