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