Syscalls now can take six arguments (XCC)
[akaros.git] / kern / include / ros / syscall.h
index b4de63a..abb4d06 100644 (file)
@@ -23,11 +23,12 @@ struct syscall {
 
 #ifndef ROS_KERNEL
 
+/* TODO: make variants of __ros_syscall() based on the number of args (0 - 6) */
 /* These are simple synchronous system calls, built on top of the kernel's async
  * interface.  This version makes no assumptions about errno.  You usually don't
  * want this. */
-static inline long __ros_syscall(long _num, long _a0, long _a1, long _a2,
-                                 long _a3, long _a4, int *errno_loc)
+static inline long __ros_syscall(unsigned int _num, long _a0, long _a1, long _a2,
+                                 long _a3, long _a4, long _a5, int *errno_loc)
 {
        int num_started;
        struct syscall sysc = {0};
@@ -37,8 +38,8 @@ static inline long __ros_syscall(long _num, long _a0, long _a1, long _a2,
        sysc.arg2 = _a2;
        sysc.arg3 = _a3;
        sysc.arg4 = _a4;
-       // TODO: arg5
-       num_started = __ros_arch_syscall(&sysc, 1, 0, 0, 0, 0);
+       sysc.arg5 = _a5;
+       num_started = __ros_arch_syscall(&sysc, 1);
        while (!(sysc.flags & SC_DONE))
                cpu_relax();
        if (errno_loc)
@@ -49,16 +50,16 @@ static inline long __ros_syscall(long _num, long _a0, long _a1, long _a2,
 #include <errno.h>
 
 /* This version knows about errno and will handle it. */
-static inline long __ros_syscall_errno(long _num, long _a0, long _a1, long _a2,
-                                       long _a3, long _a4)
+static inline long __ros_syscall_errno(unsigned int _num, long _a0, long _a1,
+                                       long _a2, long _a3, long _a4, long _a5)
 {
-       return __ros_syscall(_num, _a0, _a1, _a2, _a3, _a4, &errno);
+       return __ros_syscall(_num, _a0, _a1, _a2, _a3, _a4, _a5, &errno);
 }
 
 /* Convenience wrapper for __ros_syscall */
-#define ros_syscall(which,a0,a1,a2,a3,a4) \
+#define ros_syscall(which, a0, a1, a2, a3, a4, a5) \
    __ros_syscall_errno(which, (long)(a0), (long)(a1), (long)(a2), (long)(a3), \
-                       (long)(a4))
+                       (long)(a4), (long)(a5))
 
 #endif /* ifndef ROS_KERNEL */