vmparam.h revision 330897
1/*-
2 * SPDX-License-Identifier: BSD-4-Clause
3 *
4 * Copyright (C) 1995, 1996 Wolfgang Solfrank.
5 * Copyright (C) 1995, 1996 TooLs GmbH.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 * 3. All advertising materials mentioning features or use of this software
17 *    must display the following acknowledgement:
18 *	This product includes software developed by TooLs GmbH.
19 * 4. The name of TooLs GmbH may not be used to endorse or promote products
20 *    derived from this software without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR
23 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25 * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
28 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
30 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
31 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 *
33 *	$NetBSD: vmparam.h,v 1.11 2000/02/11 19:25:16 thorpej Exp $
34 * $FreeBSD: stable/11/sys/powerpc/include/vmparam.h 330897 2018-03-14 03:19:51Z eadler $
35 */
36
37#ifndef _MACHINE_VMPARAM_H_
38#define	_MACHINE_VMPARAM_H_
39
40#define	USRSTACK	SHAREDPAGE
41
42#ifndef	MAXTSIZ
43#define	MAXTSIZ		(1*1024*1024*1024)		/* max text size */
44#endif
45
46#ifndef	DFLDSIZ
47#define	DFLDSIZ		(128*1024*1024)		/* default data size */
48#endif
49
50#ifndef	MAXDSIZ
51#define	MAXDSIZ		(1*1024*1024*1024)	/* max data size */
52#endif
53
54#ifndef	DFLSSIZ
55#define	DFLSSIZ		(8*1024*1024)		/* default stack size */
56#endif
57
58#ifndef	MAXSSIZ
59#define	MAXSSIZ		(64*1024*1024)		/* max stack size */
60#endif
61
62#ifdef AIM
63#define	VM_MAXUSER_ADDRESS32	((vm_offset_t)0xfffff000)
64#else
65#define	VM_MAXUSER_ADDRESS32	((vm_offset_t)0x7ffff000)
66#endif
67
68/*
69 * Would like to have MAX addresses = 0, but this doesn't (currently) work
70 */
71#if !defined(LOCORE)
72#ifdef __powerpc64__
73#define	VM_MIN_ADDRESS		(0x0000000000000000UL)
74#define	VM_MAXUSER_ADDRESS	(0xfffffffffffff000UL)
75#define	VM_MAX_ADDRESS		(0xffffffffffffffffUL)
76#else
77#define	VM_MIN_ADDRESS		((vm_offset_t)0)
78#define	VM_MAXUSER_ADDRESS	VM_MAXUSER_ADDRESS32
79#define	VM_MAX_ADDRESS		((vm_offset_t)0xffffffff)
80#endif
81#define	SHAREDPAGE		(VM_MAXUSER_ADDRESS - PAGE_SIZE)
82#else /* LOCORE */
83#if !defined(__powerpc64__) && defined(BOOKE)
84#define	VM_MIN_ADDRESS		0
85#define	VM_MAXUSER_ADDRESS	0x7ffff000
86#endif
87#endif /* LOCORE */
88
89#define	FREEBSD32_SHAREDPAGE	(VM_MAXUSER_ADDRESS32 - PAGE_SIZE)
90#define	FREEBSD32_USRSTACK	FREEBSD32_SHAREDPAGE
91
92#ifdef AIM
93#define	KERNBASE		0x00100000UL	/* start of kernel virtual */
94
95#ifdef __powerpc64__
96#define	VM_MIN_KERNEL_ADDRESS		0xc000000000000000UL
97#define	VM_MAX_KERNEL_ADDRESS		0xc0000001c7ffffffUL
98#define	VM_MAX_SAFE_KERNEL_ADDRESS	VM_MAX_KERNEL_ADDRESS
99#else
100#define	VM_MIN_KERNEL_ADDRESS	((vm_offset_t)KERNEL_SR << ADDR_SR_SHFT)
101#define	VM_MAX_SAFE_KERNEL_ADDRESS (VM_MIN_KERNEL_ADDRESS + 2*SEGMENT_LENGTH -1)
102#define	VM_MAX_KERNEL_ADDRESS	(VM_MIN_KERNEL_ADDRESS + 3*SEGMENT_LENGTH - 1)
103#endif
104
105/*
106 * Use the direct-mapped BAT registers for UMA small allocs. This
107 * takes pressure off the small amount of available KVA.
108 */
109#define UMA_MD_SMALL_ALLOC
110
111#else /* Book-E */
112
113#define	KERNBASE		0xc0000000	/* start of kernel virtual */
114
115#define	VM_MIN_KERNEL_ADDRESS	KERNBASE
116#define	VM_MAX_KERNEL_ADDRESS	0xffffffff
117#define	VM_MAX_SAFE_KERNEL_ADDRESS	VM_MAX_KERNEL_ADDRESS
118
119#endif /* AIM/E500 */
120
121#if !defined(LOCORE)
122struct pmap_physseg {
123	struct pv_entry *pvent;
124	char *attrs;
125};
126#endif
127
128#define	VM_PHYSSEG_MAX		16	/* 1? */
129
130/*
131 * The physical address space is densely populated on 32-bit systems,
132 * but may not be on 64-bit ones.
133 */
134#ifdef __powerpc64__
135#define	VM_PHYSSEG_SPARSE
136#else
137#define	VM_PHYSSEG_DENSE
138#endif
139
140/*
141 * Create two free page pools: VM_FREEPOOL_DEFAULT is the default pool
142 * from which physical pages are allocated and VM_FREEPOOL_DIRECT is
143 * the pool from which physical pages for small UMA objects are
144 * allocated.
145 */
146#define	VM_NFREEPOOL		2
147#define	VM_FREEPOOL_DEFAULT	0
148#define	VM_FREEPOOL_DIRECT	1
149
150/*
151 * Create one free page list.
152 */
153#define	VM_NFREELIST		1
154#define	VM_FREELIST_DEFAULT	0
155
156/*
157 * The largest allocation size is 4MB.
158 */
159#define	VM_NFREEORDER		11
160
161/*
162 * Disable superpage reservations.
163 */
164#ifndef	VM_NRESERVLEVEL
165#define	VM_NRESERVLEVEL		0
166#endif
167
168#ifndef VM_INITIAL_PAGEIN
169#define	VM_INITIAL_PAGEIN	16
170#endif
171
172#ifndef SGROWSIZ
173#define	SGROWSIZ	(128UL*1024)		/* amount to grow stack */
174#endif
175
176/*
177 * How many physical pages per kmem arena virtual page.
178 */
179#ifndef VM_KMEM_SIZE_SCALE
180#define	VM_KMEM_SIZE_SCALE	(3)
181#endif
182
183/*
184 * Optional floor (in bytes) on the size of the kmem arena.
185 */
186#ifndef VM_KMEM_SIZE_MIN
187#define	VM_KMEM_SIZE_MIN	(12 * 1024 * 1024)
188#endif
189
190/*
191 * Optional ceiling (in bytes) on the size of the kmem arena: 40% of the
192 * usable KVA space.
193 */
194#ifndef VM_KMEM_SIZE_MAX
195#define VM_KMEM_SIZE_MAX	((VM_MAX_SAFE_KERNEL_ADDRESS - \
196    VM_MIN_KERNEL_ADDRESS + 1) * 2 / 5)
197#endif
198
199#define	ZERO_REGION_SIZE	(64 * 1024)	/* 64KB */
200
201/*
202 * On 32-bit OEA, the only purpose for which sf_buf is used is to implement
203 * an opaque pointer required by the machine-independent parts of the kernel.
204 * That pointer references the vm_page that is "mapped" by the sf_buf.  The
205 * actual mapping is provided by the direct virtual-to-physical mapping.
206 *
207 * On OEA64 and Book-E, we need to do something a little more complicated. Use
208 * the runtime-detected hw_direct_map to pick between the two cases. Our
209 * friends in vm_machdep.c will do the same to ensure nothing gets confused.
210 */
211#define	SFBUF
212#define	SFBUF_NOMD
213#define	SFBUF_OPTIONAL_DIRECT_MAP	hw_direct_map
214#define	SFBUF_PHYS_DMAP(x)		(x)
215
216#endif /* _MACHINE_VMPARAM_H_ */
217