1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright 1989 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #ifndef _sun4_param_h 28 #define _sun4_param_h 29 30 #pragma ident "%Z%%M% %I% %E% SMI" 31 32 /* 33 * This file is intended to contain the basic 34 * specific details of a given architecture. 35 */ 36 37 /* 38 * Machine dependent constants for Sun4. 39 */ 40 41 /* 42 * Define the VAC symbol if we could run on a machine 43 * which has a Virtual Address Cache (e.g. SUN4_260) 44 */ 45 #if defined(SUN4_260) || defined(SUN4_470) || defined(SUN4_330) 46 #define VAC 47 #else 48 #undef VAC 49 #endif /* SUN4_260 || SUN4_470 || SUN4_330 */ 50 51 /* 52 * Define the FPU symbol if we could run on a machine with an external 53 * FPU (i.e. not integrated with the normal machine state like the vax). 54 */ 55 #define FPU 56 57 /* 58 * Define the MMU_3LEVEL symbol if we could run on a machine with 59 * a three level mmu. We also assume these machines have region 60 * and user cache flush operations. 61 */ 62 #ifdef SUN4_470 63 #define MMU_3LEVEL 64 #else 65 #undef MMU_3LEVEL 66 #endif /* SUN4_470 */ 67 68 /* 69 * Define IOC if we could run on machines that have an I/O cache. 70 */ 71 #ifdef SUN4_470 72 #define IOC 73 #else 74 #undef IOC 75 #endif /* SUN4_470 */ 76 77 /* 78 * Define BCOPY_BUF if we could run on machines that have a bcopy buffer. 79 */ 80 #ifdef SUN4_470 81 #define BCOPY_BUF 82 #else 83 #undef BCOPY_BUF 84 #endif /* SUN4_470 */ 85 86 /* 87 * Define VA_HOLE for machines that have a hole in the virtual address space. 88 */ 89 #if defined(SUN4_260) || defined(SUN4_110) || defined(SUN4_330) 90 #define VA_HOLE 91 #else 92 #undef VA_HOLE 93 #endif /* SUN4_260 || SUN4_110 || SUN4_330 */ 94 95 /* 96 * MMU_PAGES* describes the physical page size used by the mapping hardware. 97 * PAGES* describes the logical page size used by the system. 98 */ 99 100 #define MMU_PAGESIZE 0x2000 /* 8192 bytes */ 101 #define MMU_PAGESHIFT 13 /* log2(MMU_PAGESIZE) */ 102 #define MMU_PAGEOFFSET (MMU_PAGESIZE-1)/* Mask of address bits in page */ 103 #define MMU_PAGEMASK (~MMU_PAGEOFFSET) 104 105 #define PAGESIZE 0x2000 /* All of the above, for logical */ 106 #define PAGESHIFT 13 107 #define PAGEOFFSET (PAGESIZE - 1) 108 #define PAGEMASK (~PAGEOFFSET) 109 110 /* 111 * DATA_ALIGN is used to define the alignment of the Unix data segment. 112 */ 113 #define DATA_ALIGN 0x2000 114 115 /* 116 * Some random macros for units conversion. 117 */ 118 119 /* 120 * MMU pages to bytes, and back (with and without rounding) 121 */ 122 #define mmu_ptob(x) ((x) << MMU_PAGESHIFT) 123 #define mmu_btop(x) (((unsigned)(x)) >> MMU_PAGESHIFT) 124 #define mmu_btopr(x) ((((unsigned)(x) + MMU_PAGEOFFSET) >> MMU_PAGESHIFT)) 125 126 /* 127 * pages to bytes, and back (with and without rounding) 128 */ 129 #define ptob(x) ((x) << PAGESHIFT) 130 #define btop(x) (((unsigned)(x)) >> PAGESHIFT) 131 #define btopr(x) ((((unsigned)(x) + PAGEOFFSET) >> PAGESHIFT)) 132 133 /* 134 * 2 versions of pages to disk blocks 135 */ 136 #define mmu_ptod(x) ((x) << (MMU_PAGESHIFT - DEV_BSHIFT)) 137 #define ptod(x) ((x) << (PAGESHIFT - DEV_BSHIFT)) 138 139 /* 140 * Delay units are in microseconds. 141 */ 142 #define DELAY(n) usec_delay(n) 143 #define CDELAY(c, n) \ 144 { \ 145 register int N = n; \ 146 while (--N > 0) { \ 147 if (c) \ 148 break; \ 149 usec_delay(1); \ 150 } \ 151 } 152 153 #define UPAGES 2 /* pages of u-area, NOT including red zone */ 154 #define KERNSTACK 0x3000 /* size of kernel stack in u-area */ 155 156 /* 157 * KERNSIZE the amount of vitual address space the kernel 158 * uses in all contexts. 159 */ 160 #define KERNELSIZE (128*1024*1024) 161 162 /* 163 * KERNELBASE is the virtual address which 164 * the kernel text/data mapping starts in all contexts. 165 */ 166 #define KERNELBASE (0-KERNELSIZE) 167 168 /* 169 * SYSBASE is the virtual address which 170 * the kernel allocated memory mapping starts in all contexts. 171 */ 172 #define SYSBASE (0-(16*1024*1024)) 173 174 /* 175 * Msgbuf size. 176 */ 177 #define MSG_BSIZE ((7 * 1024) - sizeof (struct msgbuf_hd)) 178 179 /* 180 * XXX - Macros for compatibility 181 */ 182 /* Clicks (MMU PAGES) to disk blocks */ 183 #define ctod(x) mmu_ptod(x) 184 185 /* Clicks (MMU PAGES) to bytes, and back (with rounding) */ 186 #define ctob(x) mmu_ptob(x) 187 #define btoc(x) mmu_btopr(x) 188 189 /* 190 * XXX - Old names for some backwards compatibility 191 */ 192 #define NBPG MMU_PAGESIZE 193 #define PGOFSET MMU_PAGEOFFSET 194 #define PGSHIFT MMU_PAGESHIFT 195 196 #define CLSIZE 1 197 #define CLSIZELOG2 0 198 #define CLBYTES PAGESIZE 199 #define CLOFSET PAGEOFFSET 200 #define CLSHIFT PAGESHIFT 201 #define clrnd(i) (i) 202 203 #endif /* !_sun4_param_h */ 204