Annotation of sys/arch/sparc64/include/param.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: param.h,v 1.27 2007/07/24 15:45:10 kettenis Exp $ */
! 2: /* $NetBSD: param.h,v 1.25 2001/05/30 12:28:51 mrg Exp $ */
! 3:
! 4: /*
! 5: * Copyright (c) 1992, 1993
! 6: * The Regents of the University of California. All rights reserved.
! 7: *
! 8: * This software was developed by the Computer Systems Engineering group
! 9: * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
! 10: * contributed to Berkeley.
! 11: *
! 12: * All advertising materials mentioning features or use of this software
! 13: * must display the following acknowledgement:
! 14: * This product includes software developed by the University of
! 15: * California, Lawrence Berkeley Laboratory.
! 16: *
! 17: * Redistribution and use in source and binary forms, with or without
! 18: * modification, are permitted provided that the following conditions
! 19: * are met:
! 20: * 1. Redistributions of source code must retain the above copyright
! 21: * notice, this list of conditions and the following disclaimer.
! 22: * 2. Redistributions in binary form must reproduce the above copyright
! 23: * notice, this list of conditions and the following disclaimer in the
! 24: * documentation and/or other materials provided with the distribution.
! 25: * 3. Neither the name of the University nor the names of its contributors
! 26: * may be used to endorse or promote products derived from this software
! 27: * without specific prior written permission.
! 28: *
! 29: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
! 30: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 31: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 32: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
! 33: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 34: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 35: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 36: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 37: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 38: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 39: * SUCH DAMAGE.
! 40: *
! 41: * @(#)param.h 8.1 (Berkeley) 6/11/93
! 42: */
! 43:
! 44: /*
! 45: * Copyright (c) 1996-1999 Eduardo Horvath
! 46: *
! 47: * Redistribution and use in source and binary forms, with or without
! 48: * modification, are permitted provided that the following conditions
! 49: * are met:
! 50: * 1. Redistributions of source code must retain the above copyright
! 51: * notice, this list of conditions and the following disclaimer.
! 52: *
! 53: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
! 54: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 55: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 56: * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE
! 57: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 58: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 59: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 60: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 61: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 62: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 63: * SUCH DAMAGE.
! 64: *
! 65: */
! 66:
! 67: #ifndef _SPARC64_PARAM_H_
! 68: #define _SPARC64_PARAM_H_
! 69:
! 70: #define _MACHINE sparc64
! 71: #define MACHINE "sparc64"
! 72: #define _MACHINE_ARCH sparc64
! 73: #define MACHINE_ARCH "sparc64"
! 74: #define MID_MACHINE MID_SPARC64
! 75:
! 76: #ifdef _KERNEL /* XXX */
! 77: #ifndef _LOCORE /* XXX */
! 78: #include <machine/cpu.h> /* XXX */
! 79: #endif /* XXX */
! 80: #endif /* XXX */
! 81:
! 82: /*
! 83: * Round p (pointer or byte index) up to a correctly-aligned value for
! 84: * the machine's strictest data type. The result is u_int and must be
! 85: * cast to any desired pointer type.
! 86: *
! 87: * ALIGNED_POINTER is a boolean macro that checks whether an address
! 88: * is valid to fetch data elements of type t from on this architecture.
! 89: * This does not reflect the optimal alignment, just the possibility
! 90: * (within reasonable limits).
! 91: *
! 92: */
! 93: #define ALIGNBYTES 0xf
! 94: #define ALIGN(p) (((u_long)(p) + ALIGNBYTES) & ~ALIGNBYTES)
! 95: #define ALIGNED_POINTER(p,t) ((((u_long)(p)) & (sizeof(t)-1)) == 0)
! 96:
! 97: #define DEV_BSHIFT 9 /* log2(DEV_BSIZE) */
! 98: #define DEV_BSIZE (1 << DEV_BSHIFT)
! 99: #define BLKDEV_IOSIZE 2048
! 100: #define MAXPHYS (64 * 1024)
! 101:
! 102: /* We get stack overflows w/8K stacks in 64-bit mode */
! 103: #define UPAGES 2 /* initial stack size in pages */
! 104: #define USPACE (UPAGES*8192)
! 105: #define USPACE_ALIGN (0) /* u-area alignment 0-none */
! 106:
! 107:
! 108: /*
! 109: * Here are all the magic kernel virtual addresses and how they're allocated.
! 110: *
! 111: * First, the PROM is usually a fixed-sized block from 0x00000000f0000000 to
! 112: * 0x00000000f0100000. It also uses some space around 0x00000000fff00000 to
! 113: * map in device registers. The rest is pretty much ours to play with.
! 114: *
! 115: * The kernel starts at KERNBASE. Here's the layout. We use macros to set
! 116: * the addresses so we can relocate everything easily. We use 4MB locked TTEs
! 117: * to map in the kernel text and data segments. Any extra pages are recycled,
! 118: * so they can potentially be double-mapped. This shouldn't really be a
! 119: * problem since they're unused, but wild pointers can cause silent data
! 120: * corruption if they are in those segments.
! 121: *
! 122: * 0x0000000000000000: 64K NFO page zero
! 123: * 0x0000000000010000: Userland or PROM
! 124: * KERNBASE: 4MB kernel text and read only data
! 125: * This is mapped in the ITLB and
! 126: * Read-Only in the DTLB
! 127: * KERNBASE+0x400000: 4MB kernel data and BSS -- not in ITLB
! 128: * Contains context table, kernel pmap,
! 129: * and other important structures.
! 130: * KERNBASE+0x800000: Unmapped page -- redzone
! 131: * KERNBASE+0x802000: Process 0 stack and u-area
! 132: * KERNBASE+0x806000: 2 pages for pmap_copy_page and /dev/mem
! 133: * KERNBASE+0x80a000: Start of kernel VA segment
! 134: * KERNEND: End of kernel VA segment
! 135: * KERNEND+0x02000: Auxreg_va (unused?)
! 136: * KERNEND+0x04000: TMPMAP_VA (unused?)
! 137: * KERNEND+0x06000: message buffer.
! 138: * KERNEND+0x010000: 64K locked TTE -- different for each CPU
! 139: * Contains interrupt stack, cpu_info structure,
! 140: * and 32KB kernel TSB.
! 141: *
! 142: */
! 143: #define KERNBASE 0x001000000 /* start of kernel virtual space */
! 144: #define KERNEND 0x0e0000000 /* end of kernel virtual space */
! 145: #define VM_MAX_KERNEL_BUF ((KERNEND-KERNBASE)/4)
! 146:
! 147: #define _MAXNBPG 8192 /* fixed VAs, independent of actual NBPG */
! 148:
! 149: #define AUXREG_VA ( KERNEND + _MAXNBPG) /* 1 page REDZONE */
! 150: #define TMPMAP_VA ( AUXREG_VA + _MAXNBPG)
! 151: #define MSGBUF_VA ( TMPMAP_VA + _MAXNBPG)
! 152: /*
! 153: * Here's the location of the interrupt stack and CPU structure.
! 154: */
! 155: #define INTSTACK ( KERNEND + 8*_MAXNBPG)/* 64K after kernel end */
! 156: #define EINTSTACK ( INTSTACK + 2*USPACE) /* 32KB */
! 157: #define CPUINFO_VA ( EINTSTACK)
! 158:
! 159: /*
! 160: * Constants related to network buffer management.
! 161: */
! 162: #define NMBCLUSTERS 4096 /* map size, max cluster allocation */
! 163:
! 164: #define MSGBUFSIZE NBPG
! 165:
! 166: /*
! 167: * Minimum and maximum sizes of the kernel malloc arena in PAGE_SIZE-sized
! 168: * logical pages.
! 169: */
! 170: #define NKMEMPAGES_MIN_DEFAULT ((8 * 1024 * 1024) >> PAGE_SHIFT)
! 171: #define NKMEMPAGES_MAX_DEFAULT ((128 * 1024 * 1024) >> PAGE_SHIFT)
! 172:
! 173: /* pages ("clicks") to disk blocks */
! 174: #define ctod(x) ((x) << (PGSHIFT - DEV_BSHIFT))
! 175: #define dtoc(x) ((x) >> (PGSHIFT - DEV_BSHIFT))
! 176:
! 177: /* pages to bytes */
! 178: #define ctob(x) ((x) << PGSHIFT)
! 179: #define btoc(x) (((vsize_t)(x) + PGOFSET) >> PGSHIFT)
! 180:
! 181: /* bytes to disk blocks */
! 182: #define btodb(x) ((x) >> DEV_BSHIFT)
! 183: #define dbtob(x) ((x) << DEV_BSHIFT)
! 184:
! 185: /*
! 186: * dvmamap manages a range of DVMA addresses intended to create double
! 187: * mappings of physical memory. In a way, `dvmamap' is a submap of the
! 188: * VM map `phys_map'. The difference is the use of the `resource map'
! 189: * routines to manage page allocation, allowing DVMA addresses to be
! 190: * allocated and freed from within interrupt routines.
! 191: *
! 192: * Note that `phys_map' can still be used to allocate memory-backed pages
! 193: * in DVMA space.
! 194: */
! 195: #ifdef _KERNEL
! 196: #ifndef _LOCORE
! 197:
! 198: extern void delay(unsigned int);
! 199: #define DELAY(n) delay(n)
! 200:
! 201: #endif /* _LOCORE */
! 202: #endif /* _KERNEL */
! 203:
! 204: /*
! 205: * Values for the cputyp variable.
! 206: */
! 207: #define CPU_SUN4 0
! 208: #define CPU_SUN4C 1
! 209: #define CPU_SUN4M 2
! 210: #define CPU_SUN4U 3
! 211:
! 212: /*
! 213: * On a sun4u machine, the page size is 8192.
! 214: */
! 215:
! 216: #define NBPG 8192 /* bytes/page */
! 217: #define PGOFSET (NBPG-1) /* byte offset into page */
! 218: #define PGSHIFT 13 /* log2(NBPG) */
! 219:
! 220: #define PAGE_SHIFT 13
! 221: #define PAGE_SIZE (1 << PAGE_SHIFT)
! 222: #define PAGE_MASK (PAGE_SIZE - 1)
! 223:
! 224: #endif /* _SPARC64_PARAM_H_ */
CVSweb