1 1.42 riastrad /* $NetBSD: uvm_param.h,v 1.42 2023/07/11 09:48:56 riastradh Exp $ */ 2 1.1 mrg 3 1.10 chs /* 4 1.1 mrg * Copyright (c) 1991, 1993 5 1.1 mrg * The Regents of the University of California. All rights reserved. 6 1.1 mrg * 7 1.1 mrg * This code is derived from software contributed to Berkeley by 8 1.1 mrg * The Mach Operating System project at Carnegie-Mellon University. 9 1.1 mrg * 10 1.1 mrg * Redistribution and use in source and binary forms, with or without 11 1.1 mrg * modification, are permitted provided that the following conditions 12 1.1 mrg * are met: 13 1.1 mrg * 1. Redistributions of source code must retain the above copyright 14 1.1 mrg * notice, this list of conditions and the following disclaimer. 15 1.1 mrg * 2. Redistributions in binary form must reproduce the above copyright 16 1.1 mrg * notice, this list of conditions and the following disclaimer in the 17 1.1 mrg * documentation and/or other materials provided with the distribution. 18 1.18 agc * 3. Neither the name of the University nor the names of its contributors 19 1.1 mrg * may be used to endorse or promote products derived from this software 20 1.1 mrg * without specific prior written permission. 21 1.1 mrg * 22 1.1 mrg * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 23 1.1 mrg * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24 1.1 mrg * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25 1.1 mrg * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 26 1.1 mrg * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27 1.1 mrg * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28 1.1 mrg * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29 1.1 mrg * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30 1.1 mrg * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31 1.1 mrg * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32 1.1 mrg * SUCH DAMAGE. 33 1.1 mrg * 34 1.1 mrg * @(#)vm_param.h 8.2 (Berkeley) 1/9/95 35 1.1 mrg * 36 1.1 mrg * 37 1.1 mrg * Copyright (c) 1987, 1990 Carnegie-Mellon University. 38 1.1 mrg * All rights reserved. 39 1.1 mrg * 40 1.1 mrg * Authors: Avadis Tevanian, Jr., Michael Wayne Young 41 1.10 chs * 42 1.1 mrg * Permission to use, copy, modify and distribute this software and 43 1.1 mrg * its documentation is hereby granted, provided that both the copyright 44 1.1 mrg * notice and this permission notice appear in all copies of the 45 1.1 mrg * software, derivative works or modified versions, and any portions 46 1.1 mrg * thereof, and that both notices appear in supporting documentation. 47 1.10 chs * 48 1.10 chs * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 49 1.10 chs * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 50 1.1 mrg * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 51 1.10 chs * 52 1.1 mrg * Carnegie Mellon requests users of this software to return to 53 1.1 mrg * 54 1.1 mrg * Software Distribution Coordinator or Software.Distribution (at) CS.CMU.EDU 55 1.1 mrg * School of Computer Science 56 1.1 mrg * Carnegie Mellon University 57 1.1 mrg * Pittsburgh PA 15213-3890 58 1.1 mrg * 59 1.1 mrg * any improvements or extensions that they make and grant Carnegie the 60 1.1 mrg * rights to redistribute these changes. 61 1.1 mrg */ 62 1.1 mrg 63 1.1 mrg /* 64 1.1 mrg * Machine independent virtual memory parameters. 65 1.1 mrg */ 66 1.1 mrg 67 1.1 mrg #ifndef _VM_PARAM_ 68 1.1 mrg #define _VM_PARAM_ 69 1.1 mrg 70 1.14 atatat #ifdef _KERNEL_OPT 71 1.28 matt #include "opt_modular.h" 72 1.14 atatat #include "opt_uvm.h" 73 1.14 atatat #endif 74 1.12 matt #ifdef _KERNEL 75 1.21 he #include <sys/types.h> 76 1.1 mrg #include <machine/vmparam.h> 77 1.1 mrg #endif 78 1.1 mrg 79 1.16 thorpej #if defined(_KERNEL) 80 1.16 thorpej 81 1.16 thorpej #if defined(PAGE_SIZE) 82 1.16 thorpej 83 1.1 mrg /* 84 1.16 thorpej * If PAGE_SIZE is defined at this stage, it must be a constant. 85 1.1 mrg */ 86 1.1 mrg 87 1.16 thorpej #if PAGE_SIZE == 0 88 1.16 thorpej #error Invalid PAGE_SIZE definition 89 1.16 thorpej #endif 90 1.16 thorpej 91 1.1 mrg /* 92 1.16 thorpej * If the platform does not need to support a variable PAGE_SIZE, 93 1.16 thorpej * then provide default values for MIN_PAGE_SIZE and MAX_PAGE_SIZE. 94 1.1 mrg */ 95 1.16 thorpej 96 1.16 thorpej #if !defined(MIN_PAGE_SIZE) 97 1.16 thorpej #define MIN_PAGE_SIZE PAGE_SIZE 98 1.16 thorpej #endif /* ! MIN_PAGE_SIZE */ 99 1.16 thorpej 100 1.16 thorpej #if !defined(MAX_PAGE_SIZE) 101 1.16 thorpej #define MAX_PAGE_SIZE PAGE_SIZE 102 1.16 thorpej #endif /* ! MAX_PAGE_SIZE */ 103 1.16 thorpej 104 1.16 thorpej #else /* ! PAGE_SIZE */ 105 1.16 thorpej 106 1.16 thorpej /* 107 1.16 thorpej * PAGE_SIZE is not a constant; MIN_PAGE_SIZE and MAX_PAGE_SIZE must 108 1.16 thorpej * be defined. 109 1.16 thorpej */ 110 1.16 thorpej 111 1.16 thorpej #if !defined(MIN_PAGE_SIZE) 112 1.16 thorpej #error MIN_PAGE_SIZE not defined 113 1.16 thorpej #endif 114 1.16 thorpej 115 1.16 thorpej #if !defined(MAX_PAGE_SIZE) 116 1.16 thorpej #error MAX_PAGE_SIZE not defined 117 1.16 thorpej #endif 118 1.16 thorpej 119 1.16 thorpej #endif /* PAGE_SIZE */ 120 1.16 thorpej 121 1.16 thorpej /* 122 1.16 thorpej * MIN_PAGE_SIZE and MAX_PAGE_SIZE must be constants. 123 1.16 thorpej */ 124 1.16 thorpej 125 1.16 thorpej #if MIN_PAGE_SIZE == 0 126 1.16 thorpej #error Invalid MIN_PAGE_SIZE definition 127 1.16 thorpej #endif 128 1.16 thorpej 129 1.16 thorpej #if MAX_PAGE_SIZE == 0 130 1.16 thorpej #error Invalid MAX_PAGE_SIZE definition 131 1.16 thorpej #endif 132 1.16 thorpej 133 1.16 thorpej /* 134 1.16 thorpej * If MIN_PAGE_SIZE and MAX_PAGE_SIZE are not equal, then we must use 135 1.41 skrll * non-constant PAGE_SIZE, et al for modules. 136 1.16 thorpej */ 137 1.28 matt #if (MIN_PAGE_SIZE != MAX_PAGE_SIZE) 138 1.28 matt #define __uvmexp_pagesize 139 1.41 skrll #if defined(_MODULE) 140 1.16 thorpej #undef PAGE_SIZE 141 1.16 thorpej #undef PAGE_MASK 142 1.16 thorpej #undef PAGE_SHIFT 143 1.16 thorpej #endif 144 1.28 matt #endif 145 1.16 thorpej 146 1.16 thorpej /* 147 1.16 thorpej * Now provide PAGE_SIZE, PAGE_MASK, and PAGE_SHIFT if we do not 148 1.16 thorpej * have ones that are compile-time constants. 149 1.16 thorpej */ 150 1.16 thorpej #if !defined(PAGE_SIZE) 151 1.27 matt extern const int *const uvmexp_pagesize; 152 1.27 matt extern const int *const uvmexp_pagemask; 153 1.27 matt extern const int *const uvmexp_pageshift; 154 1.24 uebayasi #define PAGE_SIZE (*uvmexp_pagesize) /* size of page */ 155 1.24 uebayasi #define PAGE_MASK (*uvmexp_pagemask) /* size of page - 1 */ 156 1.24 uebayasi #define PAGE_SHIFT (*uvmexp_pageshift) /* bits to shift for pages */ 157 1.16 thorpej #endif /* PAGE_SIZE */ 158 1.16 thorpej 159 1.1 mrg #endif /* _KERNEL */ 160 1.1 mrg 161 1.1 mrg /* 162 1.1 mrg * CTL_VM identifiers 163 1.1 mrg */ 164 1.1 mrg #define VM_METER 1 /* struct vmmeter */ 165 1.1 mrg #define VM_LOADAVG 2 /* struct loadavg */ 166 1.2 simonb #define VM_UVMEXP 3 /* struct uvmexp */ 167 1.1 mrg #define VM_NKMEMPAGES 4 /* kmem_map pages */ 168 1.2 simonb #define VM_UVMEXP2 5 /* struct uvmexp_sysctl */ 169 1.5 chs #define VM_ANONMIN 6 170 1.13 chs #define VM_EXECMIN 7 171 1.13 chs #define VM_FILEMIN 8 172 1.11 matt #define VM_MAXSLP 9 173 1.11 matt #define VM_USPACE 10 174 1.13 chs #define VM_ANONMAX 11 175 1.13 chs #define VM_EXECMAX 12 176 1.13 chs #define VM_FILEMAX 13 177 1.34 matt #define VM_MINADDRESS 14 178 1.34 matt #define VM_MAXADDRESS 15 179 1.35 christos #define VM_PROC 16 /* process information */ 180 1.37 joerg #define VM_GUARD_SIZE 17 /* guard size for main thread */ 181 1.37 joerg #define VM_THREAD_GUARD_SIZE 18 /* default guard size for new threads */ 182 1.5 chs 183 1.35 christos #define VM_PROC_MAP 1 /* struct kinfo_vmentry */ 184 1.1 mrg 185 1.1 mrg #ifndef ASSEMBLER 186 1.1 mrg /* 187 1.1 mrg * Convert addresses to pages and vice versa. 188 1.1 mrg * No rounding is used. 189 1.1 mrg */ 190 1.1 mrg #ifdef _KERNEL 191 1.4 pk #define atop(x) (((paddr_t)(x)) >> PAGE_SHIFT) 192 1.26 matt #define ptoa(x) (((paddr_t)(x)) << PAGE_SHIFT) 193 1.1 mrg 194 1.1 mrg /* 195 1.1 mrg * Round off or truncate to the nearest page. These will work 196 1.1 mrg * for either addresses or counts (i.e., 1 byte rounds to 1 page). 197 1.1 mrg */ 198 1.1 mrg #define round_page(x) (((x) + PAGE_MASK) & ~PAGE_MASK) 199 1.1 mrg #define trunc_page(x) ((x) & ~PAGE_MASK) 200 1.14 atatat 201 1.32 christos #ifndef VM_DEFAULT_ADDRESS_BOTTOMUP 202 1.32 christos #define VM_DEFAULT_ADDRESS_BOTTOMUP(da, sz) \ 203 1.32 christos round_page((vaddr_t)(da) + (vsize_t)maxdmap) 204 1.32 christos #endif 205 1.33 christos 206 1.37 joerg extern unsigned int user_stack_guard_size; 207 1.37 joerg extern unsigned int user_thread_stack_guard_size; 208 1.32 christos #ifndef VM_DEFAULT_ADDRESS_TOPDOWN 209 1.32 christos #define VM_DEFAULT_ADDRESS_TOPDOWN(da, sz) \ 210 1.36 joerg trunc_page(VM_MAXUSER_ADDRESS - MAXSSIZ - (sz) - user_stack_guard_size) 211 1.32 christos #endif 212 1.32 christos 213 1.3 chs extern int ubc_nwins; /* number of UBC mapping windows */ 214 1.39 mlelstv extern const int ubc_winshift; /* shift for a UBC mapping window */ 215 1.1 mrg 216 1.1 mrg #else 217 1.1 mrg /* out-of-kernel versions of round_page and trunc_page */ 218 1.1 mrg #define round_page(x) \ 219 1.1 mrg ((((vaddr_t)(x) + (vm_page_size - 1)) / vm_page_size) * \ 220 1.1 mrg vm_page_size) 221 1.1 mrg #define trunc_page(x) \ 222 1.1 mrg ((((vaddr_t)(x)) / vm_page_size) * vm_page_size) 223 1.1 mrg 224 1.1 mrg #endif /* _KERNEL */ 225 1.31 uebayasi 226 1.31 uebayasi /* 227 1.31 uebayasi * typedefs, necessary for standard UVM headers. 228 1.31 uebayasi */ 229 1.31 uebayasi 230 1.31 uebayasi typedef unsigned int uvm_flag_t; 231 1.31 uebayasi 232 1.31 uebayasi typedef int vm_inherit_t; /* XXX: inheritance codes */ 233 1.31 uebayasi typedef off_t voff_t; /* XXX: offset within a uvm_object */ 234 1.31 uebayasi typedef voff_t pgoff_t; /* XXX: number of pages within a uvm object */ 235 1.31 uebayasi 236 1.1 mrg #endif /* ASSEMBLER */ 237 1.1 mrg #endif /* _VM_PARAM_ */ 238