root/include/asm-m68k/unistd.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. _syscall0
  2. wait

   1 #ifndef _ASM_M68K_UNISTD_H_
   2 #define _ASM_M68K_UNISTD_H_
   3 
   4 /*
   5  * This file contains the system call numbers.
   6  */
   7 
   8 #define __NR_setup                0     /* used only by init, to get system going */
   9 #define __NR_exit                 1
  10 #define __NR_fork                 2
  11 #define __NR_read                 3
  12 #define __NR_write                4
  13 #define __NR_open                 5
  14 #define __NR_close                6
  15 #define __NR_waitpid              7
  16 #define __NR_creat                8
  17 #define __NR_link                 9
  18 #define __NR_unlink              10
  19 #define __NR_execve              11
  20 #define __NR_chdir               12
  21 #define __NR_time                13
  22 #define __NR_mknod               14
  23 #define __NR_chmod               15
  24 #define __NR_chown               16
  25 #define __NR_break               17
  26 #define __NR_oldstat             18
  27 #define __NR_lseek               19
  28 #define __NR_getpid              20
  29 #define __NR_mount               21
  30 #define __NR_umount              22
  31 #define __NR_setuid              23
  32 #define __NR_getuid              24
  33 #define __NR_stime               25
  34 #define __NR_ptrace              26
  35 #define __NR_alarm               27
  36 #define __NR_oldfstat            28
  37 #define __NR_pause               29
  38 #define __NR_utime               30
  39 #define __NR_stty                31
  40 #define __NR_gtty                32
  41 #define __NR_access              33
  42 #define __NR_nice                34
  43 #define __NR_ftime               35
  44 #define __NR_sync                36
  45 #define __NR_kill                37
  46 #define __NR_rename              38
  47 #define __NR_mkdir               39
  48 #define __NR_rmdir               40
  49 #define __NR_dup                 41
  50 #define __NR_pipe                42
  51 #define __NR_times               43
  52 #define __NR_prof                44
  53 #define __NR_brk                 45
  54 #define __NR_setgid              46
  55 #define __NR_getgid              47
  56 #define __NR_signal              48
  57 #define __NR_geteuid             49
  58 #define __NR_getegid             50
  59 #define __NR_acct                51
  60 #define __NR_phys                52
  61 #define __NR_lock                53
  62 #define __NR_ioctl               54
  63 #define __NR_fcntl               55
  64 #define __NR_mpx                 56
  65 #define __NR_setpgid             57
  66 #define __NR_ulimit              58
  67 #define __NR_oldolduname         59
  68 #define __NR_umask               60
  69 #define __NR_chroot              61
  70 #define __NR_ustat               62
  71 #define __NR_dup2                63
  72 #define __NR_getppid             64
  73 #define __NR_getpgrp             65
  74 #define __NR_setsid              66
  75 #define __NR_sigaction           67
  76 #define __NR_sgetmask            68
  77 #define __NR_ssetmask            69
  78 #define __NR_setreuid            70
  79 #define __NR_setregid            71
  80 #define __NR_sigsuspend          72
  81 #define __NR_sigpending          73
  82 #define __NR_sethostname         74
  83 #define __NR_setrlimit           75
  84 #define __NR_getrlimit           76
  85 #define __NR_getrusage           77
  86 #define __NR_gettimeofday        78
  87 #define __NR_settimeofday        79
  88 #define __NR_getgroups           80
  89 #define __NR_setgroups           81
  90 #define __NR_select              82
  91 #define __NR_symlink             83
  92 #define __NR_oldlstat            84
  93 #define __NR_readlink            85
  94 #define __NR_uselib              86
  95 #define __NR_swapon              87
  96 #define __NR_reboot              88
  97 #define __NR_readdir             89
  98 #define __NR_mmap                90
  99 #define __NR_munmap              91
 100 #define __NR_truncate            92
 101 #define __NR_ftruncate           93
 102 #define __NR_fchmod              94
 103 #define __NR_fchown              95
 104 #define __NR_getpriority         96
 105 #define __NR_setpriority         97
 106 #define __NR_profil              98
 107 #define __NR_statfs              99
 108 #define __NR_fstatfs            100
 109 #define __NR_ioperm             101
 110 #define __NR_socketcall         102
 111 #define __NR_syslog             103
 112 #define __NR_setitimer          104
 113 #define __NR_getitimer          105
 114 #define __NR_stat               106
 115 #define __NR_lstat              107
 116 #define __NR_fstat              108
 117 #define __NR_olduname           109
 118 #define __NR_iopl               /* 110 */ not supported
 119 #define __NR_vhangup            111
 120 #define __NR_idle               112
 121 #define __NR_vm86               /* 113 */ not supported
 122 #define __NR_wait4              114
 123 #define __NR_swapoff            115
 124 #define __NR_sysinfo            116
 125 #define __NR_ipc                117
 126 #define __NR_fsync              118
 127 #define __NR_sigreturn          119
 128 #define __NR_clone              120
 129 #define __NR_setdomainname      121
 130 #define __NR_uname              122
 131 #define __NR_modify_ldt         123
 132 #define __NR_adjtimex           124
 133 #define __NR_mprotect           125
 134 #define __NR_sigprocmask        126
 135 #define __NR_create_module      127
 136 #define __NR_init_module        128
 137 #define __NR_delete_module      129
 138 #define __NR_get_kernel_syms    130
 139 #define __NR_quotactl           131
 140 #define __NR_getpgid            132
 141 #define __NR_fchdir             133
 142 #define __NR_bdflush            134
 143 #define __NR_sysfs              135
 144 #define __NR_personality        136
 145 #define __NR_afs_syscall        137 /* Syscall for Andrew File System */
 146 #define __NR_setfsuid           138
 147 #define __NR_setfsgid           139
 148 #define __NR__llseek            140
 149 #define __NR_getdents           141
 150 #define __NR__newselect         142
 151 #define __NR_flock              143
 152 #define __NR_msync              144
 153 #define __NR_readv              145
 154 #define __NR_writev             146
 155 #define __NR_getsid             147
 156 #define __NR_fdatasync          148
 157 #define __NR__sysctl            149
 158 #define __NR_mlock              150
 159 #define __NR_munlock            151
 160 #define __NR_mlockall           152
 161 #define __NR_munlockall         153
 162 #define __NR_sched_setparam             154
 163 #define __NR_sched_getparam             155
 164 #define __NR_sched_setscheduler         156
 165 #define __NR_sched_getscheduler         157
 166 #define __NR_sched_yield                158
 167 #define __NR_sched_get_priority_max     159
 168 #define __NR_sched_get_priority_min     160
 169 #define __NR_sched_rr_get_interval      161
 170 #define __NR_nanosleep          162
 171 #define __NR_mremap             163
 172 
 173 #ifdef __ELF__
 174 
 175 #define _syscall0(type,name) \
 176 type name(void) \
 177 { \
 178 register long __res __asm__ ("%d0") = __NR_##name; \
 179 __asm__ __volatile__ ("trap  #0" \
 180                       : "=g" (__res) \
 181                       : "0" (__NR_##name) \
 182                       : "%d0"); \
 183 if (__res >= 0) \
 184         return (type) __res; \
 185 errno = -__res; \
 186 return -1; \
 187 }
 188 
 189 #define _syscall1(type,name,atype,a) \
 190 type name(atype a) \
 191 { \
 192 register long __res __asm__ ("%d0") = __NR_##name; \
 193 __asm__ __volatile__ ("movel %2,%/d1\n\t" \
 194                       "trap  #0" \
 195                       : "=g" (__res) \
 196                       : "0" (__NR_##name), "g" ((long)(a)) \
 197                       : "%d0", "%d1"); \
 198 if (__res >= 0) \
 199         return (type) __res; \
 200 errno = -__res; \
 201 return -1; \
 202 }
 203 
 204 #define _syscall2(type,name,atype,a,btype,b) \
 205 type name(atype a,btype b) \
 206 { \
 207 register long __res __asm__ ("%d0") = __NR_##name; \
 208 __asm__ __volatile__ ("movel %2,%/d1\n\t" \
 209                       "movel %3,%/d2\n\t" \
 210                       "trap  #0" \
 211                       : "=g" (__res) \
 212                       : "0" (__NR_##name), "g" ((long)(a)), \
 213                                           "g" ((long)(b)) \
 214                       : "%d0", "%d1", "%d2"); \
 215 if (__res >= 0) \
 216         return (type) __res; \
 217 errno = -__res; \
 218 return -1; \
 219 }
 220 
 221 #define _syscall3(type,name,atype,a,btype,b,ctype,c) \
 222 type name(atype a,btype b,ctype c) \
 223 { \
 224 register long __res __asm__ ("%d0") = __NR_##name; \
 225 __asm__ __volatile__ ("movel %2,%/d1\n\t" \
 226                       "movel %3,%/d2\n\t" \
 227                       "movel %4,%/d3\n\t" \
 228                       "trap  #0" \
 229                       : "=g" (__res) \
 230                       : "0" (__NR_##name), "g" ((long)(a)), \
 231                                           "g" ((long)(b)), \
 232                                           "g" ((long)(c)) \
 233                       : "%d0", "%d1", "%d2", "%d3"); \
 234 if (__res >= 0) \
 235         return (type) __res; \
 236 errno = -__res; \
 237 return -1; \
 238 }
 239 
 240 #define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \
 241 type name (atype a, btype b, ctype c, dtype d) \
 242 { \
 243 register long __res __asm__ ("%d0") = __NR_##name; \
 244 __asm__ __volatile__ ("movel %2,%/d1\n\t" \
 245                       "movel %3,%/d2\n\t" \
 246                       "movel %4,%/d3\n\t" \
 247                       "movel %5,%/d4\n\t" \
 248                       "trap  #0" \
 249                       : "=g" (__res) \
 250                       : "0" (__NR_##name), "g" ((long)(a)), \
 251                                           "g" ((long)(b)), \
 252                                           "g" ((long)(c)), \
 253                                           "g" ((long)(d))  \
 254                       : "%d0", "%d1", "%d2", "%d3", "%d4"); \
 255 if (__res >= 0) \
 256         return (type) __res; \
 257 errno = -__res; \
 258 return -1; \
 259 }
 260 
 261 #define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \
 262 type name (atype a,btype b,ctype c,dtype d,etype e) \
 263 { \
 264 register long __res __asm__ ("%d0") = __NR_##name; \
 265 __asm__ __volatile__ ("movel %2,%/d1\n\t" \
 266                       "movel %3,%/d2\n\t" \
 267                       "movel %4,%/d3\n\t" \
 268                       "movel %5,%/d4\n\t" \
 269                       "movel %6,%/d5\n\t" \
 270                       "trap  #0" \
 271                       : "=g" (__res) \
 272                       : "0" (__NR_##name), "g" ((long)(a)), \
 273                                           "g" ((long)(b)), \
 274                                           "g" ((long)(c)), \
 275                                           "g" ((long)(d)), \
 276                                           "g" ((long)(e))  \
 277                       : "%d0", "%d1", "%d2", "%d3", "%d4", "%d5"); \
 278 if (__res >= 0) \
 279         return (type) __res; \
 280 errno = -__res; \
 281 return -1; \
 282 }
 283 
 284 #else /* not ELF; a.out */
 285 
 286 /* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */
 287 #define _syscall0(type,name) \
 288 type name(void) \
 289 { \
 290 register long __res __asm__ ("d0") = __NR_##name; \
 291 __asm__ __volatile__ ("trap  #0" \
 292                       : "=g" (__res) \
 293                       : "0" (__NR_##name) \
 294                       : "d0"); \
 295 if (__res >= 0) \
 296         return (type) __res; \
 297 errno = -__res; \
 298 return -1; \
 299 }
 300 
 301 #define _syscall1(type,name,atype,a) \
 302 type name(atype a) \
 303 { \
 304 register long __res __asm__ ("d0") = __NR_##name; \
 305 __asm__ __volatile__ ("movel %2,d1\n\t" \
 306                       "trap  #0" \
 307                       : "=g" (__res) \
 308                       : "0" (__NR_##name), "g" ((long)(a)) \
 309                       : "d0", "d1"); \
 310 if (__res >= 0) \
 311         return (type) __res; \
 312 errno = -__res; \
 313 return -1; \
 314 }
 315 
 316 #define _syscall2(type,name,atype,a,btype,b) \
 317 type name(atype a,btype b) \
 318 { \
 319 register long __res __asm__ ("d0") = __NR_##name; \
 320 __asm__ __volatile__ ("movel %2,d1\n\t" \
 321                       "movel %3,d2\n\t" \
 322                       "trap  #0" \
 323                       : "=g" (__res) \
 324                       : "0" (__NR_##name), "g" ((long)(a)), \
 325                                           "g" ((long)(b)) \
 326                       : "d0", "d1", "d2"); \
 327 if (__res >= 0) \
 328         return (type) __res; \
 329 errno = -__res; \
 330 return -1; \
 331 }
 332 
 333 #define _syscall3(type,name,atype,a,btype,b,ctype,c) \
 334 type name(atype a,btype b,ctype c) \
 335 { \
 336 register long __res __asm__ ("d0") = __NR_##name; \
 337 __asm__ __volatile__ ("movel %2,d1\n\t" \
 338                       "movel %3,d2\n\t" \
 339                       "movel %4,d3\n\t" \
 340                       "trap  #0" \
 341                       : "=g" (__res) \
 342                       : "0" (__NR_##name), "g" ((long)(a)), \
 343                                           "g" ((long)(b)), \
 344                                           "g" ((long)(c)) \
 345                       : "d0", "d1", "d2", "d3"); \
 346 if (__res >= 0) \
 347         return (type) __res; \
 348 errno = -__res; \
 349 return -1; \
 350 }
 351 
 352 #define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \
 353 type name (atype a, btype b, ctype c, dtype d) \
 354 { \
 355 register long __res __asm__ ("d0") = __NR_##name; \
 356 __asm__ __volatile__ ("movel %2,d1\n\t" \
 357                       "movel %3,d2\n\t" \
 358                       "movel %4,d3\n\t" \
 359                       "movel %5,d4\n\t" \
 360                       "trap  #0" \
 361                       : "=g" (__res) \
 362                       : "0" (__NR_##name), "g" ((long)(a)), \
 363                                           "g" ((long)(b)), \
 364                                           "g" ((long)(c)), \
 365                                           "g" ((long)(d))  \
 366                       : "d0", "d1", "d2", "d3", "d4"); \
 367 if (__res >= 0) \
 368         return (type) __res; \
 369 errno = -__res; \
 370 return -1; \
 371 }
 372 
 373 #define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \
 374 type name (atype a,btype b,ctype c,dtype d,etype e) \
 375 { \
 376 register long __res __asm__ ("d0") = __NR_##name; \
 377 __asm__ __volatile__ ("movel %2,d1\n\t" \
 378                       "movel %3,d2\n\t" \
 379                       "movel %4,d3\n\t" \
 380                       "movel %5,d4\n\t" \
 381                       "movel %6,d5\n\t" \
 382                       "trap  #0" \
 383                       : "=g" (__res) \
 384                       : "0" (__NR_##name), "g" ((long)(a)), \
 385                                           "g" ((long)(b)), \
 386                                           "g" ((long)(c)), \
 387                                           "g" ((long)(d)), \
 388                                           "g" ((long)(e))  \
 389                       : "d0", "d1", "d2", "d3", "d4", "d5"); \
 390 if (__res >= 0) \
 391         return (type) __res; \
 392 errno = -__res; \
 393 return -1; \
 394 }
 395 
 396 #endif /* ELF or otherwise */
 397 
 398 #ifdef __KERNEL_SYSCALLS__
 399 
 400 /*
 401  * we need this inline - forking from kernel space will result
 402  * in NO COPY ON WRITE (!!!), until an execve is executed. This
 403  * is no problem, but for the stack. This is handled by not letting
 404  * main() use the stack at all after fork(). Thus, no function
 405  * calls - which means inline code for fork too, as otherwise we
 406  * would use the stack upon exit from 'fork()'.
 407  *
 408  * Actually only pause and fork are needed inline, so that there
 409  * won't be any messing with the stack from main(), but we define
 410  * some others too.
 411  */
 412 #define __NR__exit __NR_exit
 413 static inline _syscall0(int,idle)
     /* [previous][next][first][last][top][bottom][index][help] */
 414 static inline _syscall0(int,fork)
 415 static inline _syscall2(int,clone,unsigned long,flags,char *,usp)
 416 static inline _syscall0(int,pause)
 417 static inline _syscall0(int,setup)
 418 static inline _syscall0(int,sync)
 419 static inline _syscall0(pid_t,setsid)
 420 static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count)
 421 static inline _syscall1(int,dup,int,fd)
 422 static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp)
 423 static inline _syscall3(int,open,const char *,file,int,flag,int,mode)
 424 static inline _syscall1(int,close,int,fd)
 425 static inline _syscall1(int,_exit,int,exitcode)
 426 static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
 427 
 428 /*
 429  * This is the mechanism for creating a new kernel thread.
 430  *
 431  * NOTE! Only a kernel-only process(ie the swapper or direct descendants
 432  * who haven't done an "execve()") should use this: it will work within
 433  * a system call from a "real" process, but the process memory space will
 434  * not be free'd until both the parent and the child have exited.
 435  */
 436 static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
 437 {
 438         register long retval __asm__ ("d0") = __NR_clone;
 439         register long clone_arg __asm__ ("d1") = flags | CLONE_VM;
 440 
 441         __asm__ __volatile__
 442           ("movel %%sp,%%d2\n\t"
 443            "trap #0\n\t"                /* Linux/m68k system call */
 444            "cmpl %%sp,%%d2\n\t"         /* child or parent */
 445            "jeq 1f\n\t"                 /* parent - jump */
 446            "movel %3,%%sp@-\n\t"        /* push argument */
 447            "jsr %4@\n\t"                /* call fn */
 448            "movel %2,%0\n\t"            /* exit */
 449            "trap #0\n"
 450            "1:"
 451            : "=d" (retval)
 452            : "0" (__NR_clone), "i" (__NR_exit),
 453              "r" (arg), "a" (fn), "d" (clone_arg)
 454            : "d0", "d2");
 455 
 456         return retval;
 457 }
 458 
 459 static inline pid_t wait(int * wait_stat)
     /* [previous][next][first][last][top][bottom][index][help] */
 460 {
 461         return waitpid(-1,wait_stat,0);
 462 }
 463 
 464 #endif
 465 
 466 #endif /* _ASM_M68K_UNISTD_H_ */

/* [previous][next][first][last][top][bottom][index][help] */