1 
2 #include <stdbool.h>
3 #include <stdint.h>
4 
5 #include <sys/syscall.h>
6 #include <syscall.h>
7 
8 uint64_t syscall(int num, ...);
9 
10 uint64_t
OSTime()11 OSTime()
12 {
13     return syscall(SYSCALL_TIME);
14 }
15 
16 void
OSExit(int status)17 OSExit(int status)
18 {
19     syscall(SYSCALL_EXIT, status);
20 }
21 
22 uint64_t
OSGetPID()23 OSGetPID()
24 {
25     return syscall(SYSCALL_GETPID);
26 }
27 
28 uint64_t
OSSpawn(const char * path,const char * argv[])29 OSSpawn(const char *path, const char *argv[])
30 {
31     return syscall(SYSCALL_SPAWN, path, argv);
32 }
33 
34 uint64_t
OSWait(uint64_t pid)35 OSWait(uint64_t pid)
36 {
37     return syscall(SYSCALL_WAIT, pid);
38 }
39 
40 void *
OSMemMap(void * addr,uint64_t len,int flags)41 OSMemMap(void *addr, uint64_t len, int flags)
42 {
43     return (void *)syscall(SYSCALL_MMAP, addr, len, flags);
44 }
45 
46 int
OSMemUnmap(void * addr,uint64_t len)47 OSMemUnmap(void *addr, uint64_t len)
48 {
49     return syscall(SYSCALL_MUNMAP, addr, len);
50 }
51 
52 int
OSMemProtect(void * addr,uint64_t len,int flags)53 OSMemProtect(void *addr, uint64_t len, int flags)
54 {
55     return syscall(SYSCALL_MPROTECT, addr, len, flags);
56 }
57 
58 int
OSRead(uint64_t fd,void * addr,uint64_t off,uint64_t length)59 OSRead(uint64_t fd, void *addr, uint64_t off, uint64_t length)
60 {
61     return syscall(SYSCALL_READ, fd, addr, off, length);
62 }
63 
64 int
OSWrite(uint64_t fd,const void * addr,uint64_t off,uint64_t length)65 OSWrite(uint64_t fd, const void *addr, uint64_t off, uint64_t length)
66 {
67     return syscall(SYSCALL_WRITE, fd, addr, off, length);
68 }
69 
70 int
OSFlush(uint64_t fd)71 OSFlush(uint64_t fd)
72 {
73     return syscall(SYSCALL_FLUSH, fd);
74 }
75 
76 uint64_t
OSOpen(const char * path,uint64_t flags)77 OSOpen(const char *path, uint64_t flags)
78 {
79     return syscall(SYSCALL_OPEN, path, flags);
80 }
81 
82 int
OSClose(uint64_t fd)83 OSClose(uint64_t fd)
84 {
85     return syscall(SYSCALL_CLOSE, fd);
86 }
87 
88 int
OSStat(const char * path,struct stat * sb)89 OSStat(const char *path, struct stat *sb)
90 {
91     return syscall(SYSCALL_STAT, path, sb);
92 }
93 
94 int
OSReadDir(uint64_t fd,char * buf,size_t length,uint64_t * offset)95 OSReadDir(uint64_t fd, char *buf, size_t length, uint64_t *offset)
96 {
97     return syscall(SYSCALL_READDIR, fd, buf, length, offset);
98 }
99 
100 int
OSPipe(uint64_t fd[2])101 OSPipe(uint64_t fd[2])
102 {
103     return syscall(SYSCALL_PIPE, &fd[0]);
104 }
105 
106 int
OSThreadCreate(uint64_t rip,uint64_t arg)107 OSThreadCreate(uint64_t rip, uint64_t arg)
108 {
109     return syscall(SYSCALL_THREADCREATE, rip, arg);
110 }
111 
112 int
OSGetTID()113 OSGetTID()
114 {
115     return syscall(SYSCALL_GETTID);
116 }
117 
118 int
OSThreadExit(uint64_t status)119 OSThreadExit(uint64_t status)
120 {
121     return syscall(SYSCALL_THREADEXIT, status);
122 }
123 
124 int
OSThreadSleep(uint64_t time)125 OSThreadSleep(uint64_t time)
126 {
127     return syscall(SYSCALL_THREADSLEEP, time);
128 }
129 
130 int
OSThreadWait(uint64_t tid)131 OSThreadWait(uint64_t tid)
132 {
133     return syscall(SYSCALL_THREADWAIT, tid);
134 }
135 
136 int
OSNICStat(uint64_t nicNo,NIC * nic)137 OSNICStat(uint64_t nicNo, NIC *nic)
138 {
139     return syscall(SYSCALL_NICSTAT, nicNo, nic);
140 }
141 
142 int
OSNICSend(uint64_t nicNo,MBuf * mbuf)143 OSNICSend(uint64_t nicNo, MBuf *mbuf)
144 {
145     return syscall(SYSCALL_NICSEND, nicNo, mbuf);
146 }
147 
148 int
OSNICRecv(uint64_t nicNo,MBuf * mbuf)149 OSNICRecv(uint64_t nicNo, MBuf *mbuf)
150 {
151     return syscall(SYSCALL_NICRECV, nicNo, mbuf);
152 }
153 
154 int
OSSysCtl(const char * node,void * oldvar,void * newvar)155 OSSysCtl(const char *node, void *oldvar, void *newvar)
156 {
157     return syscall(SYSCALL_SYSCTL, node, oldvar, newvar);
158 }
159 
160 int
OSFSMount(const char * mntpt,const char * device,uint64_t flags)161 OSFSMount(const char *mntpt, const char *device, uint64_t flags)
162 {
163     return syscall(SYSCALL_FSMOUNT, mntpt, device, flags);
164 }
165 
166 int
OSFSUnmount(const char * mntpt)167 OSFSUnmount(const char *mntpt)
168 {
169     return syscall(SYSCALL_FSUNMOUNT, mntpt);
170 }
171 
172 int
OSFSInfo(struct statfs * info,uint64_t max)173 OSFSInfo(struct statfs *info, uint64_t max)
174 {
175     return syscall(SYSCALL_FSINFO, info, max);
176 }
177 
178