1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License.  See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Copyright (C) 1995, 96, 97, 98, 99, 2000 by Ralf Baechle
7 * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
8 *
9 * Changed system calls macros _syscall5 - _syscall7 to push args 5 to 7 onto
10 * the stack. Robin Farine for ACN S.A, Copyright (C) 1996 by ACN S.A
11 */
12#ifndef _ASM_UNISTD_H
13#define _ASM_UNISTD_H
14
15/*
16 * Linux o32 style syscalls are in the range from 4000 to 4999.
17 */
18#define __NR_O32_Linux			4000
19#define __NR_O32_syscall		(__NR_O32_Linux +   0)
20#define __NR_O32_exit			(__NR_O32_Linux +   1)
21#define __NR_O32_fork			(__NR_O32_Linux +   2)
22#define __NR_O32_read			(__NR_O32_Linux +   3)
23#define __NR_O32_write			(__NR_O32_Linux +   4)
24#define __NR_O32_open			(__NR_O32_Linux +   5)
25#define __NR_O32_close			(__NR_O32_Linux +   6)
26#define __NR_O32_waitpid		(__NR_O32_Linux +   7)
27#define __NR_O32_creat			(__NR_O32_Linux +   8)
28#define __NR_O32_link			(__NR_O32_Linux +   9)
29#define __NR_O32_unlink			(__NR_O32_Linux +  10)
30#define __NR_O32_execve			(__NR_O32_Linux +  11)
31#define __NR_O32_chdir			(__NR_O32_Linux +  12)
32#define __NR_O32_time			(__NR_O32_Linux +  13)
33#define __NR_O32_mknod			(__NR_O32_Linux +  14)
34#define __NR_O32_chmod			(__NR_O32_Linux +  15)
35#define __NR_O32_lchown			(__NR_O32_Linux +  16)
36#define __NR_O32_break			(__NR_O32_Linux +  17)
37#define __NR_O32_unused18		(__NR_O32_Linux +  18)
38#define __NR_O32_lseek			(__NR_O32_Linux +  19)
39#define __NR_O32_getpid			(__NR_O32_Linux +  20)
40#define __NR_O32_mount			(__NR_O32_Linux +  21)
41#define __NR_O32_umount			(__NR_O32_Linux +  22)
42#define __NR_O32_setuid			(__NR_O32_Linux +  23)
43#define __NR_O32_getuid			(__NR_O32_Linux +  24)
44#define __NR_O32_stime			(__NR_O32_Linux +  25)
45#define __NR_O32_ptrace			(__NR_O32_Linux +  26)
46#define __NR_O32_alarm			(__NR_O32_Linux +  27)
47#define __NR_O32_unused28		(__NR_O32_Linux +  28)
48#define __NR_O32_pause			(__NR_O32_Linux +  29)
49#define __NR_O32_utime			(__NR_O32_Linux +  30)
50#define __NR_O32_stty			(__NR_O32_Linux +  31)
51#define __NR_O32_gtty			(__NR_O32_Linux +  32)
52#define __NR_O32_access			(__NR_O32_Linux +  33)
53#define __NR_O32_nice			(__NR_O32_Linux +  34)
54#define __NR_O32_ftime			(__NR_O32_Linux +  35)
55#define __NR_O32_sync			(__NR_O32_Linux +  36)
56#define __NR_O32_kill			(__NR_O32_Linux +  37)
57#define __NR_O32_rename			(__NR_O32_Linux +  38)
58#define __NR_O32_mkdir			(__NR_O32_Linux +  39)
59#define __NR_O32_rmdir			(__NR_O32_Linux +  40)
60#define __NR_O32_dup			(__NR_O32_Linux +  41)
61#define __NR_O32_pipe			(__NR_O32_Linux +  42)
62#define __NR_O32_times			(__NR_O32_Linux +  43)
63#define __NR_O32_prof			(__NR_O32_Linux +  44)
64#define __NR_O32_brk			(__NR_O32_Linux +  45)
65#define __NR_O32_setgid			(__NR_O32_Linux +  46)
66#define __NR_O32_getgid			(__NR_O32_Linux +  47)
67#define __NR_O32_signal			(__NR_O32_Linux +  48)
68#define __NR_O32_geteuid		(__NR_O32_Linux +  49)
69#define __NR_O32_getegid		(__NR_O32_Linux +  50)
70#define __NR_O32_acct			(__NR_O32_Linux +  51)
71#define __NR_O32_umount2		(__NR_O32_Linux +  52)
72#define __NR_O32_lock			(__NR_O32_Linux +  53)
73#define __NR_O32_ioctl			(__NR_O32_Linux +  54)
74#define __NR_O32_fcntl			(__NR_O32_Linux +  55)
75#define __NR_O32_mpx			(__NR_O32_Linux +  56)
76#define __NR_O32_setpgid		(__NR_O32_Linux +  57)
77#define __NR_O32_ulimit			(__NR_O32_Linux +  58)
78#define __NR_O32_unused59		(__NR_O32_Linux +  59)
79#define __NR_O32_umask			(__NR_O32_Linux +  60)
80#define __NR_O32_chroot			(__NR_O32_Linux +  61)
81#define __NR_O32_ustat			(__NR_O32_Linux +  62)
82#define __NR_O32_dup2			(__NR_O32_Linux +  63)
83#define __NR_O32_getppid		(__NR_O32_Linux +  64)
84#define __NR_O32_getpgrp		(__NR_O32_Linux +  65)
85#define __NR_O32_setsid			(__NR_O32_Linux +  66)
86#define __NR_O32_sigaction		(__NR_O32_Linux +  67)
87#define __NR_O32_sgetmask		(__NR_O32_Linux +  68)
88#define __NR_O32_ssetmask		(__NR_O32_Linux +  69)
89#define __NR_O32_setreuid		(__NR_O32_Linux +  70)
90#define __NR_O32_setregid		(__NR_O32_Linux +  71)
91#define __NR_O32_sigsuspend		(__NR_O32_Linux +  72)
92#define __NR_O32_sigpending		(__NR_O32_Linux +  73)
93#define __NR_O32_sethostname		(__NR_O32_Linux +  74)
94#define __NR_O32_setrlimit		(__NR_O32_Linux +  75)
95#define __NR_O32_getrlimit		(__NR_O32_Linux +  76)
96#define __NR_O32_getrusage		(__NR_O32_Linux +  77)
97#define __NR_O32_gettimeofday		(__NR_O32_Linux +  78)
98#define __NR_O32_settimeofday		(__NR_O32_Linux +  79)
99#define __NR_O32_getgroups		(__NR_O32_Linux +  80)
100#define __NR_O32_setgroups		(__NR_O32_Linux +  81)
101#define __NR_O32_reserved82		(__NR_O32_Linux +  82)
102#define __NR_O32_symlink		(__NR_O32_Linux +  83)
103#define __NR_O32_unused84		(__NR_O32_Linux +  84)
104#define __NR_O32_readlink		(__NR_O32_Linux +  85)
105#define __NR_O32_uselib			(__NR_O32_Linux +  86)
106#define __NR_O32_swapon			(__NR_O32_Linux +  87)
107#define __NR_O32_reboot			(__NR_O32_Linux +  88)
108#define __NR_O32_readdir		(__NR_O32_Linux +  89)
109#define __NR_O32_mmap			(__NR_O32_Linux +  90)
110#define __NR_O32_munmap			(__NR_O32_Linux +  91)
111#define __NR_O32_truncate		(__NR_O32_Linux +  92)
112#define __NR_O32_ftruncate		(__NR_O32_Linux +  93)
113#define __NR_O32_fchmod			(__NR_O32_Linux +  94)
114#define __NR_O32_fchown			(__NR_O32_Linux +  95)
115#define __NR_O32_getpriority		(__NR_O32_Linux +  96)
116#define __NR_O32_setpriority		(__NR_O32_Linux +  97)
117#define __NR_O32_profil			(__NR_O32_Linux +  98)
118#define __NR_O32_statfs			(__NR_O32_Linux +  99)
119#define __NR_O32_fstatfs		(__NR_O32_Linux + 100)
120#define __NR_O32_ioperm			(__NR_O32_Linux + 101)
121#define __NR_O32_socketcall		(__NR_O32_Linux + 102)
122#define __NR_O32_syslog			(__NR_O32_Linux + 103)
123#define __NR_O32_setitimer		(__NR_O32_Linux + 104)
124#define __NR_O32_getitimer		(__NR_O32_Linux + 105)
125#define __NR_O32_stat			(__NR_O32_Linux + 106)
126#define __NR_O32_lstat			(__NR_O32_Linux + 107)
127#define __NR_O32_fstat			(__NR_O32_Linux + 108)
128#define __NR_O32_unused109		(__NR_O32_Linux + 109)
129#define __NR_O32_iopl			(__NR_O32_Linux + 110)
130#define __NR_O32_vhangup		(__NR_O32_Linux + 111)
131#define __NR_O32_idle			(__NR_O32_Linux + 112)
132#define __NR_O32_vm86			(__NR_O32_Linux + 113)
133#define __NR_O32_wait4			(__NR_O32_Linux + 114)
134#define __NR_O32_swapoff		(__NR_O32_Linux + 115)
135#define __NR_O32_sysinfo		(__NR_O32_Linux + 116)
136#define __NR_O32_ipc			(__NR_O32_Linux + 117)
137#define __NR_O32_fsync			(__NR_O32_Linux + 118)
138#define __NR_O32_sigreturn		(__NR_O32_Linux + 119)
139#define __NR_O32_clone			(__NR_O32_Linux + 120)
140#define __NR_O32_setdomainname		(__NR_O32_Linux + 121)
141#define __NR_O32_uname			(__NR_O32_Linux + 122)
142#define __NR_O32_modify_ldt		(__NR_O32_Linux + 123)
143#define __NR_O32_adjtimex		(__NR_O32_Linux + 124)
144#define __NR_O32_mprotect		(__NR_O32_Linux + 125)
145#define __NR_O32_sigprocmask		(__NR_O32_Linux + 126)
146#define __NR_O32_create_module		(__NR_O32_Linux + 127)
147#define __NR_O32_init_module		(__NR_O32_Linux + 128)
148#define __NR_O32_delete_module		(__NR_O32_Linux + 129)
149#define __NR_O32_get_kernel_syms	(__NR_O32_Linux + 130)
150#define __NR_O32_quotactl		(__NR_O32_Linux + 131)
151#define __NR_O32_getpgid		(__NR_O32_Linux + 132)
152#define __NR_O32_fchdir			(__NR_O32_Linux + 133)
153#define __NR_O32_bdflush		(__NR_O32_Linux + 134)
154#define __NR_O32_sysfs			(__NR_O32_Linux + 135)
155#define __NR_O32_personality		(__NR_O32_Linux + 136)
156#define __NR_O32_afs_syscall		(__NR_O32_Linux + 137) /* Syscall for Andrew File System */
157#define __NR_O32_setfsuid		(__NR_O32_Linux + 138)
158#define __NR_O32_setfsgid		(__NR_O32_Linux + 139)
159#define __NR_O32__llseek		(__NR_O32_Linux + 140)
160#define __NR_O32_getdents		(__NR_O32_Linux + 141)
161#define __NR_O32__newselect		(__NR_O32_Linux + 142)
162#define __NR_O32_flock			(__NR_O32_Linux + 143)
163#define __NR_O32_msync			(__NR_O32_Linux + 144)
164#define __NR_O32_readv			(__NR_O32_Linux + 145)
165#define __NR_O32_writev			(__NR_O32_Linux + 146)
166#define __NR_O32_cacheflush		(__NR_O32_Linux + 147)
167#define __NR_O32_cachectl		(__NR_O32_Linux + 148)
168#define __NR_O32_sysmips		(__NR_O32_Linux + 149)
169#define __NR_O32_unused150		(__NR_O32_Linux + 150)
170#define __NR_O32_getsid			(__NR_O32_Linux + 151)
171#define __NR_O32_fdatasync		(__NR_O32_Linux + 152)
172#define __NR_O32__sysctl		(__NR_O32_Linux + 153)
173#define __NR_O32_mlock			(__NR_O32_Linux + 154)
174#define __NR_O32_munlock		(__NR_O32_Linux + 155)
175#define __NR_O32_mlockall		(__NR_O32_Linux + 156)
176#define __NR_O32_munlockall		(__NR_O32_Linux + 157)
177#define __NR_O32_sched_setparam		(__NR_O32_Linux + 158)
178#define __NR_O32_sched_getparam		(__NR_O32_Linux + 159)
179#define __NR_O32_sched_setscheduler	(__NR_O32_Linux + 160)
180#define __NR_O32_sched_getscheduler	(__NR_O32_Linux + 161)
181#define __NR_O32_sched_yield		(__NR_O32_Linux + 162)
182#define __NR_O32_sched_get_priority_max	(__NR_O32_Linux + 163)
183#define __NR_O32_sched_get_priority_min	(__NR_O32_Linux + 164)
184#define __NR_O32_sched_rr_get_interval	(__NR_O32_Linux + 165)
185#define __NR_O32_nanosleep		(__NR_O32_Linux + 166)
186#define __NR_O32_mremap			(__NR_O32_Linux + 167)
187#define __NR_O32_accept			(__NR_O32_Linux + 168)
188#define __NR_O32_bind			(__NR_O32_Linux + 169)
189#define __NR_O32_connect		(__NR_O32_Linux + 170)
190#define __NR_O32_getpeername		(__NR_O32_Linux + 171)
191#define __NR_O32_getsockname		(__NR_O32_Linux + 172)
192#define __NR_O32_getsockopt		(__NR_O32_Linux + 173)
193#define __NR_O32_listen			(__NR_O32_Linux + 174)
194#define __NR_O32_recv			(__NR_O32_Linux + 175)
195#define __NR_O32_recvfrom		(__NR_O32_Linux + 176)
196#define __NR_O32_recvmsg		(__NR_O32_Linux + 177)
197#define __NR_O32_send			(__NR_O32_Linux + 178)
198#define __NR_O32_sendmsg		(__NR_O32_Linux + 179)
199#define __NR_O32_sendto			(__NR_O32_Linux + 180)
200#define __NR_O32_setsockopt		(__NR_O32_Linux + 181)
201#define __NR_O32_shutdown		(__NR_O32_Linux + 182)
202#define __NR_O32_socket			(__NR_O32_Linux + 183)
203#define __NR_O32_socketpair		(__NR_O32_Linux + 184)
204#define __NR_O32_setresuid		(__NR_O32_Linux + 185)
205#define __NR_O32_getresuid		(__NR_O32_Linux + 186)
206#define __NR_O32_query_module		(__NR_O32_Linux + 187)
207#define __NR_O32_poll			(__NR_O32_Linux + 188)
208#define __NR_O32_nfsservctl		(__NR_O32_Linux + 189)
209#define __NR_O32_setresgid		(__NR_O32_Linux + 190)
210#define __NR_O32_getresgid		(__NR_O32_Linux + 191)
211#define __NR_O32_prctl			(__NR_O32_Linux + 192)
212#define __NR_O32_rt_sigreturn		(__NR_O32_Linux + 193)
213#define __NR_O32_rt_sigaction		(__NR_O32_Linux + 194)
214#define __NR_O32_rt_sigprocmask		(__NR_O32_Linux + 195)
215#define __NR_O32_rt_sigpending		(__NR_O32_Linux + 196)
216#define __NR_O32_rt_sigtimedwait	(__NR_O32_Linux + 197)
217#define __NR_O32_rt_sigqueueinfo	(__NR_O32_Linux + 198)
218#define __NR_O32_rt_sigsuspend		(__NR_O32_Linux + 199)
219#define __NR_O32_pread			(__NR_O32_Linux + 200)
220#define __NR_O32_pwrite			(__NR_O32_Linux + 201)
221#define __NR_O32_chown			(__NR_O32_Linux + 202)
222#define __NR_O32_getcwd			(__NR_O32_Linux + 203)
223#define __NR_O32_capget			(__NR_O32_Linux + 204)
224#define __NR_O32_capset			(__NR_O32_Linux + 205)
225#define __NR_O32_sigaltstack		(__NR_O32_Linux + 206)
226#define __NR_O32_sendfile		(__NR_O32_Linux + 207)
227#define __NR_O32_getpmsg		(__NR_O32_Linux + 208)
228#define __NR_O32_putpmsg		(__NR_O32_Linux + 209)
229#define __NR_O32_mmap2			(__NR_O32_Linux + 210)
230#define __NR_O32_truncate64		(__NR_O32_Linux + 211)
231#define __NR_O32_ftruncate64		(__NR_O32_Linux + 212)
232#define __NR_O32_stat64			(__NR_O32_Linux + 213)
233#define __NR_O32_lstat64		(__NR_O32_Linux + 214)
234#define __NR_O32_fstat64		(__NR_O32_Linux + 215)
235#define __NR_O32_root_pivot		(__NR_O32_Linux + 216)
236#define __NR_O32_mincore		(__NR_O32_Linux + 217)
237#define __NR_O32_madvise		(__NR_O32_Linux + 218)
238#define __NR_O32_getdents64		(__NR_O32_Linux + 219)
239#define __NR_O32_fcntl64		(__NR_O32_Linux + 220)
240#define __NR_O32_security		(__NR_O32_Linux + 221)
241#define __NR_O32_gettid			(__NR_O32_Linux + 222)
242#define __NR_O32_readahead		(__NR_O32_Linux + 223)
243#define __NR_O32_setxattr		(__NR_O32_Linux + 224)
244#define __NR_O32_lsetxattr		(__NR_O32_Linux + 225)
245#define __NR_O32_fsetxattr		(__NR_O32_Linux + 226)
246#define __NR_O32_getxattr		(__NR_O32_Linux + 227)
247#define __NR_O32_lgetxattr		(__NR_O32_Linux + 228)
248#define __NR_O32_fgetxattr		(__NR_O32_Linux + 229)
249#define __NR_O32_listxattr		(__NR_O32_Linux + 230)
250#define __NR_O32_llistxattr		(__NR_O32_Linux + 231)
251#define __NR_O32_flistxattr		(__NR_O32_Linux + 232)
252#define __NR_O32_removexattr		(__NR_O32_Linux + 233)
253#define __NR_O32_lremovexattr		(__NR_O32_Linux + 234)
254#define __NR_O32_fremovexattr		(__NR_O32_Linux + 235)
255#define __NR_O32_tkill			(__NR_O32_Linux + 236)
256#define __NR_O32_sendfile64		(__NR_O32_Linux + 237)
257#define __NR_O32_futex			(__NR_O32_Linux + 238)
258#define __NR_O32_sched_setaffinity	(__NR_O32_Linux + 239)
259#define __NR_O32_sched_getaffinity	(__NR_O32_Linux + 240)
260
261/*
262 * Offset of the last Linux o32 flavoured syscall
263 */
264#define __NR_O32_Linux_syscalls		240
265
266
267/*
268 * Linux 64-bit syscalls are in the range from 5000 to 5999.
269 */
270#define __NR_Linux			5000
271#define __NR_read			(__NR_Linux +   0)
272#define __NR_write			(__NR_Linux +   1)
273#define __NR_open			(__NR_Linux +   2)
274#define __NR_close			(__NR_Linux +   3)
275#define __NR_stat			(__NR_Linux +   4)
276#define __NR_fstat			(__NR_Linux +   5)
277#define __NR_lstat			(__NR_Linux +   6)
278#define __NR_poll			(__NR_Linux +   7)
279#define __NR_lseek			(__NR_Linux +   8)
280#define __NR_mmap			(__NR_Linux +   9)
281#define __NR_mprotect			(__NR_Linux +  10)
282#define __NR_munmap			(__NR_Linux +  11)
283#define __NR_brk			(__NR_Linux +  12)
284#define __NR_rt_sigaction		(__NR_Linux +  13)
285#define __NR_rt_sigprocmask		(__NR_Linux +  14)
286#define __NR_ioctl			(__NR_Linux +  15)
287#define __NR_pread			(__NR_Linux +  16)
288#define __NR_pwrite			(__NR_Linux +  17)
289#define __NR_readv			(__NR_Linux +  18)
290#define __NR_writev			(__NR_Linux +  19)
291#define __NR_access			(__NR_Linux +  20)
292#define __NR_pipe			(__NR_Linux +  21)
293#define __NR__newselect			(__NR_Linux +  22)
294#define __NR_sched_yield		(__NR_Linux +  23)
295#define __NR_mremap			(__NR_Linux +  24)
296#define __NR_msync			(__NR_Linux +  25)
297#define __NR_mincore			(__NR_Linux +  26)
298#define __NR_madvise			(__NR_Linux +  27)
299#define __NR_shmget			(__NR_Linux +  28)
300#define __NR_shmat			(__NR_Linux +  29)
301#define __NR_shmctl			(__NR_Linux +  30)
302#define __NR_dup			(__NR_Linux +  31)
303#define __NR_dup2			(__NR_Linux +  32)
304#define __NR_pause			(__NR_Linux +  33)
305#define __NR_nanosleep			(__NR_Linux +  34)
306#define __NR_getitimer			(__NR_Linux +  35)
307#define __NR_setitimer			(__NR_Linux +  36)
308#define __NR_alarm			(__NR_Linux +  37)
309#define __NR_getpid			(__NR_Linux +  38)
310#define __NR_sendfile			(__NR_Linux +  39)
311#define __NR_socket			(__NR_Linux +  40)
312#define __NR_connect			(__NR_Linux +  41)
313#define __NR_accept			(__NR_Linux +  42)
314#define __NR_sendto			(__NR_Linux +  43)
315#define __NR_recvfrom			(__NR_Linux +  44)
316#define __NR_sendmsg			(__NR_Linux +  45)
317#define __NR_recvmsg			(__NR_Linux +  46)
318#define __NR_shutdown			(__NR_Linux +  47)
319#define __NR_bind			(__NR_Linux +  48)
320#define __NR_listen			(__NR_Linux +  49)
321#define __NR_getsockname		(__NR_Linux +  50)
322#define __NR_getpeername		(__NR_Linux +  51)
323#define __NR_socketpair			(__NR_Linux +  52)
324#define __NR_setsockopt			(__NR_Linux +  53)
325#define __NR_getsockopt			(__NR_Linux +  54)
326#define __NR_clone			(__NR_Linux +  55)
327#define __NR_fork			(__NR_Linux +  56)
328#define __NR_execve			(__NR_Linux +  57)
329#define __NR_exit			(__NR_Linux +  58)
330#define __NR_wait4			(__NR_Linux +  59)
331#define __NR_kill			(__NR_Linux +  60)
332#define __NR_uname			(__NR_Linux +  61)
333#define __NR_semget			(__NR_Linux +  62)
334#define __NR_semop			(__NR_Linux +  63)
335#define __NR_semctl			(__NR_Linux +  64)
336#define __NR_shmdt			(__NR_Linux +  65)
337#define __NR_msgget			(__NR_Linux +  66)
338#define __NR_msgsnd			(__NR_Linux +  67)
339#define __NR_msgrcv			(__NR_Linux +  68)
340#define __NR_msgctl			(__NR_Linux +  69)
341#define __NR_fcntl			(__NR_Linux +  70)
342#define __NR_flock			(__NR_Linux +  71)
343#define __NR_fsync			(__NR_Linux +  72)
344#define __NR_fdatasync			(__NR_Linux +  73)
345#define __NR_truncate			(__NR_Linux +  74)
346#define __NR_ftruncate			(__NR_Linux +  75)
347#define __NR_getdents			(__NR_Linux +  76)
348#define __NR_getcwd			(__NR_Linux +  77)
349#define __NR_chdir			(__NR_Linux +  78)
350#define __NR_fchdir			(__NR_Linux +  79)
351#define __NR_rename			(__NR_Linux +  80)
352#define __NR_mkdir			(__NR_Linux +  81)
353#define __NR_rmdir			(__NR_Linux +  82)
354#define __NR_creat			(__NR_Linux +  83)
355#define __NR_link			(__NR_Linux +  84)
356#define __NR_unlink			(__NR_Linux +  85)
357#define __NR_symlink			(__NR_Linux +  86)
358#define __NR_readlink			(__NR_Linux +  87)
359#define __NR_chmod			(__NR_Linux +  88)
360#define __NR_fchmod			(__NR_Linux +  89)
361#define __NR_chown			(__NR_Linux +  90)
362#define __NR_fchown			(__NR_Linux +  91)
363#define __NR_lchown			(__NR_Linux +  92)
364#define __NR_umask			(__NR_Linux +  93)
365#define __NR_gettimeofday		(__NR_Linux +  94)
366#define __NR_getrlimit			(__NR_Linux +  95)
367#define __NR_getrusage			(__NR_Linux +  96)
368#define __NR_sysinfo			(__NR_Linux +  97)
369#define __NR_times			(__NR_Linux +  98)
370#define __NR_ptrace			(__NR_Linux +  99)
371#define __NR_getuid			(__NR_Linux + 100)
372#define __NR_syslog			(__NR_Linux + 101)
373#define __NR_getgid			(__NR_Linux + 102)
374#define __NR_setuid			(__NR_Linux + 103)
375#define __NR_setgid			(__NR_Linux + 104)
376#define __NR_geteuid			(__NR_Linux + 105)
377#define __NR_getegid			(__NR_Linux + 106)
378#define __NR_setpgid			(__NR_Linux + 107)
379#define __NR_getppid			(__NR_Linux + 108)
380#define __NR_getpgrp			(__NR_Linux + 109)
381#define __NR_setsid			(__NR_Linux + 110)
382#define __NR_setreuid			(__NR_Linux + 111)
383#define __NR_setregid			(__NR_Linux + 112)
384#define __NR_getgroups			(__NR_Linux + 113)
385#define __NR_setgroups			(__NR_Linux + 114)
386#define __NR_setresuid			(__NR_Linux + 115)
387#define __NR_getresuid			(__NR_Linux + 116)
388#define __NR_setresgid			(__NR_Linux + 117)
389#define __NR_getresgid			(__NR_Linux + 118)
390#define __NR_getpgid			(__NR_Linux + 119)
391#define __NR_setfsuid			(__NR_Linux + 120)
392#define __NR_setfsgid			(__NR_Linux + 121)
393#define __NR_getsid			(__NR_Linux + 122)
394#define __NR_capget			(__NR_Linux + 123)
395#define __NR_capset			(__NR_Linux + 124)
396#define __NR_rt_sigpending		(__NR_Linux + 125)
397#define __NR_rt_sigtimedwait		(__NR_Linux + 126)
398#define __NR_rt_sigqueueinfo		(__NR_Linux + 127)
399#define __NR_rt_sigsuspend		(__NR_Linux + 128)
400#define __NR_sigaltstack		(__NR_Linux + 129)
401#define __NR_utime			(__NR_Linux + 130)
402#define __NR_mknod			(__NR_Linux + 131)
403#define __NR_personality		(__NR_Linux + 132)
404#define __NR_ustat			(__NR_Linux + 133)
405#define __NR_statfs			(__NR_Linux + 134)
406#define __NR_fstatfs			(__NR_Linux + 135)
407#define __NR_sysfs			(__NR_Linux + 136)
408#define __NR_getpriority		(__NR_Linux + 137)
409#define __NR_setpriority		(__NR_Linux + 138)
410#define __NR_sched_setparam		(__NR_Linux + 139)
411#define __NR_sched_getparam		(__NR_Linux + 140)
412#define __NR_sched_setscheduler		(__NR_Linux + 141)
413#define __NR_sched_getscheduler		(__NR_Linux + 142)
414#define __NR_sched_get_priority_max	(__NR_Linux + 143)
415#define __NR_sched_get_priority_min	(__NR_Linux + 144)
416#define __NR_sched_rr_get_interval	(__NR_Linux + 145)
417#define __NR_mlock			(__NR_Linux + 146)
418#define __NR_munlock			(__NR_Linux + 147)
419#define __NR_mlockall			(__NR_Linux + 148)
420#define __NR_munlockall			(__NR_Linux + 149)
421#define __NR_vhangup			(__NR_Linux + 150)
422#define __NR_pivot_root			(__NR_Linux + 151)
423#define __NR__sysctl			(__NR_Linux + 152)
424#define __NR_prctl			(__NR_Linux + 153)
425#define __NR_adjtimex			(__NR_Linux + 154)
426#define __NR_setrlimit			(__NR_Linux + 155)
427#define __NR_chroot			(__NR_Linux + 156)
428#define __NR_sync			(__NR_Linux + 157)
429#define __NR_acct			(__NR_Linux + 158)
430#define __NR_settimeofday		(__NR_Linux + 159)
431#define __NR_mount			(__NR_Linux + 160)
432#define __NR_umount2			(__NR_Linux + 161)
433#define __NR_swapon			(__NR_Linux + 162)
434#define __NR_swapoff			(__NR_Linux + 163)
435#define __NR_reboot			(__NR_Linux + 164)
436#define __NR_sethostname		(__NR_Linux + 165)
437#define __NR_setdomainname		(__NR_Linux + 166)
438#define __NR_create_module		(__NR_Linux + 167)
439#define __NR_init_module		(__NR_Linux + 168)
440#define __NR_delete_module		(__NR_Linux + 169)
441#define __NR_get_kernel_syms		(__NR_Linux + 170)
442#define __NR_query_module		(__NR_Linux + 171)
443#define __NR_quotactl			(__NR_Linux + 172)
444#define __NR_nfsservctl			(__NR_Linux + 173)
445#define __NR_getpmsg			(__NR_Linux + 174)
446#define __NR_putpmsg			(__NR_Linux + 175)
447#define __NR_afs_syscall		(__NR_Linux + 176)
448#define __NR_security			(__NR_Linux + 177)
449#define __NR_gettid			(__NR_Linux + 178)
450#define __NR_readahead			(__NR_Linux + 179)
451#define __NR_setxattr			(__NR_Linux + 180)
452#define __NR_lsetxattr			(__NR_Linux + 181)
453#define __NR_fsetxattr			(__NR_Linux + 182)
454#define __NR_getxattr			(__NR_Linux + 183)
455#define __NR_lgetxattr			(__NR_Linux + 184)
456#define __NR_fgetxattr			(__NR_Linux + 185)
457#define __NR_listxattr			(__NR_Linux + 186)
458#define __NR_llistxattr			(__NR_Linux + 187)
459#define __NR_flistxattr			(__NR_Linux + 188)
460#define __NR_removexattr		(__NR_Linux + 189)
461#define __NR_lremovexattr		(__NR_Linux + 190)
462#define __NR_fremovexattr		(__NR_Linux + 191)
463#define __NR_tkill			(__NR_Linux + 192)
464#define __NR_time			(__NR_Linux + 193)
465#define __NR_futex			(__NR_Linux + 194)
466#define __NR_sched_setaffinity		(__NR_Linux + 195)
467#define __NR_sched_getaffinity		(__NR_Linux + 196)
468#define __NR_cacheflush			(__NR_Linux + 197)
469#define __NR_cachectl			(__NR_Linux + 198)
470#define __NR_sysmips			(__NR_Linux + 199)
471
472/*
473 * Offset of the last Linux flavoured syscall
474 */
475#define __NR_Linux_syscalls		199
476
477/*
478 * Linux N32 syscalls are in the range from 6000 to 6999.
479 */
480#define __NR_N32_Linux			6000
481#define __NR_N32_read			(__NR_N32_Linux +   0)
482#define __NR_N32_write			(__NR_N32_Linux +   1)
483#define __NR_N32_open			(__NR_N32_Linux +   2)
484#define __NR_N32_close			(__NR_N32_Linux +   3)
485#define __NR_N32_stat			(__NR_N32_Linux +   4)
486#define __NR_N32_fstat			(__NR_N32_Linux +   5)
487#define __NR_N32_lstat			(__NR_N32_Linux +   6)
488#define __NR_N32_poll			(__NR_N32_Linux +   7)
489#define __NR_N32_lseek			(__NR_N32_Linux +   8)
490#define __NR_N32_mmap			(__NR_N32_Linux +   9)
491#define __NR_N32_mprotect		(__NR_N32_Linux +  10)
492#define __NR_N32_munmap			(__NR_N32_Linux +  11)
493#define __NR_N32_brk			(__NR_N32_Linux +  12)
494#define __NR_N32_rt_sigaction		(__NR_N32_Linux +  13)
495#define __NR_N32_rt_sigprocmask		(__NR_N32_Linux +  14)
496#define __NR_N32_ioctl			(__NR_N32_Linux +  15)
497#define __NR_N32_pread			(__NR_N32_Linux +  16)
498#define __NR_N32_pwrite			(__NR_N32_Linux +  17)
499#define __NR_N32_readv			(__NR_N32_Linux +  18)
500#define __NR_N32_writev			(__NR_N32_Linux +  19)
501#define __NR_N32_access			(__NR_N32_Linux +  20)
502#define __NR_N32_pipe			(__NR_N32_Linux +  21)
503#define __NR_N32__newselect		(__NR_N32_Linux +  22)
504#define __NR_N32_sched_yield		(__NR_N32_Linux +  23)
505#define __NR_N32_mremap			(__NR_N32_Linux +  24)
506#define __NR_N32_msync			(__NR_N32_Linux +  25)
507#define __NR_N32_mincore		(__NR_N32_Linux +  26)
508#define __NR_N32_madvise		(__NR_N32_Linux +  27)
509#define __NR_N32_shmget			(__NR_N32_Linux +  28)
510#define __NR_N32_shmat			(__NR_N32_Linux +  29)
511#define __NR_N32_shmctl			(__NR_N32_Linux +  30)
512#define __NR_N32_dup			(__NR_N32_Linux +  31)
513#define __NR_N32_dup2			(__NR_N32_Linux +  32)
514#define __NR_N32_pause			(__NR_N32_Linux +  33)
515#define __NR_N32_nanosleep		(__NR_N32_Linux +  34)
516#define __NR_N32_getitimer		(__NR_N32_Linux +  35)
517#define __NR_N32_setitimer		(__NR_N32_Linux +  36)
518#define __NR_N32_alarm			(__NR_N32_Linux +  37)
519#define __NR_N32_getpid			(__NR_N32_Linux +  38)
520#define __NR_N32_sendfile		(__NR_N32_Linux +  39)
521#define __NR_N32_socket			(__NR_N32_Linux +  40)
522#define __NR_N32_connect		(__NR_N32_Linux +  41)
523#define __NR_N32_accept			(__NR_N32_Linux +  42)
524#define __NR_N32_sendto			(__NR_N32_Linux +  43)
525#define __NR_N32_recvfrom		(__NR_N32_Linux +  44)
526#define __NR_N32_sendmsg		(__NR_N32_Linux +  45)
527#define __NR_N32_recvmsg		(__NR_N32_Linux +  46)
528#define __NR_N32_shutdown		(__NR_N32_Linux +  47)
529#define __NR_N32_bind			(__NR_N32_Linux +  48)
530#define __NR_N32_listen			(__NR_N32_Linux +  49)
531#define __NR_N32_getsockname		(__NR_N32_Linux +  50)
532#define __NR_N32_getpeername		(__NR_N32_Linux +  51)
533#define __NR_N32_socketpair		(__NR_N32_Linux +  52)
534#define __NR_N32_setsockopt		(__NR_N32_Linux +  53)
535#define __NR_N32_getsockopt		(__NR_N32_Linux +  54)
536#define __NR_N32_clone			(__NR_N32_Linux +  55)
537#define __NR_N32_fork			(__NR_N32_Linux +  56)
538#define __NR_N32_execve			(__NR_N32_Linux +  57)
539#define __NR_N32_exit			(__NR_N32_Linux +  58)
540#define __NR_N32_wait4			(__NR_N32_Linux +  59)
541#define __NR_N32_kill			(__NR_N32_Linux +  60)
542#define __NR_N32_uname			(__NR_N32_Linux +  61)
543#define __NR_N32_semget			(__NR_N32_Linux +  62)
544#define __NR_N32_semop			(__NR_N32_Linux +  63)
545#define __NR_N32_semctl			(__NR_N32_Linux +  64)
546#define __NR_N32_shmdt			(__NR_N32_Linux +  65)
547#define __NR_N32_msgget			(__NR_N32_Linux +  66)
548#define __NR_N32_msgsnd			(__NR_N32_Linux +  67)
549#define __NR_N32_msgrcv			(__NR_N32_Linux +  68)
550#define __NR_N32_msgctl			(__NR_N32_Linux +  69)
551#define __NR_N32_fcntl			(__NR_N32_Linux +  70)
552#define __NR_N32_flock			(__NR_N32_Linux +  71)
553#define __NR_N32_fsync			(__NR_N32_Linux +  72)
554#define __NR_N32_fdatasync		(__NR_N32_Linux +  73)
555#define __NR_N32_truncate		(__NR_N32_Linux +  74)
556#define __NR_N32_ftruncate		(__NR_N32_Linux +  75)
557#define __NR_N32_getdents		(__NR_N32_Linux +  76)
558#define __NR_N32_getcwd			(__NR_N32_Linux +  77)
559#define __NR_N32_chdir			(__NR_N32_Linux +  78)
560#define __NR_N32_fchdir			(__NR_N32_Linux +  79)
561#define __NR_N32_rename			(__NR_N32_Linux +  80)
562#define __NR_N32_mkdir			(__NR_N32_Linux +  81)
563#define __NR_N32_rmdir			(__NR_N32_Linux +  82)
564#define __NR_N32_creat			(__NR_N32_Linux +  83)
565#define __NR_N32_link			(__NR_N32_Linux +  84)
566#define __NR_N32_unlink			(__NR_N32_Linux +  85)
567#define __NR_N32_symlink		(__NR_N32_Linux +  86)
568#define __NR_N32_readlink		(__NR_N32_Linux +  87)
569#define __NR_N32_chmod			(__NR_N32_Linux +  88)
570#define __NR_N32_fchmod			(__NR_N32_Linux +  89)
571#define __NR_N32_chown			(__NR_N32_Linux +  90)
572#define __NR_N32_fchown			(__NR_N32_Linux +  91)
573#define __NR_N32_lchown			(__NR_N32_Linux +  92)
574#define __NR_N32_umask			(__NR_N32_Linux +  93)
575#define __NR_N32_gettimeofday		(__NR_N32_Linux +  94)
576#define __NR_N32_getrlimit		(__NR_N32_Linux +  95)
577#define __NR_N32_getrusage		(__NR_N32_Linux +  96)
578#define __NR_N32_sysinfo		(__NR_N32_Linux +  97)
579#define __NR_N32_times			(__NR_N32_Linux +  98)
580#define __NR_N32_ptrace			(__NR_N32_Linux +  99)
581#define __NR_N32_getuid			(__NR_N32_Linux + 100)
582#define __NR_N32_syslog			(__NR_N32_Linux + 101)
583#define __NR_N32_getgid			(__NR_N32_Linux + 102)
584#define __NR_N32_setuid			(__NR_N32_Linux + 103)
585#define __NR_N32_setgid			(__NR_N32_Linux + 104)
586#define __NR_N32_geteuid		(__NR_N32_Linux + 105)
587#define __NR_N32_getegid		(__NR_N32_Linux + 106)
588#define __NR_N32_setpgid		(__NR_N32_Linux + 107)
589#define __NR_N32_getppid		(__NR_N32_Linux + 108)
590#define __NR_N32_getpgrp		(__NR_N32_Linux + 109)
591#define __NR_N32_setsid			(__NR_N32_Linux + 110)
592#define __NR_N32_setreuid		(__NR_N32_Linux + 111)
593#define __NR_N32_setregid		(__NR_N32_Linux + 112)
594#define __NR_N32_getgroups		(__NR_N32_Linux + 113)
595#define __NR_N32_setgroups		(__NR_N32_Linux + 114)
596#define __NR_N32_setresuid		(__NR_N32_Linux + 115)
597#define __NR_N32_getresuid		(__NR_N32_Linux + 116)
598#define __NR_N32_setresgid		(__NR_N32_Linux + 117)
599#define __NR_N32_getresgid		(__NR_N32_Linux + 118)
600#define __NR_N32_getpgid		(__NR_N32_Linux + 119)
601#define __NR_N32_setfsuid		(__NR_N32_Linux + 120)
602#define __NR_N32_setfsgid		(__NR_N32_Linux + 121)
603#define __NR_N32_getsid			(__NR_N32_Linux + 122)
604#define __NR_N32_capget			(__NR_N32_Linux + 123)
605#define __NR_N32_capset			(__NR_N32_Linux + 124)
606#define __NR_N32_rt_sigpending		(__NR_N32_Linux + 125)
607#define __NR_N32_rt_sigtimedwait	(__NR_N32_Linux + 126)
608#define __NR_N32_rt_sigqueueinfo	(__NR_N32_Linux + 127)
609#define __NR_N32_rt_sigsuspend		(__NR_N32_Linux + 128)
610#define __NR_N32_sigaltstack		(__NR_N32_Linux + 129)
611#define __NR_N32_utime			(__NR_N32_Linux + 130)
612#define __NR_N32_mknod			(__NR_N32_Linux + 131)
613#define __NR_N32_personality		(__NR_N32_Linux + 132)
614#define __NR_N32_ustat			(__NR_N32_Linux + 133)
615#define __NR_N32_statfs			(__NR_N32_Linux + 134)
616#define __NR_N32_fstatfs		(__NR_N32_Linux + 135)
617#define __NR_N32_sysfs			(__NR_N32_Linux + 136)
618#define __NR_N32_getpriority		(__NR_N32_Linux + 137)
619#define __NR_N32_setpriority		(__NR_N32_Linux + 138)
620#define __NR_N32_sched_setparam		(__NR_N32_Linux + 139)
621#define __NR_N32_sched_getparam		(__NR_N32_Linux + 140)
622#define __NR_N32_sched_setscheduler	(__NR_N32_Linux + 141)
623#define __NR_N32_sched_getscheduler	(__NR_N32_Linux + 142)
624#define __NR_N32_sched_get_priority_max	(__NR_N32_Linux + 143)
625#define __NR_N32_sched_get_priority_min	(__NR_N32_Linux + 144)
626#define __NR_N32_sched_rr_get_interval	(__NR_N32_Linux + 145)
627#define __NR_N32_mlock			(__NR_N32_Linux + 146)
628#define __NR_N32_munlock		(__NR_N32_Linux + 147)
629#define __NR_N32_mlockall		(__NR_N32_Linux + 148)
630#define __NR_N32_munlockall		(__NR_N32_Linux + 149)
631#define __NR_N32_vhangup		(__NR_N32_Linux + 150)
632#define __NR_N32_pivot_root		(__NR_N32_Linux + 151)
633#define __NR_N32__sysctl		(__NR_N32_Linux + 152)
634#define __NR_N32_prctl			(__NR_N32_Linux + 153)
635#define __NR_N32_adjtimex		(__NR_N32_Linux + 154)
636#define __NR_N32_setrlimit		(__NR_N32_Linux + 155)
637#define __NR_N32_chroot			(__NR_N32_Linux + 156)
638#define __NR_N32_sync			(__NR_N32_Linux + 157)
639#define __NR_N32_acct			(__NR_N32_Linux + 158)
640#define __NR_N32_settimeofday		(__NR_N32_Linux + 159)
641#define __NR_N32_mount			(__NR_N32_Linux + 160)
642#define __NR_N32_umount2		(__NR_N32_Linux + 161)
643#define __NR_N32_swapon			(__NR_N32_Linux + 162)
644#define __NR_N32_swapoff		(__NR_N32_Linux + 163)
645#define __NR_N32_reboot			(__NR_N32_Linux + 164)
646#define __NR_N32_sethostname		(__NR_N32_Linux + 165)
647#define __NR_N32_setdomainname		(__NR_N32_Linux + 166)
648#define __NR_N32_create_module		(__NR_N32_Linux + 167)
649#define __NR_N32_init_module		(__NR_N32_Linux + 168)
650#define __NR_N32_delete_module		(__NR_N32_Linux + 169)
651#define __NR_N32_get_kernel_syms	(__NR_N32_Linux + 170)
652#define __NR_N32_query_module		(__NR_N32_Linux + 171)
653#define __NR_N32_quotactl		(__NR_N32_Linux + 172)
654#define __NR_N32_nfsservctl		(__NR_N32_Linux + 173)
655#define __NR_N32_getpmsg		(__NR_N32_Linux + 174)
656#define __NR_N32_putpmsg		(__NR_N32_Linux + 175)
657#define __NR_N32_afs_syscall		(__NR_N32_Linux + 176)
658#define __NR_N32_security		(__NR_N32_Linux + 177)
659#define __NR_N32_gettid			(__NR_N32_Linux + 178)
660#define __NR_N32_readahead		(__NR_N32_Linux + 179)
661#define __NR_N32_setxattr		(__NR_N32_Linux + 180)
662#define __NR_N32_lsetxattr		(__NR_N32_Linux + 181)
663#define __NR_N32_fsetxattr		(__NR_N32_Linux + 182)
664#define __NR_N32_getxattr		(__NR_N32_Linux + 183)
665#define __NR_N32_lgetxattr		(__NR_N32_Linux + 184)
666#define __NR_N32_fgetxattr		(__NR_N32_Linux + 185)
667#define __NR_N32_listxattr		(__NR_N32_Linux + 186)
668#define __NR_N32_llistxattr		(__NR_N32_Linux + 187)
669#define __NR_N32_flistxattr		(__NR_N32_Linux + 188)
670#define __NR_N32_removexattr		(__NR_N32_Linux + 189)
671#define __NR_N32_lremovexattr		(__NR_N32_Linux + 190)
672#define __NR_N32_fremovexattr		(__NR_N32_Linux + 191)
673#define __NR_N32_tkill			(__NR_N32_Linux + 192)
674#define __NR_N32_time			(__NR_N32_Linux + 193)
675#define __NR_N32_futex			(__NR_N32_Linux + 194)
676#define __NR_N32_sched_setaffinity	(__NR_N32_Linux + 195)
677#define __NR_N32_sched_getaffinity	(__NR_N32_Linux + 196)
678#define __NR_N32_cacheflush		(__NR_N32_Linux + 197)
679#define __NR_N32_cachectl		(__NR_N32_Linux + 198)
680#define __NR_N32_sysmips		(__NR_N32_Linux + 199)
681
682/*
683 * Offset of the last N32 flavoured syscall
684 */
685#define __NR_N32_Linux_syscalls		199
686
687#ifndef __ASSEMBLY__
688
689#define _syscall0(type,name) \
690type name(void) \
691{ \
692	register unsigned long __v0 asm("$2") = __NR_##name; \
693	register unsigned long __a3 asm("$7"); \
694	\
695	__asm__ volatile ( \
696	".set\tnoreorder\n\t" \
697	"li\t$2, %2\t\t\t# " #name "\n\t" \
698	"syscall\n\t" \
699	".set\treorder" \
700	: "=&r" (__v0), "=r" (__a3) \
701	: "i" (__NR_##name) \
702	: "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \
703	\
704	if (__a3 == 0) \
705		return (type) __v0; \
706	errno = __v0; \
707	return -1; \
708}
709
710/*
711 * DANGER: This macro isn't usable for the pipe(2) call
712 * which has a unusual return convention.
713 */
714#define _syscall1(type,name,atype,a) \
715type name(atype a) \
716{ \
717	register unsigned long __v0 asm("$2") = __NR_##name; \
718	register unsigned long __a0 asm("$4") = (unsigned long) a; \
719	register unsigned long __a3 asm("$7"); \
720	\
721	__asm__ volatile ( \
722	".set\tnoreorder\n\t" \
723	"li\t$2, %3\t\t\t# " #name "\n\t" \
724	"syscall\n\t" \
725	".set\treorder" \
726	: "=&r" (__v0), "=r" (__a3) \
727	: "r" (__a0), "i" (__NR_##name) \
728	: "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \
729	\
730	if (__a3 == 0) \
731		return (type) __v0; \
732	errno = __v0; \
733	return -1; \
734}
735
736#define _syscall2(type,name,atype,a,btype,b) \
737type name(atype a, btype b) \
738{ \
739	register unsigned long __v0 asm("$2") = __NR_##name; \
740	register unsigned long __a0 asm("$4") = (unsigned long) a; \
741	register unsigned long __a1 asm("$5") = (unsigned long) b; \
742	register unsigned long __a3 asm("$7"); \
743	\
744	__asm__ volatile ( \
745	".set\tnoreorder\n\t" \
746	"li\t$2, %4\t\t\t# " #name "\n\t" \
747	"syscall\n\t" \
748	".set\treorder" \
749	: "=&r" (__v0), "=r" (__a3) \
750	: "r" (__a0), "r" (__a1), "i" (__NR_##name) \
751	: "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \
752	\
753	if (__a3 == 0) \
754		return (type) __v0; \
755	errno = __v0; \
756	return -1; \
757}
758
759#define _syscall3(type,name,atype,a,btype,b,ctype,c) \
760type name(atype a, btype b, ctype c) \
761{ \
762	register unsigned long __v0 asm("$2") = __NR_##name; \
763	register unsigned long __a0 asm("$4") = (unsigned long) a; \
764	register unsigned long __a1 asm("$5") = (unsigned long) b; \
765	register unsigned long __a2 asm("$6") = (unsigned long) c; \
766	register unsigned long __a3 asm("$7"); \
767	\
768	__asm__ volatile ( \
769	".set\tnoreorder\n\t" \
770	"li\t$2, %5\t\t\t# " #name "\n\t" \
771	"syscall\n\t" \
772	".set\treorder" \
773	: "=&r" (__v0), "=r" (__a3) \
774	: "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_##name) \
775	: "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \
776	\
777	if (__a3 == 0) \
778		return (type) __v0; \
779	errno = __v0; \
780	return -1; \
781}
782
783#define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \
784type name(atype a, btype b, ctype c, dtype d) \
785{ \
786	register unsigned long __v0 asm("$2") = __NR_##name; \
787	register unsigned long __a0 asm("$4") = (unsigned long) a; \
788	register unsigned long __a1 asm("$5") = (unsigned long) b; \
789	register unsigned long __a2 asm("$6") = (unsigned long) c; \
790	register unsigned long __a3 asm("$7") = (unsigned long) d; \
791	\
792	__asm__ volatile ( \
793	".set\tnoreorder\n\t" \
794	"li\t$2, %5\t\t\t# " #name "\n\t" \
795	"syscall\n\t" \
796	".set\treorder" \
797	: "=&r" (__v0), "+r" (__a3) \
798	: "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_##name) \
799	: "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \
800	\
801	if (__a3 == 0) \
802		return (type) __v0; \
803	errno = __v0; \
804	return -1; \
805}
806
807#if (_MIPS_SIM == _ABIN32) || (_MIPS_SIM == _ABI64)
808
809#define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \
810type name (atype a,btype b,ctype c,dtype d,etype e) \
811{ \
812	register unsigned long __v0 asm("$2") = __NR_##name; \
813	register unsigned long __a0 asm("$4") = (unsigned long) a; \
814	register unsigned long __a1 asm("$5") = (unsigned long) b; \
815	register unsigned long __a2 asm("$6") = (unsigned long) c; \
816	register unsigned long __a3 asm("$7") = (unsigned long) d; \
817	register unsigned long __a4 asm("$8") = (unsigned long) e; \
818	\
819	__asm__ volatile ( \
820	".set\tnoreorder\n\t" \
821	"li\t$2, %6\t\t\t# " #name "\n\t" \
822	"syscall\n\t" \
823	".set\treorder" \
824	: "=&r" (__v0), "+r" (__a3), "+r" (__a4) \
825	: "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_##name) \
826	: "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \
827	\
828	if (__a3 == 0) \
829		return (type) __v0; \
830	errno = __v0; \
831	return -1; \
832}
833
834#define _syscall6(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f) \
835type name (atype a,btype b,ctype c,dtype d,etype e,ftype f) \
836{ \
837	register unsigned long __v0 asm("$2") = __NR_##name; \
838	register unsigned long __a0 asm("$4") = (unsigned long) a; \
839	register unsigned long __a1 asm("$5") = (unsigned long) b; \
840	register unsigned long __a2 asm("$6") = (unsigned long) c; \
841	register unsigned long __a3 asm("$7") = (unsigned long) d; \
842	register unsigned long __a4 asm("$8") = (unsigned long) e; \
843	register unsigned long __a5 asm("$9") = (unsigned long) f; \
844	\
845	__asm__ volatile ( "" \
846	: "+r" (__a5) \
847	: \
848	: "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \
849	\
850	__asm__ volatile ( \
851	".set\tnoreorder\n\t" \
852	"li\t$2, %6\t\t\t# " #name "\n\t" \
853	"syscall\n\t" \
854	".set\treorder" \
855	: "=&r" (__v0), "+r" (__a3), "+r" (__a4) \
856	: "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_##name) \
857	: "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \
858	\
859	if (__a3 == 0) \
860		return (type) __v0; \
861	errno = __v0; \
862	return -1; \
863}
864
865#define _syscall7(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f,gtype,g) \
866type name (atype a,btype b,ctype c,dtype d,etype e,ftype f,gtype g) \
867{ \
868	register unsigned long __v0 asm("$2") = __NR_##name; \
869	register unsigned long __a0 asm("$4") = (unsigned long) a; \
870	register unsigned long __a1 asm("$5") = (unsigned long) b; \
871	register unsigned long __a2 asm("$6") = (unsigned long) c; \
872	register unsigned long __a3 asm("$7") = (unsigned long) d; \
873	register unsigned long __a4 asm("$8") = (unsigned long) e; \
874	register unsigned long __a5 asm("$9") = (unsigned long) f; \
875	register unsigned long __a6 asm("$10") = (unsigned long) g; \
876	\
877	__asm__ volatile ( "" \
878	: "+r" (__a5), "+r" (__a6) \
879	: \
880	: "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \
881	\
882	__asm__ volatile ( \
883	".set\tnoreorder\n\t" \
884	"li\t$2, %6\t\t\t# " #name "\n\t" \
885	"syscall\n\t" \
886	".set\treorder" \
887	: "=&r" (__v0), "+r" (__a3), "+r" (__a4) \
888	: "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_##name) \
889	: "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \
890	\
891	if (__a3 == 0) \
892		return (type) __v0; \
893	errno = __v0; \
894	return -1; \
895}
896
897#else /* not N32 or 64 ABI */
898
899/*
900 * Using those means your brain needs more than an oil change ;-)
901 */
902
903#define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \
904type name(atype a, btype b, ctype c, dtype d, etype e) \
905{ \
906	register unsigned long __v0 asm("$2") = __NR_##name; \
907	register unsigned long __a0 asm("$4") = (unsigned long) a; \
908	register unsigned long __a1 asm("$5") = (unsigned long) b; \
909	register unsigned long __a2 asm("$6") = (unsigned long) c; \
910	register unsigned long __a3 asm("$7") = (unsigned long) d; \
911	\
912	__asm__ volatile ( \
913	".set\tnoreorder\n\t" \
914	"lw\t$2, %6\n\t" \
915	"subu\t$29, 32\n\t" \
916	"sw\t$2, 16($29)\n\t" \
917	"li\t$2, %5\t\t\t# " #name "\n\t" \
918	"syscall\n\t" \
919	"addiu\t$29, 32\n\t" \
920	".set\treorder" \
921	: "=&r" (__v0), "+r" (__a3) \
922	: "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_##name), \
923	  "m" ((unsigned long)e) \
924	: "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \
925	\
926	if (__a3 == 0) \
927		return (type) __v0; \
928	errno = __v0; \
929	return -1; \
930}
931
932#define _syscall6(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f) \
933type name(atype a, btype b, ctype c, dtype d, etype e, ftype f) \
934{ \
935	register unsigned long __v0 asm("$2") = __NR_##name; \
936	register unsigned long __a0 asm("$4") = (unsigned long) a; \
937	register unsigned long __a1 asm("$5") = (unsigned long) b; \
938	register unsigned long __a2 asm("$6") = (unsigned long) c; \
939	register unsigned long __a3 asm("$7") = (unsigned long) d; \
940	\
941	__asm__ volatile ( \
942	".set\tnoreorder\n\t" \
943	"lw\t$2, %6\n\t" \
944	"lw\t$8, %7\n\t" \
945	"subu\t$29, 32\n\t" \
946	"sw\t$2, 16($29)\n\t" \
947	"sw\t$8, 20($29)\n\t" \
948	"li\t$2, %5\t\t\t# " #name "\n\t" \
949	"syscall\n\t" \
950	"addiu\t$29, 32\n\t" \
951	".set\treorder" \
952	: "=&r" (__v0), "+r" (__a3) \
953	: "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_##name), \
954	  "m" ((unsigned long)e), "m" ((unsigned long)f) \
955	: "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \
956	\
957	if (__a3 == 0) \
958		return (type) __v0; \
959	errno = __v0; \
960	return -1; \
961}
962
963#define _syscall7(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f,gtype,g) \
964type name(atype a, btype b, ctype c, dtype d, etype e, ftype f, gtype g) \
965{ \
966	register unsigned long __v0 asm("$2") = __NR_##name; \
967	register unsigned long __a0 asm("$4") = (unsigned long) a; \
968	register unsigned long __a1 asm("$5") = (unsigned long) b; \
969	register unsigned long __a2 asm("$6") = (unsigned long) c; \
970	register unsigned long __a3 asm("$7") = (unsigned long) d; \
971	\
972	__asm__ volatile ( \
973	".set\tnoreorder\n\t" \
974	"lw\t$2, %6\n\t" \
975	"lw\t$8, %7\n\t" \
976	"lw\t$9, %8\n\t" \
977	"subu\t$29, 32\n\t" \
978	"sw\t$2, 16($29)\n\t" \
979	"sw\t$8, 20($29)\n\t" \
980	"sw\t$9, 24($29)\n\t" \
981	"li\t$2, %5\t\t\t# " #name "\n\t" \
982	"syscall\n\t" \
983	"addiu\t$29, 32\n\t" \
984	".set\treorder" \
985	: "=&r" (__v0), "+r" (__a3) \
986	: "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_##name), \
987	  "m" ((unsigned long)e), "m" ((unsigned long)f), \
988	  "m" ((unsigned long)g), \
989	: "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \
990	\
991	if (__a3 == 0) \
992		return (type) __v0; \
993	errno = __v0; \
994	return -1; \
995}
996
997#endif
998
999#ifdef __KERNEL_SYSCALLS__
1000
1001/*
1002 * we need this inline - forking from kernel space will result
1003 * in NO COPY ON WRITE (!!!), until an execve is executed. This
1004 * is no problem, but for the stack. This is handled by not letting
1005 * main() use the stack at all after fork(). Thus, no function
1006 * calls - which means inline code for fork too, as otherwise we
1007 * would use the stack upon exit from 'fork()'.
1008 *
1009 * Actually only pause and fork are needed inline, so that there
1010 * won't be any messing with the stack from main(), but we define
1011 * some others too.
1012 */
1013#define __NR__exit __NR_exit
1014static inline _syscall0(int,sync)
1015static inline _syscall0(pid_t,setsid)
1016static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count)
1017static inline _syscall3(int,read,int,fd,char *,buf,off_t,count)
1018static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,count)
1019static inline _syscall1(int,dup,int,fd)
1020static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp)
1021static inline _syscall3(int,open,const char *,file,int,flag,int,mode)
1022static inline _syscall1(int,close,int,fd)
1023static inline _syscall1(int,_exit,int,exitcode)
1024static inline _syscall4(pid_t,wait4,pid_t,pid,int *,stat_addr,int,options,struct rusage *,ru)
1025static inline _syscall1(int,delete_module,const char *,name)
1026
1027static inline pid_t waitpid(int pid, int * wait_stat, int flags)
1028{
1029	return wait4(pid, wait_stat, flags, NULL);
1030}
1031
1032static inline pid_t wait(int * wait_stat)
1033{
1034	return waitpid(-1, wait_stat, 0);
1035}
1036
1037#endif /* __KERNEL_SYSCALLS__ */
1038#endif /* !__ASSEMBLY__ */
1039
1040#endif /* _ASM_UNISTD_H */
1041