xref: /freebsd/sys/amd64/linux/linux.h (revision f0d9a6a7)
1b2f58791SDmitry Chagin /*-
2023b850bSEd Maste  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3023b850bSEd Maste  *
4b2f58791SDmitry Chagin  * Copyright (c) 1994-1996 Søren Schmidt
5b2f58791SDmitry Chagin  * All rights reserved.
61ca6b15bSDmitry Chagin  * Copyright (c) 2013 Dmitry Chagin <dchagin@FreeBSD.org>
7b2f58791SDmitry Chagin  *
8b2f58791SDmitry Chagin  * Redistribution and use in source and binary forms, with or without
9b2f58791SDmitry Chagin  * modification, are permitted provided that the following conditions
10b2f58791SDmitry Chagin  * are met:
11b2f58791SDmitry Chagin  * 1. Redistributions of source code must retain the above copyright
12023b850bSEd Maste  *    notice, this list of conditions and the following disclaimer.
13b2f58791SDmitry Chagin  * 2. Redistributions in binary form must reproduce the above copyright
14b2f58791SDmitry Chagin  *    notice, this list of conditions and the following disclaimer in the
15b2f58791SDmitry Chagin  *    documentation and/or other materials provided with the distribution.
16b2f58791SDmitry Chagin  *
17023b850bSEd Maste  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18023b850bSEd Maste  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19023b850bSEd Maste  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20023b850bSEd Maste  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21023b850bSEd Maste  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22023b850bSEd Maste  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23023b850bSEd Maste  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24023b850bSEd Maste  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25023b850bSEd Maste  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26023b850bSEd Maste  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27023b850bSEd Maste  * SUCH DAMAGE.
28b2f58791SDmitry Chagin  *
29b2f58791SDmitry Chagin  * $FreeBSD$
30b2f58791SDmitry Chagin  */
31b2f58791SDmitry Chagin 
32b2f58791SDmitry Chagin #ifndef _AMD64_LINUX_H_
33b2f58791SDmitry Chagin #define	_AMD64_LINUX_H_
34b2f58791SDmitry Chagin 
35562894f0SBrooks Davis #include <sys/abi_compat.h>
36562894f0SBrooks Davis 
374ab7403bSDmitry Chagin #include <compat/linux/linux.h>
38b2f58791SDmitry Chagin #include <amd64/linux/linux_syscall.h>
39b2f58791SDmitry Chagin 
40931e2a1aSEd Maste #define	LINUX_LEGACY_SYSCALLS
41931e2a1aSEd Maste 
42b2f58791SDmitry Chagin #define	LINUX_DTRACE	linuxulator
43b2f58791SDmitry Chagin 
44b2f58791SDmitry Chagin /*
45b2f58791SDmitry Chagin  * Provide a separate set of types for the Linux types.
46b2f58791SDmitry Chagin  */
47b2f58791SDmitry Chagin typedef int32_t		l_int;
48b2f58791SDmitry Chagin typedef int64_t		l_long;
49b2f58791SDmitry Chagin typedef int16_t		l_short;
50b2f58791SDmitry Chagin typedef uint32_t	l_uint;
51b2f58791SDmitry Chagin typedef uint64_t	l_ulong;
52b2f58791SDmitry Chagin typedef uint16_t	l_ushort;
53b2f58791SDmitry Chagin 
54b2f58791SDmitry Chagin typedef l_ulong		l_uintptr_t;
55b2f58791SDmitry Chagin typedef l_long		l_clock_t;
56b2f58791SDmitry Chagin typedef l_int		l_daddr_t;
57b2f58791SDmitry Chagin typedef l_ulong		l_dev_t;
58b2f58791SDmitry Chagin typedef l_uint		l_gid_t;
59ab60bc84SDmitry Chagin typedef l_ushort	l_gid16_t;
60b2f58791SDmitry Chagin typedef l_uint		l_uid_t;
61ab60bc84SDmitry Chagin typedef	l_ushort	l_uid16_t;
62b2f58791SDmitry Chagin typedef l_ulong		l_ino_t;
63b2f58791SDmitry Chagin typedef l_int		l_key_t;
64b2f58791SDmitry Chagin typedef l_long		l_loff_t;
65b2f58791SDmitry Chagin typedef l_uint		l_mode_t;
66b2f58791SDmitry Chagin typedef l_long		l_off_t;
67b2f58791SDmitry Chagin typedef l_int		l_pid_t;
68b2f58791SDmitry Chagin typedef l_ulong		l_size_t;
69b2f58791SDmitry Chagin typedef l_long		l_ssize_t;
70b2f58791SDmitry Chagin typedef l_long		l_suseconds_t;
71b2f58791SDmitry Chagin typedef l_long		l_time_t;
72b2f58791SDmitry Chagin typedef l_int		l_timer_t;
73b2f58791SDmitry Chagin typedef l_int		l_mqd_t;
74b2f58791SDmitry Chagin typedef l_size_t	l_socklen_t;
753e89b641SDmitry Chagin typedef	l_ulong		l_fd_mask;
76b2f58791SDmitry Chagin 
77b2f58791SDmitry Chagin typedef struct {
78b2f58791SDmitry Chagin 	l_int		val[2];
79b2f58791SDmitry Chagin } l_fsid_t;
80b2f58791SDmitry Chagin 
81b2f58791SDmitry Chagin typedef struct {
82b2f58791SDmitry Chagin 	l_time_t	tv_sec;
83b2f58791SDmitry Chagin 	l_suseconds_t	tv_usec;
84b2f58791SDmitry Chagin } l_timeval;
85b2f58791SDmitry Chagin 
86b2f58791SDmitry Chagin #define	l_fd_set	fd_set
87b2f58791SDmitry Chagin 
88b2f58791SDmitry Chagin /*
89b2f58791SDmitry Chagin  * Miscellaneous
90b2f58791SDmitry Chagin  */
91ca6e1fa3SEdward Tomasz Napierala #define LINUX_AT_COUNT		20	/* Count of used aux entry types. */
92b2f58791SDmitry Chagin 
93b2f58791SDmitry Chagin struct l___sysctl_args
94b2f58791SDmitry Chagin {
95b2f58791SDmitry Chagin 	l_uintptr_t	name;
96b2f58791SDmitry Chagin 	l_int		nlen;
97b2f58791SDmitry Chagin 	l_uintptr_t	oldval;
98b2f58791SDmitry Chagin 	l_uintptr_t	oldlenp;
99b2f58791SDmitry Chagin 	l_uintptr_t	newval;
100b2f58791SDmitry Chagin 	l_size_t	newlen;
101b2f58791SDmitry Chagin 	l_ulong		__spare[4];
102b2f58791SDmitry Chagin };
103b2f58791SDmitry Chagin 
104b2f58791SDmitry Chagin /* Resource limits */
105b2f58791SDmitry Chagin #define	LINUX_RLIMIT_CPU	0
106b2f58791SDmitry Chagin #define	LINUX_RLIMIT_FSIZE	1
107b2f58791SDmitry Chagin #define	LINUX_RLIMIT_DATA	2
108b2f58791SDmitry Chagin #define	LINUX_RLIMIT_STACK	3
109b2f58791SDmitry Chagin #define	LINUX_RLIMIT_CORE	4
110b2f58791SDmitry Chagin #define	LINUX_RLIMIT_RSS	5
111b2f58791SDmitry Chagin #define	LINUX_RLIMIT_NPROC	6
112b2f58791SDmitry Chagin #define	LINUX_RLIMIT_NOFILE	7
113b2f58791SDmitry Chagin #define	LINUX_RLIMIT_MEMLOCK	8
114b2f58791SDmitry Chagin #define	LINUX_RLIMIT_AS		9	/* Address space limit */
115b2f58791SDmitry Chagin 
116b2f58791SDmitry Chagin #define	LINUX_RLIM_NLIMITS	10
117b2f58791SDmitry Chagin 
118b2f58791SDmitry Chagin struct l_rlimit {
119b2f58791SDmitry Chagin 	l_ulong		rlim_cur;
120b2f58791SDmitry Chagin 	l_ulong		rlim_max;
121b2f58791SDmitry Chagin };
122b2f58791SDmitry Chagin 
123b2f58791SDmitry Chagin /*
124b2f58791SDmitry Chagin  * stat family of syscalls
125b2f58791SDmitry Chagin  */
126b2f58791SDmitry Chagin struct l_timespec {
127b2f58791SDmitry Chagin 	l_time_t	tv_sec;
128b2f58791SDmitry Chagin 	l_long		tv_nsec;
129b2f58791SDmitry Chagin };
130b2f58791SDmitry Chagin 
131b2f58791SDmitry Chagin struct l_newstat {
132b2f58791SDmitry Chagin 	l_dev_t		st_dev;
133b2f58791SDmitry Chagin 	l_ino_t		st_ino;
134b2f58791SDmitry Chagin 	l_ulong		st_nlink;
135b2f58791SDmitry Chagin 	l_uint		st_mode;
136b2f58791SDmitry Chagin 	l_uid_t		st_uid;
137b2f58791SDmitry Chagin 	l_gid_t		st_gid;
138b2f58791SDmitry Chagin 	l_uint		__st_pad1;
139b2f58791SDmitry Chagin 	l_dev_t		st_rdev;
140b2f58791SDmitry Chagin 	l_off_t		st_size;
141b2f58791SDmitry Chagin 	l_long		st_blksize;
142b2f58791SDmitry Chagin 	l_long		st_blocks;
143b2f58791SDmitry Chagin 	struct l_timespec	st_atim;
144b2f58791SDmitry Chagin 	struct l_timespec	st_mtim;
145b2f58791SDmitry Chagin 	struct l_timespec	st_ctim;
146b2f58791SDmitry Chagin 	l_long		__unused1;
147b2f58791SDmitry Chagin 	l_long		__unused2;
148b2f58791SDmitry Chagin 	l_long		__unused3;
149b2f58791SDmitry Chagin };
150b2f58791SDmitry Chagin 
151b2f58791SDmitry Chagin /* sigaction flags */
152b2f58791SDmitry Chagin #define	LINUX_SA_NOCLDSTOP	0x00000001
153b2f58791SDmitry Chagin #define	LINUX_SA_NOCLDWAIT	0x00000002
154b2f58791SDmitry Chagin #define	LINUX_SA_SIGINFO	0x00000004
155b2f58791SDmitry Chagin #define	LINUX_SA_RESTORER	0x04000000
156b2f58791SDmitry Chagin #define	LINUX_SA_ONSTACK	0x08000000
157b2f58791SDmitry Chagin #define	LINUX_SA_RESTART	0x10000000
158b2f58791SDmitry Chagin #define	LINUX_SA_INTERRUPT	0x20000000
159b2f58791SDmitry Chagin #define	LINUX_SA_NOMASK		0x40000000
160b2f58791SDmitry Chagin #define	LINUX_SA_ONESHOT	0x80000000
161b2f58791SDmitry Chagin 
162b2f58791SDmitry Chagin /* sigprocmask actions */
163b2f58791SDmitry Chagin #define	LINUX_SIG_BLOCK		0
164b2f58791SDmitry Chagin #define	LINUX_SIG_UNBLOCK	1
165b2f58791SDmitry Chagin #define	LINUX_SIG_SETMASK	2
166b2f58791SDmitry Chagin 
167b2f58791SDmitry Chagin /* sigaltstack */
168b2f58791SDmitry Chagin #define	LINUX_MINSIGSTKSZ	2048
169b2f58791SDmitry Chagin 
170b2f58791SDmitry Chagin typedef void	(*l_handler_t)(l_int);
171b2f58791SDmitry Chagin 
172b2f58791SDmitry Chagin typedef struct {
173b2f58791SDmitry Chagin 	l_handler_t	lsa_handler;
174b2f58791SDmitry Chagin 	l_ulong		lsa_flags;
175b2f58791SDmitry Chagin 	l_uintptr_t	lsa_restorer;
176b2f58791SDmitry Chagin 	l_sigset_t	lsa_mask;
177b2f58791SDmitry Chagin } l_sigaction_t;
178b2f58791SDmitry Chagin 
179b2f58791SDmitry Chagin typedef struct {
180b2f58791SDmitry Chagin 	l_uintptr_t	ss_sp;
181b2f58791SDmitry Chagin 	l_int		ss_flags;
182b2f58791SDmitry Chagin 	l_size_t	ss_size;
183b2f58791SDmitry Chagin } l_stack_t;
184b2f58791SDmitry Chagin 
185b2f58791SDmitry Chagin struct l_fpstate {
186b2f58791SDmitry Chagin 	u_int16_t cwd;
187b2f58791SDmitry Chagin 	u_int16_t swd;
188b2f58791SDmitry Chagin 	u_int16_t twd;
189b2f58791SDmitry Chagin 	u_int16_t fop;
190b2f58791SDmitry Chagin 	u_int64_t rip;
191b2f58791SDmitry Chagin 	u_int64_t rdp;
192b2f58791SDmitry Chagin 	u_int32_t mxcsr;
193b2f58791SDmitry Chagin 	u_int32_t mxcsr_mask;
194b2f58791SDmitry Chagin 	u_int32_t st_space[32];
195b2f58791SDmitry Chagin 	u_int32_t xmm_space[64];
196b2f58791SDmitry Chagin 	u_int32_t reserved2[24];
197b2f58791SDmitry Chagin };
198b2f58791SDmitry Chagin 
199b2f58791SDmitry Chagin struct l_sigcontext {
200b2f58791SDmitry Chagin 	l_ulong		sc_r8;
201b2f58791SDmitry Chagin 	l_ulong		sc_r9;
202b2f58791SDmitry Chagin 	l_ulong		sc_r10;
203b2f58791SDmitry Chagin 	l_ulong		sc_r11;
204b2f58791SDmitry Chagin 	l_ulong		sc_r12;
205b2f58791SDmitry Chagin 	l_ulong		sc_r13;
206b2f58791SDmitry Chagin 	l_ulong		sc_r14;
207b2f58791SDmitry Chagin 	l_ulong		sc_r15;
208b2f58791SDmitry Chagin 	l_ulong		sc_rdi;
209b2f58791SDmitry Chagin 	l_ulong		sc_rsi;
210b2f58791SDmitry Chagin 	l_ulong		sc_rbp;
211b2f58791SDmitry Chagin 	l_ulong		sc_rbx;
212b2f58791SDmitry Chagin 	l_ulong		sc_rdx;
213b2f58791SDmitry Chagin 	l_ulong		sc_rax;
214b2f58791SDmitry Chagin 	l_ulong		sc_rcx;
215b2f58791SDmitry Chagin 	l_ulong		sc_rsp;
216b2f58791SDmitry Chagin 	l_ulong		sc_rip;
217b2f58791SDmitry Chagin 	l_ulong		sc_rflags;
218b2f58791SDmitry Chagin 	l_ushort	sc_cs;
219b2f58791SDmitry Chagin 	l_ushort	sc_gs;
220b2f58791SDmitry Chagin 	l_ushort	sc_fs;
221b2f58791SDmitry Chagin 	l_ushort	sc___pad0;
222b2f58791SDmitry Chagin 	l_ulong		sc_err;
223b2f58791SDmitry Chagin 	l_ulong		sc_trapno;
224b2f58791SDmitry Chagin 	l_sigset_t	sc_mask;
225b2f58791SDmitry Chagin 	l_ulong		sc_cr2;
226b2f58791SDmitry Chagin 	struct l_fpstate *sc_fpstate;
227b2f58791SDmitry Chagin 	l_ulong		sc_reserved1[8];
228b2f58791SDmitry Chagin };
229b2f58791SDmitry Chagin 
230b2f58791SDmitry Chagin struct l_ucontext {
231b2f58791SDmitry Chagin 	l_ulong		uc_flags;
232b2f58791SDmitry Chagin 	l_uintptr_t	uc_link;
233b2f58791SDmitry Chagin 	l_stack_t	uc_stack;
234b2f58791SDmitry Chagin 	struct l_sigcontext	uc_mcontext;
235b2f58791SDmitry Chagin 	l_sigset_t	uc_sigmask;
236b2f58791SDmitry Chagin };
237b2f58791SDmitry Chagin 
238b2f58791SDmitry Chagin #define LINUX_SI_PREAMBLE_SIZE	(4 * sizeof(int))
239b2f58791SDmitry Chagin #define	LINUX_SI_MAX_SIZE	128
240b2f58791SDmitry Chagin #define	LINUX_SI_PAD_SIZE	((LINUX_SI_MAX_SIZE - \
241b2f58791SDmitry Chagin 				    LINUX_SI_PREAMBLE_SIZE) / sizeof(l_int))
242b2f58791SDmitry Chagin typedef union l_sigval {
243b2f58791SDmitry Chagin 	l_int		sival_int;
244b2f58791SDmitry Chagin 	l_uintptr_t	sival_ptr;
245b2f58791SDmitry Chagin } l_sigval_t;
246b2f58791SDmitry Chagin 
247b2f58791SDmitry Chagin typedef struct l_siginfo {
248b2f58791SDmitry Chagin 	l_int		lsi_signo;
249b2f58791SDmitry Chagin 	l_int		lsi_errno;
250b2f58791SDmitry Chagin 	l_int		lsi_code;
251b2f58791SDmitry Chagin 	union {
252b2f58791SDmitry Chagin 		l_int	_pad[LINUX_SI_PAD_SIZE];
253b2f58791SDmitry Chagin 
254b2f58791SDmitry Chagin 		struct {
255b2f58791SDmitry Chagin 			l_pid_t		_pid;
256b2f58791SDmitry Chagin 			l_uid_t		_uid;
257b2f58791SDmitry Chagin 		} _kill;
258b2f58791SDmitry Chagin 
259b2f58791SDmitry Chagin 		struct {
260b2f58791SDmitry Chagin 			l_timer_t	_tid;
261b2f58791SDmitry Chagin 			l_int		_overrun;
262b2f58791SDmitry Chagin 			char		_pad[sizeof(l_uid_t) - sizeof(int)];
263b2f58791SDmitry Chagin 			union l_sigval	_sigval;
264b2f58791SDmitry Chagin 			l_uint		_sys_private;
265b2f58791SDmitry Chagin 		} _timer;
266b2f58791SDmitry Chagin 
267b2f58791SDmitry Chagin 		struct {
268b2f58791SDmitry Chagin 			l_pid_t		_pid;		/* sender's pid */
269b2f58791SDmitry Chagin 			l_uid_t		_uid;		/* sender's uid */
270b2f58791SDmitry Chagin 			union l_sigval	_sigval;
271b2f58791SDmitry Chagin 		} _rt;
272b2f58791SDmitry Chagin 
273b2f58791SDmitry Chagin 		struct {
274b2f58791SDmitry Chagin 			l_pid_t		_pid;		/* which child */
275b2f58791SDmitry Chagin 			l_uid_t		_uid;		/* sender's uid */
276b2f58791SDmitry Chagin 			l_int		_status;	/* exit code */
277b2f58791SDmitry Chagin 			l_clock_t	_utime;
278b2f58791SDmitry Chagin 			l_clock_t	_stime;
279b2f58791SDmitry Chagin 		} _sigchld;
280b2f58791SDmitry Chagin 
281b2f58791SDmitry Chagin 		struct {
282b2f58791SDmitry Chagin 			l_uintptr_t	_addr;	/* Faulting insn/memory ref. */
283b2f58791SDmitry Chagin 		} _sigfault;
284b2f58791SDmitry Chagin 
285b2f58791SDmitry Chagin 		struct {
286b2f58791SDmitry Chagin 			l_long		_band;	/* POLL_IN,POLL_OUT,POLL_MSG */
287b2f58791SDmitry Chagin 			l_int		_fd;
288b2f58791SDmitry Chagin 		} _sigpoll;
289b2f58791SDmitry Chagin 	} _sifields;
290b2f58791SDmitry Chagin } l_siginfo_t;
291b2f58791SDmitry Chagin 
292b2f58791SDmitry Chagin #define	lsi_pid		_sifields._kill._pid
293b2f58791SDmitry Chagin #define	lsi_uid		_sifields._kill._uid
294b2f58791SDmitry Chagin #define	lsi_tid		_sifields._timer._tid
295b2f58791SDmitry Chagin #define	lsi_overrun	_sifields._timer._overrun
296b2f58791SDmitry Chagin #define	lsi_sys_private	_sifields._timer._sys_private
297b2f58791SDmitry Chagin #define	lsi_status	_sifields._sigchld._status
298b2f58791SDmitry Chagin #define	lsi_utime	_sifields._sigchld._utime
299b2f58791SDmitry Chagin #define	lsi_stime	_sifields._sigchld._stime
300b2f58791SDmitry Chagin #define	lsi_value	_sifields._rt._sigval
301b2f58791SDmitry Chagin #define	lsi_int		_sifields._rt._sigval.sival_int
302b2f58791SDmitry Chagin #define	lsi_ptr		_sifields._rt._sigval.sival_ptr
303b2f58791SDmitry Chagin #define	lsi_addr	_sifields._sigfault._addr
304b2f58791SDmitry Chagin #define	lsi_band	_sifields._sigpoll._band
305b2f58791SDmitry Chagin #define	lsi_fd		_sifields._sigpoll._fd
306b2f58791SDmitry Chagin 
307b2f58791SDmitry Chagin /*
308b2f58791SDmitry Chagin  * We make the stack look like Linux expects it when calling a signal
309b2f58791SDmitry Chagin  * handler, but use the BSD way of calling the handler and sigreturn().
310b2f58791SDmitry Chagin  * This means that we need to pass the pointer to the handler too.
311b2f58791SDmitry Chagin  * It is appended to the frame to not interfere with the rest of it.
312b2f58791SDmitry Chagin  */
313b2f58791SDmitry Chagin 
314b2f58791SDmitry Chagin struct l_rt_sigframe {
315b2f58791SDmitry Chagin 	struct l_ucontext	sf_sc;
316b2f58791SDmitry Chagin 	struct l_siginfo	sf_si;
317b2f58791SDmitry Chagin 	l_handler_t		sf_handler;
318b2f58791SDmitry Chagin };
319b2f58791SDmitry Chagin 
320b2f58791SDmitry Chagin /*
321b2f58791SDmitry Chagin  * mount flags
322b2f58791SDmitry Chagin  */
323b2f58791SDmitry Chagin #define	LINUX_MS_RDONLY		0x0001
324b2f58791SDmitry Chagin #define	LINUX_MS_NOSUID		0x0002
325b2f58791SDmitry Chagin #define	LINUX_MS_NODEV		0x0004
326b2f58791SDmitry Chagin #define	LINUX_MS_NOEXEC		0x0008
327b2f58791SDmitry Chagin #define	LINUX_MS_REMOUNT	0x0020
328b2f58791SDmitry Chagin 
329b2f58791SDmitry Chagin /*
330b2f58791SDmitry Chagin  * SystemV IPC defines
331b2f58791SDmitry Chagin  */
332b2f58791SDmitry Chagin #define	LINUX_IPC_RMID		0
333b2f58791SDmitry Chagin #define	LINUX_IPC_SET		1
334b2f58791SDmitry Chagin #define	LINUX_IPC_STAT		2
335b2f58791SDmitry Chagin #define	LINUX_IPC_INFO		3
336b2f58791SDmitry Chagin 
337b2f58791SDmitry Chagin #define	LINUX_SHM_LOCK		11
338b2f58791SDmitry Chagin #define	LINUX_SHM_UNLOCK	12
339b2f58791SDmitry Chagin #define	LINUX_SHM_STAT		13
340b2f58791SDmitry Chagin #define	LINUX_SHM_INFO		14
341b2f58791SDmitry Chagin 
342b2f58791SDmitry Chagin #define	LINUX_SHM_RDONLY	0x1000
343b2f58791SDmitry Chagin #define	LINUX_SHM_RND		0x2000
344b2f58791SDmitry Chagin #define	LINUX_SHM_REMAP		0x4000
345b2f58791SDmitry Chagin 
346b2f58791SDmitry Chagin /* semctl commands */
347b2f58791SDmitry Chagin #define	LINUX_GETPID		11
348b2f58791SDmitry Chagin #define	LINUX_GETVAL		12
349b2f58791SDmitry Chagin #define	LINUX_GETALL		13
350b2f58791SDmitry Chagin #define	LINUX_GETNCNT		14
351b2f58791SDmitry Chagin #define	LINUX_GETZCNT		15
352b2f58791SDmitry Chagin #define	LINUX_SETVAL		16
353b2f58791SDmitry Chagin #define	LINUX_SETALL		17
354b2f58791SDmitry Chagin #define	LINUX_SEM_STAT		18
355b2f58791SDmitry Chagin #define	LINUX_SEM_INFO		19
356b2f58791SDmitry Chagin 
357b2f58791SDmitry Chagin union l_semun {
358b2f58791SDmitry Chagin 	l_int		val;
359b2f58791SDmitry Chagin 	l_uintptr_t	buf;
360b2f58791SDmitry Chagin 	l_uintptr_t	array;
361b2f58791SDmitry Chagin 	l_uintptr_t	__buf;
362b2f58791SDmitry Chagin 	l_uintptr_t	__pad;
363b2f58791SDmitry Chagin };
364b2f58791SDmitry Chagin 
365b2f58791SDmitry Chagin struct l_ifmap {
366b2f58791SDmitry Chagin 	l_ulong		mem_start;
367b2f58791SDmitry Chagin 	l_ulong		mem_end;
368b2f58791SDmitry Chagin 	l_ushort	base_addr;
369b2f58791SDmitry Chagin 	u_char		irq;
370b2f58791SDmitry Chagin 	u_char		dma;
371b2f58791SDmitry Chagin 	u_char		port;
37219593f77SDmitry Chagin 	/* 3 bytes spare */
37319593f77SDmitry Chagin };
374b2f58791SDmitry Chagin 
375b2f58791SDmitry Chagin struct l_ifreq {
376b2f58791SDmitry Chagin 	union {
377b2f58791SDmitry Chagin 		char	ifrn_name[LINUX_IFNAMSIZ];
378b2f58791SDmitry Chagin 	} ifr_ifrn;
379b2f58791SDmitry Chagin 
380b2f58791SDmitry Chagin 	union {
381b2f58791SDmitry Chagin 		struct l_sockaddr	ifru_addr;
382b2f58791SDmitry Chagin 		struct l_sockaddr	ifru_dstaddr;
383b2f58791SDmitry Chagin 		struct l_sockaddr	ifru_broadaddr;
384b2f58791SDmitry Chagin 		struct l_sockaddr	ifru_netmask;
385b2f58791SDmitry Chagin 		struct l_sockaddr	ifru_hwaddr;
386b2f58791SDmitry Chagin 		l_short		ifru_flags[1];
3877ece126eSTai-hwa Liang 		l_int		ifru_ivalue;
388b2f58791SDmitry Chagin 		l_int		ifru_mtu;
389b2f58791SDmitry Chagin 		struct l_ifmap	ifru_map;
390b2f58791SDmitry Chagin 		char		ifru_slave[LINUX_IFNAMSIZ];
391b2f58791SDmitry Chagin 		l_uintptr_t	ifru_data;
392b2f58791SDmitry Chagin 	} ifr_ifru;
39319593f77SDmitry Chagin };
394b2f58791SDmitry Chagin 
395b2f58791SDmitry Chagin #define	ifr_name	ifr_ifrn.ifrn_name	/* Interface name */
396b2f58791SDmitry Chagin #define	ifr_hwaddr	ifr_ifru.ifru_hwaddr	/* MAC address */
3977ece126eSTai-hwa Liang #define	ifr_ifindex	ifr_ifru.ifru_ivalue	/* Interface index */
398b2f58791SDmitry Chagin 
399b2f58791SDmitry Chagin struct l_ifconf {
400b2f58791SDmitry Chagin 	int	ifc_len;
401b2f58791SDmitry Chagin 	union {
402b2f58791SDmitry Chagin 		l_uintptr_t	ifcu_buf;
403b2f58791SDmitry Chagin 		l_uintptr_t	ifcu_req;
404b2f58791SDmitry Chagin 	} ifc_ifcu;
405b2f58791SDmitry Chagin };
406b2f58791SDmitry Chagin 
407b2f58791SDmitry Chagin #define	ifc_buf		ifc_ifcu.ifcu_buf
408b2f58791SDmitry Chagin #define	ifc_req		ifc_ifcu.ifcu_req
409b2f58791SDmitry Chagin 
410b2f58791SDmitry Chagin #define LINUX_ARCH_SET_GS		0x1001
411b2f58791SDmitry Chagin #define LINUX_ARCH_SET_FS		0x1002
412f1389991SDmitry Chagin #define LINUX_ARCH_GET_FS		0x1003
413f1389991SDmitry Chagin #define LINUX_ARCH_GET_GS		0x1004
414916f3dbaSEdward Tomasz Napierala #define LINUX_ARCH_CET_STATUS		0x3001
415b2f58791SDmitry Chagin 
416b2f58791SDmitry Chagin #define	linux_copyout_rusage(r, u)	copyout(r, u, sizeof(*r))
417b2f58791SDmitry Chagin 
418b2f58791SDmitry Chagin /* robust futexes */
419b2f58791SDmitry Chagin struct linux_robust_list {
420b2f58791SDmitry Chagin 	l_uintptr_t			next;
421b2f58791SDmitry Chagin };
422b2f58791SDmitry Chagin 
423b2f58791SDmitry Chagin struct linux_robust_list_head {
424b2f58791SDmitry Chagin 	struct linux_robust_list	list;
425b2f58791SDmitry Chagin 	l_long				futex_offset;
426b2f58791SDmitry Chagin 	l_uintptr_t			pending_list;
427b2f58791SDmitry Chagin };
428b2f58791SDmitry Chagin 
42995c19e1dSEdward Tomasz Napierala /* This corresponds to 'struct user_regs_struct' in Linux. */
43095c19e1dSEdward Tomasz Napierala struct linux_pt_regset {
43195c19e1dSEdward Tomasz Napierala 	l_ulong	r15;
43295c19e1dSEdward Tomasz Napierala 	l_ulong	r14;
43395c19e1dSEdward Tomasz Napierala 	l_ulong	r13;
43495c19e1dSEdward Tomasz Napierala 	l_ulong	r12;
43595c19e1dSEdward Tomasz Napierala 	l_ulong	rbp;
43695c19e1dSEdward Tomasz Napierala 	l_ulong	rbx;
43795c19e1dSEdward Tomasz Napierala 	l_ulong	r11;
43895c19e1dSEdward Tomasz Napierala 	l_ulong	r10;
43995c19e1dSEdward Tomasz Napierala 	l_ulong	r9;
44095c19e1dSEdward Tomasz Napierala 	l_ulong	r8;
44195c19e1dSEdward Tomasz Napierala 	l_ulong	rax;
44295c19e1dSEdward Tomasz Napierala 	l_ulong	rcx;
44395c19e1dSEdward Tomasz Napierala 	l_ulong	rdx;
44495c19e1dSEdward Tomasz Napierala 	l_ulong	rsi;
44595c19e1dSEdward Tomasz Napierala 	l_ulong	rdi;
44695c19e1dSEdward Tomasz Napierala 	l_ulong	orig_rax;
44795c19e1dSEdward Tomasz Napierala 	l_ulong	rip;
44895c19e1dSEdward Tomasz Napierala 	l_ulong	cs;
44995c19e1dSEdward Tomasz Napierala 	l_ulong	eflags;
45095c19e1dSEdward Tomasz Napierala 	l_ulong	rsp;
45195c19e1dSEdward Tomasz Napierala 	l_ulong	ss;
45295c19e1dSEdward Tomasz Napierala 	l_ulong fs_base;
45395c19e1dSEdward Tomasz Napierala 	l_ulong gs_base;
45495c19e1dSEdward Tomasz Napierala 	l_ulong ds;
45595c19e1dSEdward Tomasz Napierala 	l_ulong es;
45695c19e1dSEdward Tomasz Napierala 	l_ulong fs;
45795c19e1dSEdward Tomasz Napierala 	l_ulong gs;
45895c19e1dSEdward Tomasz Napierala };
45995c19e1dSEdward Tomasz Napierala 
46095c19e1dSEdward Tomasz Napierala struct reg;
46195c19e1dSEdward Tomasz Napierala 
4623417c298SEdward Tomasz Napierala void	bsd_to_linux_regset(const struct reg *b_reg,
46395c19e1dSEdward Tomasz Napierala 	    struct linux_pt_regset *l_regset);
464f0d9a6a7SEdward Tomasz Napierala void	linux_to_bsd_regset(struct reg *b_reg,
465f0d9a6a7SEdward Tomasz Napierala 	    const struct linux_pt_regset *l_regset);
466f0d9a6a7SEdward Tomasz Napierala 
46795c19e1dSEdward Tomasz Napierala 
468b2f58791SDmitry Chagin #endif /* !_AMD64_LINUX_H_ */
469