xref: /freebsd/sys/compat/linux/linux_ipc.h (revision 1de7b4b805ddbf2429da511c053686ac4591ed89)
1 /*-
2  * SPDX-License-Identifier: BSD-3-Clause
3  *
4  * Copyright (c) 2000 Marcel Moolenaar
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  *    in this position and unchanged.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 3. The name of the author may not be used to endorse or promote products
17  *    derived from this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  *
30  * $FreeBSD$
31  */
32 
33 #ifndef _LINUX_IPC_H_
34 #define _LINUX_IPC_H_
35 
36 /*
37  * SystemV IPC defines
38  */
39 #define	LINUX_SEMOP		1
40 #define	LINUX_SEMGET		2
41 #define	LINUX_SEMCTL		3
42 #define	LINUX_MSGSND		11
43 #define	LINUX_MSGRCV		12
44 #define	LINUX_MSGGET		13
45 #define	LINUX_MSGCTL		14
46 #define	LINUX_SHMAT		21
47 #define	LINUX_SHMDT		22
48 #define	LINUX_SHMGET		23
49 #define	LINUX_SHMCTL		24
50 
51 #define	LINUX_IPC_RMID		0
52 #define	LINUX_IPC_SET		1
53 #define	LINUX_IPC_STAT		2
54 #define	LINUX_IPC_INFO		3
55 
56 #define	LINUX_MSG_INFO	12
57 
58 #define	LINUX_SHM_LOCK		11
59 #define	LINUX_SHM_UNLOCK	12
60 #define	LINUX_SHM_STAT		13
61 #define	LINUX_SHM_INFO		14
62 
63 #define	LINUX_SHM_RDONLY	0x1000
64 #define	LINUX_SHM_RND		0x2000
65 #define	LINUX_SHM_REMAP		0x4000
66 
67 /* semctl commands */
68 #define	LINUX_GETPID		11
69 #define	LINUX_GETVAL		12
70 #define	LINUX_GETALL		13
71 #define	LINUX_GETNCNT		14
72 #define	LINUX_GETZCNT		15
73 #define	LINUX_SETVAL		16
74 #define	LINUX_SETALL		17
75 #define	LINUX_SEM_STAT		18
76 #define	LINUX_SEM_INFO		19
77 
78 /*
79  * Version flags for semctl, msgctl, and shmctl commands
80  * These are passed as bitflags or-ed with the actual command
81  */
82 #define	LINUX_IPC_OLD	0	/* Old version (no 32-bit UID support on many
83 				   architectures) */
84 #define	LINUX_IPC_64	0x0100	/* New version (support 32-bit UIDs, bigger
85 				   message sizes, etc. */
86 
87 #if defined(__i386__) || (defined(__amd64__) && defined(COMPAT_LINUX32))
88 
89 struct linux_msgctl_args
90 {
91 	l_int		msqid;
92 	l_int		cmd;
93 	struct l_msqid_ds *buf;
94 };
95 
96 struct linux_msgget_args
97 {
98 	l_key_t		key;
99 	l_int		msgflg;
100 };
101 
102 struct linux_msgrcv_args
103 {
104 	l_int		msqid;
105 	struct l_msgbuf *msgp;
106 	l_size_t	msgsz;
107 	l_long		msgtyp;
108 	l_int		msgflg;
109 };
110 
111 struct linux_msgsnd_args
112 {
113 	l_int		msqid;
114 	struct l_msgbuf *msgp;
115 	l_size_t	msgsz;
116 	l_int		msgflg;
117 };
118 
119 struct linux_semctl_args
120 {
121 	l_int		semid;
122 	l_int		semnum;
123 	l_int		cmd;
124 	union l_semun	arg;
125 };
126 
127 struct linux_semget_args
128 {
129 	l_key_t		key;
130 	l_int		nsems;
131 	l_int		semflg;
132 };
133 
134 struct linux_semop_args
135 {
136 	l_int		semid;
137 	struct l_sembuf *tsops;
138 	l_uint		nsops;
139 };
140 
141 struct linux_shmat_args
142 {
143 	l_int		shmid;
144 	char		*shmaddr;
145 	l_int		shmflg;
146 	l_ulong		*raddr;
147 };
148 
149 struct linux_shmctl_args
150 {
151 	l_int		shmid;
152 	l_int		cmd;
153 	struct l_shmid_ds *buf;
154 };
155 
156 struct linux_shmdt_args
157 {
158 	char *shmaddr;
159 };
160 
161 struct linux_shmget_args
162 {
163 	l_key_t		key;
164 	l_size_t	size;
165 	l_int		shmflg;
166 };
167 
168 int linux_msgctl(struct thread *, struct linux_msgctl_args *);
169 int linux_msgget(struct thread *, struct linux_msgget_args *);
170 int linux_msgrcv(struct thread *, struct linux_msgrcv_args *);
171 int linux_msgsnd(struct thread *, struct linux_msgsnd_args *);
172 
173 int linux_semctl(struct thread *, struct linux_semctl_args *);
174 int linux_semget(struct thread *, struct linux_semget_args *);
175 int linux_semop(struct thread *, struct linux_semop_args *);
176 
177 int linux_shmat(struct thread *, struct linux_shmat_args *);
178 int linux_shmctl(struct thread *, struct linux_shmctl_args *);
179 int linux_shmdt(struct thread *, struct linux_shmdt_args *);
180 int linux_shmget(struct thread *, struct linux_shmget_args *);
181 
182 #endif	/* __i386__ || (__amd64__ && COMPAT_LINUX32) */
183 
184 #endif /* _LINUX_IPC_H_ */
185