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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
/* $NetBSD: linux_shm.h,v 1.12 2008/04/28 20:23:44 martin Exp $ */
/*-
* Copyright (c) 1995, 1998 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by Frank van der Linden and Eric Haszlakiewicz.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _LINUX_SHM_H
#define _LINUX_SHM_H
#include <sys/shm.h>
/*
* shm segment control structure
*/
struct linux_shmid_ds {
struct linux_ipc_perm l_shm_perm;
int l_shm_segsz;
linux_time_t l_shm_atime;
linux_time_t l_shm_dtime;
linux_time_t l_shm_ctime;
ushort l_shm_cpid;
ushort l_shm_lpid;
short l_shm_nattch;
ushort l_private1;
void *l_private2;
void *l_private3;
};
struct linux_shmid64_ds {
struct linux_ipc64_perm l_shm_perm;
size_t l_shm_segsz;
linux_time_t l_shm_atime;
#ifndef _LP64
u_long l____unused1;
#endif
linux_time_t l_shm_dtime;
#ifndef _LP64
u_long l____unused2;
#endif
linux_time_t l_shm_ctime;
#ifndef _LP64
u_long l____unused3;
#endif
int l_shm_cpid;
int l_shm_lpid;
u_long l_shm_nattch;
u_long l___unused4;
u_long l___unused5;
};
struct linux_shminfo64 {
u_long l_shmmax;
u_long l_shmmin;
u_long l_shmmni;
u_long l_shmseg;
u_long l_shmall;
u_long l___unused1;
u_long l___unused2;
u_long l___unused3;
u_long l___unused4;
};
struct linux_shm_info {
int l_used_ids;
u_long l_shm_tot;
u_long l_shm_rss;
u_long l_shm_swp;
u_long l_swap_attempts;
u_long l_swap_successes;
};
#define LINUX_SHM_RDONLY 0x1000
#define LINUX_SHM_RND 0x2000
#define LINUX_SHM_REMAP 0x4000
#define LINUX_SHM_LOCK 11
#define LINUX_SHM_UNLOCK 12
#define LINUX_SHM_STAT 13
#define LINUX_SHM_INFO 14
/* Pretend the sys_shmat and sys_shmctl syscalls are defined */
struct linux_sys_shmat_args {
syscallarg(int) shmid;
syscallarg(void *) shmaddr;
syscallarg(int) shmflg;
syscallarg(u_long *) raddr;
};
struct linux_sys_shmctl_args {
syscallarg(int) shmid;
syscallarg(int) cmd;
syscallarg(struct linux_shmid_ds *) buf;
};
struct linux_sys_shmget_args {
syscallarg(key_t) key;
syscallarg(size_t) size;
syscallarg(int) shmflg;
};
#ifdef SYSVSHM
#ifdef _KERNEL
__BEGIN_DECLS
int linux_sys_shmget(struct lwp *, const struct linux_sys_shmget_args *, register_t *);
int linux_sys_shmat(struct lwp *, const struct linux_sys_shmat_args *, register_t *);
int linux_sys_shmctl(struct lwp *, const struct linux_sys_shmctl_args *, register_t *);
void linux_to_bsd_shmid_ds(struct linux_shmid_ds *,
struct shmid_ds *);
void linux_to_bsd_shmid64_ds(struct linux_shmid64_ds *,
struct shmid_ds *);
void bsd_to_linux_shmid_ds(struct shmid_ds *,
struct linux_shmid_ds *);
void bsd_to_linux_shmid64_ds(struct shmid_ds *,
struct linux_shmid64_ds *);
__END_DECLS
#endif /* !_KERNEL */
#endif /* !SYSVSHM */
#endif /* !_LINUX_SHM_H */
|