| 1 | /*- |
| 2 | * Copyright (c) 2001 The NetBSD Foundation, Inc. |
| 3 | * All rights reserved. |
| 4 | * |
| 5 | * This code is derived from software contributed to The NetBSD Foundation |
| 6 | * by Matt Thomas <matt@3am-softwre.com> of Allegro Networks, Inc. |
| 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 | * |
| 17 | * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS |
| 18 | * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
| 19 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| 20 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS |
| 21 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| 22 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| 23 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| 24 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| 25 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| 26 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| 27 | * POSSIBILITY OF SUCH DAMAGE. |
| 28 | */ |
| 29 | |
| 30 | #ifndef _POWERPC_OEA_VMPARAM_H_ |
| 31 | #define _POWERPC_OEA_VMPARAM_H_ |
| 32 | |
| 33 | #include <sys/queue.h> |
| 34 | |
| 35 | /* |
| 36 | * Most of the definitions in this can be overridden by a machine-specific |
| 37 | * vmparam.h if required. Otherwise a port can just include this file |
| 38 | * get the right thing to happen. |
| 39 | */ |
| 40 | |
| 41 | /* |
| 42 | * OEA processors have 4K pages. Override the PAGE_* definitions |
| 43 | * to be compile-time constants. |
| 44 | */ |
| 45 | #define	PAGE_SHIFT	12 |
| 46 | #define	PAGE_SIZE	(1 << PAGE_SHIFT) |
| 47 | #define	PAGE_MASK	(PAGE_SIZE - 1) |
| 48 | |
| 49 | #ifndef	USRSTACK |
| 50 | #define	USRSTACK	VM_MAXUSER_ADDRESS |
| 51 | #endif |
| 52 | |
| 53 | #ifndef	USRSTACK32 |
| 54 | #define	USRSTACK32	VM_MAXUSER_ADDRESS32 |
| 55 | #endif |
| 56 | |
| 57 | #ifndef	MAXTSIZ |
| 58 | #define	MAXTSIZ		(256*1024*1024)		/* maximum text size */ |
| 59 | #endif |
| 60 | |
| 61 | #ifndef	MAXDSIZ |
| 62 | #define	MAXDSIZ		(1024*1024*1024)	/* maximum data size */ |
| 63 | #endif |
| 64 | |
| 65 | #ifndef	MAXDSIZ32 |
| 66 | #define	MAXDSIZ32	(1024*1024*1024)	/* maximum data size */ |
| 67 | #endif |
| 68 | |
| 69 | #ifndef	MAXSSIZ |
| 70 | #define	MAXSSIZ		(32*1024*1024)		/* maximum stack size */ |
| 71 | #endif |
| 72 | |
| 73 | #ifndef	MAXSSIZ32 |
| 74 | #define	MAXSSIZ32	(32*1024*1024)		/* maximum stack size */ |
| 75 | #endif |
| 76 | |
| 77 | #ifndef	DFLDSIZ |
| 78 | #define	DFLDSIZ		(256*1024*1024)		/* default data size */ |
| 79 | #endif |
| 80 | |
| 81 | #ifndef	DFLDSIZ32 |
| 82 | #define	DFLSSIZ32	(256*1024*1024) |
| 83 | #endif |
| 84 | |
| 85 | #ifndef	DFLSSIZ |
| 86 | #define	DFLSSIZ		(2*1024*1024)		/* default stack size */ |
| 87 | #endif |
| 88 | |
| 89 | #ifndef	DFLSSIZ32 |
| 90 | #define	DFLSSIZ32	(2*1024*1024)		/* default stack size */ |
| 91 | #endif |
| 92 | |
| 93 | /* |
| 94 | * Default number of pages in the user raw I/O map. |
| 95 | */ |
| 96 | #ifndef USRIOSIZE |
| 97 | #define	USRIOSIZE	1024 |
| 98 | #endif |
| 99 | |
| 100 | /* |
| 101 | * The number of seconds for a process to be blocked before being |
| 102 | * considered very swappable. |
| 103 | */ |
| 104 | #ifndef MAXSLP |
| 105 | #define	MAXSLP		20 |
| 106 | #endif |
| 107 | |
| 108 | /* |
| 109 | * Segment handling stuff |
| 110 | */ |
| 111 | #define	SEGMENT_LENGTH	( 0x10000000L) |
| 112 | #define	SEGMENT_MASK	(~0x0fffffffL) |
| 113 | |
| 114 | /* |
| 115 | * Macros to manipulate VSIDs |
| 116 | */ |
| 117 | #if 0 |
| 118 | /* |
| 119 | * Move the SR# to the top bits to make the lower bits entirely random |
| 120 | * so to give better PTE distribution. |
| 121 | */ |
| 122 | #define	VSID__KEYSHFT		(SR_VSID_WIDTH - SR_KEY_LEN) |
| 123 | #define	VSID_SR_INCREMENT	((1L << VSID__KEYSHFT) - 1) |
| 124 | #define VSID__HASHMASK		(VSID_SR_INCREMENT - 1) |
| 125 | #define	VSID_MAKE(sr, hash) \ |
| 126 | 	(( \ |
| 127 | 	 (((sr) << VSID__KEYSHFT) | ((hash) & VSID__HASMASK)) |
| 128 | 	 << SR_VSID_SHFT) & SR_VSID) |
| 129 | #define	VSID_TO_SR(vsid) \ |
| 130 | 	(((vsid) & SR_VSID) >> (SR_VSID_SHFT + VSID__KEYSHFT)) |
| 131 | #define	VSID_TO_HASH(vsid) \ |
| 132 | 	(((vsid) & SR_VSID) >> SR_VSID_SHFT) & VSID__HASHMASK) |
| 133 | #else |
| 134 | #define	VSID__HASHSHFT		(SR_KEY_LEN) |
| 135 | #define	VSID_SR_INCREMENT	(1L << 0) |
| 136 | #define	VSID__KEYMASK		((1L << VSID__HASHSHFT) - 1) |
| 137 | #define	VSID_MAKE(sr, hash) \ |
| 138 | 	(( \ |
| 139 | 	 (((hash) << VSID__HASHSHFT) | ((sr) & VSID__KEYMASK)) \ |
| 140 | 	 << SR_VSID_SHFT) & SR_VSID) |
| 141 | #define	VSID_TO_SR(vsid) \ |
| 142 | 	(((vsid) >> SR_VSID_SHFT) & VSID__KEYMASK) |
| 143 | #define	VSID_TO_HASH(vsid) \ |
| 144 | 	(((vsid) & SR_VSID) >> (SR_VSID_SHFT + VSID__HASHSHFT)) |
| 145 | #endif /*0*/ |
| 146 | |
| 147 | #ifndef _LP64 |
| 148 | /* |
| 149 | * Fixed segments |
| 150 | */ |
| 151 | #ifndef USER_SR |
| 152 | #define	USER_SR			12 |
| 153 | #endif |
| 154 | #ifndef KERNEL_SR |
| 155 | #define	KERNEL_SR		13 |
| 156 | #endif |
| 157 | #ifndef KERNEL2_SR |
| 158 | #define	KERNEL2_SR		14 |
| 159 | #endif |
| 160 | #define	KERNEL2_SEGMENT		VSID_MAKE(KERNEL2_SR, KERNEL_VSIDBITS) |
| 161 | #endif |
| 162 | #define	KERNEL_VSIDBITS		0xfffff |
| 163 | #define	PHYSMAP_VSIDBITS	0xffffe |
| 164 | #define	PHYSMAPN_SEGMENT(s)	VSID_MAKE(s, PHYSMAP_VSIDBITS) |
| 165 | #define	KERNEL_SEGMENT		VSID_MAKE(KERNEL_SR, KERNEL_VSIDBITS) |
| 166 | #define	KERNELN_SEGMENT(s)	VSID_MAKE(s, KERNEL_VSIDBITS) |
| 167 | /* XXXSL: need something here that will never be mapped */ |
| 168 | #define	EMPTY_SEGMENT		VSID_MAKE(0, 0xffffe) |
| 169 | #define	USER_ADDR		((void *)(USER_SR << ADDR_SR_SHFT)) |
| 170 | |
| 171 | /* |
| 172 | * Some system constants |
| 173 | */ |
| 174 | #ifndef	NPMAPS |
| 175 | #define	NPMAPS		32768	/* Number of pmaps in system */ |
| 176 | #endif |
| 177 | |
| 178 | #define	VM_MIN_ADDRESS		((vaddr_t) 0) |
| 179 | #define	VM_MAXUSER_ADDRESS32	((vaddr_t) (uint32_t) ~0xfffL) |
| 180 | #ifdef _LP64 |
| 181 | #define	VM_MAXUSER_ADDRESS	((vaddr_t) 1UL << 48) /* 256TB */ |
| 182 | #else |
| 183 | #define	VM_MAXUSER_ADDRESS	VM_MAXUSER_ADDRESS32 |
| 184 | #endif |
| 185 | #define	VM_MAX_ADDRESS		VM_MAXUSER_ADDRESS |
| 186 | #ifdef _LP64 |
| 187 | #define	VM_MIN_KERNEL_ADDRESS	((vaddr_t) 0xffffffUL << 40) /* top 1TB */ |
| 188 | #define	VM_MAX_KERNEL_ADDRESS	((vaddr_t) -32768) |
| 189 | #else |
| 190 | #define	VM_MIN_KERNEL_ADDRESS	((vaddr_t) (KERNEL_SR << ADDR_SR_SHFT)) |
| 191 | #define	VM_MAX_KERNEL_ADDRESS	(VM_MIN_KERNEL_ADDRESS + 2*SEGMENT_LENGTH) |
| 192 | #endif |
| 193 | |
| 194 | #define	VM_PHYSSEG_STRAT	VM_PSTRAT_BIGFIRST |
| 195 | |
| 196 | #ifndef VM_PHYS_SIZE |
| 197 | #define	VM_PHYS_SIZE		(USRIOSIZE * PAGE_SIZE) |
| 198 | #endif |
| 199 | |
| 200 | #endif /* _POWERPC_OEA_VMPARAM_H_ */ |