linux_ipc.h revision 133816
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: head/sys/compat/linux/linux_ipc.h 133816 2004-08-16 07:28:16Z tjr $
29 */
30
31#ifndef _LINUX_IPC_H_
32#define _LINUX_IPC_H_
33
34/*
35 * Version flags for semctl, msgctl, and shmctl commands
36 * These are passed as bitflags or-ed with the actual command
37 */
38#define	LINUX_IPC_OLD	0	/* Old version (no 32-bit UID support on many
39				   architectures) */
40#define	LINUX_IPC_64	0x0100	/* New version (support 32-bit UIDs, bigger
41				   message sizes, etc. */
42
43#if defined(__i386__) || defined(__amd64__)
44
45struct linux_msgctl_args
46{
47	l_int		msqid;
48	l_int		cmd;
49	struct l_msqid_ds *buf;
50};
51
52struct linux_msgget_args
53{
54	l_key_t		key;
55	l_int		msgflg;
56};
57
58struct linux_msgrcv_args
59{
60	l_int		msqid;
61	struct l_msgbuf *msgp;
62	l_size_t	msgsz;
63	l_long		msgtyp;
64	l_int		msgflg;
65};
66
67struct linux_msgsnd_args
68{
69	l_int		msqid;
70	struct l_msgbuf *msgp;
71	l_size_t	msgsz;
72	l_int		msgflg;
73};
74
75struct linux_semctl_args
76{
77	l_int		semid;
78	l_int		semnum;
79	l_int		cmd;
80	union l_semun	arg;
81};
82
83struct linux_semget_args
84{
85	l_key_t		key;
86	l_int		nsems;
87	l_int		semflg;
88};
89
90struct linux_semop_args
91{
92	l_int		semid;
93	struct l_sembuf *tsops;
94	l_uint		nsops;
95};
96
97struct linux_shmat_args
98{
99	l_int		shmid;
100	char		*shmaddr;
101	l_int		shmflg;
102	l_ulong		*raddr;
103};
104
105struct linux_shmctl_args
106{
107	l_int		shmid;
108	l_int		cmd;
109	struct l_shmid_ds *buf;
110};
111
112struct linux_shmdt_args
113{
114	char *shmaddr;
115};
116
117struct linux_shmget_args
118{
119	l_key_t		key;
120	l_size_t	size;
121	l_int		shmflg;
122};
123
124int linux_msgctl(struct thread *, struct linux_msgctl_args *);
125int linux_msgget(struct thread *, struct linux_msgget_args *);
126int linux_msgrcv(struct thread *, struct linux_msgrcv_args *);
127int linux_msgsnd(struct thread *, struct linux_msgsnd_args *);
128
129int linux_semctl(struct thread *, struct linux_semctl_args *);
130int linux_semget(struct thread *, struct linux_semget_args *);
131int linux_semop(struct thread *, struct linux_semop_args *);
132
133int linux_shmat(struct thread *, struct linux_shmat_args *);
134int linux_shmctl(struct thread *, struct linux_shmctl_args *);
135int linux_shmdt(struct thread *, struct linux_shmdt_args *);
136int linux_shmget(struct thread *, struct linux_shmget_args *);
137
138#endif	/* __i386__ || __amd64__ */
139
140#endif /* _LINUX_IPC_H_ */
141