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