xref: /titanic_50/usr/src/uts/common/sys/shm.h (revision 263f549e5da8b32c4922f586afb365b8ae388a6c)
1  /*
2   * CDDL HEADER START
3   *
4   * The contents of this file are subject to the terms of the
5   * Common Development and Distribution License, Version 1.0 only
6   * (the "License").  You may not use this file except in compliance
7   * with the License.
8   *
9   * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10   * or http://www.opensolaris.org/os/licensing.
11   * See the License for the specific language governing permissions
12   * and limitations under the License.
13   *
14   * When distributing Covered Code, include this CDDL HEADER in each
15   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16   * If applicable, add the following below this CDDL HEADER, with the
17   * fields enclosed by brackets "[]" replaced with your own identifying
18   * information: Portions Copyright [yyyy] [name of copyright owner]
19   *
20   * CDDL HEADER END
21   */
22  /*
23   * Copyright 2014 Garrett D'Amore <garrett@damore.org>
24   *
25   * Copyright 2003 Sun Microsystems, Inc.  All rights reserved.
26   * Use is subject to license terms.
27   */
28  
29  /*	Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T	*/
30  /*	  All Rights Reserved  	*/
31  
32  /*
33   * Portions of this source code were derived from Berkeley 4.3 BSD
34   * under license from the Regents of the University of California.
35   */
36  
37  #ifndef	_SYS_SHM_H
38  #define	_SYS_SHM_H
39  
40  #include <sys/ipc.h>
41  
42  #ifdef	__cplusplus
43  extern "C" {
44  #endif
45  
46  /*
47   *	IPC Shared Memory Facility.
48   */
49  
50  /*
51   *	Implementation Constants.
52   */
53  #if (defined(_KERNEL) || defined(_KMEMUSER))
54  
55  #define	SHMLBA	PAGESIZE	/* segment low boundary address multiple */
56  				/* (SHMLBA must be a power of 2) */
57  #else
58  #include <sys/unistd.h>		/* needed for _SC_PAGESIZE */
59  extern long _sysconf(int);	/* System Private interface to sysconf() */
60  #define	SHMLBA	(_sysconf(_SC_PAGESIZE))
61  #endif	/* defined(_KERNEL) || defined(_KMEMUSER)) */
62  
63  /*
64   *	Permission Definitions.
65   */
66  #define	SHM_R	0400	/* read permission */
67  #define	SHM_W	0200	/* write permission */
68  
69  /*
70   *	Message Operation Flags.
71   */
72  #define	SHM_RDONLY	010000	/* attach read-only (else read-write) */
73  #define	SHM_RND		020000	/* round attach address to SHMLBA */
74  #define	SHM_SHARE_MMU	040000  /* share VM resources such as page table */
75  #define	SHM_PAGEABLE	0100000 /* pageable ISM */
76  
77  /*
78   * Valid flags bits for shmat shmflag argument.
79   */
80  #define	SHMAT_VALID_FLAGS_MASK		\
81  	(SHM_R | SHM_W | SHM_RDONLY | SHM_RND | SHM_SHARE_MMU | SHM_PAGEABLE)
82  
83  typedef unsigned long shmatt_t;
84  
85  /*
86   *	Structure Definitions.
87   */
88  struct shmid_ds {
89  	struct ipc_perm	shm_perm;	/* operation permission struct */
90  	size_t		shm_segsz;	/* size of segment in bytes */
91  #if defined(_LP64) || defined(_XOPEN_SOURCE)
92  	void		*shm_amp;
93  #else
94  	struct anon_map	*shm_amp;	/* segment anon_map pointer */
95  #endif
96  	ushort_t	shm_lkcnt;	/* number of times it is being locked */
97  	pid_t		shm_lpid;	/* pid of last shmop */
98  	pid_t		shm_cpid;	/* pid of creator */
99  	shmatt_t	shm_nattch;	/* number of attaches */
100  	ulong_t		shm_cnattch;	/* number of ISM attaches */
101  #if defined(_LP64)
102  	time_t		shm_atime;	/* last shmat time */
103  	time_t		shm_dtime;	/* last shmdt time */
104  	time_t		shm_ctime;	/* last change time */
105  	int64_t		shm_pad4[4];	/* reserve area */
106  #else	/* _LP64 */
107  	time_t		shm_atime;	/* last shmat time */
108  	int32_t		shm_pad1;	/* reserved for time_t expansion */
109  	time_t		shm_dtime;	/* last shmdt time */
110  	int32_t		shm_pad2;	/* reserved for time_t expansion */
111  	time_t		shm_ctime;	/* last change time */
112  	int32_t		shm_pad3;	/* reserved for time_t expansion */
113  	int32_t		shm_pad4[4];	/* reserve area  */
114  #endif	/* _LP64 */
115  };
116  
117  /*
118   * Shared memory control operations
119   */
120  #define	SHM_LOCK	3	/* Lock segment in core */
121  #define	SHM_UNLOCK	4	/* Unlock segment */
122  
123  #if !defined(_KERNEL)
124  int shmget(key_t, size_t, int);
125  int shmids(int *, uint_t, uint_t *);
126  int shmctl(int, int, struct shmid_ds *);
127  void *shmat(int, const void *, int);
128  #if defined(_XPG4)
129  int shmdt(const void *);
130  #else
131  int shmdt(char *);
132  #endif /* defined(_XPG4) */
133  #endif /* !defined(_KERNEL) */
134  
135  #ifdef	__cplusplus
136  }
137  #endif
138  
139  #endif	/* _SYS_SHM_H */
140