Merge branch 'net-dev'. See body of commit for details.
[akaros.git] / kern / include / ros / syscall.h
1 #ifndef ROS_INCLUDE_SYSCALL_H
2 #define ROS_INCLUDE_SYSCALL_H
3
4 #include <ros/common.h>
5 #include <ros/ring_buffer.h>
6
7 /* system call numbers */
8 enum
9 {
10         SYS_begofcalls, //Should always be first
11
12         SYS_null,
13         SYS_cache_buster,
14         SYS_cache_invalidate,
15         SYS_cputs,
16         SYS_cgetc,
17         SYS_getcpuid,
18
19         // The next 3 syscalls go with the experimental network
20         // driver. These syscalls are used by newlib_backend /
21         // our remote binary loader to pull data from / put data
22         // into a buffer managed by the network driver.
23         // These should go away as things mature. 
24         SYS_eth_read,
25         SYS_eth_write,
26         SYS_run_binary,
27         // End of extra network syscalls
28
29         SYS_getpid,
30         SYS_proc_destroy,
31         SYS_shared_page_alloc,
32         SYS_shared_page_free,
33         SYS_yield,
34         SYS_proc_create,
35         SYS_proc_run,
36
37         SYS_mmap,
38         SYS_brk,
39         /*
40         SYS_mprotect,
41         SYS_mremap,
42         SYS_mincore, // can read page tables instead
43         SYS_madvise,
44         SYS_mlock,
45         SYS_msync,
46         */
47
48         SYS_serial_write,
49         SYS_serial_read,
50         SYS_frontend,           // forward a syscall to front-end machine
51
52         SYS_endofcalls //Should always be last
53 };
54 #define NSYSCALLS (SYS_endofcalls -1)
55 // syscall number starts at 1 and goes up to NSYSCALLS, without holes.
56 #define INVALID_SYSCALL(syscallno) ((syscallno) > NSYSCALLS)
57
58 /* For Buster Measurement Flags */
59 #define BUSTER_SHARED                   0x0001
60 #define BUSTER_STRIDED                  0x0002
61 #define BUSTER_LOCKED                   0x0004
62 #define BUSTER_PRINT_TICKS              0x0008
63 #define BUSTER_JUST_LOCKS               0x0010 // unimplemented
64
65 #define NUM_SYSCALL_ARGS 6
66 typedef struct syscall_req {
67         uint32_t num;
68         uint32_t flags;
69         uint32_t args[NUM_SYSCALL_ARGS];
70 } syscall_req_t;
71
72 typedef struct syscall_rsp {
73         int32_t retval;
74 } syscall_rsp_t;
75
76 // Generic Syscall Ring Buffer
77 #define SYSCALLRINGSIZE    PGSIZE
78 //DEFINE_RING_TYPES_WITH_SIZE(syscall, syscall_req_t, syscall_rsp_t, SYSCALLRINGSIZE);
79 DEFINE_RING_TYPES(syscall, syscall_req_t, syscall_rsp_t);
80
81 #endif /* !ROS_INCLUDE_SYSCALL_H */