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