diff options
Diffstat (limited to 'src/library/gc/syscall.c')
-rw-r--r-- | src/library/gc/syscall.c | 68 |
1 files changed, 0 insertions, 68 deletions
diff --git a/src/library/gc/syscall.c b/src/library/gc/syscall.c deleted file mode 100644 index 3100dd7..0000000 --- a/src/library/gc/syscall.c +++ /dev/null @@ -1,68 +0,0 @@ -#include <gc/syscall.h> -#include <gc/mem.h> - -static int call(unsigned a, unsigned b, unsigned c, unsigned d, unsigned e, unsigned f) { - unsigned ret; - asm volatile("int $64" : "=a"(ret) : "a"(a), "b"(b), "c"(c), "d"(d), "S"(e), "D"(f)); - return ret; -} - -void thread_exit() { - call(0, 0, 0, 0, 0, 0); -} - -void schedule() { - call(1, 0, 0,0, 0, 0); -} - -void thread_sleep(int time) { - call(2, time, 0, 0, 0, 0); -} - -void process_exit(int retval) { - call(3, retval, 0, 0, 0, 0); -} - -void printk(char* str) { - call(4, (unsigned)str, 0, 0, 0, 0); -} - -//THREAD CREATION -struct thread_start_data { - void (*entry)(void*); - void *data; - void *stack; -}; -void thread_start(void *data) { - struct thread_start_data *tsd = data; - tsd->entry(tsd->data); - free(tsd->stack); - thread_exit(); -} -void thread_new(void (*entry)(void*), void *data) { - struct thread_start_data *tsd = malloc(sizeof(struct thread_start_data)); - tsd->entry = entry; - tsd->data = data; - tsd->stack = malloc(NEW_STACK_SIZE); - call(5, (unsigned)thread_start, (unsigned)tsd, (unsigned)(tsd->stack + NEW_STACK_SIZE), 0, 0); -} - -void irq_wait(int number) { - call(6, number, 0, 0, 0, 0); -} - -int proc_priv() { - return call(7, 0, 0, 0, 0, 0); -} - -int proc_setheap(size_t start, size_t end) { - return call(8, start, end, 0, 0, 0); -} - -int shm_create(size_t offset, size_t length) { - return call(9, offset, length, 0, 0, 0); -} - -int shm_delete(size_t offset) { - return call(10, offset, 0, 0, 0, 0); -} |