xref: /freebsd/sys/amd64/linux/linux.h (revision 931e2a1a6e0d8ac7d99f48eb7fc744e3a40284f0)
1b2f58791SDmitry Chagin /*-
2023b850bSEd Maste  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3023b850bSEd Maste  *
4b2f58791SDmitry Chagin  * Copyright (c) 2013 Dmitry Chagin
5b2f58791SDmitry Chagin  * Copyright (c) 1994-1996 Søren Schmidt
6b2f58791SDmitry Chagin  * All rights reserved.
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 
354ab7403bSDmitry Chagin #include <compat/linux/linux.h>
36b2f58791SDmitry Chagin #include <amd64/linux/linux_syscall.h>
37b2f58791SDmitry Chagin 
38*931e2a1aSEd Maste #define	LINUX_LEGACY_SYSCALLS
39*931e2a1aSEd Maste 
40b2f58791SDmitry Chagin /*
41b2f58791SDmitry Chagin  * debugging support
42b2f58791SDmitry Chagin  */
43b2f58791SDmitry Chagin extern u_char linux_debug_map[];
44b2f58791SDmitry Chagin #define	ldebug(name)	isclr(linux_debug_map, LINUX_SYS_linux_ ## name)
45b2f58791SDmitry Chagin #define	ARGS(nm, fmt)	"linux(%ld/%ld): "#nm"("fmt")\n",			\
46b2f58791SDmitry Chagin 			(long)td->td_proc->p_pid, (long)td->td_tid
47b2f58791SDmitry Chagin #define	LMSG(fmt)	"linux(%ld/%ld): "fmt"\n",				\
48b2f58791SDmitry Chagin 			(long)td->td_proc->p_pid, (long)td->td_tid
49b2f58791SDmitry Chagin #define	LINUX_DTRACE	linuxulator
50b2f58791SDmitry Chagin 
51b2f58791SDmitry Chagin #define	PTRIN(v)	(void *)(v)
52b2f58791SDmitry Chagin #define	PTROUT(v)	(uintptr_t)(v)
53b2f58791SDmitry Chagin 
54b2f58791SDmitry Chagin #define	CP(src,dst,fld) do { (dst).fld = (src).fld; } while (0)
55b2f58791SDmitry Chagin #define	CP2(src,dst,sfld,dfld) do { (dst).dfld = (src).sfld; } while (0)
56b2f58791SDmitry Chagin #define	PTRIN_CP(src,dst,fld) \
57b2f58791SDmitry Chagin 	do { (dst).fld = PTRIN((src).fld); } while (0)
58b2f58791SDmitry Chagin 
59b2f58791SDmitry Chagin /*
60b2f58791SDmitry Chagin  * Provide a separate set of types for the Linux types.
61b2f58791SDmitry Chagin  */
62b2f58791SDmitry Chagin typedef int32_t		l_int;
63b2f58791SDmitry Chagin typedef int64_t		l_long;
64b2f58791SDmitry Chagin typedef int16_t		l_short;
65b2f58791SDmitry Chagin typedef uint32_t	l_uint;
66b2f58791SDmitry Chagin typedef uint64_t	l_ulong;
67b2f58791SDmitry Chagin typedef uint16_t	l_ushort;
68b2f58791SDmitry Chagin 
69b2f58791SDmitry Chagin typedef l_ulong		l_uintptr_t;
70b2f58791SDmitry Chagin typedef l_long		l_clock_t;
71b2f58791SDmitry Chagin typedef l_int		l_daddr_t;
72b2f58791SDmitry Chagin typedef l_ulong		l_dev_t;
73b2f58791SDmitry Chagin typedef l_uint		l_gid_t;
74ab60bc84SDmitry Chagin typedef l_ushort	l_gid16_t;
75b2f58791SDmitry Chagin typedef l_uint		l_uid_t;
76ab60bc84SDmitry Chagin typedef	l_ushort	l_uid16_t;
77b2f58791SDmitry Chagin typedef l_ulong		l_ino_t;
78b2f58791SDmitry Chagin typedef l_int		l_key_t;
79b2f58791SDmitry Chagin typedef l_long		l_loff_t;
80b2f58791SDmitry Chagin typedef l_uint		l_mode_t;
81b2f58791SDmitry Chagin typedef l_long		l_off_t;
82b2f58791SDmitry Chagin typedef l_int		l_pid_t;
83b2f58791SDmitry Chagin typedef l_ulong		l_size_t;
84b2f58791SDmitry Chagin typedef l_long		l_ssize_t;
85b2f58791SDmitry Chagin typedef l_long		l_suseconds_t;
86b2f58791SDmitry Chagin typedef l_long		l_time_t;
87b2f58791SDmitry Chagin typedef l_int		l_timer_t;
88b2f58791SDmitry Chagin typedef l_int		l_mqd_t;
89b2f58791SDmitry Chagin typedef l_size_t	l_socklen_t;
903e89b641SDmitry Chagin typedef	l_ulong		l_fd_mask;
91b2f58791SDmitry Chagin 
92b2f58791SDmitry Chagin typedef struct {
93b2f58791SDmitry Chagin 	l_int		val[2];
94b2f58791SDmitry Chagin } l_fsid_t;
95b2f58791SDmitry Chagin 
96b2f58791SDmitry Chagin typedef struct {
97b2f58791SDmitry Chagin 	l_time_t	tv_sec;
98b2f58791SDmitry Chagin 	l_suseconds_t	tv_usec;
99b2f58791SDmitry Chagin } l_timeval;
100b2f58791SDmitry Chagin 
101b2f58791SDmitry Chagin #define	l_fd_set	fd_set
102b2f58791SDmitry Chagin 
103b2f58791SDmitry Chagin /*
104b2f58791SDmitry Chagin  * Miscellaneous
105b2f58791SDmitry Chagin  */
1064048f59cSDmitry Chagin #define LINUX_AT_COUNT		19	/* Count of used aux entry types. */
107b2f58791SDmitry Chagin 
108b2f58791SDmitry Chagin struct l___sysctl_args
109b2f58791SDmitry Chagin {
110b2f58791SDmitry Chagin 	l_uintptr_t	name;
111b2f58791SDmitry Chagin 	l_int		nlen;
112b2f58791SDmitry Chagin 	l_uintptr_t	oldval;
113b2f58791SDmitry Chagin 	l_uintptr_t	oldlenp;
114b2f58791SDmitry Chagin 	l_uintptr_t	newval;
115b2f58791SDmitry Chagin 	l_size_t	newlen;
116b2f58791SDmitry Chagin 	l_ulong		__spare[4];
117b2f58791SDmitry Chagin };
118b2f58791SDmitry Chagin 
119b2f58791SDmitry Chagin /* Resource limits */
120b2f58791SDmitry Chagin #define	LINUX_RLIMIT_CPU	0
121b2f58791SDmitry Chagin #define	LINUX_RLIMIT_FSIZE	1
122b2f58791SDmitry Chagin #define	LINUX_RLIMIT_DATA	2
123b2f58791SDmitry Chagin #define	LINUX_RLIMIT_STACK	3
124b2f58791SDmitry Chagin #define	LINUX_RLIMIT_CORE	4
125b2f58791SDmitry Chagin #define	LINUX_RLIMIT_RSS	5
126b2f58791SDmitry Chagin #define	LINUX_RLIMIT_NPROC	6
127b2f58791SDmitry Chagin #define	LINUX_RLIMIT_NOFILE	7
128b2f58791SDmitry Chagin #define	LINUX_RLIMIT_MEMLOCK	8
129b2f58791SDmitry Chagin #define	LINUX_RLIMIT_AS		9	/* Address space limit */
130b2f58791SDmitry Chagin 
131b2f58791SDmitry Chagin #define	LINUX_RLIM_NLIMITS	10
132b2f58791SDmitry Chagin 
133b2f58791SDmitry Chagin struct l_rlimit {
134b2f58791SDmitry Chagin 	l_ulong		rlim_cur;
135b2f58791SDmitry Chagin 	l_ulong		rlim_max;
136b2f58791SDmitry Chagin };
137b2f58791SDmitry Chagin 
138b2f58791SDmitry Chagin /*
139b2f58791SDmitry Chagin  * stat family of syscalls
140b2f58791SDmitry Chagin  */
141b2f58791SDmitry Chagin struct l_timespec {
142b2f58791SDmitry Chagin 	l_time_t	tv_sec;
143b2f58791SDmitry Chagin 	l_long		tv_nsec;
144b2f58791SDmitry Chagin };
145b2f58791SDmitry Chagin 
146b2f58791SDmitry Chagin struct l_newstat {
147b2f58791SDmitry Chagin 	l_dev_t		st_dev;
148b2f58791SDmitry Chagin 	l_ino_t		st_ino;
149b2f58791SDmitry Chagin 	l_ulong		st_nlink;
150b2f58791SDmitry Chagin 	l_uint		st_mode;
151b2f58791SDmitry Chagin 	l_uid_t		st_uid;
152b2f58791SDmitry Chagin 	l_gid_t		st_gid;
153b2f58791SDmitry Chagin 	l_uint		__st_pad1;
154b2f58791SDmitry Chagin 	l_dev_t		st_rdev;
155b2f58791SDmitry Chagin 	l_off_t		st_size;
156b2f58791SDmitry Chagin 	l_long		st_blksize;
157b2f58791SDmitry Chagin 	l_long		st_blocks;
158b2f58791SDmitry Chagin 	struct l_timespec	st_atim;
159b2f58791SDmitry Chagin 	struct l_timespec	st_mtim;
160b2f58791SDmitry Chagin 	struct l_timespec	st_ctim;
161b2f58791SDmitry Chagin 	l_long		__unused1;
162b2f58791SDmitry Chagin 	l_long		__unused2;
163b2f58791SDmitry Chagin 	l_long		__unused3;
164b2f58791SDmitry Chagin };
165b2f58791SDmitry Chagin 
166b2f58791SDmitry Chagin /* sigaction flags */
167b2f58791SDmitry Chagin #define	LINUX_SA_NOCLDSTOP	0x00000001
168b2f58791SDmitry Chagin #define	LINUX_SA_NOCLDWAIT	0x00000002
169b2f58791SDmitry Chagin #define	LINUX_SA_SIGINFO	0x00000004
170b2f58791SDmitry Chagin #define	LINUX_SA_RESTORER	0x04000000
171b2f58791SDmitry Chagin #define	LINUX_SA_ONSTACK	0x08000000
172b2f58791SDmitry Chagin #define	LINUX_SA_RESTART	0x10000000
173b2f58791SDmitry Chagin #define	LINUX_SA_INTERRUPT	0x20000000
174b2f58791SDmitry Chagin #define	LINUX_SA_NOMASK		0x40000000
175b2f58791SDmitry Chagin #define	LINUX_SA_ONESHOT	0x80000000
176b2f58791SDmitry Chagin 
177b2f58791SDmitry Chagin /* sigprocmask actions */
178b2f58791SDmitry Chagin #define	LINUX_SIG_BLOCK		0
179b2f58791SDmitry Chagin #define	LINUX_SIG_UNBLOCK	1
180b2f58791SDmitry Chagin #define	LINUX_SIG_SETMASK	2
181b2f58791SDmitry Chagin 
182b2f58791SDmitry Chagin /* sigaltstack */
183b2f58791SDmitry Chagin #define	LINUX_MINSIGSTKSZ	2048
184b2f58791SDmitry Chagin 
185b2f58791SDmitry Chagin typedef void	(*l_handler_t)(l_int);
186b2f58791SDmitry Chagin 
187b2f58791SDmitry Chagin typedef struct {
188b2f58791SDmitry Chagin 	l_handler_t	lsa_handler;
189b2f58791SDmitry Chagin 	l_ulong		lsa_flags;
190b2f58791SDmitry Chagin 	l_uintptr_t	lsa_restorer;
191b2f58791SDmitry Chagin 	l_sigset_t	lsa_mask;
192b2f58791SDmitry Chagin } l_sigaction_t;
193b2f58791SDmitry Chagin 
194b2f58791SDmitry Chagin typedef struct {
195b2f58791SDmitry Chagin 	l_uintptr_t	ss_sp;
196b2f58791SDmitry Chagin 	l_int		ss_flags;
197b2f58791SDmitry Chagin 	l_size_t	ss_size;
198b2f58791SDmitry Chagin } l_stack_t;
199b2f58791SDmitry Chagin 
200b2f58791SDmitry Chagin struct l_fpstate {
201b2f58791SDmitry Chagin 	u_int16_t cwd;
202b2f58791SDmitry Chagin 	u_int16_t swd;
203b2f58791SDmitry Chagin 	u_int16_t twd;
204b2f58791SDmitry Chagin 	u_int16_t fop;
205b2f58791SDmitry Chagin 	u_int64_t rip;
206b2f58791SDmitry Chagin 	u_int64_t rdp;
207b2f58791SDmitry Chagin 	u_int32_t mxcsr;
208b2f58791SDmitry Chagin 	u_int32_t mxcsr_mask;
209b2f58791SDmitry Chagin 	u_int32_t st_space[32];
210b2f58791SDmitry Chagin 	u_int32_t xmm_space[64];
211b2f58791SDmitry Chagin 	u_int32_t reserved2[24];
212b2f58791SDmitry Chagin };
213b2f58791SDmitry Chagin 
214b2f58791SDmitry Chagin struct l_sigcontext {
215b2f58791SDmitry Chagin 	l_ulong		sc_r8;
216b2f58791SDmitry Chagin 	l_ulong		sc_r9;
217b2f58791SDmitry Chagin 	l_ulong		sc_r10;
218b2f58791SDmitry Chagin 	l_ulong		sc_r11;
219b2f58791SDmitry Chagin 	l_ulong		sc_r12;
220b2f58791SDmitry Chagin 	l_ulong		sc_r13;
221b2f58791SDmitry Chagin 	l_ulong		sc_r14;
222b2f58791SDmitry Chagin 	l_ulong		sc_r15;
223b2f58791SDmitry Chagin 	l_ulong		sc_rdi;
224b2f58791SDmitry Chagin 	l_ulong		sc_rsi;
225b2f58791SDmitry Chagin 	l_ulong		sc_rbp;
226b2f58791SDmitry Chagin 	l_ulong		sc_rbx;
227b2f58791SDmitry Chagin 	l_ulong		sc_rdx;
228b2f58791SDmitry Chagin 	l_ulong		sc_rax;
229b2f58791SDmitry Chagin 	l_ulong		sc_rcx;
230b2f58791SDmitry Chagin 	l_ulong		sc_rsp;
231b2f58791SDmitry Chagin 	l_ulong		sc_rip;
232b2f58791SDmitry Chagin 	l_ulong		sc_rflags;
233b2f58791SDmitry Chagin 	l_ushort	sc_cs;
234b2f58791SDmitry Chagin 	l_ushort	sc_gs;
235b2f58791SDmitry Chagin 	l_ushort	sc_fs;
236b2f58791SDmitry Chagin 	l_ushort	sc___pad0;
237b2f58791SDmitry Chagin 	l_ulong		sc_err;
238b2f58791SDmitry Chagin 	l_ulong		sc_trapno;
239b2f58791SDmitry Chagin 	l_sigset_t	sc_mask;
240b2f58791SDmitry Chagin 	l_ulong		sc_cr2;
241b2f58791SDmitry Chagin 	struct l_fpstate *sc_fpstate;
242b2f58791SDmitry Chagin 	l_ulong		sc_reserved1[8];
243b2f58791SDmitry Chagin };
244b2f58791SDmitry Chagin 
245b2f58791SDmitry Chagin struct l_ucontext {
246b2f58791SDmitry Chagin 	l_ulong		uc_flags;
247b2f58791SDmitry Chagin 	l_uintptr_t	uc_link;
248b2f58791SDmitry Chagin 	l_stack_t	uc_stack;
249b2f58791SDmitry Chagin 	struct l_sigcontext	uc_mcontext;
250b2f58791SDmitry Chagin 	l_sigset_t	uc_sigmask;
251b2f58791SDmitry Chagin };
252b2f58791SDmitry Chagin 
253b2f58791SDmitry Chagin #define LINUX_SI_PREAMBLE_SIZE	(4 * sizeof(int))
254b2f58791SDmitry Chagin #define	LINUX_SI_MAX_SIZE	128
255b2f58791SDmitry Chagin #define	LINUX_SI_PAD_SIZE	((LINUX_SI_MAX_SIZE - \
256b2f58791SDmitry Chagin 				    LINUX_SI_PREAMBLE_SIZE) / sizeof(l_int))
257b2f58791SDmitry Chagin typedef union l_sigval {
258b2f58791SDmitry Chagin 	l_int		sival_int;
259b2f58791SDmitry Chagin 	l_uintptr_t	sival_ptr;
260b2f58791SDmitry Chagin } l_sigval_t;
261b2f58791SDmitry Chagin 
262b2f58791SDmitry Chagin typedef struct l_siginfo {
263b2f58791SDmitry Chagin 	l_int		lsi_signo;
264b2f58791SDmitry Chagin 	l_int		lsi_errno;
265b2f58791SDmitry Chagin 	l_int		lsi_code;
266b2f58791SDmitry Chagin 	union {
267b2f58791SDmitry Chagin 		l_int	_pad[LINUX_SI_PAD_SIZE];
268b2f58791SDmitry Chagin 
269b2f58791SDmitry Chagin 		struct {
270b2f58791SDmitry Chagin 			l_pid_t		_pid;
271b2f58791SDmitry Chagin 			l_uid_t		_uid;
272b2f58791SDmitry Chagin 		} _kill;
273b2f58791SDmitry Chagin 
274b2f58791SDmitry Chagin 		struct {
275b2f58791SDmitry Chagin 			l_timer_t	_tid;
276b2f58791SDmitry Chagin 			l_int		_overrun;
277b2f58791SDmitry Chagin 			char		_pad[sizeof(l_uid_t) - sizeof(int)];
278b2f58791SDmitry Chagin 			union l_sigval	_sigval;
279b2f58791SDmitry Chagin 			l_uint		_sys_private;
280b2f58791SDmitry Chagin 		} _timer;
281b2f58791SDmitry Chagin 
282b2f58791SDmitry Chagin 		struct {
283b2f58791SDmitry Chagin 			l_pid_t		_pid;		/* sender's pid */
284b2f58791SDmitry Chagin 			l_uid_t		_uid;		/* sender's uid */
285b2f58791SDmitry Chagin 			union l_sigval	_sigval;
286b2f58791SDmitry Chagin 		} _rt;
287b2f58791SDmitry Chagin 
288b2f58791SDmitry Chagin 		struct {
289b2f58791SDmitry Chagin 			l_pid_t		_pid;		/* which child */
290b2f58791SDmitry Chagin 			l_uid_t		_uid;		/* sender's uid */
291b2f58791SDmitry Chagin 			l_int		_status;	/* exit code */
292b2f58791SDmitry Chagin 			l_clock_t	_utime;
293b2f58791SDmitry Chagin 			l_clock_t	_stime;
294b2f58791SDmitry Chagin 		} _sigchld;
295b2f58791SDmitry Chagin 
296b2f58791SDmitry Chagin 		struct {
297b2f58791SDmitry Chagin 			l_uintptr_t	_addr;	/* Faulting insn/memory ref. */
298b2f58791SDmitry Chagin 		} _sigfault;
299b2f58791SDmitry Chagin 
300b2f58791SDmitry Chagin 		struct {
301b2f58791SDmitry Chagin 			l_long		_band;	/* POLL_IN,POLL_OUT,POLL_MSG */
302b2f58791SDmitry Chagin 			l_int		_fd;
303b2f58791SDmitry Chagin 		} _sigpoll;
304b2f58791SDmitry Chagin 	} _sifields;
305b2f58791SDmitry Chagin } l_siginfo_t;
306b2f58791SDmitry Chagin 
307b2f58791SDmitry Chagin #define	lsi_pid		_sifields._kill._pid
308b2f58791SDmitry Chagin #define	lsi_uid		_sifields._kill._uid
309b2f58791SDmitry Chagin #define	lsi_tid		_sifields._timer._tid
310b2f58791SDmitry Chagin #define	lsi_overrun	_sifields._timer._overrun
311b2f58791SDmitry Chagin #define	lsi_sys_private	_sifields._timer._sys_private
312b2f58791SDmitry Chagin #define	lsi_status	_sifields._sigchld._status
313b2f58791SDmitry Chagin #define	lsi_utime	_sifields._sigchld._utime
314b2f58791SDmitry Chagin #define	lsi_stime	_sifields._sigchld._stime
315b2f58791SDmitry Chagin #define	lsi_value	_sifields._rt._sigval
316b2f58791SDmitry Chagin #define	lsi_int		_sifields._rt._sigval.sival_int
317b2f58791SDmitry Chagin #define	lsi_ptr		_sifields._rt._sigval.sival_ptr
318b2f58791SDmitry Chagin #define	lsi_addr	_sifields._sigfault._addr
319b2f58791SDmitry Chagin #define	lsi_band	_sifields._sigpoll._band
320b2f58791SDmitry Chagin #define	lsi_fd		_sifields._sigpoll._fd
321b2f58791SDmitry Chagin 
322b2f58791SDmitry Chagin /*
323b2f58791SDmitry Chagin  * We make the stack look like Linux expects it when calling a signal
324b2f58791SDmitry Chagin  * handler, but use the BSD way of calling the handler and sigreturn().
325b2f58791SDmitry Chagin  * This means that we need to pass the pointer to the handler too.
326b2f58791SDmitry Chagin  * It is appended to the frame to not interfere with the rest of it.
327b2f58791SDmitry Chagin  */
328b2f58791SDmitry Chagin 
329b2f58791SDmitry Chagin struct l_rt_sigframe {
330b2f58791SDmitry Chagin 	struct l_ucontext	sf_sc;
331b2f58791SDmitry Chagin 	struct l_siginfo	sf_si;
332b2f58791SDmitry Chagin 	l_handler_t		sf_handler;
333b2f58791SDmitry Chagin };
334b2f58791SDmitry Chagin 
335b2f58791SDmitry Chagin /*
336b2f58791SDmitry Chagin  * mount flags
337b2f58791SDmitry Chagin  */
338b2f58791SDmitry Chagin #define	LINUX_MS_RDONLY		0x0001
339b2f58791SDmitry Chagin #define	LINUX_MS_NOSUID		0x0002
340b2f58791SDmitry Chagin #define	LINUX_MS_NODEV		0x0004
341b2f58791SDmitry Chagin #define	LINUX_MS_NOEXEC		0x0008
342b2f58791SDmitry Chagin #define	LINUX_MS_REMOUNT	0x0020
343b2f58791SDmitry Chagin 
344b2f58791SDmitry Chagin /*
345b2f58791SDmitry Chagin  * SystemV IPC defines
346b2f58791SDmitry Chagin  */
347b2f58791SDmitry Chagin #define	LINUX_IPC_RMID		0
348b2f58791SDmitry Chagin #define	LINUX_IPC_SET		1
349b2f58791SDmitry Chagin #define	LINUX_IPC_STAT		2
350b2f58791SDmitry Chagin #define	LINUX_IPC_INFO		3
351b2f58791SDmitry Chagin 
352b2f58791SDmitry Chagin #define	LINUX_SHM_LOCK		11
353b2f58791SDmitry Chagin #define	LINUX_SHM_UNLOCK	12
354b2f58791SDmitry Chagin #define	LINUX_SHM_STAT		13
355b2f58791SDmitry Chagin #define	LINUX_SHM_INFO		14
356b2f58791SDmitry Chagin 
357b2f58791SDmitry Chagin #define	LINUX_SHM_RDONLY	0x1000
358b2f58791SDmitry Chagin #define	LINUX_SHM_RND		0x2000
359b2f58791SDmitry Chagin #define	LINUX_SHM_REMAP		0x4000
360b2f58791SDmitry Chagin 
361b2f58791SDmitry Chagin /* semctl commands */
362b2f58791SDmitry Chagin #define	LINUX_GETPID		11
363b2f58791SDmitry Chagin #define	LINUX_GETVAL		12
364b2f58791SDmitry Chagin #define	LINUX_GETALL		13
365b2f58791SDmitry Chagin #define	LINUX_GETNCNT		14
366b2f58791SDmitry Chagin #define	LINUX_GETZCNT		15
367b2f58791SDmitry Chagin #define	LINUX_SETVAL		16
368b2f58791SDmitry Chagin #define	LINUX_SETALL		17
369b2f58791SDmitry Chagin #define	LINUX_SEM_STAT		18
370b2f58791SDmitry Chagin #define	LINUX_SEM_INFO		19
371b2f58791SDmitry Chagin 
372b2f58791SDmitry Chagin union l_semun {
373b2f58791SDmitry Chagin 	l_int		val;
374b2f58791SDmitry Chagin 	l_uintptr_t	buf;
375b2f58791SDmitry Chagin 	l_uintptr_t	array;
376b2f58791SDmitry Chagin 	l_uintptr_t	__buf;
377b2f58791SDmitry Chagin 	l_uintptr_t	__pad;
378b2f58791SDmitry Chagin };
379b2f58791SDmitry Chagin 
380b2f58791SDmitry Chagin struct l_sockaddr {
381b2f58791SDmitry Chagin 	l_ushort	sa_family;
382b2f58791SDmitry Chagin 	char		sa_data[14];
383b2f58791SDmitry Chagin };
384b2f58791SDmitry Chagin 
385b2f58791SDmitry Chagin struct l_ifmap {
386b2f58791SDmitry Chagin 	l_ulong		mem_start;
387b2f58791SDmitry Chagin 	l_ulong		mem_end;
388b2f58791SDmitry Chagin 	l_ushort	base_addr;
389b2f58791SDmitry Chagin 	u_char		irq;
390b2f58791SDmitry Chagin 	u_char		dma;
391b2f58791SDmitry Chagin 	u_char		port;
392b2f58791SDmitry Chagin } __packed;
393b2f58791SDmitry Chagin 
394b2f58791SDmitry Chagin #define	LINUX_IFHWADDRLEN	6
395b2f58791SDmitry Chagin #define	LINUX_IFNAMSIZ		16
396b2f58791SDmitry Chagin 
397b2f58791SDmitry Chagin struct l_ifreq {
398b2f58791SDmitry Chagin 	union {
399b2f58791SDmitry Chagin 		char	ifrn_name[LINUX_IFNAMSIZ];
400b2f58791SDmitry Chagin 	} ifr_ifrn;
401b2f58791SDmitry Chagin 
402b2f58791SDmitry Chagin 	union {
403b2f58791SDmitry Chagin 		struct l_sockaddr	ifru_addr;
404b2f58791SDmitry Chagin 		struct l_sockaddr	ifru_dstaddr;
405b2f58791SDmitry Chagin 		struct l_sockaddr	ifru_broadaddr;
406b2f58791SDmitry Chagin 		struct l_sockaddr	ifru_netmask;
407b2f58791SDmitry Chagin 		struct l_sockaddr	ifru_hwaddr;
408b2f58791SDmitry Chagin 		l_short		ifru_flags[1];
4097ece126eSTai-hwa Liang 		l_int		ifru_ivalue;
410b2f58791SDmitry Chagin 		l_int		ifru_mtu;
411b2f58791SDmitry Chagin 		struct l_ifmap	ifru_map;
412b2f58791SDmitry Chagin 		char		ifru_slave[LINUX_IFNAMSIZ];
413b2f58791SDmitry Chagin 		l_uintptr_t	ifru_data;
414b2f58791SDmitry Chagin 	} ifr_ifru;
415b2f58791SDmitry Chagin } __packed;
416b2f58791SDmitry Chagin 
417b2f58791SDmitry Chagin #define	ifr_name	ifr_ifrn.ifrn_name	/* Interface name */
418b2f58791SDmitry Chagin #define	ifr_hwaddr	ifr_ifru.ifru_hwaddr	/* MAC address */
4197ece126eSTai-hwa Liang #define	ifr_ifindex	ifr_ifru.ifru_ivalue	/* Interface index */
420b2f58791SDmitry Chagin 
421b2f58791SDmitry Chagin struct l_ifconf {
422b2f58791SDmitry Chagin 	int	ifc_len;
423b2f58791SDmitry Chagin 	union {
424b2f58791SDmitry Chagin 		l_uintptr_t	ifcu_buf;
425b2f58791SDmitry Chagin 		l_uintptr_t	ifcu_req;
426b2f58791SDmitry Chagin 	} ifc_ifcu;
427b2f58791SDmitry Chagin };
428b2f58791SDmitry Chagin 
429b2f58791SDmitry Chagin #define	ifc_buf		ifc_ifcu.ifcu_buf
430b2f58791SDmitry Chagin #define	ifc_req		ifc_ifcu.ifcu_req
431b2f58791SDmitry Chagin 
432b2f58791SDmitry Chagin /*
433b2f58791SDmitry Chagin  * poll()
434b2f58791SDmitry Chagin  */
435b2f58791SDmitry Chagin #define	LINUX_POLLIN		0x0001
436b2f58791SDmitry Chagin #define	LINUX_POLLPRI		0x0002
437b2f58791SDmitry Chagin #define	LINUX_POLLOUT		0x0004
438b2f58791SDmitry Chagin #define	LINUX_POLLERR		0x0008
439b2f58791SDmitry Chagin #define	LINUX_POLLHUP		0x0010
440b2f58791SDmitry Chagin #define	LINUX_POLLNVAL		0x0020
441b2f58791SDmitry Chagin #define	LINUX_POLLRDNORM	0x0040
442b2f58791SDmitry Chagin #define	LINUX_POLLRDBAND	0x0080
443b2f58791SDmitry Chagin #define	LINUX_POLLWRNORM	0x0100
444b2f58791SDmitry Chagin #define	LINUX_POLLWRBAND	0x0200
445b2f58791SDmitry Chagin #define	LINUX_POLLMSG		0x0400
446b2f58791SDmitry Chagin 
447b2f58791SDmitry Chagin struct l_pollfd {
448b2f58791SDmitry Chagin 	l_int		fd;
449b2f58791SDmitry Chagin 	l_short		events;
450b2f58791SDmitry Chagin 	l_short		revents;
451b2f58791SDmitry Chagin };
452b2f58791SDmitry Chagin 
453b2f58791SDmitry Chagin #define LINUX_ARCH_SET_GS		0x1001
454b2f58791SDmitry Chagin #define LINUX_ARCH_SET_FS		0x1002
455f1389991SDmitry Chagin #define LINUX_ARCH_GET_FS		0x1003
456f1389991SDmitry Chagin #define LINUX_ARCH_GET_GS		0x1004
457b2f58791SDmitry Chagin 
458b2f58791SDmitry Chagin #define	linux_copyout_rusage(r, u)	copyout(r, u, sizeof(*r))
459b2f58791SDmitry Chagin 
460b2f58791SDmitry Chagin /* robust futexes */
461b2f58791SDmitry Chagin struct linux_robust_list {
462b2f58791SDmitry Chagin 	l_uintptr_t			next;
463b2f58791SDmitry Chagin };
464b2f58791SDmitry Chagin 
465b2f58791SDmitry Chagin struct linux_robust_list_head {
466b2f58791SDmitry Chagin 	struct linux_robust_list	list;
467b2f58791SDmitry Chagin 	l_long				futex_offset;
468b2f58791SDmitry Chagin 	l_uintptr_t			pending_list;
469b2f58791SDmitry Chagin };
470b2f58791SDmitry Chagin 
471b2f58791SDmitry Chagin #endif /* !_AMD64_LINUX_H_ */
472