xref: /f-stack/freebsd/mips/include/vmparam.h (revision 22ce4aff)
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