1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 
  22 /*
  23  * Copyright 2014 Garrett D'Amore <garrett@damore.org>
  24  * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
  25  * Copyright (c) 2013 by Delphix. All rights reserved.
  26  */
  27 
  28 /*      Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T     */
  29 /*        All Rights Reserved   */
  30 
  31 #ifndef _SYS_SYSCALL_H
  32 #define _SYS_SYSCALL_H
  33 
  34 #ifdef  __cplusplus
  35 extern "C" {
  36 #endif
  37 
  38 /*
  39  *      system call numbers
  40  *              syscall(SYS_xxxx, ...)
  41  */
  42 
  43         /* syscall enumeration MUST begin with 1 */
  44 
  45         /*
  46          * SunOS/SPARC uses 0 for the indirect system call SYS_syscall
  47          * but this doesn't count because it is just another way
  48          * to specify the real system call number.
  49          */
  50 
  51 #define SYS_syscall     0
  52 #define SYS_exit        1
  53 #define SYS_read        3
  54 #define SYS_write       4
  55 #define SYS_open        5
  56 #define SYS_close       6
  57 #define SYS_linkat      7
  58 #define SYS_link        9
  59 #define SYS_unlink      10
  60 #define SYS_symlinkat   11
  61 #define SYS_chdir       12
  62 #define SYS_time        13
  63 #define SYS_mknod       14
  64 #define SYS_chmod       15
  65 #define SYS_chown       16
  66 #define SYS_brk         17
  67 #define SYS_stat        18
  68 #define SYS_lseek       19
  69 #define SYS_getpid      20
  70 #define SYS_mount       21
  71 #define SYS_readlinkat  22
  72 #define SYS_setuid      23
  73 #define SYS_getuid      24
  74 #define SYS_stime       25
  75 #define SYS_pcsample    26
  76 #define SYS_alarm       27
  77 #define SYS_fstat       28
  78 #define SYS_pause       29
  79 #define SYS_stty        31
  80 #define SYS_gtty        32
  81 #define SYS_access      33
  82 #define SYS_nice        34
  83 #define SYS_statfs      35
  84 #define SYS_sync        36
  85 #define SYS_kill        37
  86 #define SYS_fstatfs     38
  87 #define SYS_pgrpsys     39
  88         /*
  89          * subcodes:
  90          *      getpgrp()         :: syscall(39,0)
  91          *      setpgrp()         :: syscall(39,1)
  92          *      getsid(pid)       :: syscall(39,2,pid)
  93          *      setsid()          :: syscall(39,3)
  94          *      getpgid(pid)      :: syscall(39,4,pid)
  95          *      setpgid(pid,pgid) :: syscall(39,5,pid,pgid)
  96          */
  97 #define SYS_uucopystr   40
  98 #define SYS_pipe        42
  99 #define SYS_times       43
 100 #define SYS_profil      44
 101 #define SYS_faccessat   45
 102 #define SYS_setgid      46
 103 #define SYS_getgid      47
 104 #define SYS_mknodat     48
 105 #define SYS_msgsys      49
 106         /*
 107          * subcodes:
 108          *      msgget(...)  :: msgsys(0, ...)
 109          *      msgctl(...)  :: msgsys(1, ...)
 110          *      msgrcv(...)  :: msgsys(2, ...)
 111          *      msgsnd(...)  :: msgsys(3, ...)
 112          *      msgids(...)  :: msgsys(4, ...)
 113          *      msgsnap(...) :: msgsys(5, ...)
 114          *      see <sys/msg.h>
 115          */
 116 #define SYS_sysi86      50
 117         /*
 118          * subcodes:
 119          *      sysi86(code, ...)
 120          */
 121 #define SYS_acct        51
 122 #define SYS_shmsys      52
 123         /*
 124          * subcodes:
 125          *      shmat (...) :: shmsys(0, ...)
 126          *      shmctl(...) :: shmsys(1, ...)
 127          *      shmdt (...) :: shmsys(2, ...)
 128          *      shmget(...) :: shmsys(3, ...)
 129          *      shmids(...) :: shmsys(4, ...)
 130          *      see <sys/shm.h>
 131          */
 132 #define SYS_semsys      53
 133         /*
 134          * subcodes:
 135          *      semctl(...) :: semsys(0, ...)
 136          *      semget(...) :: semsys(1, ...)
 137          *      semop (...) :: semsys(2, ...)
 138          *      semids(...) :: semsys(3, ...)
 139          *      semtimedop(...) :: semsys(4, ...)
 140          *      see <sys/sem.h>
 141          */
 142 #define SYS_ioctl       54
 143 #define SYS_uadmin      55
 144 #define SYS_fchownat    56
 145 #define SYS_utssys      57
 146         /*
 147          * subcodes (third argument):
 148          *      uname(obuf)  (obsolete)   :: syscall(57, obuf, ign, 0)
 149          *                                      subcode 1 unused
 150          *      ustat(dev, obuf)          :: syscall(57, obuf, dev, 2)
 151          *      fusers(path, flags, obuf) :: syscall(57, path, flags, 3, obuf)
 152          *      see <sys/utssys.h>
 153          */
 154 #define SYS_fdsync      58
 155 #define SYS_execve      59
 156 #define SYS_umask       60
 157 #define SYS_chroot      61
 158 #define SYS_fcntl       62
 159 #define SYS_ulimit      63
 160 #define SYS_renameat    64
 161 #define SYS_unlinkat    65
 162 #define SYS_fstatat     66
 163 #define SYS_fstatat64   67
 164 #define SYS_openat      68
 165 #define SYS_openat64    69
 166 #define SYS_tasksys     70
 167         /*
 168          * subcodes:
 169          *      settaskid(...) :: tasksys(0, ...)
 170          *      gettaskid(...) :: tasksys(1, ...)
 171          *      getprojid(...) :: tasksys(2, ...)
 172          */
 173 #define SYS_acctctl     71
 174 #define SYS_exacctsys   72
 175         /*
 176          * subcodes:
 177          *      getacct(...) :: exacct(0, ...)
 178          *      putacct(...) :: exacct(1, ...)
 179          *      wracct(...) :: exacct(2, ...)
 180          */
 181 #define SYS_getpagesizes        73
 182         /*
 183          * subcodes:
 184          *      getpagesizes2(...)      :: getpagesizes(0, ...)
 185          *      getpagesizes(...)       :: getpagesizes(1, ...) legacy
 186          */
 187 #define SYS_rctlsys     74
 188         /*
 189          * subcodes:
 190          *      getrctl(...) :: rctlsys(0, ...)
 191          *      setrctl(...) :: rctlsys(1, ...)
 192          *      rctllist(...) :: rctlsys(2, ...)
 193          *      rctlctl(...) :: rctlsys(3, ...)
 194          */
 195 #define SYS_sidsys      75
 196         /*
 197          * subcodes:
 198          *      allocids(...)           :: sidsys(0, ...)
 199          *      idmap_reg(...)          :: sidsys(1, ...)
 200          *      idmap_unreg(...)        :: sidsys(2, ...)
 201          */
 202 #define SYS_lwp_park    77
 203         /*
 204          * subcodes:
 205          *      _lwp_park(timespec_t *, lwpid_t)        :: syslwp_park(0, ...)
 206          *      _lwp_unpark(lwpid_t, int)               :: syslwp_park(1, ...)
 207          *      _lwp_unpark_all(lwpid_t *, int)         :: syslwp_park(2, ...)
 208          *      _lwp_unpark_cancel(lwpid_t *, int)      :: syslwp_park(3, ...)
 209          *      _lwp_set_park(lwpid_t *, int)           :: syslwp_park(4, ...)
 210          */
 211 #define SYS_sendfilev   78
 212         /*
 213          * subcodes :
 214          *      sendfilev()   :: sendfilev(0, ...)
 215          *      sendfilev64() :: sendfilev(1, ...)
 216          */
 217 #define SYS_rmdir       79
 218 #define SYS_mkdir       80
 219 #define SYS_getdents    81
 220 #define SYS_privsys     82
 221         /*
 222          * subcodes:
 223          *      setppriv(...)           :: privsys(0, ...)
 224          *      getppriv(...)           :: privsys(1, ...)
 225          *      getimplinfo(...)        :: privsys(2, ...)
 226          *      setpflags(...)          :: privsys(3, ...)
 227          *      getpflags(...)          :: privsys(4, ...)
 228          *      issetugid();            :: privsys(5)
 229          */
 230 #define SYS_ucredsys    83
 231         /*
 232          * subcodes:
 233          *      ucred_get(...)          :: ucredsys(0, ...)
 234          *      getpeerucred(...)       :: ucredsys(1, ...)
 235          */
 236 #define SYS_sysfs       84
 237         /*
 238          * subcodes:
 239          *      sysfs(code, ...)
 240          *      see <sys/fstyp.h>
 241          */
 242 #define SYS_getmsg      85
 243 #define SYS_putmsg      86
 244 #define SYS_lstat       88
 245 #define SYS_symlink     89
 246 #define SYS_readlink    90
 247 #define SYS_setgroups   91
 248 #define SYS_getgroups   92
 249 #define SYS_fchmod      93
 250 #define SYS_fchown      94
 251 #define SYS_sigprocmask 95
 252 #define SYS_sigsuspend  96
 253 #define SYS_sigaltstack 97
 254 #define SYS_sigaction   98
 255 #define SYS_sigpending  99
 256         /*
 257          * subcodes:
 258          *                      subcode 0 unused
 259          *      sigpending(...) :: syscall(99, 1, ...)
 260          *      sigfillset(...) :: syscall(99, 2, ...)
 261          */
 262 #define SYS_context     100
 263         /*
 264          * subcodes:
 265          *      getcontext(...) :: syscall(100, 0, ...)
 266          *      setcontext(...) :: syscall(100, 1, ...)
 267          */
 268 #define SYS_fchmodat    101
 269 #define SYS_mkdirat     102
 270 #define SYS_statvfs     103
 271 #define SYS_fstatvfs    104
 272 #define SYS_getloadavg  105
 273 #define SYS_nfssys      106
 274 #define SYS_waitid      107
 275 #define SYS_waitsys     SYS_waitid      /* historical */
 276 #define SYS_sigsendsys  108
 277 #define SYS_hrtsys      109
 278 #define SYS_utimesys    110
 279         /*
 280          * subcodes:
 281          *      futimens(...)   :: syscall(110, 0, ...)
 282          *      utimensat(...)  :: syscall(110, 1, ...)
 283          */
 284 #define SYS_sigresend   111
 285 #define SYS_priocntlsys 112
 286 #define SYS_pathconf    113
 287 #define SYS_mincore     114
 288 #define SYS_mmap        115
 289 #define SYS_mprotect    116
 290 #define SYS_munmap      117
 291 #define SYS_fpathconf   118
 292 #define SYS_vfork       119
 293 #define SYS_fchdir      120
 294 #define SYS_readv       121
 295 #define SYS_writev      122
 296 #define SYS_mmapobj     127
 297 #define SYS_setrlimit   128
 298 #define SYS_getrlimit   129
 299 #define SYS_lchown      130
 300 #define SYS_memcntl     131
 301 #define SYS_getpmsg     132
 302 #define SYS_putpmsg     133
 303 #define SYS_rename      134
 304 #define SYS_uname       135
 305 #define SYS_setegid     136
 306 #define SYS_sysconfig   137
 307 #define SYS_adjtime     138
 308 #define SYS_systeminfo  139
 309 #define SYS_sharefs     140
 310 #define SYS_seteuid     141
 311 #define SYS_forksys     142
 312         /*
 313          * subcodes:
 314          *      forkx(flags)    :: forksys(0, flags)
 315          *      forkallx(flags) :: forksys(1, flags)
 316          *      vforkx(flags)   :: forksys(2, flags)
 317          */
 318 #define SYS_sigtimedwait        144
 319 #define SYS_lwp_info    145
 320 #define SYS_yield       146
 321 #define SYS_lwp_sema_post       148
 322 #define SYS_lwp_sema_trywait    149
 323 #define SYS_lwp_detach  150
 324 #define SYS_corectl     151
 325 #define SYS_modctl      152
 326 #define SYS_fchroot     153
 327 #define SYS_vhangup     155
 328 #define SYS_gettimeofday        156
 329 #define SYS_getitimer           157
 330 #define SYS_setitimer           158
 331 #define SYS_lwp_create          159
 332 #define SYS_lwp_exit            160
 333 #define SYS_lwp_suspend         161
 334 #define SYS_lwp_continue        162
 335 #define SYS_lwp_kill            163
 336 #define SYS_lwp_self            164
 337 #define SYS_lwp_sigmask         165
 338 #define SYS_lwp_private         166
 339 #define SYS_lwp_wait            167
 340 #define SYS_lwp_mutex_wakeup    168
 341 #define SYS_lwp_cond_wait       170
 342 #define SYS_lwp_cond_signal     171
 343 #define SYS_lwp_cond_broadcast  172
 344 #define SYS_pread               173
 345 #define SYS_pwrite              174
 346 #define SYS_llseek              175
 347 #define SYS_inst_sync           176
 348 #define SYS_brand               177
 349 #define SYS_kaio                178
 350         /*
 351          * subcodes:
 352          *      aioread(...)    :: kaio(AIOREAD, ...)
 353          *      aiowrite(...)   :: kaio(AIOWRITE, ...)
 354          *      aiowait(...)    :: kaio(AIOWAIT, ...)
 355          *      aiocancel(...)  :: kaio(AIOCANCEL, ...)
 356          *      aionotify()     :: kaio(AIONOTIFY)
 357          *      aioinit()       :: kaio(AIOINIT)
 358          *      aiostart()      :: kaio(AIOSTART)
 359          *      see <sys/aio.h>
 360          */
 361 #define SYS_cpc                 179
 362 #define SYS_lgrpsys             180
 363 #define SYS_meminfosys          SYS_lgrpsys
 364         /*
 365          * subcodes:
 366          *      meminfo(...) :: meminfosys(MISYS_MEMINFO, ...)
 367          */
 368 #define SYS_rusagesys           181
 369         /*
 370          * subcodes:
 371          *      getrusage(...) :: rusagesys(RUSAGESYS_GETRUSAGE, ...)
 372          *      getvmusage(...)    :: rusagesys(RUSAGESYS_GETVMUSAGE, ...)
 373          */
 374 #define SYS_port                182
 375         /*
 376          * subcodes:
 377          *      port_create(...) :: portfs(PORT_CREATE, ...)
 378          *      port_associate(...) :: portfs(PORT_ASSOCIATE, ...)
 379          *      port_dissociate(...) :: portfs(PORT_DISSOCIATE, ...)
 380          *      port_send(...) :: portfs(PORT_SEND, ...)
 381          *      port_sendn(...) :: portfs(PORT_SENDN, ...)
 382          *      port_get(...) :: portfs(PORT_GET, ...)
 383          *      port_getn(...) :: portfs(PORT_GETN, ...)
 384          *      port_alert(...) :: portfs(PORT_ALERT, ...)
 385          *      port_dispatch(...) :: portfs(PORT_DISPATCH, ...)
 386          */
 387 #define SYS_pollsys             183
 388 #define SYS_labelsys            184
 389 #define SYS_acl                 185
 390 #define SYS_auditsys            186
 391 #define SYS_processor_bind      187
 392 #define SYS_processor_info      188
 393 #define SYS_p_online            189
 394 #define SYS_sigqueue            190
 395 #define SYS_clock_gettime       191
 396 #define SYS_clock_settime       192
 397 #define SYS_clock_getres        193
 398 #define SYS_timer_create        194
 399 #define SYS_timer_delete        195
 400 #define SYS_timer_settime       196
 401 #define SYS_timer_gettime       197
 402 #define SYS_timer_getoverrun    198
 403 #define SYS_nanosleep           199
 404 #define SYS_facl                200
 405 #define SYS_door                201
 406         /*
 407          * Door Subcodes:
 408          *      0       door_create
 409          *      1       door_revoke
 410          *      2       door_info
 411          *      3       door_call
 412          *      4       door_return
 413          */
 414 #define SYS_setreuid            202
 415 #define SYS_setregid            203
 416 #define SYS_install_utrap       204
 417 #define SYS_signotify           205
 418 #define SYS_schedctl            206
 419 #define SYS_pset                207
 420 #define SYS_sparc_utrap_install 208
 421 #define SYS_resolvepath         209
 422 #define SYS_lwp_mutex_timedlock 210
 423 #define SYS_lwp_sema_timedwait  211
 424 #define SYS_lwp_rwlock_sys      212
 425         /*
 426          * subcodes:
 427          *      lwp_rwlock_rdlock(...)    :: syscall(212, 0, ...)
 428          *      lwp_rwlock_wrlock(...)    :: syscall(212, 1, ...)
 429          *      lwp_rwlock_tryrdlock(...) :: syscall(212, 2, ...)
 430          *      lwp_rwlock_trywrlock(...) :: syscall(212, 3, ...)
 431          *      lwp_rwlock_unlock(...)    :: syscall(212, 4, ...)
 432          */
 433 /* system calls for large file ( > 2 gigabyte) support */
 434 #define SYS_getdents64          213
 435 #define SYS_mmap64              214
 436 #define SYS_stat64              215
 437 #define SYS_lstat64             216
 438 #define SYS_fstat64             217
 439 #define SYS_statvfs64           218
 440 #define SYS_fstatvfs64          219
 441 #define SYS_setrlimit64         220
 442 #define SYS_getrlimit64         221
 443 #define SYS_pread64             222
 444 #define SYS_pwrite64            223
 445 #define SYS_open64              225
 446 #define SYS_rpcsys              226
 447 #define SYS_zone                227
 448         /*
 449          * subcodes:
 450          *      zone_create(...) :: zone(ZONE_CREATE, ...)
 451          *      zone_destroy(...) :: zone(ZONE_DESTROY, ...)
 452          *      zone_getattr(...) :: zone(ZONE_GETATTR, ...)
 453          *      zone_enter(...) :: zone(ZONE_ENTER, ...)
 454          *      zone_list(...) :: zone(ZONE_LIST, ...)
 455          *      zone_shutdown(...) :: zone(ZONE_SHUTDOWN, ...)
 456          *      zone_lookup(...) :: zone(ZONE_LOOKUP, ...)
 457          *      zone_boot(...) :: zone(ZONE_BOOT, ...)
 458          *      zone_version(...) :: zone(ZONE_VERSION, ...)
 459          *      zone_setattr(...) :: zone(ZONE_SETATTR, ...)
 460          *      zone_add_datalink(...) :: zone(ZONE_ADD_DATALINK, ...)
 461          *      zone_remove_datalink(...) :: zone(ZONE_DEL_DATALINK, ...)
 462          *      zone_check_datalink(...) :: zone(ZONE_CHECK_DATALINK, ...)
 463          *      zone_list_datalink(...) :: zone(ZONE_LIST_DATALINK, ...)
 464          */
 465 #define SYS_autofssys           228
 466 #define SYS_getcwd              229
 467 #define SYS_so_socket           230
 468 #define SYS_so_socketpair       231
 469 #define SYS_bind                232
 470 #define SYS_listen              233
 471 #define SYS_accept              234
 472 #define SYS_connect             235
 473 #define SYS_shutdown            236
 474 #define SYS_recv                237
 475 #define SYS_recvfrom            238
 476 #define SYS_recvmsg             239
 477 #define SYS_send                240
 478 #define SYS_sendmsg             241
 479 #define SYS_sendto              242
 480 #define SYS_getpeername         243
 481 #define SYS_getsockname         244
 482 #define SYS_getsockopt          245
 483 #define SYS_setsockopt          246
 484 #define SYS_sockconfig          247
 485         /*
 486          * NTP codes
 487          */
 488 #define SYS_ntp_gettime         248
 489 #define SYS_ntp_adjtime         249
 490 #define SYS_lwp_mutex_unlock    250
 491 #define SYS_lwp_mutex_trylock   251
 492 #define SYS_lwp_mutex_register  252
 493 #define SYS_cladm               253
 494 #define SYS_uucopy              254
 495 #define SYS_umount2             255
 496 
 497 #ifndef _ASM
 498 
 499 typedef struct {                /* syscall set type */
 500         unsigned int    word[16];
 501 } sysset_t;
 502 
 503 typedef struct {        /* return values from system call */
 504         long    sys_rval1;      /* primary return value from system call */
 505         long    sys_rval2;      /* second return value from system call */
 506 } sysret_t;
 507 
 508 #if !defined(_KERNEL)
 509 
 510 extern int      syscall(int, ...);
 511 extern int      __systemcall(sysret_t *, int, ...);
 512 extern int      __set_errno(int);
 513 
 514 #endif  /* _KERNEL */
 515 
 516 #endif  /* _ASM */
 517 
 518 #ifdef  __cplusplus
 519 }
 520 #endif
 521 
 522 #endif  /* _SYS_SYSCALL_H */