xref: /minix3/sys/sys/mman.h (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1 /*	$NetBSD: mman.h,v 1.48 2014/08/03 19:14:24 wiz 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_ANONYMOUS	0x1000	/* allocated from memory, swap space */
98 #define	MAP_ANON	MAP_ANONYMOUS
99 #define	MAP_STACK	0x2000	/* allocated from memory, swap space (stack) */
100 
101 /*
102  * Alignment (expressed in log2).  Must be >= log2(PAGE_SIZE) and
103  * < # bits in a pointer (26 (acorn26), 32 or 64).
104  */
105 #define	MAP_ALIGNED(n)		((n) << MAP_ALIGNMENT_SHIFT)
106 #define	MAP_ALIGNMENT_SHIFT	24
107 #define	MAP_ALIGNMENT_MASK	MAP_ALIGNED(0xff)
108 #define	MAP_ALIGNMENT_64KB	MAP_ALIGNED(16)	/* 2^16 */
109 #define	MAP_ALIGNMENT_16MB	MAP_ALIGNED(24)	/* 2^24 */
110 #define	MAP_ALIGNMENT_4GB	MAP_ALIGNED(32)	/* 2^32 */
111 #define	MAP_ALIGNMENT_1TB	MAP_ALIGNED(40)	/* 2^40 */
112 #define	MAP_ALIGNMENT_256TB	MAP_ALIGNED(48)	/* 2^48 */
113 #define	MAP_ALIGNMENT_64PB	MAP_ALIGNED(56)	/* 2^56 */
114 
115 #if defined(__minix)
116 /*
117  * Minix-specific flags
118  */
119 #define MAP_UNINITIALIZED	0x040000       /* do not clear memory */
120 #define MAP_PREALLOC		0x080000        /* not on-demand */
121 #define MAP_CONTIG		0x100000        /* contiguous in physical memory */
122 #define MAP_LOWER16M		0x200000        /* physically below 16MB */
123 #define MAP_LOWER1M		0x400000        /* physically below 16MB */
124 #define MAP_THIRDPARTY		0x800000        /* perform on behalf of any process */
125 #endif /* defined(__minix) */
126 
127 /*
128  * Error indicator returned by mmap(2)
129  */
130 #define	MAP_FAILED	((void *) -1)	/* mmap() failed */
131 
132 /*
133  * Flags to msync
134  */
135 #define	MS_ASYNC	0x01	/* perform asynchronous writes */
136 #define	MS_INVALIDATE	0x02	/* invalidate cached data */
137 #define	MS_SYNC		0x04	/* perform synchronous writes */
138 
139 /*
140  * Flags to mlockall
141  */
142 #define	MCL_CURRENT	0x01	/* lock all pages currently mapped */
143 #define	MCL_FUTURE	0x02	/* lock all pages mapped in the future */
144 
145 /*
146  * POSIX memory avissory values.
147  * Note: keep consistent with the original definitions below.
148  */
149 #define	POSIX_MADV_NORMAL	0	/* No further special treatment */
150 #define	POSIX_MADV_RANDOM	1	/* Expect random page references */
151 #define	POSIX_MADV_SEQUENTIAL	2	/* Expect sequential page references */
152 #define	POSIX_MADV_WILLNEED	3	/* Will need these pages */
153 #define	POSIX_MADV_DONTNEED	4	/* Don't need these pages */
154 
155 #if defined(_NETBSD_SOURCE)
156 /*
157  * Original advice values, equivalent to POSIX definitions,
158  * and few implementation-specific ones.
159  */
160 #define	MADV_NORMAL		POSIX_MADV_NORMAL
161 #define	MADV_RANDOM		POSIX_MADV_RANDOM
162 #define	MADV_SEQUENTIAL		POSIX_MADV_SEQUENTIAL
163 #define	MADV_WILLNEED		POSIX_MADV_WILLNEED
164 #define	MADV_DONTNEED		POSIX_MADV_DONTNEED
165 #define	MADV_SPACEAVAIL		5	/* Insure that resources are reserved */
166 #define	MADV_FREE		6	/* Pages are empty, free them */
167 
168 /*
169  * Flags to minherit
170  */
171 #define	MAP_INHERIT_SHARE	0	/* share with child */
172 #define	MAP_INHERIT_COPY	1	/* copy into child */
173 #define	MAP_INHERIT_NONE	2	/* absent from child */
174 #define	MAP_INHERIT_DONATE_COPY	3	/* copy and delete -- not
175 					   implemented in UVM */
176 #define	MAP_INHERIT_ZERO	4	/* zero in child */
177 #define	MAP_INHERIT_DEFAULT	MAP_INHERIT_COPY
178 #endif
179 
180 #ifndef _KERNEL
181 
182 #include <sys/cdefs.h>
183 
184 __BEGIN_DECLS
185 void *	mmap(void *, size_t, int, int, int, off_t);
186 int	munmap(void *, size_t);
187 int	mprotect(void *, size_t, int);
188 #ifndef __LIBC12_SOURCE__
189 int	msync(void *, size_t, int) __RENAME(__msync13);
190 #endif
191 int	mlock(const void *, size_t);
192 int	munlock(const void *, size_t);
193 int	mlockall(int);
194 int	munlockall(void);
195 #if defined(_NETBSD_SOURCE)
196 int	madvise(void *, size_t, int);
197 int	mincore(void *, size_t, char *);
198 int	minherit(void *, size_t, int);
199 void *	mremap(void *, size_t, void *, size_t, int);
200 #endif
201 int	posix_madvise(void *, size_t, int);
202 int	shm_open(const char *, int, mode_t);
203 int	shm_unlink(const char *);
204 
205 #if defined(__minix) && defined(_MINIX_SYSTEM)
206 #include <minix/endpoint.h>
207 void *         vm_remap(endpoint_t d, endpoint_t s, void *da, void *sa, size_t si);
208 void *         vm_remap_ro(endpoint_t d, endpoint_t s, void *da, void *sa, size_t si);
209 int            vm_unmap(endpoint_t endpt, void *addr);
210 unsigned long  vm_getphys(endpoint_t endpt, void *addr);
211 u8_t           vm_getrefcount(endpoint_t endpt, void *addr);
212 #endif /* defined(__minix) && defined(_MINIX_SYSTEM) */
213 
214 __END_DECLS
215 
216 #endif /* !_KERNEL */
217 
218 #endif /* !_SYS_MMAN_H_ */
219