xref: /f-stack/freebsd/arm/include/vmparam.h (revision 22ce4aff)
1a9643ea8Slogwang /*	$NetBSD: vmparam.h,v 1.26 2003/08/07 16:27:47 agc Exp $	*/
2a9643ea8Slogwang 
3a9643ea8Slogwang /*-
4*22ce4affSfengbojiang  * SPDX-License-Identifier: BSD-3-Clause
5*22ce4affSfengbojiang  *
6a9643ea8Slogwang  * Copyright (c) 1988 The Regents of the University of California.
7a9643ea8Slogwang  * All rights reserved.
8a9643ea8Slogwang  *
9a9643ea8Slogwang  * Redistribution and use in source and binary forms, with or without
10a9643ea8Slogwang  * modification, are permitted provided that the following conditions
11a9643ea8Slogwang  * are met:
12a9643ea8Slogwang  * 1. Redistributions of source code must retain the above copyright
13a9643ea8Slogwang  *    notice, this list of conditions and the following disclaimer.
14a9643ea8Slogwang  * 2. Redistributions in binary form must reproduce the above copyright
15a9643ea8Slogwang  *    notice, this list of conditions and the following disclaimer in the
16a9643ea8Slogwang  *    documentation and/or other materials provided with the distribution.
17a9643ea8Slogwang  * 3. Neither the name of the University nor the names of its contributors
18a9643ea8Slogwang  *    may be used to endorse or promote products derived from this software
19a9643ea8Slogwang  *    without specific prior written permission.
20a9643ea8Slogwang  *
21a9643ea8Slogwang  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22a9643ea8Slogwang  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23a9643ea8Slogwang  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24a9643ea8Slogwang  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25a9643ea8Slogwang  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26a9643ea8Slogwang  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27a9643ea8Slogwang  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28a9643ea8Slogwang  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29a9643ea8Slogwang  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30a9643ea8Slogwang  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31a9643ea8Slogwang  * SUCH DAMAGE.
32a9643ea8Slogwang  *
33a9643ea8Slogwang  * $FreeBSD$
34a9643ea8Slogwang  */
35a9643ea8Slogwang 
36a9643ea8Slogwang #ifndef	_MACHINE_VMPARAM_H_
37a9643ea8Slogwang #define	_MACHINE_VMPARAM_H_
38a9643ea8Slogwang 
39a9643ea8Slogwang /*
40a9643ea8Slogwang  * Machine dependent constants for ARM.
41a9643ea8Slogwang  */
42a9643ea8Slogwang 
43a9643ea8Slogwang /*
44a9643ea8Slogwang  * Virtual memory related constants, all in bytes
45a9643ea8Slogwang  */
46a9643ea8Slogwang #ifndef	MAXTSIZ
47*22ce4affSfengbojiang #define	MAXTSIZ		(256UL*1024*1024)	/* max text size */
48a9643ea8Slogwang #endif
49a9643ea8Slogwang #ifndef	DFLDSIZ
50a9643ea8Slogwang #define	DFLDSIZ		(128UL*1024*1024)	/* initial data size limit */
51a9643ea8Slogwang #endif
52a9643ea8Slogwang #ifndef	MAXDSIZ
53a9643ea8Slogwang #define	MAXDSIZ		(512UL*1024*1024)	/* max data size */
54a9643ea8Slogwang #endif
55a9643ea8Slogwang #ifndef	DFLSSIZ
56*22ce4affSfengbojiang #define	DFLSSIZ		(4UL*1024*1024)		/* initial stack size limit */
57a9643ea8Slogwang #endif
58a9643ea8Slogwang #ifndef	MAXSSIZ
59*22ce4affSfengbojiang #define	MAXSSIZ		(64UL*1024*1024)	/* max stack size */
60a9643ea8Slogwang #endif
61a9643ea8Slogwang #ifndef	SGROWSIZ
62a9643ea8Slogwang #define	SGROWSIZ	(128UL*1024)		/* amount to grow stack */
63a9643ea8Slogwang #endif
64a9643ea8Slogwang 
65a9643ea8Slogwang /*
66a9643ea8Slogwang  * Address space constants
67a9643ea8Slogwang  */
68a9643ea8Slogwang 
69a9643ea8Slogwang /*
70a9643ea8Slogwang  * The line between user space and kernel space
71a9643ea8Slogwang  * Mappings >= KERNEL_BASE are constant across all processes
72a9643ea8Slogwang  */
73a9643ea8Slogwang #ifndef KERNBASE
74a9643ea8Slogwang #define	KERNBASE		0xc0000000
75a9643ea8Slogwang #endif
76a9643ea8Slogwang 
77a9643ea8Slogwang /*
78*22ce4affSfengbojiang  * The virtual address the kernel is linked to run at.  For armv4/5 platforms
79*22ce4affSfengbojiang  * the low-order 30 bits of this must match the low-order bits of the physical
80*22ce4affSfengbojiang  * address the kernel is loaded at, so the value is most often provided as a
81*22ce4affSfengbojiang  * kernel config option in the std.platform file. For armv6/7 the kernel can
82*22ce4affSfengbojiang  * be loaded at any 2MB boundary, and KERNVIRTADDR can also be set to any 2MB
83*22ce4affSfengbojiang  * boundary.  It is typically overridden in the std.platform file only when
84*22ce4affSfengbojiang  * KERNBASE is also set to a lower address to provide more KVA.
85*22ce4affSfengbojiang  */
86*22ce4affSfengbojiang #ifndef KERNVIRTADDR
87*22ce4affSfengbojiang #define	KERNVIRTADDR		0xc0000000
88*22ce4affSfengbojiang #endif
89*22ce4affSfengbojiang 
90*22ce4affSfengbojiang /*
91a9643ea8Slogwang  * max number of non-contig chunks of physical RAM you can have
92a9643ea8Slogwang  */
93a9643ea8Slogwang 
94a9643ea8Slogwang #define	VM_PHYSSEG_MAX		32
95a9643ea8Slogwang 
96a9643ea8Slogwang /*
97a9643ea8Slogwang  * The physical address space may be sparsely populated on some ARM systems.
98a9643ea8Slogwang  */
99a9643ea8Slogwang #define	VM_PHYSSEG_SPARSE
100a9643ea8Slogwang 
101a9643ea8Slogwang /*
102a9643ea8Slogwang  * Create one free page pool.  Since the ARM kernel virtual address
103a9643ea8Slogwang  * space does not include a mapping onto the machine's entire physical
104a9643ea8Slogwang  * memory, VM_FREEPOOL_DIRECT is defined as an alias for the default
105a9643ea8Slogwang  * pool, VM_FREEPOOL_DEFAULT.
106a9643ea8Slogwang  */
107a9643ea8Slogwang #define	VM_NFREEPOOL		1
108a9643ea8Slogwang #define	VM_FREEPOOL_DEFAULT	0
109a9643ea8Slogwang #define	VM_FREEPOOL_DIRECT	0
110a9643ea8Slogwang 
111a9643ea8Slogwang /*
112a9643ea8Slogwang  * We need just one free list:  DEFAULT.
113a9643ea8Slogwang  */
114a9643ea8Slogwang #define	VM_NFREELIST		1
115a9643ea8Slogwang #define	VM_FREELIST_DEFAULT	0
116a9643ea8Slogwang 
117a9643ea8Slogwang /*
118a9643ea8Slogwang  * The largest allocation size is 1MB.
119a9643ea8Slogwang  */
120a9643ea8Slogwang #define	VM_NFREEORDER		9
121a9643ea8Slogwang 
122a9643ea8Slogwang /*
123a9643ea8Slogwang  * Enable superpage reservations: 1 level.
124a9643ea8Slogwang  */
125a9643ea8Slogwang #ifndef	VM_NRESERVLEVEL
126a9643ea8Slogwang #define	VM_NRESERVLEVEL		1
127a9643ea8Slogwang #endif
128a9643ea8Slogwang 
129a9643ea8Slogwang /*
130a9643ea8Slogwang  * Level 0 reservations consist of 256 pages.
131a9643ea8Slogwang  */
132a9643ea8Slogwang #ifndef	VM_LEVEL_0_ORDER
133a9643ea8Slogwang #define	VM_LEVEL_0_ORDER	8
134a9643ea8Slogwang #endif
135a9643ea8Slogwang 
136a9643ea8Slogwang #define VM_MIN_ADDRESS          (0x00001000)
137a9643ea8Slogwang #ifndef VM_MAXUSER_ADDRESS
138a9643ea8Slogwang #define VM_MAXUSER_ADDRESS      (KERNBASE - 0x00400000) /* !!! PT2MAP_SIZE */
139a9643ea8Slogwang #endif
140a9643ea8Slogwang #define VM_MAX_ADDRESS          VM_MAXUSER_ADDRESS
141a9643ea8Slogwang 
142a9643ea8Slogwang #define	SHAREDPAGE		(VM_MAXUSER_ADDRESS - PAGE_SIZE)
143a9643ea8Slogwang #define	USRSTACK		SHAREDPAGE
144a9643ea8Slogwang 
145a9643ea8Slogwang /* initial pagein size of beginning of executable file */
146a9643ea8Slogwang #ifndef VM_INITIAL_PAGEIN
147a9643ea8Slogwang #define VM_INITIAL_PAGEIN       16
148a9643ea8Slogwang #endif
149a9643ea8Slogwang 
150a9643ea8Slogwang #ifndef VM_MIN_KERNEL_ADDRESS
151a9643ea8Slogwang #define VM_MIN_KERNEL_ADDRESS KERNBASE
152a9643ea8Slogwang #endif
153a9643ea8Slogwang 
154a9643ea8Slogwang #define	VM_MAX_KERNEL_ADDRESS	(vm_max_kernel_address)
155a9643ea8Slogwang 
156a9643ea8Slogwang /*
157a9643ea8Slogwang  * How many physical pages per kmem arena virtual page.
158a9643ea8Slogwang  */
159a9643ea8Slogwang #ifndef VM_KMEM_SIZE_SCALE
160a9643ea8Slogwang #define	VM_KMEM_SIZE_SCALE	(3)
161a9643ea8Slogwang #endif
162a9643ea8Slogwang 
163a9643ea8Slogwang /*
164a9643ea8Slogwang  * Optional floor (in bytes) on the size of the kmem arena.
165a9643ea8Slogwang  */
166a9643ea8Slogwang #ifndef VM_KMEM_SIZE_MIN
167a9643ea8Slogwang #define	VM_KMEM_SIZE_MIN	(12 * 1024 * 1024)
168a9643ea8Slogwang #endif
169a9643ea8Slogwang 
170a9643ea8Slogwang /*
171a9643ea8Slogwang  * Optional ceiling (in bytes) on the size of the kmem arena: 40% of the
172a9643ea8Slogwang  * kernel map.
173a9643ea8Slogwang  */
174a9643ea8Slogwang #ifndef VM_KMEM_SIZE_MAX
175a9643ea8Slogwang #define	VM_KMEM_SIZE_MAX	((vm_max_kernel_address - \
176a9643ea8Slogwang     VM_MIN_KERNEL_ADDRESS + 1) * 2 / 5)
177a9643ea8Slogwang #endif
178a9643ea8Slogwang 
179a9643ea8Slogwang extern vm_offset_t vm_max_kernel_address;
180a9643ea8Slogwang 
181a9643ea8Slogwang #define	ZERO_REGION_SIZE	(64 * 1024)	/* 64KB */
182a9643ea8Slogwang 
183a9643ea8Slogwang #ifndef VM_MAX_AUTOTUNE_MAXUSERS
184a9643ea8Slogwang #define	VM_MAX_AUTOTUNE_MAXUSERS	384
185a9643ea8Slogwang #endif
186a9643ea8Slogwang 
187a9643ea8Slogwang #define	SFBUF
188a9643ea8Slogwang #define	SFBUF_MAP
189a9643ea8Slogwang 
190*22ce4affSfengbojiang #define	PMAP_HAS_DMAP	0
191*22ce4affSfengbojiang #define	PHYS_TO_DMAP(x)	({ panic("No direct map exists"); 0; })
192*22ce4affSfengbojiang #define	DMAP_TO_PHYS(x)	({ panic("No direct map exists"); 0; })
193*22ce4affSfengbojiang 
194a9643ea8Slogwang #define	DEVMAP_MAX_VADDR	ARM_VECTORS_HIGH
195a9643ea8Slogwang 
196*22ce4affSfengbojiang /*
197*22ce4affSfengbojiang  * No non-transparent large page support in the pmap.
198*22ce4affSfengbojiang  */
199*22ce4affSfengbojiang #define	PMAP_HAS_LARGEPAGES	0
200*22ce4affSfengbojiang 
201*22ce4affSfengbojiang /*
202*22ce4affSfengbojiang  * Need a page dump array for minidump.
203*22ce4affSfengbojiang  */
204*22ce4affSfengbojiang #define MINIDUMP_PAGE_TRACKING	1
205*22ce4affSfengbojiang 
206a9643ea8Slogwang #endif	/* _MACHINE_VMPARAM_H_ */
207