kernel: remove unused utsname_set_machine()
[unleashed.git] / usr / src / uts / sun4u / sys / machparam.h
blobb0130af21f1971d71593c12f51798788dcd76b31
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
22 * Copyright (c) 1993, 2010, Oracle and/or its affiliates. All rights reserved.
25 /* Copyright (c) 1988 AT&T */
26 /* All Rights Reserved */
28 #ifndef _SYS_MACHPARAM_H
29 #define _SYS_MACHPARAM_H
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
35 #ifndef _ASM
36 #define ADDRESS_C(c) c ## ul
37 #else /* _ASM */
38 #define ADDRESS_C(c) (c)
39 #endif /* _ASM */
42 * Machine dependent parameters and limits - sun4u version.
46 * Define the VAC symbol (etc.) if we could run on a machine
47 * which has a Virtual Address Cache
49 * This stuff gotta go.
51 #define VAC /* support virtual addressed caches */
54 * The maximum possible number of UPA devices in a system.
55 * MAX_UPA maybe defined in a platform's makefile.
57 #ifdef _STARFIRE
59 * We have a 7 bit id space for UPA devices in Xfire
61 #define MAX_UPA 128
62 #else
63 #ifndef MAX_UPA
64 #define MAX_UPA 32
65 #endif
66 #endif /* _STARFIRE */
69 * Maximum cpuid value that we support. NCPU can be defined in a platform's
70 * makefile.
72 #if (defined(_STARFIRE) && !defined(lint))
73 #define NCPU 64
74 #else
75 #ifndef NCPU
76 #define NCPU 32
77 #endif
78 #endif /* _STARFIRE && !lint */
80 #if (NCPU <= 1)
81 #define NCPU_LOG2 0
82 #elif (NCPU <= 2)
83 #define NCPU_LOG2 1
84 #elif (NCPU <= 4)
85 #define NCPU_LOG2 2
86 #elif (NCPU <= 8)
87 #define NCPU_LOG2 3
88 #elif (NCPU <= 16)
89 #define NCPU_LOG2 4
90 #elif (NCPU <= 32)
91 #define NCPU_LOG2 5
92 #elif (NCPU <= 64)
93 #define NCPU_LOG2 6
94 #elif (NCPU <= 128)
95 #define NCPU_LOG2 7
96 #elif (NCPU <= 256)
97 #define NCPU_LOG2 8
98 #elif (NCPU <= 512)
99 #define NCPU_LOG2 9
100 #elif (NCPU <= 1024)
101 #define NCPU_LOG2 10
102 #else
103 #error "add test for larger NCPU"
104 #endif
106 /* NCPU_P2 is NCPU rounded to a power of 2 */
107 #define NCPU_P2 (1 << NCPU_LOG2)
110 * Maximum number of processors that we support. With CMP processors, the
111 * portid may not be equal to cpuid. MAX_CPU_CHIPID can be defined in a
112 * platform's makefile.
114 #ifndef MAX_CPU_CHIPID
115 #define MAX_CPU_CHIPID NCPU
116 #endif
119 * Define the FPU symbol if we could run on a machine with an external
120 * FPU (i.e. not integrated with the normal machine state like the vax).
122 * The fpu is defined in the architecture manual, and the kernel hides
123 * its absence if it is not present, that's pretty integrated, no?
127 * MMU_PAGES* describes the physical page size used by the mapping hardware.
128 * PAGES* describes the logical page size used by the system.
130 #define MMU_PAGE_SIZES 6 /* max sun4u mmu-supported page sizes */
131 #define DEFAULT_MMU_PAGE_SIZES 4 /* default sun4u supported page sizes */
134 * XXX make sure the MMU_PAGESHIFT definition here is
135 * consistent with the one in param.h
137 #define MMU_PAGESHIFT 13
138 #define MMU_PAGESIZE (1<<MMU_PAGESHIFT)
139 #define MMU_PAGEOFFSET (MMU_PAGESIZE - 1)
140 #define MMU_PAGEMASK (~MMU_PAGEOFFSET)
142 #define MMU_PAGESHIFT64K 16
143 #define MMU_PAGESIZE64K (1 << MMU_PAGESHIFT64K)
144 #define MMU_PAGEOFFSET64K (MMU_PAGESIZE64K - 1)
145 #define MMU_PAGEMASK64K (~MMU_PAGEOFFSET64K)
147 #define MMU_PAGESHIFT512K 19
148 #define MMU_PAGESIZE512K (1 << MMU_PAGESHIFT512K)
149 #define MMU_PAGEOFFSET512K (MMU_PAGESIZE512K - 1)
150 #define MMU_PAGEMASK512K (~MMU_PAGEOFFSET512K)
152 #define MMU_PAGESHIFT4M 22
153 #define MMU_PAGESIZE4M (1 << MMU_PAGESHIFT4M)
154 #define MMU_PAGEOFFSET4M (MMU_PAGESIZE4M - 1)
155 #define MMU_PAGEMASK4M (~MMU_PAGEOFFSET4M)
157 #define MMU_PAGESHIFT32M 25
158 #define MMU_PAGESIZE32M (1 << MMU_PAGESHIFT32M)
159 #define MMU_PAGEOFFSET32M (MMU_PAGESIZE32M - 1)
160 #define MMU_PAGEMASK32M (~MMU_PAGEOFFSET32M)
162 #define MMU_PAGESHIFT256M 28
163 #define MMU_PAGESIZE256M (1 << MMU_PAGESHIFT256M)
164 #define MMU_PAGEOFFSET256M (MMU_PAGESIZE256M - 1)
165 #define MMU_PAGEMASK256M (~MMU_PAGEOFFSET256M)
167 #define PAGESHIFT 13
168 #define PAGESIZE (1<<PAGESHIFT)
169 #define PAGEOFFSET (PAGESIZE - 1)
170 #define PAGEMASK (~PAGEOFFSET)
173 * DATA_ALIGN is used to define the alignment of the Unix data segment.
175 #define DATA_ALIGN ADDRESS_C(0x2000)
178 * DEFAULT KERNEL THREAD stack size.
181 #define DEFAULTSTKSZ (3*PAGESIZE)
184 * DEFAULT initial thread stack size.
186 #define T0STKSZ (2 * DEFAULTSTKSZ)
189 * KERNELBASE is the virtual address which
190 * the kernel text/data mapping starts in all contexts.
192 #define KERNELBASE ADDRESS_C(0x01000000)
195 * Virtual address range available to the debugger
197 #define SEGDEBUGBASE ADDRESS_C(0xedd00000)
198 #define SEGDEBUGSIZE (ADDRESS_C(0xf0000000) - SEGDEBUGBASE)
201 * Define the userlimits
204 #define USERLIMIT ADDRESS_C(0xFFFFFFFF80000000)
205 #define USERLIMIT32 ADDRESS_C(0xFFC00000)
208 * Define SEGKPBASE, start of the segkp segment.
211 #define SEGKPBASE ADDRESS_C(0x2a100000000)
214 * Define SEGMAPBASE, start of the segmap segment.
217 #define SEGMAPBASE ADDRESS_C(0x2a750000000)
220 * SYSBASE is the virtual address which the kernel allocated memory
221 * mapping starts in all contexts. SYSLIMIT is the end of the Sysbase segment.
224 #define SYSBASE ADDRESS_C(0x30000000000)
225 #define SYSLIMIT ADDRESS_C(0x70000000000)
226 #define SYSBASE32 ADDRESS_C(0x70000000)
227 #define SYSLIMIT32 ADDRESS_C(0x80000000)
230 * BOOTTMPBASE is the base of a space that can be reclaimed
231 * after the kernel takes over the machine. It contains the
232 * boot archive and memory allocated by krtld before kmem_alloc
233 * is brought online.
235 #define BOOTTMPBASE ADDRESS_C(0x4C000000)
238 * MEMSCRUBBASE is the base virtual address for the memory scrubber
239 * to read large pages. It MUST be 4MB page aligned.
242 #define MEMSCRUBBASE 0x2a000000000
245 * Define the kernel address space range allocated to Open Firmware
247 #define OFW_START_ADDR 0xf0000000
248 #define OFW_END_ADDR 0xffffffff
251 * ARGSBASE is the base virtual address of the range which
252 * the kernel uses to map the arguments for exec.
254 #define ARGSBASE (MEMSCRUBBASE - NCARGS)
257 * PPMAPBASE is the base virtual address of the range which
258 * the kernel uses to quickly map pages for operations such
259 * as ppcopy, pagecopy, pagezero, and pagesum.
261 #define PPMAPSIZE (512 * 1024)
262 #define PPMAPBASE (ARGSBASE - PPMAPSIZE)
264 #define MAXPP_SLOTS ADDRESS_C(16)
265 #define PPMAP_FAST_SIZE (MAXPP_SLOTS * PAGESIZE * NCPU)
266 #define PPMAP_FAST_BASE (PPMAPBASE - PPMAP_FAST_SIZE)
269 * PIOMAPBASE is the base virtual address at which programmable I/O registers
270 * are mapped. This allows such memory -- which may induce side effects when
271 * read -- to be cordoned off from the system at-large.
273 #define PIOMAPSIZE (1024 * 1024 * 1024 * (uintptr_t)5)
274 #define PIOMAPBASE (PPMAP_FAST_BASE - PIOMAPSIZE)
277 * Allocate space for kernel modules on nucleus pages
279 #define MODDATA 1024 * 512
282 * The heap has a region allocated from it specifically for module text that
283 * cannot fit on the nucleus page. This region -- which starts at address
284 * HEAPTEXT_BASE and runs for HEAPTEXT_SIZE bytes -- has virtual holes
285 * punched in it: for every HEAPTEXT_MAPPED bytes of available virtual, there
286 * is a virtual hole of size HEAPTEXT_UNMAPPED bytes sitting beneath it. This
287 * assures that any text address is within HEAPTEXT_MAPPED of an unmapped
288 * region. The unmapped regions themselves are managed with the routines
289 * kobj_texthole_alloc() and kobj_texthole_free().
291 #define HEAPTEXT_SIZE (128 * 1024 * 1024) /* bytes */
292 #define HEAPTEXT_OVERSIZE (64 * 1024 * 1024) /* bytes */
293 #define HEAPTEXT_BASE (SYSLIMIT32 - HEAPTEXT_SIZE)
294 #define HEAPTEXT_MAPPED (2 * 1024 * 1024)
295 #define HEAPTEXT_UNMAPPED (2 * 1024 * 1024)
297 #define HEAPTEXT_NARENAS \
298 (HEAPTEXT_SIZE / (HEAPTEXT_MAPPED + HEAPTEXT_UNMAPPED) + 2)
301 * Preallocate an area for setting up the user stack during
302 * the exec(). This way we have a faster allocator and also
303 * make sure the stack is always VAC aligned correctly. see
304 * get_arg_base() in startup.c.
306 #define ARG_SLOT_SIZE (0x8000)
307 #define ARG_SLOT_SHIFT (15)
308 #define N_ARG_SLOT (0x80)
310 #define NARG_BASE (PIOMAPBASE - (ARG_SLOT_SIZE * N_ARG_SLOT))
313 * ktextseg+kvalloc should not use space beyond KERNEL_LIMIT32.
317 * For 64-bit kernels, rename KERNEL_LIMIT to KERNEL_LIMIT32 to more accurately
318 * reflect the fact that it's actually the limit for 32-bit kernel virtual
319 * addresses.
321 #define KERNEL_LIMIT32 BOOTTMPBASE
323 #define PFN_TO_BUSTYPE(pfn) (((pfn) >> 19) & 0x1FF)
324 #define IO_BUSTYPE(pfn) ((PFN_TO_BUSTYPE(pfn) & 0x100) >> 8)
326 #ifdef _STARFIRE
327 #define PFN_TO_UPAID(pfn) BUSTYPE_TO_UPAID(PFN_TO_BUSTYPE(pfn))
328 #else
329 #define PFN_TO_UPAID(pfn) (((pfn) >> 20) & 0x1F)
330 #endif /* _STARFIRE */
333 * Defines used for the ptl1_panic parameter, which is passed to the
334 * ptl1_panic assembly routine in %g1. These #defines have string
335 * names defined in sun4u/os/mach_cpu_states.c which should be kept up to
336 * date if new #defines are added.
338 #define PTL1_BAD_DEBUG 0
339 #define PTL1_BAD_WTRAP 1
340 #define PTL1_BAD_KMISS 2
341 #define PTL1_BAD_KPROT_FAULT 3
342 #define PTL1_BAD_ISM 4
343 #define PTL1_BAD_MMUTRAP 5
344 #define PTL1_BAD_TRAP 6
345 #define PTL1_BAD_FPTRAP 7
346 #define PTL1_BAD_INTR_VEC 8
347 #define PTL1_BAD_TRACE_PTR 9
348 #define PTL1_BAD_STACK 10
349 #define PTL1_BAD_DTRACE_FLAGS 11
350 #define PTL1_BAD_CTX_STEAL 12
351 #define PTL1_BAD_ECC 13
352 #define PTL1_BAD_CTX 14
353 #define PTL1_BAD_RAISE_TSBEXCP 20
354 #define PTL1_NO_SCDTSB8K 21
357 * Defines used for ptl1 related data structs.
359 #define PTL1_MAXTL 4
360 #define PTL1_DEBUG_TRAP 0x7C
361 #define PTL1_SSIZE 1024 /* minimum stack size */
362 #define CPU_ALLOC_SIZE MMU_PAGESIZE
364 #ifdef __cplusplus
366 #endif
368 #endif /* _SYS_MACHPARAM_H */