[PATCH] avr32 architecture
[linux-2.6.git] / include / asm-avr32 / unistd.h
1 /*
2  * Copyright (C) 2004-2006 Atmel Corporation
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  */
8 #ifndef __ASM_AVR32_UNISTD_H
9 #define __ASM_AVR32_UNISTD_H
10
11 /*
12  * This file contains the system call numbers.
13  */
14
15 #define __NR_restart_syscall      0
16 #define __NR_exit                 1
17 #define __NR_fork                 2
18 #define __NR_read                 3
19 #define __NR_write                4
20 #define __NR_open                 5
21 #define __NR_close                6
22 #define __NR_umask                7
23 #define __NR_creat                8
24 #define __NR_link                 9
25 #define __NR_unlink              10
26 #define __NR_execve              11
27 #define __NR_chdir               12
28 #define __NR_time                13
29 #define __NR_mknod               14
30 #define __NR_chmod               15
31 #define __NR_chown               16
32 #define __NR_lchown              17
33 #define __NR_lseek               18
34 #define __NR__llseek             19
35 #define __NR_getpid              20
36 #define __NR_mount               21
37 #define __NR_umount2             22
38 #define __NR_setuid              23
39 #define __NR_getuid              24
40 #define __NR_stime               25
41 #define __NR_ptrace              26
42 #define __NR_alarm               27
43 #define __NR_pause               28
44 #define __NR_utime               29
45 #define __NR_stat                30
46 #define __NR_fstat               31
47 #define __NR_lstat               32
48 #define __NR_access              33
49 #define __NR_chroot              34
50 #define __NR_sync                35
51 #define __NR_fsync               36
52 #define __NR_kill                37
53 #define __NR_rename              38
54 #define __NR_mkdir               39
55 #define __NR_rmdir               40
56 #define __NR_dup                 41
57 #define __NR_pipe                42
58 #define __NR_times               43
59 #define __NR_clone               44
60 #define __NR_brk                 45
61 #define __NR_setgid              46
62 #define __NR_getgid              47
63 #define __NR_getcwd              48
64 #define __NR_geteuid             49
65 #define __NR_getegid             50
66 #define __NR_acct                51
67 #define __NR_setfsuid            52
68 #define __NR_setfsgid            53
69 #define __NR_ioctl               54
70 #define __NR_fcntl               55
71 #define __NR_setpgid             56
72 #define __NR_mremap              57
73 #define __NR_setresuid           58
74 #define __NR_getresuid           59
75 #define __NR_setreuid            60
76 #define __NR_setregid            61
77 #define __NR_ustat               62
78 #define __NR_dup2                63
79 #define __NR_getppid             64
80 #define __NR_getpgrp             65
81 #define __NR_setsid              66
82 #define __NR_rt_sigaction        67
83 #define __NR_rt_sigreturn        68
84 #define __NR_rt_sigprocmask      69
85 #define __NR_rt_sigpending       70
86 #define __NR_rt_sigtimedwait     71
87 #define __NR_rt_sigqueueinfo     72
88 #define __NR_rt_sigsuspend       73
89 #define __NR_sethostname         74
90 #define __NR_setrlimit           75
91 #define __NR_getrlimit           76     /* SuS compliant getrlimit */
92 #define __NR_getrusage           77
93 #define __NR_gettimeofday        78
94 #define __NR_settimeofday        79
95 #define __NR_getgroups           80
96 #define __NR_setgroups           81
97 #define __NR_select              82
98 #define __NR_symlink             83
99 #define __NR_fchdir              84
100 #define __NR_readlink            85
101 #define __NR_pread               86
102 #define __NR_pwrite              87
103 #define __NR_swapon              88
104 #define __NR_reboot              89
105 #define __NR_mmap2               90
106 #define __NR_munmap              91
107 #define __NR_truncate            92
108 #define __NR_ftruncate           93
109 #define __NR_fchmod              94
110 #define __NR_fchown              95
111 #define __NR_getpriority         96
112 #define __NR_setpriority         97
113 #define __NR_wait4               98
114 #define __NR_statfs              99
115 #define __NR_fstatfs            100
116 #define __NR_vhangup            101
117 #define __NR_sigaltstack        102
118 #define __NR_syslog             103
119 #define __NR_setitimer          104
120 #define __NR_getitimer          105
121 #define __NR_swapoff            106
122 #define __NR_sysinfo            107
123 #define __NR_ipc                108
124 #define __NR_sendfile           109
125 #define __NR_setdomainname      110
126 #define __NR_uname              111
127 #define __NR_adjtimex           112
128 #define __NR_mprotect           113
129 #define __NR_vfork              114
130 #define __NR_init_module        115
131 #define __NR_delete_module      116
132 #define __NR_quotactl           117
133 #define __NR_getpgid            118
134 #define __NR_bdflush            119
135 #define __NR_sysfs              120
136 #define __NR_personality        121
137 #define __NR_afs_syscall        122 /* Syscall for Andrew File System */
138 #define __NR_getdents           123
139 #define __NR_flock              124
140 #define __NR_msync              125
141 #define __NR_readv              126
142 #define __NR_writev             127
143 #define __NR_getsid             128
144 #define __NR_fdatasync          129
145 #define __NR__sysctl            130
146 #define __NR_mlock              131
147 #define __NR_munlock            132
148 #define __NR_mlockall           133
149 #define __NR_munlockall         134
150 #define __NR_sched_setparam             135
151 #define __NR_sched_getparam             136
152 #define __NR_sched_setscheduler         137
153 #define __NR_sched_getscheduler         138
154 #define __NR_sched_yield                139
155 #define __NR_sched_get_priority_max     140
156 #define __NR_sched_get_priority_min     141
157 #define __NR_sched_rr_get_interval      142
158 #define __NR_nanosleep          143
159 #define __NR_poll               144
160 #define __NR_nfsservctl         145
161 #define __NR_setresgid          146
162 #define __NR_getresgid          147
163 #define __NR_prctl              148
164 #define __NR_socket             149
165 #define __NR_bind               150
166 #define __NR_connect            151
167 #define __NR_listen             152
168 #define __NR_accept             153
169 #define __NR_getsockname        154
170 #define __NR_getpeername        155
171 #define __NR_socketpair         156
172 #define __NR_send               157
173 #define __NR_recv               158
174 #define __NR_sendto             159
175 #define __NR_recvfrom           160
176 #define __NR_shutdown           161
177 #define __NR_setsockopt         162
178 #define __NR_getsockopt         163
179 #define __NR_sendmsg            164
180 #define __NR_recvmsg            165
181 #define __NR_truncate64         166
182 #define __NR_ftruncate64        167
183 #define __NR_stat64             168
184 #define __NR_lstat64            169
185 #define __NR_fstat64            170
186 #define __NR_pivot_root         171
187 #define __NR_mincore            172
188 #define __NR_madvise            173
189 #define __NR_getdents64         174
190 #define __NR_fcntl64            175
191 #define __NR_gettid             176
192 #define __NR_readahead          177
193 #define __NR_setxattr           178
194 #define __NR_lsetxattr          179
195 #define __NR_fsetxattr          180
196 #define __NR_getxattr           181
197 #define __NR_lgetxattr          182
198 #define __NR_fgetxattr          183
199 #define __NR_listxattr          184
200 #define __NR_llistxattr         185
201 #define __NR_flistxattr         186
202 #define __NR_removexattr        187
203 #define __NR_lremovexattr       188
204 #define __NR_fremovexattr       189
205 #define __NR_tkill              190
206 #define __NR_sendfile64         191
207 #define __NR_futex              192
208 #define __NR_sched_setaffinity  193
209 #define __NR_sched_getaffinity  194
210 #define __NR_capget             195
211 #define __NR_capset             196
212 #define __NR_io_setup           197
213 #define __NR_io_destroy         198
214 #define __NR_io_getevents       199
215 #define __NR_io_submit          200
216 #define __NR_io_cancel          201
217 #define __NR_fadvise64          202
218 #define __NR_exit_group         203
219 #define __NR_lookup_dcookie     204
220 #define __NR_epoll_create       205
221 #define __NR_epoll_ctl          206
222 #define __NR_epoll_wait         207
223 #define __NR_remap_file_pages   208
224 #define __NR_set_tid_address    209
225
226 #define __NR_timer_create       210
227 #define __NR_timer_settime      211
228 #define __NR_timer_gettime      212
229 #define __NR_timer_getoverrun   213
230 #define __NR_timer_delete       214
231 #define __NR_clock_settime      215
232 #define __NR_clock_gettime      216
233 #define __NR_clock_getres       217
234 #define __NR_clock_nanosleep    218
235 #define __NR_statfs64           219
236 #define __NR_fstatfs64          220
237 #define __NR_tgkill             221
238                                 /* 222 reserved for tux */
239 #define __NR_utimes             223
240 #define __NR_fadvise64_64       224
241
242 #define __NR_cacheflush         225
243
244 #define __NR_vserver            226
245 #define __NR_mq_open            227
246 #define __NR_mq_unlink          228
247 #define __NR_mq_timedsend       229
248 #define __NR_mq_timedreceive    230
249 #define __NR_mq_notify          231
250 #define __NR_mq_getsetattr      232
251 #define __NR_kexec_load         233
252 #define __NR_waitid             234
253 #define __NR_add_key            235
254 #define __NR_request_key        236
255 #define __NR_keyctl             237
256 #define __NR_ioprio_set         238
257 #define __NR_ioprio_get         239
258 #define __NR_inotify_init       240
259 #define __NR_inotify_add_watch  241
260 #define __NR_inotify_rm_watch   242
261 #define __NR_openat             243
262 #define __NR_mkdirat            244
263 #define __NR_mknodat            245
264 #define __NR_fchownat           246
265 #define __NR_futimesat          247
266 #define __NR_fstatat64          248
267 #define __NR_unlinkat           249
268 #define __NR_renameat           250
269 #define __NR_linkat             251
270 #define __NR_symlinkat          252
271 #define __NR_readlinkat         253
272 #define __NR_fchmodat           254
273 #define __NR_faccessat          255
274 #define __NR_pselect6           256
275 #define __NR_ppoll              257
276 #define __NR_unshare            258
277 #define __NR_set_robust_list    259
278 #define __NR_get_robust_list    260
279 #define __NR_splice             261
280 #define __NR_sync_file_range    262
281 #define __NR_tee                263
282 #define __NR_vmsplice           264
283
284 #define NR_syscalls             265
285
286
287 /*
288  * AVR32 calling convention for system calls:
289  *   - System call number in r8
290  *   - Parameters in r12 and downwards to r9 as well as r6 and r5.
291  *   - Return value in r12
292  */
293
294 /*
295  * user-visible error numbers are in the range -1 - -124: see
296  * <asm-generic/errno.h>
297  */
298
299 #define __syscall_return(type, res) do {                                \
300                 if ((unsigned long)(res) >= (unsigned long)(-125)) {    \
301                         errno = -(res);                                 \
302                         res = -1;                                       \
303                 }                                                       \
304                 return (type) (res);                                    \
305         } while (0)
306
307 #ifdef __KERNEL__
308 #define __ARCH_WANT_IPC_PARSE_VERSION
309 #define __ARCH_WANT_STAT64
310 #define __ARCH_WANT_SYS_ALARM
311 #define __ARCH_WANT_SYS_GETHOSTNAME
312 #define __ARCH_WANT_SYS_PAUSE
313 #define __ARCH_WANT_SYS_TIME
314 #define __ARCH_WANT_SYS_UTIME
315 #define __ARCH_WANT_SYS_WAITPID
316 #define __ARCH_WANT_SYS_FADVISE64
317 #define __ARCH_WANT_SYS_GETPGRP
318 #define __ARCH_WANT_SYS_LLSEEK
319 #define __ARCH_WANT_SYS_GETPGRP
320 #define __ARCH_WANT_SYS_RT_SIGACTION
321 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
322 #endif
323
324 #if defined(__KERNEL_SYSCALLS__) || defined(__CHECKER__)
325
326 #include <linux/types.h>
327 #include <linux/linkage.h>
328 #include <asm/signal.h>
329
330 struct pt_regs;
331
332 /*
333  * we need this inline - forking from kernel space will result
334  * in NO COPY ON WRITE (!!!), until an execve is executed. This
335  * is no problem, but for the stack. This is handled by not letting
336  * main() use the stack at all after fork(). Thus, no function
337  * calls - which means inline code for fork too, as otherwise we
338  * would use the stack upon exit from 'fork()'.
339  *
340  * Actually only pause and fork are needed inline, so that there
341  * won't be any messing with the stack from main(), but we define
342  * some others too.
343  */
344 static inline int execve(const char *file, char **argv, char **envp)
345 {
346         register long scno asm("r8") = __NR_execve;
347         register long sc1 asm("r12") = (long)file;
348         register long sc2 asm("r11") = (long)argv;
349         register long sc3 asm("r10") = (long)envp;
350         int res;
351
352         asm volatile("scall"
353                      : "=r"(sc1)
354                      : "r"(scno), "0"(sc1), "r"(sc2), "r"(sc3)
355                      : "lr", "memory");
356         res = sc1;
357         __syscall_return(int, res);
358 }
359
360 asmlinkage long sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize);
361 asmlinkage int sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
362                                struct pt_regs *regs);
363 asmlinkage int sys_rt_sigreturn(struct pt_regs *regs);
364 asmlinkage int sys_pipe(unsigned long __user *filedes);
365 asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,
366                           unsigned long prot, unsigned long flags,
367                           unsigned long fd, off_t offset);
368 asmlinkage int sys_cacheflush(int operation, void __user *addr, size_t len);
369 asmlinkage int sys_fork(struct pt_regs *regs);
370 asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp,
371                          unsigned long parent_tidptr,
372                          unsigned long child_tidptr, struct pt_regs *regs);
373 asmlinkage int sys_vfork(struct pt_regs *regs);
374 asmlinkage int sys_execve(char __user *ufilename, char __user *__user *uargv,
375                           char __user *__user *uenvp, struct pt_regs *regs);
376
377 #endif
378
379 /*
380  * "Conditional" syscalls
381  *
382  * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
383  * but it doesn't work on all toolchains, so we just do it by hand
384  */
385 #define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall");
386
387 #endif /* __ASM_AVR32_UNISTD_H */