xref: /freebsd/sys/i386/linux/linux.h (revision ebea8660558a023284f04ba30aa2e6e173d7d544)
1c21dee17SSøren Schmidt /*-
2e1743d02SSøren Schmidt  * Copyright (c) 1994-1996 S�ren Schmidt
3c21dee17SSøren Schmidt  * All rights reserved.
4c21dee17SSøren Schmidt  *
5c21dee17SSøren Schmidt  * Redistribution and use in source and binary forms, with or without
6c21dee17SSøren Schmidt  * modification, are permitted provided that the following conditions
7c21dee17SSøren Schmidt  * are met:
8c21dee17SSøren Schmidt  * 1. Redistributions of source code must retain the above copyright
9c21dee17SSøren Schmidt  *    notice, this list of conditions and the following disclaimer
10c21dee17SSøren Schmidt  *    in this position and unchanged.
11c21dee17SSøren Schmidt  * 2. Redistributions in binary form must reproduce the above copyright
12c21dee17SSøren Schmidt  *    notice, this list of conditions and the following disclaimer in the
13c21dee17SSøren Schmidt  *    documentation and/or other materials provided with the distribution.
14c21dee17SSøren Schmidt  * 3. The name of the author may not be used to endorse or promote products
156c5e9bbdSMike Pritchard  *    derived from this software without specific prior written permission
16c21dee17SSøren Schmidt  *
17c21dee17SSøren Schmidt  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18c21dee17SSøren Schmidt  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19c21dee17SSøren Schmidt  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20c21dee17SSøren Schmidt  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21c21dee17SSøren Schmidt  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22c21dee17SSøren Schmidt  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23c21dee17SSøren Schmidt  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24c21dee17SSøren Schmidt  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25c21dee17SSøren Schmidt  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26c21dee17SSøren Schmidt  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27c21dee17SSøren Schmidt  *
28c3aac50fSPeter Wemm  * $FreeBSD$
29c21dee17SSøren Schmidt  */
30c21dee17SSøren Schmidt 
311f3dad5aSBruce Evans #ifndef _I386_LINUX_LINUX_H_
321f3dad5aSBruce Evans #define	_I386_LINUX_LINUX_H_
3362c3734cSBruce Evans 
3479363394SAndrew Gallatin #include <sys/signal.h> /* for sigval union */
3579363394SAndrew Gallatin 
36ebea8660SMarcel Moolenaar #include <i386/linux/linux_syscall.h>
37c21dee17SSøren Schmidt 
3843bef515SMarcel Moolenaar #ifdef MALLOC_DECLARE
3943bef515SMarcel Moolenaar MALLOC_DECLARE(M_LINUX);
4043bef515SMarcel Moolenaar #endif
4143bef515SMarcel Moolenaar 
4243bef515SMarcel Moolenaar /*
4343bef515SMarcel Moolenaar  * Miscellaneous
4443bef515SMarcel Moolenaar  */
4543bef515SMarcel Moolenaar #define	LINUX_NAME_MAX		255
4643bef515SMarcel Moolenaar #define	LINUX_MAX_UTSNAME	65
4743bef515SMarcel Moolenaar 
4843bef515SMarcel Moolenaar /* Scheduling policies */
4943bef515SMarcel Moolenaar #define	LINUX_SCHED_OTHER	0
5043bef515SMarcel Moolenaar #define	LINUX_SCHED_FIFO	1
5143bef515SMarcel Moolenaar #define	LINUX_SCHED_RR		2
5243bef515SMarcel Moolenaar 
5343bef515SMarcel Moolenaar /* Resource limits */
5443bef515SMarcel Moolenaar #define	LINUX_RLIMIT_CPU	0
5543bef515SMarcel Moolenaar #define	LINUX_RLIMIT_FSIZE	1
5643bef515SMarcel Moolenaar #define	LINUX_RLIMIT_DATA	2
5743bef515SMarcel Moolenaar #define	LINUX_RLIMIT_STACK	3
5843bef515SMarcel Moolenaar #define	LINUX_RLIMIT_CORE	4
5943bef515SMarcel Moolenaar #define	LINUX_RLIMIT_RSS	5
6043bef515SMarcel Moolenaar #define	LINUX_RLIMIT_NPROC	6
6143bef515SMarcel Moolenaar #define	LINUX_RLIMIT_NOFILE	7
6243bef515SMarcel Moolenaar #define	LINUX_RLIMIT_MEMLOCK	8
6343bef515SMarcel Moolenaar #define	LINUX_RLIMIT_AS		9       /* address space limit */
6443bef515SMarcel Moolenaar 
6543bef515SMarcel Moolenaar #define	LINUX_RLIM_NLIMITS	10
6643bef515SMarcel Moolenaar 
6743bef515SMarcel Moolenaar /* mmap options */
6843bef515SMarcel Moolenaar #define	LINUX_MAP_SHARED	0x0001
6943bef515SMarcel Moolenaar #define	LINUX_MAP_PRIVATE	0x0002
7043bef515SMarcel Moolenaar #define	LINUX_MAP_FIXED		0x0010
7143bef515SMarcel Moolenaar #define	LINUX_MAP_ANON		0x0020
7243bef515SMarcel Moolenaar #define	LINUX_MAP_GROWSDOWN	0x0100
7343bef515SMarcel Moolenaar 
74c21dee17SSøren Schmidt typedef char *	linux_caddr_t;
7543bef515SMarcel Moolenaar typedef long	linux_clock_t;
7643bef515SMarcel Moolenaar typedef u_short	linux_dev_t;
7743bef515SMarcel Moolenaar typedef u_short	linux_gid_t;
7843bef515SMarcel Moolenaar typedef u_long	linux_ino_t;
7943bef515SMarcel Moolenaar typedef int	linux_key_t;	/* XXX */
8043bef515SMarcel Moolenaar typedef u_short	linux_mode_t;
8143bef515SMarcel Moolenaar typedef u_short	linux_nlink_t;
82c21dee17SSøren Schmidt typedef long	linux_off_t;
8343bef515SMarcel Moolenaar typedef int	linux_pid_t;
8443bef515SMarcel Moolenaar typedef u_int	linux_size_t;
8543bef515SMarcel Moolenaar typedef long	linux_time_t;
8643bef515SMarcel Moolenaar typedef u_short	linux_uid_t;
8743bef515SMarcel Moolenaar 
88c21dee17SSøren Schmidt typedef struct {
89c21dee17SSøren Schmidt 	long	val[2];
90c21dee17SSøren Schmidt } linux_fsid_t;
9143bef515SMarcel Moolenaar 
9243bef515SMarcel Moolenaar struct linux_new_utsname {
9343bef515SMarcel Moolenaar 	char	sysname[LINUX_MAX_UTSNAME];
9443bef515SMarcel Moolenaar 	char	nodename[LINUX_MAX_UTSNAME];
9543bef515SMarcel Moolenaar 	char	release[LINUX_MAX_UTSNAME];
9643bef515SMarcel Moolenaar 	char	version[LINUX_MAX_UTSNAME];
9743bef515SMarcel Moolenaar 	char	machine[LINUX_MAX_UTSNAME];
9843bef515SMarcel Moolenaar 	char	domainname[LINUX_MAX_UTSNAME];
9943bef515SMarcel Moolenaar };
100c21dee17SSøren Schmidt 
101956d3333SMarcel Moolenaar /*
10243bef515SMarcel Moolenaar  * Signalling
103956d3333SMarcel Moolenaar  */
10443bef515SMarcel Moolenaar #define	LINUX_SIGHUP		1
10543bef515SMarcel Moolenaar #define	LINUX_SIGINT		2
10643bef515SMarcel Moolenaar #define	LINUX_SIGQUIT		3
10743bef515SMarcel Moolenaar #define	LINUX_SIGILL		4
10843bef515SMarcel Moolenaar #define	LINUX_SIGTRAP		5
10943bef515SMarcel Moolenaar #define	LINUX_SIGABRT		6
11043bef515SMarcel Moolenaar #define	LINUX_SIGIOT		LINUX_SIGABRT
11143bef515SMarcel Moolenaar #define	LINUX_SIGBUS		7
11243bef515SMarcel Moolenaar #define	LINUX_SIGFPE		8
11343bef515SMarcel Moolenaar #define	LINUX_SIGKILL		9
11443bef515SMarcel Moolenaar #define	LINUX_SIGUSR1		10
11543bef515SMarcel Moolenaar #define	LINUX_SIGSEGV		11
11643bef515SMarcel Moolenaar #define	LINUX_SIGUSR2		12
11743bef515SMarcel Moolenaar #define	LINUX_SIGPIPE		13
11843bef515SMarcel Moolenaar #define	LINUX_SIGALRM		14
11943bef515SMarcel Moolenaar #define	LINUX_SIGTERM		15
12043bef515SMarcel Moolenaar #define	LINUX_SIGSTKFLT		16
12143bef515SMarcel Moolenaar #define	LINUX_SIGCHLD		17
12243bef515SMarcel Moolenaar #define	LINUX_SIGCONT		18
12343bef515SMarcel Moolenaar #define	LINUX_SIGSTOP		19
12443bef515SMarcel Moolenaar #define	LINUX_SIGTSTP		20
12543bef515SMarcel Moolenaar #define	LINUX_SIGTTIN		21
12643bef515SMarcel Moolenaar #define	LINUX_SIGTTOU		22
12743bef515SMarcel Moolenaar #define	LINUX_SIGURG		23
12843bef515SMarcel Moolenaar #define	LINUX_SIGXCPU		24
12943bef515SMarcel Moolenaar #define	LINUX_SIGXFSZ		25
13043bef515SMarcel Moolenaar #define	LINUX_SIGVTALRM		26
13143bef515SMarcel Moolenaar #define	LINUX_SIGPROF		27
13243bef515SMarcel Moolenaar #define	LINUX_SIGWINCH		28
13343bef515SMarcel Moolenaar #define	LINUX_SIGIO		29
13443bef515SMarcel Moolenaar #define	LINUX_SIGPOLL		LINUX_SIGIO
13543bef515SMarcel Moolenaar #define	LINUX_SIGPWR		30
13643bef515SMarcel Moolenaar #define	LINUX_SIGUNUSED		31
137956d3333SMarcel Moolenaar 
13843bef515SMarcel Moolenaar #define	LINUX_NSIG		64
13943bef515SMarcel Moolenaar #define	LINUX_SIGTBLSZ		31
14043bef515SMarcel Moolenaar 
14143bef515SMarcel Moolenaar /* sigaction flags */
14243bef515SMarcel Moolenaar #define	LINUX_SA_NOCLDSTOP	0x00000001
14343bef515SMarcel Moolenaar #define	LINUX_SA_NOCLDWAIT	0x00000002
14443bef515SMarcel Moolenaar #define	LINUX_SA_SIGINFO	0x00000004
14543bef515SMarcel Moolenaar #define	LINUX_SA_RESTORER	0x04000000
14643bef515SMarcel Moolenaar #define	LINUX_SA_ONSTACK	0x08000000
14743bef515SMarcel Moolenaar #define	LINUX_SA_RESTART	0x10000000
14843bef515SMarcel Moolenaar #define	LINUX_SA_INTERRUPT	0x20000000
14943bef515SMarcel Moolenaar #define	LINUX_SA_NOMASK		0x40000000
15043bef515SMarcel Moolenaar #define	LINUX_SA_ONESHOT	0x80000000
15143bef515SMarcel Moolenaar 
15243bef515SMarcel Moolenaar /* sigprocmask actions */
15343bef515SMarcel Moolenaar #define	LINUX_SIG_BLOCK		0
15443bef515SMarcel Moolenaar #define	LINUX_SIG_UNBLOCK	1
15543bef515SMarcel Moolenaar #define	LINUX_SIG_SETMASK	2
15643bef515SMarcel Moolenaar 
15743bef515SMarcel Moolenaar /* sigset_t macros */
15843bef515SMarcel Moolenaar #define	LINUX_SIGEMPTYSET(set)		(set).__bits[0] = (set).__bits[1] = 0
15943bef515SMarcel Moolenaar #define	LINUX_SIGISMEMBER(set, sig)	SIGISMEMBER(set, sig)
16043bef515SMarcel Moolenaar #define	LINUX_SIGADDSET(set, sig)	SIGADDSET(set, sig)
16143bef515SMarcel Moolenaar 
162dee4ec33SMarcel Moolenaar /* sigaltstack */
163dee4ec33SMarcel Moolenaar #define LINUX_MINSIGSTKSZ	2048
164931a7258SAndrew Gallatin #define LINUX_SS_ONSTACK_BC	0 	/* backwards compat SS_ONSTACK */
165931a7258SAndrew Gallatin #define LINUX_SS_ONSTACK	1
166931a7258SAndrew Gallatin #define LINUX_SS_DISABLE	2
167931a7258SAndrew Gallatin 
168931a7258SAndrew Gallatin 
169931a7258SAndrew Gallatin int linux_to_bsd_sigaltstack(int lsa);
170931a7258SAndrew Gallatin int bsd_to_linux_sigaltstack(int bsa);
171931a7258SAndrew Gallatin 
172dee4ec33SMarcel Moolenaar 
17343bef515SMarcel Moolenaar typedef void	(*linux_handler_t)(int);
17443bef515SMarcel Moolenaar typedef u_long	linux_osigset_t;
175956d3333SMarcel Moolenaar 
17606ebbe77SMarcel Moolenaar typedef struct {
17743bef515SMarcel Moolenaar 	u_int	__bits[2];
178956d3333SMarcel Moolenaar } linux_sigset_t;
179956d3333SMarcel Moolenaar 
180956d3333SMarcel Moolenaar typedef struct {
18143bef515SMarcel Moolenaar 	linux_handler_t lsa_handler;
182956d3333SMarcel Moolenaar 	linux_osigset_t	lsa_mask;
18343bef515SMarcel Moolenaar 	u_long	lsa_flags;
184956d3333SMarcel Moolenaar 	void	(*lsa_restorer)(void);
185956d3333SMarcel Moolenaar } linux_osigaction_t;
186956d3333SMarcel Moolenaar 
18706ebbe77SMarcel Moolenaar typedef struct {
18843bef515SMarcel Moolenaar 	linux_handler_t lsa_handler;
18943bef515SMarcel Moolenaar 	u_long	lsa_flags;
19006ebbe77SMarcel Moolenaar 	void	(*lsa_restorer)(void);
191956d3333SMarcel Moolenaar 	linux_sigset_t	lsa_mask;
192956d3333SMarcel Moolenaar } linux_sigaction_t;
19306ebbe77SMarcel Moolenaar 
19443bef515SMarcel Moolenaar typedef struct {
195ec99e322SMarcel Moolenaar 	void	*ss_sp;
196ec99e322SMarcel Moolenaar 	int	ss_flags;
197ec99e322SMarcel Moolenaar 	linux_size_t ss_size;
198ec99e322SMarcel Moolenaar } linux_stack_t;
199ec99e322SMarcel Moolenaar 
20043bef515SMarcel Moolenaar /* The Linux sigcontext, pretty much a standard 386 trapframe. */
201d66a5066SPeter Wemm struct linux_sigcontext {
202d66a5066SPeter Wemm 	int	sc_gs;
203d66a5066SPeter Wemm 	int	sc_fs;
204d66a5066SPeter Wemm 	int     sc_es;
205d66a5066SPeter Wemm 	int     sc_ds;
206d66a5066SPeter Wemm 	int     sc_edi;
207d66a5066SPeter Wemm 	int     sc_esi;
208d66a5066SPeter Wemm 	int     sc_ebp;
209d66a5066SPeter Wemm 	int	sc_esp;
210d66a5066SPeter Wemm 	int     sc_ebx;
211d66a5066SPeter Wemm 	int     sc_edx;
212d66a5066SPeter Wemm 	int     sc_ecx;
213d66a5066SPeter Wemm 	int     sc_eax;
214d66a5066SPeter Wemm 	int     sc_trapno;
215d66a5066SPeter Wemm 	int     sc_err;
216d66a5066SPeter Wemm 	int     sc_eip;
217d66a5066SPeter Wemm 	int     sc_cs;
218d66a5066SPeter Wemm 	int     sc_eflags;
219d66a5066SPeter Wemm 	int     sc_esp_at_signal;
220d66a5066SPeter Wemm 	int     sc_ss;
221d66a5066SPeter Wemm 	int	sc_387;
222d66a5066SPeter Wemm 	int	sc_mask;
223d66a5066SPeter Wemm 	int	sc_cr2;
224d66a5066SPeter Wemm };
225d66a5066SPeter Wemm 
22679363394SAndrew Gallatin struct linux_ucontext {
22779363394SAndrew Gallatin 	unsigned long     	uc_flags;
22879363394SAndrew Gallatin 	void  			*uc_link;
22979363394SAndrew Gallatin 	linux_stack_t		uc_stack;
23079363394SAndrew Gallatin 	struct linux_sigcontext uc_mcontext;
23179363394SAndrew Gallatin         linux_sigset_t		uc_sigmask;
23279363394SAndrew Gallatin };
23379363394SAndrew Gallatin 
23479363394SAndrew Gallatin 
23579363394SAndrew Gallatin #define LINUX_SI_MAX_SIZE     128
23679363394SAndrew Gallatin #define LINUX_SI_PAD_SIZE     ((LINUX_SI_MAX_SIZE/sizeof(int)) - 3)
23779363394SAndrew Gallatin 
23879363394SAndrew Gallatin typedef struct siginfo {
23979363394SAndrew Gallatin 	int lsi_signo;
24079363394SAndrew Gallatin 	int lsi_errno;
24179363394SAndrew Gallatin 	int lsi_code;
24279363394SAndrew Gallatin 
24379363394SAndrew Gallatin 	union {
24479363394SAndrew Gallatin 		int _pad[LINUX_SI_PAD_SIZE];
24579363394SAndrew Gallatin 		struct {
24679363394SAndrew Gallatin 			linux_pid_t _pid;
24779363394SAndrew Gallatin 			linux_uid_t _uid;
24879363394SAndrew Gallatin 		} _kill;
24979363394SAndrew Gallatin 
25079363394SAndrew Gallatin 		struct {
25179363394SAndrew Gallatin 			unsigned int _timer1;
25279363394SAndrew Gallatin 			unsigned int _timer2;
25379363394SAndrew Gallatin 		} _timer;
25479363394SAndrew Gallatin 
25579363394SAndrew Gallatin 		struct {
25679363394SAndrew Gallatin 			linux_pid_t _pid;             /* sender's pid */
25779363394SAndrew Gallatin 			linux_uid_t _uid;             /* sender's uid */
25879363394SAndrew Gallatin 			union sigval _sigval;
25979363394SAndrew Gallatin 		} _rt;
26079363394SAndrew Gallatin 
26179363394SAndrew Gallatin 		struct {
26279363394SAndrew Gallatin 			linux_pid_t _pid;             /* which child */
26379363394SAndrew Gallatin 			linux_uid_t _uid;             /* sender's uid */
26479363394SAndrew Gallatin 			int _status;            /* exit code */
26579363394SAndrew Gallatin 			linux_clock_t _utime;
26679363394SAndrew Gallatin 			linux_clock_t _stime;
26779363394SAndrew Gallatin 		} _sigchld;
26879363394SAndrew Gallatin 
26979363394SAndrew Gallatin 		struct {
27079363394SAndrew Gallatin 			void *_addr; /* faulting insn/memory ref. */
27179363394SAndrew Gallatin 		} _sigfault;
27279363394SAndrew Gallatin 
27379363394SAndrew Gallatin 		struct {
27479363394SAndrew Gallatin 			int _band;      /* POLL_IN, POLL_OUT, POLL_MSG */
27579363394SAndrew Gallatin 			int _fd;
27679363394SAndrew Gallatin 		} _sigpoll;
27779363394SAndrew Gallatin 	} _sifields;
27879363394SAndrew Gallatin } linux_siginfo_t;
27979363394SAndrew Gallatin 
28079363394SAndrew Gallatin #define lsi_pid          _sifields._kill._pid
28179363394SAndrew Gallatin #define lsi_uid          _sifields._kill._uid
28279363394SAndrew Gallatin #define lsi_status       _sifields._sigchld._status
28379363394SAndrew Gallatin #define lsi_utime        _sifields._sigchld._utime
28479363394SAndrew Gallatin #define lsi_stime        _sifields._sigchld._stime
28579363394SAndrew Gallatin #define lsi_value        _sifields._rt._sigval
28679363394SAndrew Gallatin #define lsi_int          _sifields._rt._sigval.sival_int
28779363394SAndrew Gallatin #define lsi_ptr          _sifields._rt._sigval.sival_ptr
28879363394SAndrew Gallatin #define lsi_addr         _sifields._sigfault._addr
28979363394SAndrew Gallatin #define lsi_band         _sifields._sigpoll._band
29079363394SAndrew Gallatin #define lsi_fd           _sifields._sigpoll._fd
29179363394SAndrew Gallatin 
29279363394SAndrew Gallatin 
293d66a5066SPeter Wemm /*
294d66a5066SPeter Wemm  * We make the stack look like Linux expects it when calling a signal
295d66a5066SPeter Wemm  * handler, but use the BSD way of calling the handler and sigreturn().
296d66a5066SPeter Wemm  * This means that we need to pass the pointer to the handler too.
297d66a5066SPeter Wemm  * It is appended to the frame to not interfere with the rest of it.
298d66a5066SPeter Wemm  */
299d66a5066SPeter Wemm struct linux_sigframe {
300d66a5066SPeter Wemm 	int	sf_sig;
301d66a5066SPeter Wemm 	struct	linux_sigcontext sf_sc;
30243bef515SMarcel Moolenaar 	linux_handler_t sf_handler;
303d66a5066SPeter Wemm };
304d66a5066SPeter Wemm 
30579363394SAndrew Gallatin struct linux_rt_sigframe {
30679363394SAndrew Gallatin 	int			sf_sig;
30779363394SAndrew Gallatin 	linux_siginfo_t 	*sf_siginfo;;
30879363394SAndrew Gallatin 	struct linux_ucontext	*sf_ucontext;
30979363394SAndrew Gallatin 	linux_siginfo_t sf_si;
31079363394SAndrew Gallatin 	struct linux_ucontext 	sf_sc;
31179363394SAndrew Gallatin 	linux_handler_t 	sf_handler;
31279363394SAndrew Gallatin };
31379363394SAndrew Gallatin 
31479363394SAndrew Gallatin 
315c21dee17SSøren Schmidt extern int bsd_to_linux_signal[];
316c21dee17SSøren Schmidt extern int linux_to_bsd_signal[];
317d323ddf3SMatthew Dillon extern struct sysentvec linux_sysvec;
318d323ddf3SMatthew Dillon extern struct sysentvec elf_linux_sysvec;
31979363394SAndrew Gallatin void bsd_to_linux_sigset(sigset_t *bss, linux_sigset_t *lss);
320c21dee17SSøren Schmidt 
32143bef515SMarcel Moolenaar /*
32243bef515SMarcel Moolenaar  * Pluggable ioctl handlers
32343bef515SMarcel Moolenaar  */
32443bef515SMarcel Moolenaar struct linker_set;
32543bef515SMarcel Moolenaar struct linux_ioctl_args;
32643bef515SMarcel Moolenaar struct proc;
327c21dee17SSøren Schmidt 
32843bef515SMarcel Moolenaar typedef int linux_ioctl_function_t(struct proc *, struct linux_ioctl_args *);
329c21dee17SSøren Schmidt 
33043bef515SMarcel Moolenaar struct linux_ioctl_handler {
33143bef515SMarcel Moolenaar 	linux_ioctl_function_t *func;
33243bef515SMarcel Moolenaar 	int	low, high;
333956d3333SMarcel Moolenaar };
334956d3333SMarcel Moolenaar 
33543bef515SMarcel Moolenaar int	linux_ioctl_register_handler(struct linux_ioctl_handler *h);
33643bef515SMarcel Moolenaar int	linux_ioctl_register_handlers(struct linker_set *s);
33743bef515SMarcel Moolenaar int	linux_ioctl_unregister_handler(struct linux_ioctl_handler *h);
33843bef515SMarcel Moolenaar int	linux_ioctl_unregister_handlers(struct linker_set *s);
339956d3333SMarcel Moolenaar 
34043bef515SMarcel Moolenaar /*
34143bef515SMarcel Moolenaar  * open/fcntl flags
34243bef515SMarcel Moolenaar  */
343c21dee17SSøren Schmidt #define	LINUX_O_RDONLY		00
344c21dee17SSøren Schmidt #define	LINUX_O_WRONLY		01
345c21dee17SSøren Schmidt #define	LINUX_O_RDWR		02
346c21dee17SSøren Schmidt #define	LINUX_O_CREAT		0100
347c21dee17SSøren Schmidt #define	LINUX_O_EXCL		0200
348c21dee17SSøren Schmidt #define	LINUX_O_NOCTTY		0400
349c21dee17SSøren Schmidt #define	LINUX_O_TRUNC		01000
350c21dee17SSøren Schmidt #define	LINUX_O_APPEND		02000
351c21dee17SSøren Schmidt #define	LINUX_O_NONBLOCK	04000
352c21dee17SSøren Schmidt #define	LINUX_O_NDELAY		LINUX_O_NONBLOCK
353c21dee17SSøren Schmidt #define	LINUX_O_SYNC		010000
354c21dee17SSøren Schmidt #define	LINUX_FASYNC		020000
355c21dee17SSøren Schmidt 
356c21dee17SSøren Schmidt #define	LINUX_F_DUPFD		0
357c21dee17SSøren Schmidt #define	LINUX_F_GETFD		1
358c21dee17SSøren Schmidt #define	LINUX_F_SETFD		2
359c21dee17SSøren Schmidt #define	LINUX_F_GETFL		3
360c21dee17SSøren Schmidt #define	LINUX_F_SETFL		4
361c21dee17SSøren Schmidt #define	LINUX_F_GETLK		5
362c21dee17SSøren Schmidt #define	LINUX_F_SETLK		6
363c21dee17SSøren Schmidt #define	LINUX_F_SETLKW		7
364c21dee17SSøren Schmidt #define	LINUX_F_SETOWN		8
365c21dee17SSøren Schmidt #define	LINUX_F_GETOWN		9
366c21dee17SSøren Schmidt 
367c21dee17SSøren Schmidt #define	LINUX_F_RDLCK		0
368c21dee17SSøren Schmidt #define	LINUX_F_WRLCK		1
369c21dee17SSøren Schmidt #define	LINUX_F_UNLCK		2
370c21dee17SSøren Schmidt 
37143bef515SMarcel Moolenaar /*
37243bef515SMarcel Moolenaar  * SystemV IPC defines
37343bef515SMarcel Moolenaar  */
374c21dee17SSøren Schmidt #define	LINUX_SEMOP		1
375c21dee17SSøren Schmidt #define	LINUX_SEMGET		2
376c21dee17SSøren Schmidt #define	LINUX_SEMCTL		3
377c21dee17SSøren Schmidt #define	LINUX_MSGSND		11
378c21dee17SSøren Schmidt #define	LINUX_MSGRCV		12
379c21dee17SSøren Schmidt #define	LINUX_MSGGET		13
380c21dee17SSøren Schmidt #define	LINUX_MSGCTL		14
381c21dee17SSøren Schmidt #define	LINUX_SHMAT		21
382c21dee17SSøren Schmidt #define	LINUX_SHMDT		22
383c21dee17SSøren Schmidt #define	LINUX_SHMGET		23
384c21dee17SSøren Schmidt #define	LINUX_SHMCTL		24
385c21dee17SSøren Schmidt 
386c21dee17SSøren Schmidt #define	LINUX_IPC_RMID		0
387c21dee17SSøren Schmidt #define	LINUX_IPC_SET		1
388c21dee17SSøren Schmidt #define	LINUX_IPC_STAT		2
389c21dee17SSøren Schmidt #define	LINUX_IPC_INFO		3
390c21dee17SSøren Schmidt 
391c21dee17SSøren Schmidt #define	LINUX_SHM_LOCK		11
392c21dee17SSøren Schmidt #define	LINUX_SHM_UNLOCK	12
393c21dee17SSøren Schmidt #define	LINUX_SHM_STAT		13
394c21dee17SSøren Schmidt #define	LINUX_SHM_INFO		14
395c21dee17SSøren Schmidt 
396c21dee17SSøren Schmidt #define	LINUX_SHM_RDONLY	0x1000
397c21dee17SSøren Schmidt #define	LINUX_SHM_RND		0x2000
398c21dee17SSøren Schmidt #define	LINUX_SHM_REMAP		0x4000
399c21dee17SSøren Schmidt 
40043bef515SMarcel Moolenaar /* semctl commands */
4019b86a416SKATO Takenori #define	LINUX_GETPID		11
4029b86a416SKATO Takenori #define	LINUX_GETVAL		12
4039b86a416SKATO Takenori #define	LINUX_GETALL		13
4049b86a416SKATO Takenori #define	LINUX_GETNCNT		14
4059b86a416SKATO Takenori #define	LINUX_GETZCNT		15
4069b86a416SKATO Takenori #define	LINUX_SETVAL		16
4079b86a416SKATO Takenori #define	LINUX_SETALL		17
4089b86a416SKATO Takenori 
40943bef515SMarcel Moolenaar /*
41043bef515SMarcel Moolenaar  * Socket defines
41143bef515SMarcel Moolenaar  */
412c21dee17SSøren Schmidt #define	LINUX_SOCKET 		1
413c21dee17SSøren Schmidt #define	LINUX_BIND		2
414c21dee17SSøren Schmidt #define	LINUX_CONNECT 		3
415c21dee17SSøren Schmidt #define	LINUX_LISTEN 		4
416c21dee17SSøren Schmidt #define	LINUX_ACCEPT 		5
417c21dee17SSøren Schmidt #define	LINUX_GETSOCKNAME	6
418c21dee17SSøren Schmidt #define	LINUX_GETPEERNAME	7
419c21dee17SSøren Schmidt #define	LINUX_SOCKETPAIR	8
420c21dee17SSøren Schmidt #define	LINUX_SEND		9
421c21dee17SSøren Schmidt #define	LINUX_RECV		10
422c21dee17SSøren Schmidt #define	LINUX_SENDTO 		11
423c21dee17SSøren Schmidt #define	LINUX_RECVFROM 		12
424c21dee17SSøren Schmidt #define	LINUX_SHUTDOWN 		13
425c21dee17SSøren Schmidt #define	LINUX_SETSOCKOPT	14
426c21dee17SSøren Schmidt #define	LINUX_GETSOCKOPT	15
427e76bba09SSøren Schmidt #define	LINUX_SENDMSG		16
428e76bba09SSøren Schmidt #define	LINUX_RECVMSG		17
429c21dee17SSøren Schmidt 
430c21dee17SSøren Schmidt #define	LINUX_AF_UNSPEC		0
431c21dee17SSøren Schmidt #define	LINUX_AF_UNIX		1
432c21dee17SSøren Schmidt #define	LINUX_AF_INET		2
433c21dee17SSøren Schmidt #define	LINUX_AF_AX25		3
434c21dee17SSøren Schmidt #define	LINUX_AF_IPX		4
435c21dee17SSøren Schmidt #define	LINUX_AF_APPLETALK	5
436c21dee17SSøren Schmidt 
437c21dee17SSøren Schmidt #define	LINUX_SOL_SOCKET	1
438c21dee17SSøren Schmidt #define	LINUX_SOL_IP		0
439c21dee17SSøren Schmidt #define	LINUX_SOL_IPX		256
440c21dee17SSøren Schmidt #define	LINUX_SOL_AX25		257
441c21dee17SSøren Schmidt #define	LINUX_SOL_TCP		6
442c21dee17SSøren Schmidt #define	LINUX_SOL_UDP		17
443c21dee17SSøren Schmidt 
444c21dee17SSøren Schmidt #define	LINUX_SO_DEBUG		1
445c21dee17SSøren Schmidt #define	LINUX_SO_REUSEADDR	2
446c21dee17SSøren Schmidt #define	LINUX_SO_TYPE		3
447c21dee17SSøren Schmidt #define	LINUX_SO_ERROR		4
448c21dee17SSøren Schmidt #define	LINUX_SO_DONTROUTE	5
449c21dee17SSøren Schmidt #define	LINUX_SO_BROADCAST	6
450c21dee17SSøren Schmidt #define	LINUX_SO_SNDBUF		7
451c21dee17SSøren Schmidt #define	LINUX_SO_RCVBUF		8
452c21dee17SSøren Schmidt #define	LINUX_SO_KEEPALIVE	9
453c21dee17SSøren Schmidt #define	LINUX_SO_OOBINLINE	10
454c21dee17SSøren Schmidt #define	LINUX_SO_NO_CHECK	11
455c21dee17SSøren Schmidt #define	LINUX_SO_PRIORITY	12
456c21dee17SSøren Schmidt #define	LINUX_SO_LINGER		13
457c21dee17SSøren Schmidt 
458c21dee17SSøren Schmidt #define	LINUX_IP_TOS		1
459c21dee17SSøren Schmidt #define	LINUX_IP_TTL		2
46066ff6a3cSBill Fenner #define	LINUX_IP_HDRINCL	3
46166ff6a3cSBill Fenner #define	LINUX_IP_OPTIONS	4
46266ff6a3cSBill Fenner 
46366ff6a3cSBill Fenner #define	LINUX_IP_MULTICAST_IF		32
46466ff6a3cSBill Fenner #define	LINUX_IP_MULTICAST_TTL		33
46566ff6a3cSBill Fenner #define	LINUX_IP_MULTICAST_LOOP		34
46666ff6a3cSBill Fenner #define	LINUX_IP_ADD_MEMBERSHIP		35
46766ff6a3cSBill Fenner #define	LINUX_IP_DROP_MEMBERSHIP	36
468c21dee17SSøren Schmidt 
46943bef515SMarcel Moolenaar struct linux_sockaddr {
47043bef515SMarcel Moolenaar 	u_short	sa_family;
4713713cbffSMike Smith 	char	sa_data[14];
4723713cbffSMike Smith };
4733713cbffSMike Smith 
47443bef515SMarcel Moolenaar struct linux_ifmap {
47543bef515SMarcel Moolenaar 	u_long	mem_start;
47643bef515SMarcel Moolenaar 	u_long	mem_end;
47743bef515SMarcel Moolenaar 	u_short	base_addr;
47843bef515SMarcel Moolenaar 	u_char	irq;
47943bef515SMarcel Moolenaar 	u_char	dma;
48043bef515SMarcel Moolenaar 	u_char	port;
4813713cbffSMike Smith };
4823713cbffSMike Smith 
4833713cbffSMike Smith #define	LINUX_IFHWADDRLEN	6
4843713cbffSMike Smith #define	LINUX_IFNAMSIZ		16
48543bef515SMarcel Moolenaar 
48643bef515SMarcel Moolenaar struct linux_ifreq {
48743bef515SMarcel Moolenaar 	union {
48843bef515SMarcel Moolenaar 		char	ifrn_name[LINUX_IFNAMSIZ];
4893713cbffSMike Smith 	} ifr_ifrn;
4903713cbffSMike Smith 
4913713cbffSMike Smith 	union {
4923713cbffSMike Smith 		struct	linux_sockaddr ifru_addr;
4933713cbffSMike Smith 		struct	linux_sockaddr ifru_dstaddr;
4943713cbffSMike Smith 		struct	linux_sockaddr ifru_broadaddr;
4953713cbffSMike Smith 		struct	linux_sockaddr ifru_netmask;
4963713cbffSMike Smith 		struct	linux_sockaddr ifru_hwaddr;
4973713cbffSMike Smith 		short	ifru_flags;
4983713cbffSMike Smith 		int	ifru_metric;
4993713cbffSMike Smith 		int	ifru_mtu;
5003713cbffSMike Smith 		struct	linux_ifmap ifru_map;
5013713cbffSMike Smith 		char	ifru_slave[LINUX_IFNAMSIZ]; /* Just fits the size */
50243bef515SMarcel Moolenaar 		linux_caddr_t ifru_data;
5033713cbffSMike Smith 	} ifr_ifru;
5043713cbffSMike Smith };
5053713cbffSMike Smith 
5063713cbffSMike Smith #define	ifr_name	ifr_ifrn.ifrn_name	/* interface name */
5073713cbffSMike Smith #define	ifr_hwaddr	ifr_ifru.ifru_hwaddr	/* MAC address */
5083713cbffSMike Smith 
5091f3dad5aSBruce Evans #endif /* !_I386_LINUX_LINUX_H_ */
510