1/*-
2 * SPDX-License-Identifier: BSD-2-Clause
3 *
4 * Copyright (c) 2002 Doug Rabson
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 *    notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 *    notice, this list of conditions and the following disclaimer in the
14 *    documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 */
28
29#ifndef _COMPAT_FREEBSD32_FREEBSD32_IPC_H_
30#define _COMPAT_FREEBSD32_FREEBSD32_IPC_H_
31
32struct 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
42struct semid_ds32 {
43	struct ipc_perm32 sem_perm;
44	uint32_t	__sem_base;
45	unsigned short	sem_nsems;
46	time32_t	sem_otime;
47	time32_t	sem_ctime;
48};
49
50#ifdef _KERNEL
51struct semid_kernel32 {
52	/* Data structure exposed to user space. */
53	struct semid_ds32	u;
54
55	/* Kernel-private components of the semaphore. */
56	int32_t			label;
57	int32_t			cred;
58};
59#endif /* _KERNEL */
60
61union semun32 {
62	int		val;
63	uint32_t	buf;
64	uint32_t	array;
65};
66
67struct msqid_ds32 {
68	struct ipc_perm32 msg_perm;
69	uint32_t	__msg_first;
70	uint32_t	__msg_last;
71	uint32_t	msg_cbytes;
72	uint32_t	msg_qnum;
73	uint32_t	msg_qbytes;
74	pid_t		msg_lspid;
75	pid_t		msg_lrpid;
76	time32_t	msg_stime;
77	time32_t	msg_rtime;
78	time32_t	msg_ctime;
79};
80
81#ifdef _KERNEL
82struct msqid_kernel32 {
83	/* Data structure exposed to user space. */
84	struct msqid_ds32	u;
85
86	/* Kernel-private components of the message queue. */
87	uint32_t		label;
88	uint32_t		cred;
89};
90#endif
91
92struct shmid_ds32 {
93	struct ipc_perm32 shm_perm;
94	int32_t		shm_segsz;
95	pid_t		shm_lpid;
96	pid_t		shm_cpid;
97	unsigned int	shm_nattch;
98	time32_t	shm_atime;
99	time32_t	shm_dtime;
100	time32_t	shm_ctime;
101};
102
103#ifdef _KERNEL
104struct shmid_kernel32 {
105	struct shmid_ds32	u;
106	int32_t			object;
107	int32_t			label;
108	int32_t			cred;
109};
110#endif
111
112struct shm_info32 {
113	int32_t		used_ids;
114	uint32_t	shm_tot;
115	uint32_t	shm_rss;
116	uint32_t	shm_swp;
117	uint32_t	swap_attempts;
118	uint32_t	swap_successes;
119};
120
121struct shminfo32 {
122	uint32_t	shmmax;
123	uint32_t	shmmin;
124	uint32_t	shmmni;
125	uint32_t	shmseg;
126	uint32_t	shmall;
127};
128
129#if defined(COMPAT_FREEBSD4) || defined(COMPAT_FREEBSD5) || \
130    defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD7)
131struct ipc_perm_old32 {
132	uint16_t	cuid;
133	uint16_t	cgid;
134	uint16_t	uid;
135	uint16_t	gid;
136	uint16_t	mode;
137	uint16_t	seq;
138	uint32_t	key;
139};
140
141struct semid_ds_old32 {
142	struct ipc_perm_old32 sem_perm;
143	uint32_t	__sem_base;
144	unsigned short	sem_nsems;
145	time32_t	sem_otime;
146	int32_t		sem_pad1;
147	time32_t	sem_ctime;
148	int32_t		sem_pad2;
149	int32_t		sem_pad3[4];
150};
151
152struct msqid_ds_old32 {
153	struct ipc_perm_old32 msg_perm;
154	uint32_t	__msg_first;
155	uint32_t	__msg_last;
156	uint32_t	msg_cbytes;
157	uint32_t	msg_qnum;
158	uint32_t	msg_qbytes;
159	pid_t		msg_lspid;
160	pid_t		msg_lrpid;
161	time32_t	msg_stime;
162	int32_t		msg_pad1;
163	time32_t	msg_rtime;
164	int32_t		msg_pad2;
165	time32_t	msg_ctime;
166	int32_t		msg_pad3;
167	int32_t		msg_pad4[4];
168};
169
170struct shmid_ds_old32 {
171	struct ipc_perm_old32 shm_perm;
172	int32_t		shm_segsz;
173	pid_t		shm_lpid;
174	pid_t		shm_cpid;
175	int16_t		shm_nattch;
176	time32_t	shm_atime;
177	time32_t	shm_dtime;
178	time32_t	shm_ctime;
179	uint32_t	shm_internal;
180};
181
182union semun_old32 {
183	int		val;
184	uint32_t	buf;
185	uint32_t	array;
186};
187
188void	freebsd32_ipcperm_old_in(struct ipc_perm_old32 *ip32,
189	    struct ipc_perm *ip);
190void	freebsd32_ipcperm_old_out(struct ipc_perm *ip,
191	    struct ipc_perm_old32 *ip32);
192#endif
193
194void	freebsd32_ipcperm_in(struct ipc_perm32 *ip32, struct ipc_perm *ip);
195void	freebsd32_ipcperm_out(struct ipc_perm *ip, struct ipc_perm32 *ip32);
196
197#endif /* !_COMPAT_FREEBSD32_FREEBSD32_IPC_H_ */
198