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