1/*
  2 * Copyright (c) 2000-2020 Apple Computer, Inc. All rights reserved.
  3 *
  4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  5 *
  6 * This file contains Original Code and/or Modifications of Original Code
  7 * as defined in and that are subject to the Apple Public Source License
  8 * Version 2.0 (the 'License'). You may not use this file except in
  9 * compliance with the License. The rights granted to you under the License
 10 * may not be used to create, or enable the creation or redistribution of,
 11 * unlawful or unlicensed copies of an Apple operating system, or to
 12 * circumvent, violate, or enable the circumvention or violation of, any
 13 * terms of an Apple operating system software license agreement.
 14 *
 15 * Please obtain a copy of the License at
 16 * http://www.opensource.apple.com/apsl/ and read it before using this file.
 17 *
 18 * The Original Code and all software distributed under the License are
 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
 23 * Please see the License for the specific language governing rights and
 24 * limitations under the License.
 25 *
 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
 27 */
 28/* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */
 29/*-
 30 * Copyright (c) 1982, 1986, 1993
 31 *	The Regents of the University of California.  All rights reserved.
 32 *
 33 * Redistribution and use in source and binary forms, with or without
 34 * modification, are permitted provided that the following conditions
 35 * are met:
 36 * 1. Redistributions of source code must retain the above copyright
 37 *    notice, this list of conditions and the following disclaimer.
 38 * 2. Redistributions in binary form must reproduce the above copyright
 39 *    notice, this list of conditions and the following disclaimer in the
 40 *    documentation and/or other materials provided with the distribution.
 41 * 3. All advertising materials mentioning features or use of this software
 42 *    must display the following acknowledgement:
 43 *	This product includes software developed by the University of
 44 *	California, Berkeley and its contributors.
 45 * 4. Neither the name of the University nor the names of its contributors
 46 *    may be used to endorse or promote products derived from this software
 47 *    without specific prior written permission.
 48 *
 49 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 50 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 51 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 52 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 53 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 54 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 55 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 56 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 57 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 58 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 59 * SUCH DAMAGE.
 60 *
 61 *	@(#)mman.h	8.1 (Berkeley) 6/2/93
 62 */
 63
 64/*
 65 * Currently unsupported:
 66 *
 67 * [TYM]	POSIX_TYPED_MEM_ALLOCATE
 68 * [TYM]	POSIX_TYPED_MEM_ALLOCATE_CONTIG
 69 * [TYM]	POSIX_TYPED_MEM_MAP_ALLOCATABLE
 70 * [TYM]	struct posix_typed_mem_info
 71 * [TYM]	posix_mem_offset()
 72 * [TYM]	posix_typed_mem_get_info()
 73 * [TYM]	posix_typed_mem_open()
 74 */
 75
 76#ifndef _SYS_MMAN_H_
 77#define _SYS_MMAN_H_
 78
 79#include <sys/appleapiopts.h>
 80#include <sys/cdefs.h>
 81
 82#include <sys/_types.h>
 83
 84/*
 85 * [various] The mode_t, off_t, and size_t types shall be defined as
 86 * described in <sys/types.h>
 87 */
 88#include <sys/_types/_mode_t.h>
 89#include <sys/_types/_off_t.h>
 90#include <sys/_types/_size_t.h>
 91
 92#if __DARWIN_C_LEVEL >= 200809L
 93#include <Availability.h>
 94#endif /* __DARWIN_C_LEVEL */
 95
 96/*
 97 * Protections are chosen from these bits, or-ed together
 98 */
 99#define PROT_NONE       0x00    /* [MC2] no permissions */
