]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/compat/linux/linux_ipc.h
MFV: r329072
[FreeBSD/FreeBSD.git] / sys / compat / linux / linux_ipc.h
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_ */