1 /*-
2  * Copyright (c) 2002 Doug Rabson
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24  * SUCH DAMAGE.
25  *
26  * $FreeBSD$
27  */
28 
29 #ifndef _COMPAT_FREEBSD32_FREEBSD32_IPC_H_
30 #define _COMPAT_FREEBSD32_FREEBSD32_IPC_H_
31 
32 struct ipc_perm32 {
33 	uid_t		cuid;
34 	gid_t		cgid;
35 	uid_t		uid;
36 	gid_t		gid;
37 	mode_t		mode;
38 	uint16_t	seq;
39 	uint32_t	key;
40 };
41 
42 struct semid_ds32 {
43 	struct ipc_perm32 sem_perm;
44 	uint32_t	sem_base;
45 	unsigned short	sem_nsems;
46 	int32_t		sem_otime;
47 	int32_t		sem_ctime;
48 };
49 
50 union semun32 {
51 	int		val;
52 	uint32_t	buf;
53 	uint32_t	array;
54 };
55 
56 struct msqid_ds32 {
57 	struct ipc_perm32 msg_perm;
58 	uint32_t	msg_first;
59 	uint32_t	msg_last;
60 	uint32_t	msg_cbytes;
61 	uint32_t	msg_qnum;
62 	uint32_t	msg_qbytes;
63 	pid_t		msg_lspid;
64 	pid_t		msg_lrpid;
65 	int32_t		msg_stime;
66 	int32_t		msg_rtime;
67 	int32_t		msg_ctime;
68 };
69 
70 struct shmid_ds32 {
71 	struct ipc_perm32 shm_perm;
72 	int32_t		shm_segsz;
73 	pid_t		shm_lpid;
74 	pid_t		shm_cpid;
75 	int		shm_nattch;
76 	int32_t		shm_atime;
77 	int32_t		shm_dtime;
78 	int32_t		shm_ctime;
79 };
80 
81 struct shm_info32 {
82 	int32_t		used_ids;
83 	uint32_t	shm_tot;
84 	uint32_t	shm_rss;
85 	uint32_t	shm_swp;
86 	uint32_t	swap_attempts;
87 	uint32_t	swap_successes;
88 };
89 
90 struct shminfo32 {
91 	uint32_t	shmmax;
92 	uint32_t	shmmin;
93 	uint32_t	shmmni;
94 	uint32_t	shmseg;
95 	uint32_t	shmall;
96 };
97 
98 #if defined(COMPAT_FREEBSD4) || defined(COMPAT_FREEBSD5) || \
99     defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD7)
100 struct ipc_perm32_old {
101 	uint16_t	cuid;
102 	uint16_t	cgid;
103 	uint16_t	uid;
104 	uint16_t	gid;
105 	uint16_t	mode;
106 	uint16_t	seq;
107 	uint32_t	key;
108 };
109 
110 struct semid_ds32_old {
111 	struct ipc_perm32_old sem_perm;
112 	uint32_t	sem_base;
113 	unsigned short	sem_nsems;
114 	int32_t		sem_otime;
115 	int32_t		sem_pad1;
116 	int32_t		sem_ctime;
117 	int32_t		sem_pad2;
118 	int32_t		sem_pad3[4];
119 };
120 
121 struct msqid_ds32_old {
122 	struct ipc_perm32_old msg_perm;
123 	uint32_t	msg_first;
124 	uint32_t	msg_last;
125 	uint32_t	msg_cbytes;
126 	uint32_t	msg_qnum;
127 	uint32_t	msg_qbytes;
128 	pid_t		msg_lspid;
129 	pid_t		msg_lrpid;
130 	int32_t		msg_stime;
131 	int32_t		msg_pad1;
132 	int32_t		msg_rtime;
133 	int32_t		msg_pad2;
134 	int32_t		msg_ctime;
135 	int32_t		msg_pad3;
136 	int32_t		msg_pad4[4];
137 };
138 
139 struct shmid_ds32_old {
140 	struct ipc_perm32_old shm_perm;
141 	int32_t		shm_segsz;
142 	pid_t		shm_lpid;
143 	pid_t		shm_cpid;
144 	int16_t		shm_nattch;
145 	int32_t		shm_atime;
146 	int32_t		shm_dtime;
147 	int32_t		shm_ctime;
148 	uint32_t	shm_internal;
149 };
150 
151 void	freebsd32_ipcperm_old_in(struct ipc_perm32_old *ip32,
152 	    struct ipc_perm *ip);
153 void	freebsd32_ipcperm_old_out(struct ipc_perm *ip,
154 	    struct ipc_perm32_old *ip32);
155 #endif
156 
157 void	freebsd32_ipcperm_in(struct ipc_perm32 *ip32, struct ipc_perm *ip);
158 void	freebsd32_ipcperm_out(struct ipc_perm *ip, struct ipc_perm32 *ip32);
159 
160 #endif /* !_COMPAT_FREEBSD32_FREEBSD32_IPC_H_ */
161