summaryrefslogtreecommitdiffstats
path: root/sys/syscall.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/syscall.h')
-rw-r--r--sys/syscall.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/sys/syscall.h b/sys/syscall.h
new file mode 100644
index 0000000..efd3f64
--- /dev/null
+++ b/sys/syscall.h
@@ -0,0 +1,43 @@
+#ifndef _JOVE_SYS_SYSCALL_H
+#define _JOVE_SYS_SYSCALL_H 1
+
+#include "hal/obj.h"
+#include <stdint.h>
+
+struct syscall_header
+{
+ uint16_t callid;
+ uint16_t pathlen;
+ uint16_t path[];
+};
+
+typedef int (*syscall_handle_t)(
+ jove_owned_obj_t*, //PCB object
+ jove_owned_obj_t*, //Objdir object
+ jove_owned_obj_t*, //Message object
+ jove_owned_obj_t*, //Target object
+ struct syscall_header*, //Syscall header
+ size_t, //How many bytes are left in the message
+ void*); //The bytes left in the message.
+
+int
+_syscall_handle_generic(
+ jove_owned_obj_t *pcb_obj,
+ jove_owned_obj_t *objdir,
+ jove_owned_obj_t *message_obj,
+ jove_owned_obj_t *target_obj,
+ struct syscall_header *header,
+ size_t bytes_left,
+ void *payload);
+
+int
+syscall_handle_arch(
+ jove_owned_obj_t *pcb_obj,
+ jove_owned_obj_t *objdir,
+ jove_owned_obj_t *message_obj,
+ jove_owned_obj_t *target_obj,
+ struct syscall_header *header,
+ size_t bytes_left,
+ void *payload);
+
+#endif