-#include <sys/interrupts.h>
-#include <lunaix/isrm.h>
#include <lunaix/process.h>
-#include <lunaix/sched.h>
-#include <lunaix/syscall.h>
-#include <lunaix/syslog.h>
+#include <lunaix/kpreempt.h>
-LOG_MODULE("SYSCALL")
+typedef reg_t (*syscall_fn)(reg_t p1, reg_t p2, reg_t p3, reg_t p4, reg_t p5);
-extern void
-syscall_hndlr(const isr_param* param);
-
-void
-syscall_install()
+reg_t
+dispatch_syscall(void* syscall_fnptr,
+ reg_t p1, reg_t p2, reg_t p3, reg_t p4, reg_t p5)
{
- isrm_bindiv(LUNAIX_SYS_CALL, syscall_hndlr);
+ reg_t ret_val;
+
+ thread_stats_update_entering(true);
+
+ set_preemption();
+ ret_val = ((syscall_fn)syscall_fnptr)(p1, p2, p3, p4, p5);
+ no_preemption();
+
+ return ret_val;
}
\ No newline at end of file