1 1.55 riastrad /* $NetBSD: vmparam.h,v 1.55 2022/08/20 23:48:50 riastradh Exp $ */ 2 1.1 fvdl 3 1.1 fvdl /*- 4 1.1 fvdl * Copyright (c) 1990 The Regents of the University of California. 5 1.1 fvdl * All rights reserved. 6 1.1 fvdl * 7 1.1 fvdl * This code is derived from software contributed to Berkeley by 8 1.1 fvdl * William Jolitz. 9 1.1 fvdl * 10 1.1 fvdl * Redistribution and use in source and binary forms, with or without 11 1.1 fvdl * modification, are permitted provided that the following conditions 12 1.1 fvdl * are met: 13 1.1 fvdl * 1. Redistributions of source code must retain the above copyright 14 1.1 fvdl * notice, this list of conditions and the following disclaimer. 15 1.1 fvdl * 2. Redistributions in binary form must reproduce the above copyright 16 1.1 fvdl * notice, this list of conditions and the following disclaimer in the 17 1.1 fvdl * documentation and/or other materials provided with the distribution. 18 1.2 agc * 3. Neither the name of the University nor the names of its contributors 19 1.1 fvdl * may be used to endorse or promote products derived from this software 20 1.1 fvdl * without specific prior written permission. 21 1.1 fvdl * 22 1.1 fvdl * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 23 1.1 fvdl * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24 1.1 fvdl * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25 1.1 fvdl * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 26 1.1 fvdl * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27 1.1 fvdl * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28 1.1 fvdl * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29 1.1 fvdl * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30 1.1 fvdl * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31 1.1 fvdl * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32 1.1 fvdl * SUCH DAMAGE. 33 1.1 fvdl * 34 1.1 fvdl * @(#)vmparam.h 5.9 (Berkeley) 5/12/91 35 1.1 fvdl */ 36 1.1 fvdl 37 1.20 pooka #ifndef _X86_64_VMPARAM_H_ 38 1.20 pooka #define _X86_64_VMPARAM_H_ 39 1.1 fvdl 40 1.19 pooka #ifdef __x86_64__ 41 1.19 pooka 42 1.17 ad #include <sys/mutex.h> 43 1.16 bouyer #ifdef _KERNEL_OPT 44 1.16 bouyer #include "opt_xen.h" 45 1.16 bouyer #endif 46 1.5 sekiya 47 1.1 fvdl /* 48 1.1 fvdl * Machine dependent constants for 386. 49 1.1 fvdl */ 50 1.1 fvdl 51 1.1 fvdl /* 52 1.1 fvdl * Page size on the amd64 s not variable in the traditional sense. 53 1.1 fvdl * We override the PAGE_* definitions to compile-time constants. 54 1.1 fvdl */ 55 1.1 fvdl #define PAGE_SHIFT 12 56 1.1 fvdl #define PAGE_SIZE (1 << PAGE_SHIFT) 57 1.1 fvdl #define PAGE_MASK (PAGE_SIZE - 1) 58 1.1 fvdl 59 1.1 fvdl /* 60 1.45 wiz * Default pager_map of 16MB is awfully small. There is plenty 61 1.44 mrg * of VA so use it. 62 1.44 mrg */ 63 1.44 mrg #define PAGER_MAP_DEFAULT_SIZE (512 * 1024 * 1024) 64 1.44 mrg 65 1.44 mrg /* 66 1.52 ad * Defaults for Unified Buffer Cache parameters. 67 1.52 ad */ 68 1.52 ad 69 1.52 ad #ifndef UBC_WINSHIFT 70 1.52 ad #define UBC_WINSHIFT 16 /* 64kB */ 71 1.52 ad #endif 72 1.52 ad #ifndef UBC_NWINS 73 1.52 ad #define UBC_NWINS 4096 /* 256MB */ 74 1.52 ad #endif 75 1.52 ad 76 1.52 ad /* 77 1.1 fvdl * USRSTACK is the top (end) of the user stack. Immediately above the 78 1.1 fvdl * user stack resides the user structure, which is UPAGES long and contains 79 1.1 fvdl * the kernel stack. 80 1.1 fvdl * 81 1.1 fvdl * Immediately after the user structure is the page table map, and then 82 1.9 wiz * kernel address space. 83 1.1 fvdl */ 84 1.1 fvdl #define USRSTACK VM_MAXUSER_ADDRESS 85 1.1 fvdl 86 1.1 fvdl #define USRSTACK32 VM_MAXUSER_ADDRESS32 87 1.1 fvdl 88 1.1 fvdl /* 89 1.1 fvdl * Virtual memory related constants, all in bytes 90 1.1 fvdl */ 91 1.54 christos #define MAXTSIZ (8L*1024*1024*1024) /* max text size */ 92 1.1 fvdl #ifndef DFLDSIZ 93 1.4 drochner #define DFLDSIZ (256*1024*1024) /* initial data size limit */ 94 1.1 fvdl #endif 95 1.1 fvdl #ifndef MAXDSIZ 96 1.7 ws #define MAXDSIZ (8L*1024*1024*1024) /* max data size */ 97 1.1 fvdl #endif 98 1.1 fvdl #ifndef DFLSSIZ 99 1.25 drochner #define DFLSSIZ (4*1024*1024) /* initial stack size limit */ 100 1.1 fvdl #endif 101 1.1 fvdl #ifndef MAXSSIZ 102 1.27 christos #define MAXSSIZ (128*1024*1024) /* max stack size */ 103 1.1 fvdl #endif 104 1.1 fvdl 105 1.1 fvdl /* 106 1.8 fvdl * 32bit memory related constants. 107 1.8 fvdl */ 108 1.8 fvdl 109 1.8 fvdl #ifndef DFLDSIZ32 110 1.8 fvdl #define DFLDSIZ32 (256*1024*1024) /* initial data size limit */ 111 1.8 fvdl #endif 112 1.8 fvdl #ifndef MAXDSIZ32 113 1.11 cube #define MAXDSIZ32 (3U*1024*1024*1024) /* max data size */ 114 1.8 fvdl #endif 115 1.8 fvdl #ifndef DFLSSIZ32 116 1.8 fvdl #define DFLSSIZ32 (2*1024*1024) /* initial stack size limit */ 117 1.8 fvdl #endif 118 1.8 fvdl #ifndef MAXSSIZ32 119 1.11 cube #define MAXSSIZ32 (64*1024*1024) /* max stack size */ 120 1.8 fvdl #endif 121 1.8 fvdl 122 1.8 fvdl /* 123 1.1 fvdl * Size of User Raw I/O map 124 1.1 fvdl */ 125 1.1 fvdl #define USRIOSIZE 300 126 1.1 fvdl 127 1.40 maxv /* User map constants */ 128 1.1 fvdl #define VM_MIN_ADDRESS 0 129 1.38 maxv #define VM_MAXUSER_ADDRESS (0x00007f8000000000 - PAGE_SIZE) 130 1.40 maxv #define VM_MAXUSER_ADDRESS32 0xfffff000 131 1.1 fvdl #define VM_MAX_ADDRESS 0x00007fbfdfeff000 132 1.40 maxv 133 1.40 maxv /* 134 1.40 maxv * Kernel map constants. 135 1.40 maxv * MIN = VA_SIGN_NEG(L4_SLOT_KERN * NBPD_L4) 136 1.40 maxv * MAX = MIN + NKL4_MAX_ENTRIES * NBPD_L4 137 1.40 maxv */ 138 1.51 cherry #ifndef XENPV 139 1.46 maxv #define VM_MIN_KERNEL_ADDRESS_DEFAULT 0xffff800000000000 140 1.46 maxv #define VM_MAX_KERNEL_ADDRESS_DEFAULT 0xffffa00000000000 141 1.47 maxv #else 142 1.47 maxv #define VM_MIN_KERNEL_ADDRESS_DEFAULT 0xffffa00000000000 143 1.47 maxv #define VM_MAX_KERNEL_ADDRESS_DEFAULT 0xffffc00000000000 144 1.47 maxv #endif 145 1.47 maxv 146 1.49 maya #if defined(_KMEMUSER) || defined(_KERNEL) 147 1.46 maxv extern vaddr_t vm_min_kernel_address; 148 1.46 maxv extern vaddr_t vm_max_kernel_address; 149 1.46 maxv #define VM_MIN_KERNEL_ADDRESS vm_min_kernel_address 150 1.46 maxv #define VM_MAX_KERNEL_ADDRESS vm_max_kernel_address 151 1.48 maxv #endif 152 1.1 fvdl 153 1.55 riastrad #define PDP_SIZE 1 154 1.55 riastrad 155 1.1 fvdl /* 156 1.11 cube * The address to which unspecified mapping requests default 157 1.11 cube */ 158 1.11 cube #ifdef _KERNEL_OPT 159 1.11 cube #include "opt_uvm.h" 160 1.11 cube #endif 161 1.11 cube #define __USE_TOPDOWN_VM 162 1.34 christos 163 1.33 christos #define VM_DEFAULT_ADDRESS_BOTTOMUP(da, sz) \ 164 1.33 christos round_page((vaddr_t)(da) + (vsize_t)maxdmap) 165 1.34 christos 166 1.33 christos #define VM_DEFAULT_ADDRESS32_TOPDOWN(da, sz) \ 167 1.43 joerg trunc_page(USRSTACK32 - MAXSSIZ32 - (sz) - user_stack_guard_size) 168 1.33 christos #define VM_DEFAULT_ADDRESS32_BOTTOMUP(da, sz) \ 169 1.33 christos round_page((vaddr_t)(da) + (vsize_t)MAXDSIZ32) 170 1.11 cube 171 1.1 fvdl /* virtual sizes (bytes) for various kernel submaps */ 172 1.1 fvdl #define VM_PHYS_SIZE (USRIOSIZE*PAGE_SIZE) 173 1.1 fvdl 174 1.50 maxv #define VM_PHYSSEG_MAX 64 /* 1 "hole" + 63 free lists */ 175 1.1 fvdl #define VM_PHYSSEG_STRAT VM_PSTRAT_BIGFIRST 176 1.1 fvdl 177 1.36 riastrad #define VM_NFREELIST 6 178 1.1 fvdl #define VM_FREELIST_DEFAULT 0 179 1.35 riastrad #define VM_FREELIST_FIRST1T 1 180 1.35 riastrad #define VM_FREELIST_FIRST64G 2 181 1.35 riastrad #define VM_FREELIST_FIRST4G 3 182 1.36 riastrad #define VM_FREELIST_FIRST1G 4 183 1.36 riastrad #define VM_FREELIST_FIRST16 5 184 1.1 fvdl 185 1.19 pooka #else /* !__x86_64__ */ 186 1.19 pooka 187 1.19 pooka #include <i386/vmparam.h> 188 1.19 pooka 189 1.19 pooka #endif /* __x86_64__ */ 190 1.19 pooka 191 1.20 pooka #endif /* _X86_64_VMPARAM_H_ */ 192