1a9643ea8Slogwang /* $OpenBSD: vmparam.h,v 1.2 1998/09/15 10:50:12 pefo Exp $ */ 2a9643ea8Slogwang /* $NetBSD: vmparam.h,v 1.5 1994/10/26 21:10:10 cgd Exp $ */ 3a9643ea8Slogwang 4a9643ea8Slogwang /* 5*22ce4affSfengbojiang * SPDX-License-Identifier: BSD-3-Clause 6*22ce4affSfengbojiang * 7a9643ea8Slogwang * Copyright (c) 1988 University of Utah. 8a9643ea8Slogwang * Copyright (c) 1992, 1993 9a9643ea8Slogwang * The Regents of the University of California. All rights reserved. 10a9643ea8Slogwang * 11a9643ea8Slogwang * This code is derived from software contributed to Berkeley by 12a9643ea8Slogwang * the Systems Programming Group of the University of Utah Computer 13a9643ea8Slogwang * Science Department and Ralph Campbell. 14a9643ea8Slogwang * 15a9643ea8Slogwang * Redistribution and use in source and binary forms, with or without 16a9643ea8Slogwang * modification, are permitted provided that the following conditions 17a9643ea8Slogwang * are met: 18a9643ea8Slogwang * 1. Redistributions of source code must retain the above copyright 19a9643ea8Slogwang * notice, this list of conditions and the following disclaimer. 20a9643ea8Slogwang * 2. Redistributions in binary form must reproduce the above copyright 21a9643ea8Slogwang * notice, this list of conditions and the following disclaimer in the 22a9643ea8Slogwang * documentation and/or other materials provided with the distribution. 23*22ce4affSfengbojiang * 3. Neither the name of the University nor the names of its contributors 24a9643ea8Slogwang * may be used to endorse or promote products derived from this software 25a9643ea8Slogwang * without specific prior written permission. 26a9643ea8Slogwang * 27a9643ea8Slogwang * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 28a9643ea8Slogwang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 29a9643ea8Slogwang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 30a9643ea8Slogwang * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 31a9643ea8Slogwang * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 32a9643ea8Slogwang * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 33a9643ea8Slogwang * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 34a9643ea8Slogwang * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 35a9643ea8Slogwang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 36a9643ea8Slogwang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 37a9643ea8Slogwang * SUCH DAMAGE. 38a9643ea8Slogwang * 39a9643ea8Slogwang * from: Utah Hdr: vmparam.h 1.16 91/01/18 40a9643ea8Slogwang * @(#)vmparam.h 8.2 (Berkeley) 4/22/94 41a9643ea8Slogwang * JNPR: vmparam.h,v 1.3.2.1 2007/09/10 06:01:28 girish 42a9643ea8Slogwang * $FreeBSD$ 43a9643ea8Slogwang */ 44a9643ea8Slogwang 45a9643ea8Slogwang #ifndef _MACHINE_VMPARAM_H_ 46a9643ea8Slogwang #define _MACHINE_VMPARAM_H_ 47a9643ea8Slogwang 48a9643ea8Slogwang /* 49a9643ea8Slogwang * Machine dependent constants mips processors. 50a9643ea8Slogwang */ 51a9643ea8Slogwang 52a9643ea8Slogwang /* 53a9643ea8Slogwang * Virtual memory related constants, all in bytes 54a9643ea8Slogwang */ 55a9643ea8Slogwang #ifndef MAXTSIZ 56a9643ea8Slogwang #define MAXTSIZ (128UL*1024*1024) /* max text size */ 57a9643ea8Slogwang #endif 58a9643ea8Slogwang #ifndef DFLDSIZ 59a9643ea8Slogwang #define DFLDSIZ (128UL*1024*1024) /* initial data size limit */ 60a9643ea8Slogwang #endif 61a9643ea8Slogwang #ifndef MAXDSIZ 62a9643ea8Slogwang #define MAXDSIZ (1*1024UL*1024*1024) /* max data size */ 63a9643ea8Slogwang #endif 64a9643ea8Slogwang #ifndef DFLSSIZ 65a9643ea8Slogwang #define DFLSSIZ (8UL*1024*1024) /* initial stack size limit */ 66a9643ea8Slogwang #endif 67a9643ea8Slogwang #ifndef MAXSSIZ 68a9643ea8Slogwang #define MAXSSIZ (64UL*1024*1024) /* max stack size */ 69a9643ea8Slogwang #endif 70a9643ea8Slogwang #ifndef SGROWSIZ 71a9643ea8Slogwang #define SGROWSIZ (128UL*1024) /* amount to grow stack */ 72a9643ea8Slogwang #endif 73a9643ea8Slogwang 74a9643ea8Slogwang /* 75a9643ea8Slogwang * Mach derived constants 76a9643ea8Slogwang */ 77a9643ea8Slogwang 78a9643ea8Slogwang /* user/kernel map constants */ 79a9643ea8Slogwang #define VM_MIN_ADDRESS ((vm_offset_t)0x00000000) 80a9643ea8Slogwang #define VM_MAX_ADDRESS ((vm_offset_t)(intptr_t)(int32_t)0xffffffff) 81a9643ea8Slogwang 82a9643ea8Slogwang #define VM_MINUSER_ADDRESS ((vm_offset_t)0x00000000) 83a9643ea8Slogwang 84a9643ea8Slogwang #ifdef __mips_n64 85a9643ea8Slogwang #define VM_MAXUSER_ADDRESS (VM_MINUSER_ADDRESS + (NPDEPG * NBSEG)) 86a9643ea8Slogwang #define VM_MIN_KERNEL_ADDRESS ((vm_offset_t)0xc000000000000000) 87a9643ea8Slogwang #define VM_MAX_KERNEL_ADDRESS (VM_MIN_KERNEL_ADDRESS + (NPDEPG * NBSEG)) 88a9643ea8Slogwang #else 89a9643ea8Slogwang #define VM_MAXUSER_ADDRESS ((vm_offset_t)0x80000000) 90a9643ea8Slogwang #define VM_MIN_KERNEL_ADDRESS ((vm_offset_t)0xC0000000) 91a9643ea8Slogwang #define VM_MAX_KERNEL_ADDRESS ((vm_offset_t)0xFFFFC000) 92a9643ea8Slogwang #endif 93a9643ea8Slogwang 94a9643ea8Slogwang #define KERNBASE ((vm_offset_t)(intptr_t)(int32_t)0x80000000) 95a9643ea8Slogwang /* 96a9643ea8Slogwang * USRSTACK needs to start a little below 0x8000000 because the R8000 97a9643ea8Slogwang * and some QED CPUs perform some virtual address checks before the 98a9643ea8Slogwang * offset is calculated. 99a9643ea8Slogwang */ 100a9643ea8Slogwang #define USRSTACK (VM_MAXUSER_ADDRESS - PAGE_SIZE) 101a9643ea8Slogwang #ifdef __mips_n64 102a9643ea8Slogwang #define FREEBSD32_USRSTACK (((vm_offset_t)0x80000000) - PAGE_SIZE) 103a9643ea8Slogwang #endif 104a9643ea8Slogwang 105a9643ea8Slogwang /* 106a9643ea8Slogwang * Disable superpage reservations. (not sure if this is right 107a9643ea8Slogwang * I copied it from ARM) 108a9643ea8Slogwang */ 109a9643ea8Slogwang #ifndef VM_NRESERVLEVEL 110a9643ea8Slogwang #define VM_NRESERVLEVEL 0 111a9643ea8Slogwang #endif 112a9643ea8Slogwang 113a9643ea8Slogwang /* 114a9643ea8Slogwang * How many physical pages per kmem arena virtual page. 115a9643ea8Slogwang */ 116a9643ea8Slogwang #ifndef VM_KMEM_SIZE_SCALE 117a9643ea8Slogwang #define VM_KMEM_SIZE_SCALE (3) 118a9643ea8Slogwang #endif 119a9643ea8Slogwang 120a9643ea8Slogwang /* 121a9643ea8Slogwang * Optional floor (in bytes) on the size of the kmem arena. 122a9643ea8Slogwang */ 123a9643ea8Slogwang #ifndef VM_KMEM_SIZE_MIN 124a9643ea8Slogwang #define VM_KMEM_SIZE_MIN (12 * 1024 * 1024) 125a9643ea8Slogwang #endif 126a9643ea8Slogwang 127a9643ea8Slogwang /* 128a9643ea8Slogwang * Optional ceiling (in bytes) on the size of the kmem arena: 40% of the 129a9643ea8Slogwang * kernel map. 130a9643ea8Slogwang */ 131a9643ea8Slogwang #ifndef VM_KMEM_SIZE_MAX 132a9643ea8Slogwang #define VM_KMEM_SIZE_MAX ((VM_MAX_KERNEL_ADDRESS - \ 133a9643ea8Slogwang VM_MIN_KERNEL_ADDRESS + 1) * 2 / 5) 134a9643ea8Slogwang #endif 135a9643ea8Slogwang 136a9643ea8Slogwang /* initial pagein size of beginning of executable file */ 137a9643ea8Slogwang #ifndef VM_INITIAL_PAGEIN 138a9643ea8Slogwang #define VM_INITIAL_PAGEIN 16 139a9643ea8Slogwang #endif 140a9643ea8Slogwang 141a9643ea8Slogwang #define UMA_MD_SMALL_ALLOC 142a9643ea8Slogwang 143a9643ea8Slogwang /* 144a9643ea8Slogwang * max number of non-contig chunks of physical RAM you can have 145a9643ea8Slogwang */ 146a9643ea8Slogwang #define VM_PHYSSEG_MAX 32 147a9643ea8Slogwang 148a9643ea8Slogwang /* 149a9643ea8Slogwang * The physical address space is sparsely populated. 150a9643ea8Slogwang */ 151a9643ea8Slogwang #define VM_PHYSSEG_SPARSE 152a9643ea8Slogwang 153a9643ea8Slogwang /* 154a9643ea8Slogwang * Create two free page pools: VM_FREEPOOL_DEFAULT is the default pool 155a9643ea8Slogwang * from which physical pages are allocated and VM_FREEPOOL_DIRECT is 156a9643ea8Slogwang * the pool from which physical pages for small UMA objects are 157a9643ea8Slogwang * allocated. 158a9643ea8Slogwang */ 159a9643ea8Slogwang #define VM_NFREEPOOL 2 160a9643ea8Slogwang #define VM_FREEPOOL_DEFAULT 0 161a9643ea8Slogwang #define VM_FREEPOOL_DIRECT 1 162a9643ea8Slogwang 163a9643ea8Slogwang /* 164a9643ea8Slogwang * Create up to two free lists on !__mips_n64: VM_FREELIST_DEFAULT is for 165a9643ea8Slogwang * physical pages that are above the largest physical address that is 166a9643ea8Slogwang * accessible through the direct map (KSEG0) and VM_FREELIST_LOWMEM is for 167a9643ea8Slogwang * physical pages that are below that address. VM_LOWMEM_BOUNDARY is the 168a9643ea8Slogwang * physical address for the end of the direct map (KSEG0). 169a9643ea8Slogwang */ 170a9643ea8Slogwang #ifdef __mips_n64 171a9643ea8Slogwang #define VM_NFREELIST 1 172a9643ea8Slogwang #define VM_FREELIST_DEFAULT 0 173a9643ea8Slogwang #define VM_FREELIST_DIRECT VM_FREELIST_DEFAULT 174a9643ea8Slogwang #else 175a9643ea8Slogwang #define VM_NFREELIST 2 176a9643ea8Slogwang #define VM_FREELIST_DEFAULT 0 177a9643ea8Slogwang #define VM_FREELIST_LOWMEM 1 178a9643ea8Slogwang #define VM_FREELIST_DIRECT VM_FREELIST_LOWMEM 179a9643ea8Slogwang #define VM_LOWMEM_BOUNDARY ((vm_paddr_t)0x20000000) 180a9643ea8Slogwang #endif 181a9643ea8Slogwang 182a9643ea8Slogwang /* 183a9643ea8Slogwang * The largest allocation size is 1MB. 184a9643ea8Slogwang */ 185a9643ea8Slogwang #define VM_NFREEORDER 9 186a9643ea8Slogwang 187a9643ea8Slogwang #define ZERO_REGION_SIZE (64 * 1024) /* 64KB */ 188a9643ea8Slogwang 189a9643ea8Slogwang #ifndef __mips_n64 190a9643ea8Slogwang #define SFBUF 191a9643ea8Slogwang #define SFBUF_MAP 192*22ce4affSfengbojiang #define PMAP_HAS_DMAP 0 193*22ce4affSfengbojiang #else 194*22ce4affSfengbojiang #define PMAP_HAS_DMAP 1 195a9643ea8Slogwang #endif 196a9643ea8Slogwang 197*22ce4affSfengbojiang #define PHYS_TO_DMAP(x) MIPS_PHYS_TO_DIRECT(x) 198*22ce4affSfengbojiang #define DMAP_TO_PHYS(x) MIPS_DIRECT_TO_PHYS(x) 199*22ce4affSfengbojiang 200*22ce4affSfengbojiang /* 201*22ce4affSfengbojiang * No non-transparent large page support in the pmap. 202*22ce4affSfengbojiang */ 203*22ce4affSfengbojiang #define PMAP_HAS_LARGEPAGES 0 204*22ce4affSfengbojiang 205*22ce4affSfengbojiang /* 206*22ce4affSfengbojiang * Need a page dump array for minidump. 207*22ce4affSfengbojiang */ 208*22ce4affSfengbojiang #define MINIDUMP_PAGE_TRACKING 1 209*22ce4affSfengbojiang 210a9643ea8Slogwang #endif /* !_MACHINE_VMPARAM_H_ */ 211