More addition to arsc infrastructure.
[akaros.git] / kern / include / ros / ring_syscall.h
1 #ifndef _ROS_RING_SYSCALL_H
2 #define _ROS_RING_SYSCALL_H
3
4 #include <ros/common.h>
5 #include <ros/ring_buffer.h>
6
7 #define NUM_SYSCALL_ARGS 6
8 /* This will need to change to represent sending pointers to syscalls, not the
9  * syscalls themselves */
10
11 typedef enum {
12         RES_free,  // The response has been digested by the user space, can be reallocated
13         REQ_alloc, // Space fo request is allocated
14         REQ_ready, // The request is populated by the caller
15         REQ_processing, // The request is being processed, 
16                                         // or a kernel thread is going to pick up the stack to process this later.
17
18         RES_ready // The response is ready to be picked up
19 } syscall_status_t;
20 typedef struct syscall_req {
21     syscall_status_t status;
22         void (*cleanup)(void* data);
23         void *data;
24     uint32_t num;
25     uint32_t args[NUM_SYSCALL_ARGS];
26 } syscall_req_t;
27
28 typedef struct syscall_rsp {
29         syscall_status_t status;
30         void (*cleanup)(void* data);
31         void *data;
32         uint32_t retval;
33         uint32_t syserr;
34 } syscall_rsp_t;
35
36
37
38 // Generic Syscall Ring Buffer
39 #define SYSCALLRINGSIZE    PGSIZE
40 DEFINE_RING_TYPES(syscall, syscall_req_t, syscall_rsp_t);
41
42 #endif