summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/errno.h10
-rw-r--r--sys/permission.h11
-rw-r--r--sys/syscall.h69
-rw-r--r--sys/types.h32
4 files changed, 122 insertions, 0 deletions
diff --git a/sys/errno.h b/sys/errno.h
new file mode 100644
index 0000000..8d0c980
--- /dev/null
+++ b/sys/errno.h
@@ -0,0 +1,10 @@
+#ifndef _SYS_ERRNO_H
+#define _SYS_ERRNO_H 1
+
+#define ENOPERM 1
+#define EFAULT 2
+#define EINVAL 3
+#define ENOSYS 4
+#define ENOTFOUND 5
+
+#endif
diff --git a/sys/permission.h b/sys/permission.h
new file mode 100644
index 0000000..08bb765
--- /dev/null
+++ b/sys/permission.h
@@ -0,0 +1,11 @@
+#ifndef _SYS_PERMISSION_H
+#define _SYS_PERMISSION_H 1
+
+#define PERM_MEM_PHYS_RESV 1 /* Reserve physical memory. */
+#define PERM_MEM_PHYS_FREE 2 /* Free physical memory. */
+#define PERM_MEM_PHYS_ALLOC 4 /* Allocate physical memory. */
+
+#define PERM_MEM_VIRT_PD 8 /* Work on any PD. */
+#define PERM_MEM_VIRT_MAP 0x10 /* Map physical memory to virtual memory. */
+
+#endif
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
diff --git a/sys/types.h b/sys/types.h
new file mode 100644
index 0000000..0a519c5
--- /dev/null
+++ b/sys/types.h
@@ -0,0 +1,32 @@
+#ifndef _SYS_TYPES_H
+#define _SYS_TYPES_H 1
+
+#include <stdint.h>
+#include <stddef.h>
+#include <stdbool.h>
+
+typedef intmax_t tid_t;
+
+typedef struct {
+ intmax_t tid;
+ uintmax_t addr;
+} linear_address_t;
+
+typedef uintptr_t physptr_t;
+
+typedef struct page_flags
+{
+ bool present;
+ bool writeable;
+ bool useraccess;
+ bool executable;
+} page_flags_t;
+
+typedef struct page_mapping
+{
+ physptr_t phys;
+ page_flags_t pf;
+} page_mapping_t;
+
+
+#endif