| Commit | Line | Data |
|---|---|---|
| 984263bc MD |
1 | /* |
| 2 | * Copyright (c) 1991, 1993 | |
| 3 | * The Regents of the University of California. All rights reserved. | |
| 4 | * | |
| 5 | * This code is derived from software contributed to Berkeley by | |
| 6 | * The Mach Operating System project at Carnegie-Mellon University. | |
| 7 | * | |
| 8 | * Redistribution and use in source and binary forms, with or without | |
| 9 | * modification, are permitted provided that the following conditions | |
| 10 | * are met: | |
| 11 | * 1. Redistributions of source code must retain the above copyright | |
| 12 | * notice, this list of conditions and the following disclaimer. | |
| 13 | * 2. Redistributions in binary form must reproduce the above copyright | |
| 14 | * notice, this list of conditions and the following disclaimer in the | |
| 15 | * documentation and/or other materials provided with the distribution. | |
| 16 | * 3. All advertising materials mentioning features or use of this software | |
| 17 | * must display the following acknowledgement: | |
| 18 | * This product includes software developed by the University of | |
| 19 | * California, Berkeley and its contributors. | |
| 20 | * 4. Neither the name of the University nor the names of its contributors | |
| 21 | * may be used to endorse or promote products derived from this software | |
| 22 | * without specific prior written permission. | |
| 23 | * | |
| 24 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |
| 25 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| 26 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
| 27 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |
| 28 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
| 29 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
| 30 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
| 31 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
| 32 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
| 33 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
| 34 | * SUCH DAMAGE. | |
| 35 | * | |
| 36 | * from: @(#)pmap.h 8.1 (Berkeley) 6/11/93 | |
| 37 | * | |
| 38 | * | |
| 39 | * Copyright (c) 1987, 1990 Carnegie-Mellon University. | |
| 40 | * All rights reserved. | |
| 41 | * | |
| 42 | * Author: Avadis Tevanian, Jr. | |
| 43 | * | |
| 44 | * Permission to use, copy, modify and distribute this software and | |
| 45 | * its documentation is hereby granted, provided that both the copyright | |
| 46 | * notice and this permission notice appear in all copies of the | |
| 47 | * software, derivative works or modified versions, and any portions | |
| 48 | * thereof, and that both notices appear in supporting documentation. | |
| 49 | * | |
| 50 | * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" | |
| 51 | * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND | |
| 52 | * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. | |
| 53 | * | |
| 54 | * Carnegie Mellon requests users of this software to return to | |
| 55 | * | |
| 56 | * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU | |
| 57 | * School of Computer Science | |
| 58 | * Carnegie Mellon University | |
| 59 | * Pittsburgh PA 15213-3890 | |
| 60 | * | |
| 61 | * any improvements or extensions that they make and grant Carnegie the | |
| 62 | * rights to redistribute these changes. | |
| 63 | * | |
| 64 | * $FreeBSD: src/sys/vm/pmap.h,v 1.33.2.4 2002/03/06 22:44:24 silby Exp $ | |
| cfd17028 | 65 | * $DragonFly: src/sys/vm/pmap.h,v 1.29 2008/08/25 17:01:42 dillon Exp $ |
| 984263bc MD |
66 | */ |
| 67 | ||
| 68 | /* | |
| 69 | * Machine address mapping definitions -- machine-independent | |
| 70 | * section. [For machine-dependent section, see "machine/pmap.h".] | |
| 71 | */ | |
| 72 | ||
| 1bd40720 MD |
73 | #ifndef _VM_PMAP_H_ |
| 74 | #define _VM_PMAP_H_ | |
| 984263bc | 75 | |
| 1bd40720 MD |
76 | #ifndef _SYS_TYPES_H_ |
| 77 | #include <sys/types.h> | |
| 78 | #endif | |
| 984263bc | 79 | |
| 1bd40720 | 80 | #ifndef _MACHINE_PMAP_H_ |
| 984263bc | 81 | #include <machine/pmap.h> |
| 1bd40720 | 82 | #endif |
| 984263bc MD |
83 | |
| 84 | #ifdef _KERNEL | |
| 85 | ||
| 1bd40720 MD |
86 | #ifndef _VM_VM_H_ |
| 87 | #include <vm/vm.h> | |
| 88 | #endif | |
| 89 | ||
| 39005e16 | 90 | struct lwp; |
| 984263bc | 91 | struct proc; |
| 7e1d4bf4 | 92 | struct thread; |
| 03d6a592 | 93 | struct vm_page; |
| e3161323 | 94 | struct vmspace; |
| 287ebb09 | 95 | struct vmspace_entry; |
| 984263bc | 96 | |
| c439ad8f MD |
97 | /* |
| 98 | * Most of these variables represent parameters set up by low level MD kernel | |
| 99 | * boot code to be used by higher level MI initialization code to identify | |
| 100 | * the portions of kernel and physical memory which are free for allocation. | |
| 101 | * | |
| 102 | * KvaStart/KvaEnd/ - Reserved Kernel Virtual Memory address space. | |
| 103 | * KvaSize This range represents the entire KVA space but | |
| 104 | * might omit certain special mapping areas. It is | |
| 105 | * used to determine what kernel memory userland has | |
| 106 | * access to. | |
| 107 | * | |
| 108 | * virtual_{start,end} - KVA space available for allocation, not including | |
| 109 | * KVA space reserved during MD startup. Used by | |
| 110 | * the KMEM subsystem, used to initialize kernel_map. | |
| 111 | * | |
| 112 | * phys_avail[] - Array of {start,end} physical addresses, not | |
| 113 | * including physical memory allocated by MD startup | |
| 114 | * code. Used to initialize the VM subsystem. | |
| 115 | */ | |
| 116 | extern vm_offset_t KvaStart; | |
| 117 | extern vm_offset_t KvaEnd; | |
| 118 | extern vm_offset_t KvaSize; | |
| 119 | extern vm_offset_t virtual_start; | |
| 120 | extern vm_offset_t virtual_end; | |
| 121 | extern vm_paddr_t phys_avail[]; | |
| 122 | ||
| b9a7a2bd MD |
123 | /* |
| 124 | * Return true if the passed address is in the kernel address space. | |
| 125 | * This is mainly a check that the address is NOT in the user address space. | |
| 126 | * | |
| 127 | * For a vkernels all addresses are in the kernel address space. | |
| 128 | */ | |
| e71a125f AE |
129 | static inline int |
| 130 | kva_p(const void *addr) | |
| 131 | { | |
| b9a7a2bd MD |
132 | #ifdef _KERNEL_VIRTUAL |
| 133 | return (addr != NULL); | |
| 134 | #else | |
| e71a125f AE |
135 | return ((unsigned long)KvaStart <= (unsigned long)addr) && |
| 136 | ((unsigned long)addr < (unsigned long)KvaEnd); | |
| b9a7a2bd | 137 | #endif |
| e71a125f AE |
138 | } |
| 139 | ||
| 1388df65 | 140 | void pmap_change_wiring (pmap_t, vm_offset_t, boolean_t); |
| 03d6a592 MD |
141 | void pmap_clear_modify (struct vm_page *m); |
| 142 | void pmap_clear_reference (struct vm_page *m); | |
| 1388df65 RG |
143 | void pmap_collect (void); |
| 144 | void pmap_copy (pmap_t, pmap_t, vm_offset_t, vm_size_t, | |
| 03d6a592 | 145 | vm_offset_t); |
| 6ef943a3 | 146 | void pmap_copy_page (vm_paddr_t, vm_paddr_t); |
| f6bf3af1 | 147 | void pmap_copy_page_frag (vm_paddr_t, vm_paddr_t, size_t bytes); |
| 1388df65 | 148 | void pmap_destroy (pmap_t); |
| 03d6a592 MD |
149 | void pmap_enter (pmap_t, vm_offset_t, struct vm_page *, |
| 150 | vm_prot_t, boolean_t); | |
| 6ef943a3 | 151 | vm_paddr_t pmap_extract (pmap_t pmap, vm_offset_t va); |
| 1388df65 | 152 | void pmap_growkernel (vm_offset_t); |
| efaea464 | 153 | void pmap_init (void); |
| 03d6a592 MD |
154 | boolean_t pmap_is_modified (struct vm_page *m); |
| 155 | boolean_t pmap_ts_referenced (struct vm_page *m); | |
| 6ef943a3 | 156 | vm_offset_t pmap_map (vm_offset_t, vm_paddr_t, vm_paddr_t, int); |
| 1388df65 | 157 | void pmap_object_init_pt (pmap_t pmap, vm_offset_t addr, |
| 083a7402 MD |
158 | vm_prot_t prot, vm_object_t object, vm_pindex_t pindex, |
| 159 | vm_offset_t size, int pagelimit); | |
| 03d6a592 MD |
160 | boolean_t pmap_page_exists_quick (pmap_t pmap, struct vm_page *m); |
| 161 | void pmap_page_protect (struct vm_page *m, vm_prot_t prot); | |
| cfd17028 | 162 | vm_paddr_t pmap_phys_address (vm_pindex_t); |
| 1388df65 | 163 | void pmap_pinit (pmap_t); |
| e3161323 | 164 | void pmap_puninit (pmap_t); |
| 1388df65 RG |
165 | void pmap_pinit0 (pmap_t); |
| 166 | void pmap_pinit2 (pmap_t); | |
| 03d6a592 MD |
167 | void pmap_protect (pmap_t, vm_offset_t, vm_offset_t, vm_prot_t); |
| 168 | void pmap_qenter (vm_offset_t, struct vm_page **, int); | |
| 169 | void pmap_qenter2 (vm_offset_t, struct vm_page **, int, | |
| 170 | cpumask_t *); | |
| 1388df65 | 171 | void pmap_qremove (vm_offset_t, int); |
| 24712b90 MD |
172 | void pmap_kenter (vm_offset_t, vm_paddr_t); |
| 173 | void pmap_kenter_quick (vm_offset_t, vm_paddr_t); | |
| 174 | void pmap_kenter_sync (vm_offset_t); | |
| 175 | void pmap_kenter_sync_quick (vm_offset_t); | |
| 9ad680a3 MD |
176 | void pmap_kmodify_rw(vm_offset_t va); |
| 177 | void pmap_kmodify_nc(vm_offset_t va); | |
| 24712b90 MD |
178 | void pmap_kremove (vm_offset_t); |
| 179 | void pmap_kremove_quick (vm_offset_t); | |
| 1388df65 RG |
180 | void pmap_reference (pmap_t); |
| 181 | void pmap_release (pmap_t); | |
| 182 | void pmap_remove (pmap_t, vm_offset_t, vm_offset_t); | |
| 183 | void pmap_remove_pages (pmap_t, vm_offset_t, vm_offset_t); | |
| 6ef943a3 | 184 | void pmap_zero_page (vm_paddr_t); |
| 8100156a | 185 | void pmap_page_assertzero (vm_paddr_t); |
| 6ef943a3 | 186 | void pmap_zero_page_area (vm_paddr_t, int off, int size); |
| 1388df65 RG |
187 | void pmap_prefault (pmap_t, vm_offset_t, vm_map_entry_t); |
| 188 | int pmap_mincore (pmap_t pmap, vm_offset_t addr); | |
| 13d13d89 | 189 | void pmap_init_proc (struct proc *); |
| 1388df65 | 190 | void pmap_init_thread (struct thread *td); |
| c6880072 | 191 | void pmap_dispose_proc (struct proc *p); |
| e3161323 | 192 | void pmap_replacevm (struct proc *, struct vmspace *, int); |
| 287ebb09 MD |
193 | void pmap_setlwpvm (struct lwp *, struct vmspace *); |
| 194 | ||
| 1388df65 | 195 | vm_offset_t pmap_addr_hint (vm_object_t obj, vm_offset_t addr, vm_size_t size); |
| 6ef943a3 | 196 | void *pmap_kenter_temporary (vm_paddr_t pa, int i); |
| 1388df65 | 197 | void pmap_init2 (void); |
| 984263bc MD |
198 | |
| 199 | #endif /* _KERNEL */ | |
| 200 | ||
| 1bd40720 | 201 | #endif /* _VM_PMAP_H_ */ |