summaryrefslogtreecommitdiffstats
path: root/sys/syscall.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/syscall.h')
-rw-r--r--sys/syscall.h69
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