summaryrefslogtreecommitdiff
path: root/src/user/lib/tce/syscall.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/user/lib/tce/syscall.c')
-rw-r--r--src/user/lib/tce/syscall.c48
1 files changed, 37 insertions, 11 deletions
diff --git a/src/user/lib/tce/syscall.c b/src/user/lib/tce/syscall.c
index f9243b0..b779bb6 100644
--- a/src/user/lib/tce/syscall.c
+++ b/src/user/lib/tce/syscall.c
@@ -1,4 +1,5 @@
#include <tce/syscall.h>
+#include <tce/Object.h>
#include <stdlib.h>
#include <sched.h>
@@ -8,24 +9,26 @@ static size_t call(size_t a, size_t b, size_t c, size_t d, size_t e, size_t f) {
return ret;
}
+// Standard syscalls
+
void thread_exit() {
- call(0, 0, 0, 0, 0, 0);
+ call(0, 1, 0, 0, 0, 0);
}
void schedule() {
- call(1, 0, 0,0, 0, 0);
+ call(0, 2, 0,0, 0, 0);
}
void thread_sleep(int time) {
- call(2, time, 0, 0, 0, 0);
+ call(0, 3, time, 0, 0, 0);
}
void process_exit(int retval) {
- call(3, retval, 0, 0, 0, 0);
+ call(0, 4, retval, 0, 0, 0);
}
void printk(char* str) {
- call(4, (unsigned)str, 0, 0, 0, 0);
+ call(0, 5, (unsigned)str, 0, 0, 0);
}
//THREAD CREATION
@@ -44,28 +47,51 @@ void thread_start(void *data) {
if (_stack_to_free != 0) free(_stack_to_free);
_stack_to_free = tsd->stack;
asm volatile("movl %0, (_stack_freeing_mutex); int $64;" ::
- "a"(0), "r"(MUTEX_UNLOCKED));
+ "a"(0), "b"(1), "r"(MUTEX_UNLOCKED));
}
+
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);
+ call(0, 6, (unsigned)thread_start, (unsigned)tsd, (unsigned)(tsd->stack + NEW_STACK_SIZE), 0);
}
void irq_wait(int number) {
- call(6, number, 0, 0, 0, 0);
+ call(0, 7, number, 0, 0, 0);
}
int proc_priv() {
- return call(7, 0, 0, 0, 0, 0);
+ return call(0, 8, 0, 0, 0, 0);
}
void* sbrk(size_t s) {
- return (void*)call(8, s, 0, 0, 0, 0);
+ return (void*)call(0, 9, s, 0, 0, 0);
}
void brk(void* ptr) {
- return call (9, ptr, 0, 0, 0, 0);
+ return call (0, 10, ptr, 0, 0, 0);
+}
+
+// Has to do with objects
+
+Object open(char* name) {
+ return call(0, 20, name, 0, 0, 0);
+}
+
+Object open_relative(char* name, Object parent) {
+ return call(0, 21, name, parent, 0, 0);
+}
+
+void close(Object o) {
+ call(0, 22, o, 0, 0, 0);
+}
+
+int get_methods(char *iface, int* whereto) {
+ call(0, 23, iface, whereto, 0, 0);
+}
+
+int Call(int method, Object object, size_t a, size_t b, size_t c, size_t d) {
+ return call(object, method, a, b, c, d);
}