diff options
Diffstat (limited to 'sys')
-rw-r--r-- | sys/errno.h | 10 | ||||
-rw-r--r-- | sys/permission.h | 11 | ||||
-rw-r--r-- | sys/syscall.h | 69 | ||||
-rw-r--r-- | sys/types.h | 32 |
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 |