1/* 2 * BK Id: SCCS/s.unistd.h 1.11 10/18/01 17:29:53 trini 3 */ 4#ifndef _ASM_PPC_UNISTD_H_ 5#define _ASM_PPC_UNISTD_H_ 6 7/* 8 * This file contains the system call numbers. 9 */ 10 11#define __NR_exit 1 12#define __NR_fork 2 13#define __NR_read 3 14#define __NR_write 4 15#define __NR_open 5 16#define __NR_close 6 17#define __NR_waitpid 7 18#define __NR_creat 8 19#define __NR_link 9 20#define __NR_unlink 10 21#define __NR_execve 11 22#define __NR_chdir 12 23#define __NR_time 13 24#define __NR_mknod 14 25#define __NR_chmod 15 26#define __NR_lchown 16 27#define __NR_break 17 28#define __NR_oldstat 18 29#define __NR_lseek 19 30#define __NR_getpid 20 31#define __NR_mount 21 32#define __NR_umount 22 33#define __NR_setuid 23 34#define __NR_getuid 24 35#define __NR_stime 25 36#define __NR_ptrace 26 37#define __NR_alarm 27 38#define __NR_oldfstat 28 39#define __NR_pause 29 40#define __NR_utime 30 41#define __NR_stty 31 42#define __NR_gtty 32 43#define __NR_access 33 44#define __NR_nice 34 45#define __NR_ftime 35 46#define __NR_sync 36 47#define __NR_kill 37 48#define __NR_rename 38 49#define __NR_mkdir 39 50#define __NR_rmdir 40 51#define __NR_dup 41 52#define __NR_pipe 42 53#define __NR_times 43 54#define __NR_prof 44 55#define __NR_brk 45 56#define __NR_setgid 46 57#define __NR_getgid 47 58#define __NR_signal 48 59#define __NR_geteuid 49 60#define __NR_getegid 50 61#define __NR_acct 51 62#define __NR_umount2 52 63#define __NR_lock 53 64#define __NR_ioctl 54 65#define __NR_fcntl 55 66#define __NR_mpx 56 67#define __NR_setpgid 57 68#define __NR_ulimit 58 69#define __NR_oldolduname 59 70#define __NR_umask 60 71#define __NR_chroot 61 72#define __NR_ustat 62 73#define __NR_dup2 63 74#define __NR_getppid 64 75#define __NR_getpgrp 65 76#define __NR_setsid 66 77#define __NR_sigaction 67 78#define __NR_sgetmask 68 79#define __NR_ssetmask 69 80#define __NR_setreuid 70 81#define __NR_setregid 71 82#define __NR_sigsuspend 72 83#define __NR_sigpending 73 84#define __NR_sethostname 74 85#define __NR_setrlimit 75 86#define __NR_getrlimit 76 87#define __NR_getrusage 77 88#define __NR_gettimeofday 78 89#define __NR_settimeofday 79 90#define __NR_getgroups 80 91#define __NR_setgroups 81 92#define __NR_select 82 93#define __NR_symlink 83 94#define __NR_oldlstat 84 95#define __NR_readlink 85 96#define __NR_uselib 86 97#define __NR_swapon 87 98#define __NR_reboot 88 99#define __NR_readdir 89 100#define __NR_mmap 90 101#define __NR_munmap 91 102#define __NR_truncate 92 103#define __NR_ftruncate 93 104#define __NR_fchmod 94 105#define __NR_fchown 95 106#define __NR_getpriority 96 107#define __NR_setpriority 97 108#define __NR_profil 98 109#define __NR_statfs 99 110#define __NR_fstatfs 100 111#define __NR_ioperm 101 112#define __NR_socketcall 102 113#define __NR_syslog 103 114#define __NR_setitimer 104 115#define __NR_getitimer 105 116#define __NR_stat 106 117#define __NR_lstat 107 118#define __NR_fstat 108 119#define __NR_olduname 109 120#define __NR_iopl 110 121#define __NR_vhangup 111 122#define __NR_idle 112 123#define __NR_vm86 113 124#define __NR_wait4 114 125#define __NR_swapoff 115 126#define __NR_sysinfo 116 127#define __NR_ipc 117 128#define __NR_fsync 118 129#define __NR_sigreturn 119 130#define __NR_clone 120 131#define __NR_setdomainname 121 132#define __NR_uname 122 133#define __NR_modify_ldt 123 134#define __NR_adjtimex 124 135#define __NR_mprotect 125 136#define __NR_sigprocmask 126 137#define __NR_create_module 127 138#define __NR_init_module 128 139#define __NR_delete_module 129 140#define __NR_get_kernel_syms 130 141#define __NR_quotactl 131 142#define __NR_getpgid 132 143#define __NR_fchdir 133 144#define __NR_bdflush 134 145#define __NR_sysfs 135 146#define __NR_personality 136 147#define __NR_afs_syscall 137 /* Syscall for Andrew File System */ 148#define __NR_setfsuid 138 149#define __NR_setfsgid 139 150#define __NR__llseek 140 151#define __NR_getdents 141 152#define __NR__newselect 142 153#define __NR_flock 143 154#define __NR_msync 144 155#define __NR_readv 145 156#define __NR_writev 146 157#define __NR_getsid 147 158#define __NR_fdatasync 148 159#define __NR__sysctl 149 160#define __NR_mlock 150 161#define __NR_munlock 151 162#define __NR_mlockall 152 163#define __NR_munlockall 153 164#define __NR_sched_setparam 154 165#define __NR_sched_getparam 155 166#define __NR_sched_setscheduler 156 167#define __NR_sched_getscheduler 157 168#define __NR_sched_yield 158 169#define __NR_sched_get_priority_max 159 170#define __NR_sched_get_priority_min 160 171#define __NR_sched_rr_get_interval 161 172#define __NR_nanosleep 162 173#define __NR_mremap 163 174#define __NR_setresuid 164 175#define __NR_getresuid 165 176#define __NR_query_module 166 177#define __NR_poll 167 178#define __NR_nfsservctl 168 179#define __NR_setresgid 169 180#define __NR_getresgid 170 181#define __NR_prctl 171 182#define __NR_rt_sigreturn 172 183#define __NR_rt_sigaction 173 184#define __NR_rt_sigprocmask 174 185#define __NR_rt_sigpending 175 186#define __NR_rt_sigtimedwait 176 187#define __NR_rt_sigqueueinfo 177 188#define __NR_rt_sigsuspend 178 189#define __NR_pread 179 190#define __NR_pwrite 180 191#define __NR_chown 181 192#define __NR_getcwd 182 193#define __NR_capget 183 194#define __NR_capset 184 195#define __NR_sigaltstack 185 196#define __NR_sendfile 186 197#define __NR_getpmsg 187 /* some people actually want streams */ 198#define __NR_putpmsg 188 /* some people actually want streams */ 199#define __NR_vfork 189 200#define __NR_ugetrlimit 190 /* SuS compliant getrlimit */ 201#define __NR_readahead 191 202#define __NR_mmap2 192 203#define __NR_truncate64 193 204#define __NR_ftruncate64 194 205#define __NR_stat64 195 206#define __NR_lstat64 196 207#define __NR_fstat64 197 208#define __NR_pciconfig_read 198 209#define __NR_pciconfig_write 199 210#define __NR_pciconfig_iobase 200 211#define __NR_multiplexer 201 212#define __NR_getdents64 202 213#define __NR_pivot_root 203 214#define __NR_fcntl64 204 215#define __NR_madvise 205 216#define __NR_mincore 206 217#define __NR_gettid 207 218#define __NR_tkill 208 219#define __NR_setxattr 209 220#define __NR_lsetxattr 210 221#define __NR_fsetxattr 211 222#define __NR_getxattr 212 223#define __NR_lgetxattr 213 224#define __NR_fgetxattr 214 225#define __NR_listxattr 215 226#define __NR_llistxattr 216 227#define __NR_flistxattr 217 228#define __NR_removexattr 218 229#define __NR_lremovexattr 219 230#define __NR_fremovexattr 220 231 232#define __NR(n) #n 233 234 235#define __syscall_return(type) \ 236 return (__sc_err & 0x10000000 ? errno = __sc_ret, __sc_ret = -1 : 0), \ 237 (type) __sc_ret 238 239#define __syscall_clobbers \ 240 "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12" 241 242#define _syscall0(type,name) \ 243type name(void) \ 244{ \ 245 unsigned long __sc_ret, __sc_err; \ 246 { \ 247 register unsigned long __sc_0 __asm__ ("r0"); \ 248 register unsigned long __sc_3 __asm__ ("r3"); \ 249 \ 250 __sc_0 = __NR_##name; \ 251 __asm__ __volatile__ \ 252 ("sc \n\t" \ 253 "mfcr %1 " \ 254 : "=&r" (__sc_3), "=&r" (__sc_0) \ 255 : "0" (__sc_3), "1" (__sc_0) \ 256 : __syscall_clobbers); \ 257 __sc_ret = __sc_3; \ 258 __sc_err = __sc_0; \ 259 } \ 260 __syscall_return (type); \ 261} 262 263#define _syscall1(type,name,type1,arg1) \ 264type name(type1 arg1) \ 265{ \ 266 unsigned long __sc_ret, __sc_err; \ 267 { \ 268 register unsigned long __sc_0 __asm__ ("r0"); \ 269 register unsigned long __sc_3 __asm__ ("r3"); \ 270 \ 271 __sc_3 = (unsigned long) (arg1); \ 272 __sc_0 = __NR_##name; \ 273 __asm__ __volatile__ \ 274 ("sc \n\t" \ 275 "mfcr %1 " \ 276 : "=&r" (__sc_3), "=&r" (__sc_0) \ 277 : "0" (__sc_3), "1" (__sc_0) \ 278 : __syscall_clobbers); \ 279 __sc_ret = __sc_3; \ 280 __sc_err = __sc_0; \ 281 } \ 282 __syscall_return (type); \ 283} 284 285#define _syscall2(type,name,type1,arg1,type2,arg2) \ 286type name(type1 arg1, type2 arg2) \ 287{ \ 288 unsigned long __sc_ret, __sc_err; \ 289 { \ 290 register unsigned long __sc_0 __asm__ ("r0"); \ 291 register unsigned long __sc_3 __asm__ ("r3"); \ 292 register unsigned long __sc_4 __asm__ ("r4"); \ 293 \ 294 __sc_3 = (unsigned long) (arg1); \ 295 __sc_4 = (unsigned long) (arg2); \ 296 __sc_0 = __NR_##name; \ 297 __asm__ __volatile__ \ 298 ("sc \n\t" \ 299 "mfcr %1 " \ 300 : "=&r" (__sc_3), "=&r" (__sc_0) \ 301 : "0" (__sc_3), "1" (__sc_0), \ 302 "r" (__sc_4) \ 303 : __syscall_clobbers); \ 304 __sc_ret = __sc_3; \ 305 __sc_err = __sc_0; \ 306 } \ 307 __syscall_return (type); \ 308} 309 310#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ 311type name(type1 arg1, type2 arg2, type3 arg3) \ 312{ \ 313 unsigned long __sc_ret, __sc_err; \ 314 { \ 315 register unsigned long __sc_0 __asm__ ("r0"); \ 316 register unsigned long __sc_3 __asm__ ("r3"); \ 317 register unsigned long __sc_4 __asm__ ("r4"); \ 318 register unsigned long __sc_5 __asm__ ("r5"); \ 319 \ 320 __sc_3 = (unsigned long) (arg1); \ 321 __sc_4 = (unsigned long) (arg2); \ 322 __sc_5 = (unsigned long) (arg3); \ 323 __sc_0 = __NR_##name; \ 324 __asm__ __volatile__ \ 325 ("sc \n\t" \ 326 "mfcr %1 " \ 327 : "=&r" (__sc_3), "=&r" (__sc_0) \ 328 : "0" (__sc_3), "1" (__sc_0), \ 329 "r" (__sc_4), \ 330 "r" (__sc_5) \ 331 : __syscall_clobbers); \ 332 __sc_ret = __sc_3; \ 333 __sc_err = __sc_0; \ 334 } \ 335 __syscall_return (type); \ 336} 337 338#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ 339type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ 340{ \ 341 unsigned long __sc_ret, __sc_err; \ 342 { \ 343 register unsigned long __sc_0 __asm__ ("r0"); \ 344 register unsigned long __sc_3 __asm__ ("r3"); \ 345 register unsigned long __sc_4 __asm__ ("r4"); \ 346 register unsigned long __sc_5 __asm__ ("r5"); \ 347 register unsigned long __sc_6 __asm__ ("r6"); \ 348 \ 349 __sc_3 = (unsigned long) (arg1); \ 350 __sc_4 = (unsigned long) (arg2); \ 351 __sc_5 = (unsigned long) (arg3); \ 352 __sc_6 = (unsigned long) (arg4); \ 353 __sc_0 = __NR_##name; \ 354 __asm__ __volatile__ \ 355 ("sc \n\t" \ 356 "mfcr %1 " \ 357 : "=&r" (__sc_3), "=&r" (__sc_0) \ 358 : "0" (__sc_3), "1" (__sc_0), \ 359 "r" (__sc_4), \ 360 "r" (__sc_5), \ 361 "r" (__sc_6) \ 362 : __syscall_clobbers); \ 363 __sc_ret = __sc_3; \ 364 __sc_err = __sc_0; \ 365 } \ 366 __syscall_return (type); \ 367} 368 369#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \ 370type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \ 371{ \ 372 unsigned long __sc_ret, __sc_err; \ 373 { \ 374 register unsigned long __sc_0 __asm__ ("r0"); \ 375 register unsigned long __sc_3 __asm__ ("r3"); \ 376 register unsigned long __sc_4 __asm__ ("r4"); \ 377 register unsigned long __sc_5 __asm__ ("r5"); \ 378 register unsigned long __sc_6 __asm__ ("r6"); \ 379 register unsigned long __sc_7 __asm__ ("r7"); \ 380 \ 381 __sc_3 = (unsigned long) (arg1); \ 382 __sc_4 = (unsigned long) (arg2); \ 383 __sc_5 = (unsigned long) (arg3); \ 384 __sc_6 = (unsigned long) (arg4); \ 385 __sc_7 = (unsigned long) (arg5); \ 386 __sc_0 = __NR_##name; \ 387 __asm__ __volatile__ \ 388 ("sc \n\t" \ 389 "mfcr %1 " \ 390 : "=&r" (__sc_3), "=&r" (__sc_0) \ 391 : "0" (__sc_3), "1" (__sc_0), \ 392 "r" (__sc_4), \ 393 "r" (__sc_5), \ 394 "r" (__sc_6), \ 395 "r" (__sc_7) \ 396 : __syscall_clobbers); \ 397 __sc_ret = __sc_3; \ 398 __sc_err = __sc_0; \ 399 } \ 400 __syscall_return (type); \ 401} 402 403 404#ifdef __KERNEL_SYSCALLS__ 405 406/* 407 * Forking from kernel space will result in the child getting a new, 408 * empty kernel stack area. Thus the child cannot access automatic 409 * variables set in the parent unless they are in registers, and the 410 * procedure where the fork was done cannot return to its caller in 411 * the child. 412 */ 413 414/* 415 * System call prototypes. 416 */ 417#define __NR__exit __NR_exit 418static inline _syscall0(int,pause) 419static inline _syscall0(int,sync) 420static inline _syscall0(pid_t,setsid) 421static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count) 422static inline _syscall3(int,read,int,fd,char *,buf,off_t,count) 423static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,count) 424static inline _syscall1(int,dup,int,fd) 425static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp) 426static inline _syscall3(int,open,const char *,file,int,flag,int,mode) 427static inline _syscall1(int,close,int,fd) 428static inline _syscall1(int,_exit,int,exitcode) 429static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options) 430static inline _syscall1(int,delete_module,const char *,name) 431 432static inline pid_t wait(int * wait_stat) 433{ 434 return waitpid(-1,wait_stat,0); 435} 436 437#endif /* __KERNEL_SYSCALLS__ */ 438 439#endif /* _ASM_PPC_UNISTD_H_ */ 440