Pipes (XCC)
[akaros.git] / kern / include / ros / ring_syscall.h
index 6fd2e8a..3689a39 100644 (file)
@@ -5,21 +5,31 @@
 #include <ros/ring_buffer.h>
 
 #define NUM_SYSCALL_ARGS 6
+/* This will need to change to represent sending pointers to syscalls, not the
+ * syscalls themselves */
+struct syscall;
+typedef enum {
+       RES_free,  // The response has been digested by the user space, can be reallocated
+       REQ_alloc, // Space fo request is allocated
+       REQ_ready, // The request is populated by the caller
+       REQ_processing, // The request is being processed, 
+                                       // or a kernel thread is going to pick up the stack to process this later.
+
+       RES_ready // The response is ready to be picked up
+} syscall_status_t;
+
 typedef struct syscall_req {
-        uint32_t num;
-        uint32_t flags;
-        uint32_t args[NUM_SYSCALL_ARGS];
-} syscall_req_t;
+    syscall_status_t status; // TODO:rethink this
+       void (*cleanup)(void* data);
+       void *data;
+       struct syscall* sc;
+} syscall_req_t, syscall_rsp_t;
 
-typedef struct syscall_rsp {
-        uint32_t retval;
-               uint32_t errno;
-} syscall_rsp_t;
+#define RSP_ERRNO(rsp) (rsp->sc->err)
+#define RSP_RESULT(rsp) (rsp->sc->retval)
 
 // Generic Syscall Ring Buffer
 #define SYSCALLRINGSIZE    PGSIZE
-//DEFINE_RING_TYPES_WITH_SIZE(syscall, syscall_req_t, syscall_rsp_t,
-//SYSCALLRINGSIZE);
 DEFINE_RING_TYPES(syscall, syscall_req_t, syscall_rsp_t);
 
 #endif