6ba4d7c7631bc6c8b64f6eb8ad11a95d90248cb1
[akaros.git] / inc / syscall.h
1 #ifndef ROS_INC_SYSCALL_H
2 #define ROS_INC_SYSCALL_H
3
4 #include <inc/types.h>
5 #include <inc/ring_buffer.h>
6
7 /* system call numbers */
8 enum
9 {
10         SYS_null = 1,
11         SYS_cputs,
12         SYS_cgetc,
13         SYS_getenvid,
14         SYS_env_destroy,
15 };
16 #define NSYSCALLS (SYS_env_destroy)
17 // syscall number starts at 1 and goes up to NSYSCALLS, without holes.
18 #define INVALID_SYSCALL(syscallno) ((syscallno) > NSYSCALLS)
19
20 #define NUM_SYS_ARGS 6
21 typedef struct SyscallRequest {
22         uint32_t num;
23         uint32_t flags;
24         uint32_t args[NUM_SYS_ARGS];
25 } syscall_req_t;
26
27 typedef struct SyscallResponse {
28         int32_t retval;
29 } syscall_rsp_t;
30
31 // Generic Syscall Ring Buffer
32 DEFINE_RING_TYPES(syscall, syscall_req_t, syscall_rsp_t);
33
34 typedef struct SyscallRespDesc {
35         syscall_front_ring_t* sysfr;
36         uint32_t idx;
37 } syscall_desc_t;
38
39 #endif /* !ROS_INC_SYSCALL_H */