freebsd32.h revision 276686
1250003Sadrian/*-
2250003Sadrian * Copyright (c) 2001 Doug Rabson
3250003Sadrian * All rights reserved.
4250003Sadrian *
5250003Sadrian * Redistribution and use in source and binary forms, with or without
6250003Sadrian * modification, are permitted provided that the following conditions
7250003Sadrian * are met:
8250003Sadrian * 1. Redistributions of source code must retain the above copyright
9250003Sadrian *    notice, this list of conditions and the following disclaimer.
10250003Sadrian * 2. Redistributions in binary form must reproduce the above copyright
11250003Sadrian *    notice, this list of conditions and the following disclaimer in the
12250003Sadrian *    documentation and/or other materials provided with the distribution.
13250003Sadrian *
14250003Sadrian * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15250003Sadrian * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16250003Sadrian * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17250003Sadrian * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18250003Sadrian * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19250003Sadrian * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20250003Sadrian * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21250003Sadrian * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22250003Sadrian * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23250003Sadrian * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24250003Sadrian * SUCH DAMAGE.
25250003Sadrian *
26250003Sadrian * $FreeBSD: stable/10/sys/compat/freebsd32/freebsd32.h 276686 2015-01-05 03:27:09Z kib $
27250003Sadrian */
28250003Sadrian
29250003Sadrian#ifndef _COMPAT_FREEBSD32_FREEBSD32_H_
30250003Sadrian#define _COMPAT_FREEBSD32_FREEBSD32_H_
31250003Sadrian
32250003Sadrian#include <sys/procfs.h>
33250003Sadrian#include <sys/socket.h>
34250003Sadrian#include <sys/user.h>
35250003Sadrian
36250003Sadrian#define PTRIN(v)	(void *)(uintptr_t) (v)
37250003Sadrian#define PTROUT(v)	(u_int32_t)(uintptr_t) (v)
38250003Sadrian
39250003Sadrian#define CP(src,dst,fld) do { (dst).fld = (src).fld; } while (0)
40250003Sadrian#define PTRIN_CP(src,dst,fld) \
41250003Sadrian	do { (dst).fld = PTRIN((src).fld); } while (0)
42250003Sadrian#define PTROUT_CP(src,dst,fld) \
43250003Sadrian	do { (dst).fld = PTROUT((src).fld); } while (0)
44250003Sadrian
45250003Sadrian/*
46250003Sadrian * Being a newer port, 32-bit FreeBSD/MIPS uses 64-bit time_t.
47250003Sadrian */
48250003Sadrian#ifdef __mips__
49250003Sadriantypedef	int64_t	time32_t;
50250003Sadrian#else
51250003Sadriantypedef	int32_t	time32_t;
52250003Sadrian#endif
53250003Sadrian
54250003Sadrianstruct timeval32 {
55250003Sadrian	time32_t tv_sec;
56250003Sadrian	int32_t tv_usec;
57250003Sadrian};
58250003Sadrian#define TV_CP(src,dst,fld) do {			\
59250003Sadrian	CP((src).fld,(dst).fld,tv_sec);		\
60250003Sadrian	CP((src).fld,(dst).fld,tv_usec);	\
61250003Sadrian} while (0)
62250003Sadrian
63250003Sadrianstruct timespec32 {
64250003Sadrian	time32_t tv_sec;
65250003Sadrian	int32_t tv_nsec;
66250003Sadrian};
67250003Sadrian#define TS_CP(src,dst,fld) do {			\
68250003Sadrian	CP((src).fld,(dst).fld,tv_sec);		\
69250003Sadrian	CP((src).fld,(dst).fld,tv_nsec);	\
70250003Sadrian} while (0)
71250003Sadrian
72250003Sadrianstruct itimerspec32 {
73250003Sadrian	struct timespec32  it_interval;
74250003Sadrian	struct timespec32  it_value;
75250003Sadrian};
76250003Sadrian#define ITS_CP(src, dst) do {			\
77250003Sadrian	TS_CP((src), (dst), it_interval);	\
78250003Sadrian	TS_CP((src), (dst), it_value);		\
79250003Sadrian} while (0)
80250003Sadrian
81250003Sadrianstruct rusage32 {
82250003Sadrian	struct timeval32 ru_utime;
83250003Sadrian	struct timeval32 ru_stime;
84250003Sadrian	int32_t	ru_maxrss;
85250003Sadrian	int32_t	ru_ixrss;
86250003Sadrian	int32_t	ru_idrss;
87250003Sadrian	int32_t	ru_isrss;
88250003Sadrian	int32_t	ru_minflt;
89250003Sadrian	int32_t	ru_majflt;
90250003Sadrian	int32_t	ru_nswap;
91250003Sadrian	int32_t	ru_inblock;
92250003Sadrian	int32_t	ru_oublock;
93250003Sadrian	int32_t	ru_msgsnd;
94250003Sadrian	int32_t	ru_msgrcv;
95250003Sadrian	int32_t	ru_nsignals;
96250003Sadrian	int32_t	ru_nvcsw;
97250003Sadrian	int32_t	ru_nivcsw;
98250003Sadrian};
99250003Sadrian
100250003Sadrianstruct wrusage32 {
101250003Sadrian	struct rusage32	wru_self;
102250003Sadrian	struct rusage32 wru_children;
103250003Sadrian};
104250003Sadrian
105250003Sadrianstruct itimerval32 {
106250003Sadrian	struct timeval32 it_interval;
107250003Sadrian	struct timeval32 it_value;
108250003Sadrian};
109250003Sadrian
110250003Sadrian#define FREEBSD4_MNAMELEN        (88 - 2 * sizeof(int32_t)) /* size of on/from name bufs */
111250003Sadrian
112250003Sadrian/* 4.x version */
113250003Sadrianstruct statfs32 {
114250003Sadrian	int32_t	f_spare2;
115250003Sadrian	int32_t	f_bsize;
116250003Sadrian	int32_t	f_iosize;
117250003Sadrian	int32_t	f_blocks;
118250003Sadrian	int32_t	f_bfree;
119250003Sadrian	int32_t	f_bavail;
120250003Sadrian	int32_t	f_files;
121250003Sadrian	int32_t	f_ffree;
122250003Sadrian	fsid_t	f_fsid;
123250003Sadrian	uid_t	f_owner;
124250003Sadrian	int32_t	f_type;
125250003Sadrian	int32_t	f_flags;
126250003Sadrian	int32_t	f_syncwrites;
127250003Sadrian	int32_t	f_asyncwrites;
128250003Sadrian	char	f_fstypename[MFSNAMELEN];
129250003Sadrian	char	f_mntonname[FREEBSD4_MNAMELEN];
130250003Sadrian	int32_t	f_syncreads;
131250003Sadrian	int32_t	f_asyncreads;
132250003Sadrian	int16_t	f_spares1;
133250003Sadrian	char	f_mntfromname[FREEBSD4_MNAMELEN];
134250003Sadrian	int16_t	f_spares2 __packed;
135250003Sadrian	int32_t f_spare[2];
136250003Sadrian};
137250003Sadrian
138250003Sadrianstruct kevent32 {
139250003Sadrian	u_int32_t	ident;		/* identifier for this event */
140250003Sadrian	short		filter;		/* filter for event */
141250003Sadrian	u_short		flags;
142250003Sadrian	u_int		fflags;
143250003Sadrian	int32_t		data;
144250003Sadrian	u_int32_t	udata;		/* opaque user data identifier */
145250003Sadrian};
146250003Sadrian
147250003Sadrianstruct iovec32 {
148250003Sadrian	u_int32_t iov_base;
149250003Sadrian	int	iov_len;
150250003Sadrian};
151250003Sadrian
152250003Sadrianstruct msghdr32 {
153250003Sadrian	u_int32_t	 msg_name;
154250003Sadrian	socklen_t	 msg_namelen;
155250003Sadrian	u_int32_t	 msg_iov;
156250003Sadrian	int		 msg_iovlen;
157250003Sadrian	u_int32_t	 msg_control;
158250003Sadrian	socklen_t	 msg_controllen;
159250003Sadrian	int		 msg_flags;
160250003Sadrian};
161250003Sadrian
162250003Sadrianstruct stat32 {
163250003Sadrian	dev_t	st_dev;
164250003Sadrian	ino_t	st_ino;
165250003Sadrian	mode_t	st_mode;
166250003Sadrian	nlink_t	st_nlink;
167250003Sadrian	uid_t	st_uid;
168250003Sadrian	gid_t	st_gid;
169250003Sadrian	dev_t	st_rdev;
170250003Sadrian	struct timespec32 st_atim;
171250003Sadrian	struct timespec32 st_mtim;
172250003Sadrian	struct timespec32 st_ctim;
173250003Sadrian	off_t	st_size;
174250003Sadrian	int64_t	st_blocks;
175250003Sadrian	u_int32_t st_blksize;
176250003Sadrian	u_int32_t st_flags;
177250003Sadrian	u_int32_t st_gen;
178250003Sadrian	int32_t	st_lspare;
179250003Sadrian	struct timespec32 st_birthtim;
180250003Sadrian	unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec32));
181250003Sadrian	unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec32));
182250003Sadrian};
183250003Sadrian
184250003Sadrianstruct ostat32 {
185250003Sadrian	__uint16_t st_dev;
186250003Sadrian	ino_t	st_ino;
187250003Sadrian	mode_t	st_mode;
188250003Sadrian	nlink_t	st_nlink;
189250003Sadrian	__uint16_t st_uid;
190250003Sadrian	__uint16_t st_gid;
191250003Sadrian	__uint16_t st_rdev;
192250003Sadrian	__int32_t st_size;
193250003Sadrian	struct timespec32 st_atim;
194250003Sadrian	struct timespec32 st_mtim;
195250003Sadrian	struct timespec32 st_ctim;
196250003Sadrian	__int32_t st_blksize;
197250003Sadrian	__int32_t st_blocks;
198250003Sadrian	u_int32_t st_flags;
199250003Sadrian	__uint32_t st_gen;
200250003Sadrian};
201250003Sadrian
202250003Sadrianstruct jail32_v0 {
203250003Sadrian	u_int32_t	version;
204250003Sadrian	uint32_t	path;
205250003Sadrian	uint32_t	hostname;
206250003Sadrian	u_int32_t	ip_number;
207250003Sadrian};
208250003Sadrian
209250003Sadrianstruct jail32 {
210250003Sadrian	uint32_t	version;
211250003Sadrian	uint32_t	path;
212250003Sadrian	uint32_t	hostname;
213250003Sadrian	uint32_t	jailname;
214250003Sadrian	uint32_t	ip4s;
215250003Sadrian	uint32_t	ip6s;
216250003Sadrian	uint32_t	ip4;
217250003Sadrian	uint32_t	ip6;
218250003Sadrian};
219250003Sadrian
220250003Sadrianstruct sigaction32 {
221250003Sadrian	u_int32_t	sa_u;
222250003Sadrian	int		sa_flags;
223250003Sadrian	sigset_t	sa_mask;
224250003Sadrian};
225250003Sadrian
226250003Sadrianstruct thr_param32 {
227250003Sadrian	uint32_t start_func;
228250003Sadrian	uint32_t arg;
229250003Sadrian	uint32_t stack_base;
230250003Sadrian	uint32_t stack_size;
231250003Sadrian	uint32_t tls_base;
232250003Sadrian	uint32_t tls_size;
233250003Sadrian	uint32_t child_tid;
234250003Sadrian	uint32_t parent_tid;
235250003Sadrian	int32_t	 flags;
236250003Sadrian	uint32_t rtp;
237250003Sadrian	uint32_t spare[3];
238250003Sadrian};
239250003Sadrian
240250003Sadrianstruct i386_ldt_args32 {
241250003Sadrian	uint32_t start;
242250003Sadrian	uint32_t descs;
243250003Sadrian	uint32_t num;
244250003Sadrian};
245250003Sadrian
246250003Sadrian/*
247250003Sadrian * Alternative layouts for <sys/procfs.h>
248250003Sadrian */
249250003Sadrianstruct prstatus32 {
250250003Sadrian        int     pr_version;
251250003Sadrian        u_int   pr_statussz;
252250003Sadrian        u_int   pr_gregsetsz;
253250003Sadrian        u_int   pr_fpregsetsz;
254250003Sadrian        int     pr_osreldate;
255250003Sadrian        int     pr_cursig;
256250003Sadrian        pid_t   pr_pid;
257250003Sadrian        struct reg32 pr_reg;
258250003Sadrian};
259250003Sadrian
260250003Sadrianstruct prpsinfo32 {
261250003Sadrian        int     pr_version;
262250003Sadrian        u_int   pr_psinfosz;
263250003Sadrian        char    pr_fname[PRFNAMESZ+1];
264250003Sadrian        char    pr_psargs[PRARGSZ+1];
265250003Sadrian};
266250003Sadrian
267250003Sadrianstruct thrmisc32 {
268250003Sadrian        char    pr_tname[MAXCOMLEN+1];
269250003Sadrian        u_int   _pad;
270250003Sadrian};
271250003Sadrian
272250003Sadrianstruct mq_attr32 {
273250003Sadrian	int	mq_flags;
274250003Sadrian	int	mq_maxmsg;
275250003Sadrian	int	mq_msgsize;
276250003Sadrian	int	mq_curmsgs;
277250003Sadrian	int	__reserved[4];
278250003Sadrian};
279250003Sadrian
280250003Sadrianstruct kinfo_proc32 {
281250003Sadrian	int	ki_structsize;
282250003Sadrian	int	ki_layout;
283250003Sadrian	uint32_t ki_args;
284250003Sadrian	uint32_t ki_paddr;
285250003Sadrian	uint32_t ki_addr;
286250003Sadrian	uint32_t ki_tracep;
287250003Sadrian	uint32_t ki_textvp;
288250003Sadrian	uint32_t ki_fd;
289250003Sadrian	uint32_t ki_vmspace;
290250003Sadrian	uint32_t ki_wchan;
291250003Sadrian	pid_t	ki_pid;
292250003Sadrian	pid_t	ki_ppid;
293250003Sadrian	pid_t	ki_pgid;
294250003Sadrian	pid_t	ki_tpgid;
295250003Sadrian	pid_t	ki_sid;
296250003Sadrian	pid_t	ki_tsid;
297250003Sadrian	short	ki_jobc;
298250003Sadrian	short	ki_spare_short1;
299250003Sadrian	dev_t	ki_tdev;
300250003Sadrian	sigset_t ki_siglist;
301250003Sadrian	sigset_t ki_sigmask;
302250003Sadrian	sigset_t ki_sigignore;
303250003Sadrian	sigset_t ki_sigcatch;
304250003Sadrian	uid_t	ki_uid;
305250003Sadrian	uid_t	ki_ruid;
306250003Sadrian	uid_t	ki_svuid;
307250003Sadrian	gid_t	ki_rgid;
308250003Sadrian	gid_t	ki_svgid;
309250003Sadrian	short	ki_ngroups;
310250003Sadrian	short	ki_spare_short2;
311250003Sadrian	gid_t 	ki_groups[KI_NGROUPS];
312250003Sadrian	uint32_t ki_size;
313250003Sadrian	int32_t ki_rssize;
314250003Sadrian	int32_t ki_swrss;
315250003Sadrian	int32_t ki_tsize;
316250003Sadrian	int32_t ki_dsize;
317250003Sadrian	int32_t ki_ssize;
318250003Sadrian	u_short	ki_xstat;
319250003Sadrian	u_short	ki_acflag;
320250003Sadrian	fixpt_t	ki_pctcpu;
321250003Sadrian	u_int	ki_estcpu;
322250003Sadrian	u_int	ki_slptime;
323250003Sadrian	u_int	ki_swtime;
324250003Sadrian	u_int	ki_cow;
325250003Sadrian	u_int64_t ki_runtime;
326250003Sadrian	struct	timeval32 ki_start;
327250003Sadrian	struct	timeval32 ki_childtime;
328250003Sadrian	int	ki_flag;
329250003Sadrian	int	ki_kiflag;
330250003Sadrian	int	ki_traceflag;
331250003Sadrian	char	ki_stat;
332250003Sadrian	signed char ki_nice;
333250003Sadrian	char	ki_lock;
334250003Sadrian	char	ki_rqindex;
335250003Sadrian	u_char	ki_oncpu;
336250003Sadrian	u_char	ki_lastcpu;
337250003Sadrian	char	ki_tdname[TDNAMLEN+1];
338250003Sadrian	char	ki_wmesg[WMESGLEN+1];
339250003Sadrian	char	ki_login[LOGNAMELEN+1];
340250003Sadrian	char	ki_lockname[LOCKNAMELEN+1];
341250003Sadrian	char	ki_comm[COMMLEN+1];
342250003Sadrian	char	ki_emul[KI_EMULNAMELEN+1];
343250003Sadrian	char	ki_loginclass[LOGINCLASSLEN+1];
344250003Sadrian	char	ki_sparestrings[50];
345250003Sadrian	int	ki_spareints[KI_NSPARE_INT];
346250003Sadrian	int	ki_flag2;
347250003Sadrian	int	ki_fibnum;
348250003Sadrian	u_int	ki_cr_flags;
349250003Sadrian	int	ki_jid;
350250003Sadrian	int	ki_numthreads;
351250003Sadrian	lwpid_t	ki_tid;
352250003Sadrian	struct	priority ki_pri;
353250003Sadrian	struct	rusage32 ki_rusage;
354250003Sadrian	struct	rusage32 ki_rusage_ch;
355250003Sadrian	uint32_t ki_pcb;
356250003Sadrian	uint32_t ki_kstack;
357250003Sadrian	uint32_t ki_udata;
358250003Sadrian	uint32_t ki_tdaddr;
359250003Sadrian	uint32_t ki_spareptrs[KI_NSPARE_PTR];	/* spare room for growth */
360250003Sadrian	int	ki_sparelongs[KI_NSPARE_LONG];
361250003Sadrian	int	ki_sflag;
362250003Sadrian	int	ki_tdflags;
363250003Sadrian};
364250003Sadrian
365250003Sadrianstruct kinfo_sigtramp32 {
366250003Sadrian	uint32_t ksigtramp_start;
367250003Sadrian	uint32_t ksigtramp_end;
368250003Sadrian	uint32_t ksigtramp_spare[4];
369250003Sadrian};
370250003Sadrian
371250003Sadrianstruct kld32_file_stat_1 {
372250003Sadrian	int	version;	/* set to sizeof(struct kld_file_stat_1) */
373250003Sadrian	char	name[MAXPATHLEN];
374250003Sadrian	int	refs;
375250003Sadrian	int	id;
376250003Sadrian	uint32_t address;	/* load address */
377250003Sadrian	uint32_t size;		/* size in bytes */
378250003Sadrian};
379250003Sadrian
380250003Sadrianstruct kld32_file_stat {
381250003Sadrian	int	version;	/* set to sizeof(struct kld_file_stat) */
382250003Sadrian	char	name[MAXPATHLEN];
383250003Sadrian	int	refs;
384250003Sadrian	int	id;
385250003Sadrian	uint32_t address;	/* load address */
386250003Sadrian	uint32_t size;		/* size in bytes */
387250003Sadrian	char	pathname[MAXPATHLEN];
388250003Sadrian};
389250003Sadrian
390250003Sadrianstruct procctl_reaper_pids32 {
391250003Sadrian	u_int	rp_count;
392250003Sadrian	u_int	rp_pad0[15];
393250003Sadrian	uint32_t rp_pids;
394250003Sadrian};
395250003Sadrian
396250003Sadrian#endif /* !_COMPAT_FREEBSD32_FREEBSD32_H_ */
397250003Sadrian