ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/Unix/vm_alloc.h
Revision: 1.3
Committed: 2002-03-16T10:49:00Z (22 years, 3 months ago) by gbeauche
Content type: text/plain
Branch: MAIN
CVS Tags: nigel-build-12, nigel-build-13
Changes since 1.2: +1 -0 lines
Log Message:
- Also include <sys/types.h> if system has <unistd.h>

File Contents

# Content
1 /*
2 * vm_alloc.h - Wrapper to various virtual memory allocation schemes
3 * (supports mmap, vm_allocate or fallbacks to malloc)
4 *
5 * Basilisk II (C) 1997-2002 Christian Bauer
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21
22 // TODO: Win32 VM ?
23 #ifndef VM_ALLOC_H
24 #define VM_ALLOC_H
25
26 #ifdef HAVE_UNISTD_H
27 #include <unistd.h>
28 #include <sys/types.h>
29 #endif
30 #ifdef HAVE_SYS_MMAN_H
31 #include <sys/mman.h>
32 #endif
33
34 /* Return value of `vm_acquire' in case of an error. */
35 #ifdef HAVE_MACH_VM
36 #define VM_MAP_FAILED ((void *)-1)
37 #else
38 #ifdef HAVE_MMAP_VM
39 #define VM_MAP_FAILED ((void *)-1)
40 #else
41 #define VM_MAP_FAILED 0
42 #endif
43 #endif
44
45 /* Protection bits. */
46 #ifdef HAVE_MACH_VM
47 #define VM_PAGE_NOACCESS VM_PROT_NONE
48 #define VM_PAGE_READ VM_PROT_READ
49 #define VM_PAGE_WRITE VM_PROT_WRITE
50 #define VM_PAGE_EXECUTE VM_PROT_EXECUTE
51 #else
52 #ifdef HAVE_MMAP_VM
53 #define VM_PAGE_NOACCESS PROT_NONE
54 #define VM_PAGE_READ PROT_READ
55 #define VM_PAGE_WRITE PROT_WRITE
56 #define VM_PAGE_EXECUTE PROT_EXEC
57 #else
58 #define VM_PAGE_NOACCESS 0x0
59 #define VM_PAGE_READ 0x1
60 #define VM_PAGE_WRITE 0x2
61 #define VM_PAGE_EXECUTE 0x4
62 #endif
63 #endif
64
65 /* Default protection bits. */
66 #define VM_PAGE_DEFAULT (VM_PAGE_READ | VM_PAGE_WRITE)
67
68 /* Initialize the VM system. Returns 0 if successful, -1 for errors. */
69
70 extern int vm_init(void);
71
72 /* Deallocate all internal data used to wrap virtual memory allocators. */
73
74 extern void vm_exit(void);
75
76 /* Allocate zero-filled memory of SIZE bytes. The mapping is private
77 and default protection bits are read / write. The return value
78 is the actual mapping address chosen or VM_MAP_FAILED for errors. */
79
80 extern void * vm_acquire(size_t size);
81
82 /* Allocate zero-filled memory at exactly ADDR (which must be page-aligned).
83 Returns 0 if successful, -1 on errors. */
84
85 extern int vm_acquire_fixed(void * addr, size_t size);
86
87 /* Deallocate any mapping for the region starting at ADDR and extending
88 LEN bytes. Returns 0 if successful, -1 on errors. */
89
90 extern int vm_release(void * addr, size_t size);
91
92 /* Change the memory protection of the region starting at ADDR and
93 extending LEN bytes to PROT. Returns 0 if successful, -1 for errors. */
94
95 extern int vm_protect(void * addr, size_t size, int prot);
96
97 #endif /* VM_ALLOC_H */