xref: /netbsd/sys/sys/mman.h (revision 6550d01e)
1 /*	$NetBSD: mman.h,v 1.42 2008/11/18 22:13:49 ad Exp $	*/
2 
3 /*-
4  * Copyright (c) 1982, 1986, 1993
5  *	The Regents of the University of California.  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  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  * 3. Neither the name of the University nor the names of its contributors
16  *    may be used to endorse or promote products derived from this software
17  *    without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29  * SUCH DAMAGE.
30  *
31  *	@(#)mman.h	8.2 (Berkeley) 1/9/95
32  */
33 
34 #ifndef _SYS_MMAN_H_
35 #define _SYS_MMAN_H_
36 
37 #include <sys/featuretest.h>
38 
39 #include <machine/ansi.h>
40 
41 #ifdef	_BSD_SIZE_T_
42 typedef	_BSD_SIZE_T_	size_t;
43 #undef	_BSD_SIZE_T_
44 #endif
45 
46 #include <sys/ansi.h>
47 
48 #ifndef	mode_t
49 typedef	__mode_t	mode_t;
50 #define	mode_t		__mode_t
51 #endif
52 
53 #ifndef	off_t
54 typedef	__off_t		off_t;		/* file offset */
55 #define	off_t		__off_t
56 #endif
57 
58 
59 /*
60  * Protections are chosen from these bits, or-ed together
61  */
62 #define	PROT_NONE	0x00	/* no permissions */
63 #define	PROT_READ	0x01	/* pages can be read */
64 #define	PROT_WRITE	0x02	/* pages can be written */
65 #define	PROT_EXEC	0x04	/* pages can be executed */
66 
67 /*
68  * Flags contain sharing type and options.
69  * Sharing types; choose one.
70  */
71 #define	MAP_SHARED	0x0001	/* share changes */
72 #define	MAP_PRIVATE	0x0002	/* changes are private */
73 
74 #ifdef _KERNEL
75 /*
76  * Deprecated flag; these are treated as MAP_PRIVATE internally by
77  * the kernel.
78  */
79 #define	MAP_COPY	0x0004	/* "copy" region at mmap time */
80 #endif
81 
82 /*
83  * Other flags
84  */
85 #define	MAP_FIXED	 0x0010	/* map addr must be exactly as requested */
86 #define	MAP_RENAME	 0x0020	/* Sun: rename private pages to file */
87 #define	MAP_NORESERVE	 0x0040	/* Sun: don't reserve needed swap area */
88 #define	MAP_INHERIT	 0x0080	/* region is retained after exec */
89 #define	MAP_HASSEMAPHORE 0x0200	/* region may contain semaphores */
90 #define	MAP_TRYFIXED     0x0400 /* attempt hint address, even within break */
91 #define	MAP_WIRED	 0x0800	/* mlock() mapping when it is established */
92 
93 /*
94  * Mapping type
95  */
96 #define	MAP_FILE	0x0000	/* map from file (default) */
97 #define	MAP_ANON	0x1000	/* allocated from memory, swap space */
98 #define	MAP_STACK	0x2000	/* allocated from memory, swap space (stack) */
99 
100 /*
101  * Alignment (expressed in log2).  Must be >= log2(PAGE_SIZE) and
102  * < # bits in a pointer (26 (acorn26), 32 or 64).
103  */
104 #define	MAP_ALIGNED(n)		((n) << MAP_ALIGNMENT_SHIFT)
105 #define	MAP_ALIGNMENT_SHIFT	24
106 #define	MAP_ALIGNMENT_MASK	MAP_ALIGNED(0xff)
107 #define	MAP_ALIGNMENT_64KB	MAP_ALIGNED(16)	/* 2^16 */
108 #define	MAP_ALIGNMENT_16MB	MAP_ALIGNED(24)	/* 2^24 */
109 #define	MAP_ALIGNMENT_4GB	MAP_ALIGNED(32)	/* 2^32 */
110 #define	MAP_ALIGNMENT_1TB	MAP_ALIGNED(40)	/* 2^40 */
111 #define	MAP_ALIGNMENT_256TB	MAP_ALIGNED(48)	/* 2^48 */
112 #define	MAP_ALIGNMENT_64PB	MAP_ALIGNED(56)	/* 2^56 */
113 
114 /*
115  * Error indicator returned by mmap(2)
116  */
117 #define	MAP_FAILED	((void *) -1)	/* mmap() failed */
118 
119 /*
120  * Flags to msync
121  */
122 #define	MS_ASYNC	0x01	/* perform asynchronous writes */
123 #define	MS_INVALIDATE	0x02	/* invalidate cached data */
124 #define	MS_SYNC		0x04	/* perform synchronous writes */
125 
126 /*
127  * Flags to mlockall
128  */
129 #define	MCL_CURRENT	0x01	/* lock all pages currently mapped */
130 #define	MCL_FUTURE	0x02	/* lock all pages mapped in the future */
131 
132 /*
133  * POSIX memory avissory values.
134  * Note: keep consistent with the original defintions below.
135  */
136 #define	POSIX_MADV_NORMAL	0	/* No further special treatment */
137 #define	POSIX_MADV_RANDOM	1	/* Expect random page references */
138 #define	POSIX_MADV_SEQUENTIAL	2	/* Expect sequential page references */
139 #define	POSIX_MADV_WILLNEED	3	/* Will need these pages */
140 #define	POSIX_MADV_DONTNEED	4	/* Don't need these pages */
141 
142 #if defined(_NETBSD_SOURCE)
143 /*
144  * Original advice values, equivalent to POSIX defintions,
145  * and few implementation-specific ones.
146  */
147 #define	MADV_NORMAL		POSIX_MADV_NORMAL
148 #define	MADV_RANDOM		POSIX_MADV_RANDOM
149 #define	MADV_SEQUENTIAL		POSIX_MADV_SEQUENTIAL
150 #define	MADV_WILLNEED		POSIX_MADV_WILLNEED
151 #define	MADV_DONTNEED		POSIX_MADV_DONTNEED
152 #define	MADV_SPACEAVAIL		5	/* Insure that resources are reserved */
153 #define	MADV_FREE		6	/* Pages are empty, free them */
154 
155 /*
156  * Flags to minherit
157  */
158 #define	MAP_INHERIT_SHARE	0	/* share with child */
159 #define	MAP_INHERIT_COPY	1	/* copy into child */
160 #define	MAP_INHERIT_NONE	2	/* absent from child */
161 #define	MAP_INHERIT_DONATE_COPY	3	/* copy and delete -- not
162 					   implemented in UVM */
163 #define	MAP_INHERIT_DEFAULT	MAP_INHERIT_COPY
164 #endif
165 
166 #ifndef _KERNEL
167 
168 #include <sys/cdefs.h>
169 
170 __BEGIN_DECLS
171 void *	mmap(void *, size_t, int, int, int, off_t);
172 int	munmap(void *, size_t);
173 int	mprotect(void *, size_t, int);
174 #ifndef __LIBC12_SOURCE__
175 int	msync(void *, size_t, int) __RENAME(__msync13);
176 #endif
177 int	mlock(const void *, size_t);
178 int	munlock(const void *, size_t);
179 int	mlockall(int);
180 int	munlockall(void);
181 #if defined(_NETBSD_SOURCE)
182 int	madvise(void *, size_t, int);
183 int	mincore(void *, size_t, char *);
184 int	minherit(void *, size_t, int);
185 void *	mremap(void *, size_t, void *, size_t, int);
186 #endif
187 int	posix_madvise(void *, size_t, int);
188 __END_DECLS
189 
190 #endif /* !_KERNEL */
191 
192 #endif /* !_SYS_MMAN_H_ */
193