summaryrefslogtreecommitdiff
path: root/src/shared/syscalls.h
diff options
context:
space:
mode:
authordzwdz2021-08-24 16:56:17 +0200
committerdzwdz2021-08-24 16:56:17 +0200
commit31c1536e68399a199a09fa55571fa5bdd92cbef7 (patch)
treeb41d4de2255d7902146081cf61bb16fd2ddcbba5 /src/shared/syscalls.h
parent8625003ed7f688a62988f03cc6987574b9d591d2 (diff)
move syscalls.h to shared/syscalls.h
Diffstat (limited to 'src/shared/syscalls.h')
-rw-r--r--src/shared/syscalls.h42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/shared/syscalls.h b/src/shared/syscalls.h
new file mode 100644
index 0000000..89907ae
--- /dev/null
+++ b/src/shared/syscalls.h
@@ -0,0 +1,42 @@
+#pragma once
+#include <stddef.h>
+
+typedef int fd_t;
+typedef int fs_handle_t;
+
+enum {
+ // idc about stable syscall numbers just yet
+ _SYSCALL_EXIT,
+ _SYSCALL_AWAIT,
+ _SYSCALL_FORK,
+
+ _SYSCALL_FS_OPEN,
+ _SYSCALL_MOUNT,
+
+ _SYSCALL_FD_READ,
+ _SYSCALL_FD_WRITE,
+ _SYSCALL_FD_CLOSE,
+};
+
+/** Kills the current process.
+ * TODO: what happens to the children?
+ */
+_Noreturn void _syscall_exit(const char *msg, size_t len);
+
+/** Waits for a child to exit, putting its exit message into *buf.
+ * @return the length of the message
+ */
+int _syscall_await(char *buf, int len);
+
+/** Creates a copy of the current process, and executes it.
+ * All user memory pages get copied too.
+ * @return 0 in the child, a meaningless positive value in the parent.
+ */
+int _syscall_fork();
+
+fd_t _syscall_fs_open(const char *path, int len);
+int _syscall_mount(const char *path, int len, fd_t fd);
+
+int _syscall_fd_read(fd_t fd, char *buf, int len);
+int _syscall_fd_write(fd_t fd, char *buf, int len);
+int _syscall_fd_close(fd_t fd);