100#define PROT_READ       0x01    /* [MC2] pages can be read */
101#define PROT_WRITE      0x02    /* [MC2] pages can be written */
102#define PROT_EXEC       0x04    /* [MC2] pages can be executed */
103
104/*
105 * Flags contain sharing type and options.
106 * Sharing types; choose one.
107 */
108#define MAP_SHARED      0x0001          /* [MF|SHM] share changes */
109#define MAP_PRIVATE     0x0002          /* [MF|SHM] changes are private */
110#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
111#define MAP_COPY        MAP_PRIVATE     /* Obsolete */
112#endif  /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
113
114/*
115 * Other flags
116 */
117#define MAP_FIXED        0x0010 /* [MF|SHM] interpret addr exactly */
118#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
119#define MAP_RENAME       0x0020 /* Sun: rename private pages to file */
120#define MAP_NORESERVE    0x0040 /* Sun: don't reserve needed swap area */
121#define MAP_RESERVED0080 0x0080 /* previously unimplemented MAP_INHERIT */
122#define MAP_NOEXTEND     0x0100 /* for MAP_FILE, don't change file size */
123#define MAP_HASSEMAPHORE 0x0200 /* region may contain semaphores */
124#define MAP_NOCACHE      0x0400 /* don't cache pages for this mapping */
125#define MAP_JIT          0x0800 /* Allocate a region that will be used for JIT purposes */
126
127/*
128 * Mapping type
129 */
130#define MAP_FILE        0x0000  /* map from file (default) */
131#define MAP_ANON        0x1000  /* allocated from memory, swap space */
132#define MAP_ANONYMOUS   MAP_ANON
133
134/*
135 * The MAP_RESILIENT_* flags can be used when the caller wants to map some
136 * possibly unreliable memory and be able to access it safely, possibly
137 * getting the wrong contents rather than raising any exception.
138 * For safety reasons, such mappings have to be read-only (PROT_READ access
139 * only).
140 *
141 * MAP_RESILIENT_CODESIGN:
142 *      accessing this mapping will not generate code-signing violations,
143 *	even if the contents are tainted.
144 * MAP_RESILIENT_MEDIA:
145 *	accessing this mapping will not generate an exception if the contents
146 *	are not available (unreachable removable or remote media, access beyond
147 *	end-of-file, ...).  Missing contents will be replaced with zeroes.
148 */
149#define MAP_RESILIENT_CODESIGN  0x2000 /* no code-signing failures */
150#define MAP_RESILIENT_MEDIA     0x4000 /* no backing-store failures */
151
152#if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101500
153#define MAP_32BIT       0x8000          /* Return virtual addresses <4G only */
154#endif /* defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101500 */
155
156
157/*
158 * Flags used to support translated processes.
159 */
160#define MAP_TRANSLATED_ALLOW_EXECUTE 0x20000 /* allow execute in translated processes */
161
162#define MAP_UNIX03       0x40000 /* UNIX03 compliance */
163
164#define MAP_TPRO         0x80000 /* Allocate a region that will be protected by TPRO */
165
166#endif  /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
167
168/*
169 * Process memory locking
170 */
171#define MCL_CURRENT     0x0001  /* [ML] Lock only current memory */
172#define MCL_FUTURE      0x0002  /* [ML] Lock all future memory as well */
173
174/*
175 * Error return from mmap()
176 */
177#define MAP_FAILED      ((void *)-1)    /* [MF|SHM] mmap failed */
178
179/*
180 * msync() flags
181 *
182 * When making a new MS_*, update tests vm_parameter_validation_[user|kern]
183 * and their expected results; they deliberately call VM functions with invalid
184 * msync values and you may be turning one of those invalid msyncs valid.
185 */
186#define MS_ASYNC        0x0001  /* [MF|SIO] return immediately */
187#define MS_INVALIDATE   0x0002  /* [MF|SIO] invalidate all cached data */
188#define MS_SYNC         0x0010  /* [MF|SIO] msync synchronously */
189
190#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
191#define MS_KILLPAGES    0x0004  /* invalidate pages, leave mapped */
192#define MS_DEACTIVATE   0x0008  /* deactivate pages, leave mapped */
193
194#endif  /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
195
196
197/*
198 * Advice to madvise
199 *
200 * When making a new MADV_*, update tests vm_parameter_validation_[user|kern]
201 * and their expected results; they deliberately call VM functions with invalid
202 * madvise values and you may be turning one of those invalid madvises valid.
203 */
204#define POSIX_MADV_NORMAL       0       /* [MC1] no further special treatment */
205#define POSIX_MADV_RANDOM       1       /* [MC1] expect random page refs */
206#define POSIX_MADV_SEQUENTIAL   2       /* [MC1] expect sequential page refs */
207#define POSIX_MADV_WILLNEED     3       /* [MC1] will need these pages */
208#define POSIX_MADV_DONTNEED     4       /* [MC1] dont need these pages */
209
210#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
211#define MADV_NORMAL             POSIX_MADV_NORMAL
212#define MADV_RANDOM             POSIX_MADV_RANDOM
213#define MADV_SEQUENTIAL         POSIX_MADV_SEQUENTIAL
214#define MADV_WILLNEED           POSIX_MADV_WILLNEED
215#define MADV_DONTNEED           POSIX_MADV_DONTNEED
216#define MADV_FREE               5       /* pages unneeded, discard contents */
217#define MADV_ZERO_WIRED_PAGES   6       /* zero the wired pages that have not been unwired before the entry is deleted */
218#define MADV_FREE_REUSABLE      7       /* pages can be reused (by anyone) */
219#define MADV_FREE_REUSE         8       /* caller wants to reuse those pages */
220#define MADV_CAN_REUSE          9
221#define MADV_PAGEOUT            10      /* page out now (internal only) */
222#define MADV_ZERO               11      /* zero pages without faulting in additional pages */
223
224/*
225 * Return bits from mincore
226 */
227#define MINCORE_INCORE           0x1     /* Page is incore */
228#define MINCORE_REFERENCED       0x2     /* Page has been referenced by us */
229#define MINCORE_MODIFIED         0x4     /* Page has been modified by us */
230#define MINCORE_REFERENCED_OTHER 0x8     /* Page has been referenced */
231#define MINCORE_MODIFIED_OTHER  0x10     /* Page has been modified */
232#define MINCORE_PAGED_OUT       0x20     /* Page has been paged out */
233#define MINCORE_COPIED          0x40     /* Page has been copied */
234#define MINCORE_ANONYMOUS       0x80     /* Page belongs to an anonymous object */
235#endif  /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
236
237
238
239
240__BEGIN_DECLS
241/* [ML] */
242int     mlockall(int);
243int     munlockall(void);
244/* [MR] */
245int     mlock(const void *, size_t);
246#ifndef _MMAP
247#define _MMAP
248/* [MC3]*/
249void *  mmap(void *, size_t, int, int, int, off_t) __DARWIN_ALIAS(mmap);
250#endif
251/* [MPR] */
252int     mprotect(void *, size_t, int) __DARWIN_ALIAS(mprotect);
253/* [MF|SIO] */
254int     msync(void *, size_t, int) __DARWIN_ALIAS_C(msync);
255/* [MR] */
256int     munlock(const void *, size_t);
257/* [MC3]*/
258int     munmap(void *, size_t) __DARWIN_ALIAS(munmap);
259/* [SHM] */
260int     shm_open(const char *, int, ...);
261int     shm_unlink(const char *);
262/* [ADV] */
263int     posix_madvise(void *, size_t, int);
264
265#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
266int     madvise(void *, size_t, int);
267int     mincore(const void *, size_t, char *);
268int     minherit(void *, size_t, int);
269#endif
270
271
272__END_DECLS
273
274#endif /* !_SYS_MMAN_H_ */