summaryrefslogtreecommitdiff
path: root/include/arch/x86_64/linux/ipc.h
blob: c2a08fad97068aae94a7896734eec7b82b7cc4b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
#ifndef _LINUX_IPC_H
#define _LINUX_IPC_H

#include <linux/types.h>

#define IPC_PRIVATE ((__kernel_key_t)0)

/* Obsolete, used only for backwards compatibility and libc5 compiles */
struct ipc_perm {
	__kernel_key_t key;
	__kernel_uid_t uid;
	__kernel_gid_t gid;
	__kernel_uid_t cuid;
	__kernel_gid_t cgid;
	__kernel_mode_t mode;
	unsigned short seq;
};

/* Include the definition of ipc64_perm */
#include <asm/ipcbuf.h>

/* resource get request flags */
#define IPC_CREAT  00001000 /* create if key is nonexistent */
#define IPC_EXCL   00002000 /* fail if key exists */
#define IPC_NOWAIT 00004000 /* return error on wait */

/* these fields are used by the DIPC package so the kernel as standard
   should avoid using them if possible */

#define IPC_DIPC 00010000 /* make it distributed */
#define IPC_OWN	 00020000 /* this machine is the DIPC owner */

/*
 * Control commands used with semctl, msgctl and shmctl
 * see also specific commands in sem.h, msg.h and shm.h
 */
#define IPC_RMID 0 /* remove resource */
#define IPC_SET	 1 /* set ipc_perm options */
#define IPC_STAT 2 /* get ipc_perm options */
#define IPC_INFO 3 /* see ipcs */

/*
 * Version flags for semctl, msgctl, and shmctl commands
 * These are passed as bitflags or-ed with the actual command
 */
#define IPC_OLD                                         \
	0 /* Old version (no 32-bit UID support on many \
	     architectures) */
#define IPC_64                                             \
	0x0100 /* New version (support 32-bit UIDs, bigger \
		  message sizes, etc. */

/*
 * These are used to wrap system calls.
 *
 * See architecture code for ugly details..
 */
struct ipc_kludge {
	struct msgbuf *msgp;
	long msgtyp;
};

#define SEMOP	   1
#define SEMGET	   2
#define SEMCTL	   3
#define SEMTIMEDOP 4
#define MSGSND	   11
#define MSGRCV	   12
#define MSGGET	   13
#define MSGCTL	   14
#define SHMAT	   21
#define SHMDT	   22
#define SHMGET	   23
#define SHMCTL	   24

/* Used by the DIPC package, try and avoid reusing it */
#define DIPC 25

#define IPCCALL(version, op) ((version) << 16 | (op))

#endif /* _LINUX_IPC_H */