|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1988 University of Utah. ! 3: * Copyright (c) 1982, 1986, 1990 The Regents of the University of California. ! 4: * All rights reserved. ! 5: * ! 6: * This code is derived from software contributed to Berkeley by ! 7: * the Systems Programming Group of the University of Utah Computer ! 8: * Science Department. ! 9: * ! 10: * Redistribution and use in source and binary forms, with or without ! 11: * modification, are permitted provided that the following conditions ! 12: * are met: ! 13: * 1. Redistributions of source code must retain the above copyright ! 14: * notice, this list of conditions and the following disclaimer. ! 15: * 2. Redistributions in binary form must reproduce the above copyright ! 16: * notice, this list of conditions and the following disclaimer in the ! 17: * documentation and/or other materials provided with the distribution. ! 18: * 3. All advertising materials mentioning features or use of this software ! 19: * must display the following acknowledgement: ! 20: * This product includes software developed by the University of ! 21: * California, Berkeley and its contributors. ! 22: * 4. Neither the name of the University nor the names of its contributors ! 23: * may be used to endorse or promote products derived from this software ! 24: * without specific prior written permission. ! 25: * ! 26: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ! 27: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ! 28: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ! 29: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ! 30: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ! 31: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ! 32: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ! 33: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ! 34: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ! 35: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ! 36: * SUCH DAMAGE. ! 37: * ! 38: * from: Utah $Hdr: machparam.h 1.11 89/08/14$ ! 39: * ! 40: * @(#)param.h 7.8 (Berkeley) 6/28/91 ! 41: */ ! 42: ! 43: /* ! 44: * Machine dependent constants for HP9000 series 300. ! 45: */ ! 46: #define MACHINE "hp300" ! 47: ! 48: /* ! 49: * Round p (pointer or byte index) up to a correctly-aligned value ! 50: * for all data types (int, long, ...). The result is u_int and ! 51: * must be cast to any desired pointer type. ! 52: */ ! 53: #define ALIGN(p) (((u_int)(p) + (sizeof(int) - 1)) &~ (sizeof(int) - 1)) ! 54: ! 55: #define NBPG 4096 /* bytes/page */ ! 56: #define PGOFSET (NBPG-1) /* byte offset into page */ ! 57: #define PGSHIFT 12 /* LOG2(NBPG) */ ! 58: #define NPTEPG (NBPG/(sizeof (struct pte))) ! 59: ! 60: #define NBSEG (1024*NBPG) /* bytes/segment */ ! 61: #define SEGOFSET (NBSEG-1) /* byte offset into segment */ ! 62: #define SEGSHIFT 22 /* LOG2(NBSEG) */ ! 63: ! 64: #define KERNBASE 0x00000000 /* start of kernel virtual */ ! 65: #define BTOPKERNBASE ((u_long)KERNBASE >> PGSHIFT) ! 66: ! 67: #define DEV_BSIZE 512 ! 68: #define DEV_BSHIFT 9 /* log2(DEV_BSIZE) */ ! 69: #define BLKDEV_IOSIZE 2048 ! 70: #define MAXPHYS (64 * 1024) /* max raw I/O transfer size */ ! 71: ! 72: #define CLSIZE 1 ! 73: #define CLSIZELOG2 0 ! 74: ! 75: /* NOTE: SSIZE, SINCR and UPAGES must be multiples of CLSIZE */ ! 76: #define SSIZE 1 /* initial stack size/NBPG */ ! 77: #define SINCR 1 /* increment of stack/NBPG */ ! 78: ! 79: #define UPAGES 3 /* pages of u-area */ ! 80: ! 81: /* ! 82: * Constants related to network buffer management. ! 83: * MCLBYTES must be no larger than CLBYTES (the software page size), and, ! 84: * on machines that exchange pages of input or output buffers with mbuf ! 85: * clusters (MAPPED_MBUFS), MCLBYTES must also be an integral multiple ! 86: * of the hardware page size. ! 87: */ ! 88: #define MSIZE 128 /* size of an mbuf */ ! 89: #define MCLBYTES 1024 ! 90: #define MCLSHIFT 10 ! 91: #define MCLOFSET (MCLBYTES - 1) ! 92: #ifndef NMBCLUSTERS ! 93: #ifdef GATEWAY ! 94: #define NMBCLUSTERS 512 /* map size, max cluster allocation */ ! 95: #else ! 96: #define NMBCLUSTERS 256 /* map size, max cluster allocation */ ! 97: #endif ! 98: #endif ! 99: ! 100: /* ! 101: * Size of kernel malloc arena in CLBYTES-sized logical pages ! 102: */ ! 103: #ifndef NKMEMCLUSTERS ! 104: #define NKMEMCLUSTERS (2048*1024/CLBYTES) ! 105: #endif ! 106: ! 107: /* pages ("clicks") (4096 bytes) to disk blocks */ ! 108: #define ctod(x) ((x)<<(PGSHIFT-DEV_BSHIFT)) ! 109: #define dtoc(x) ((x)>>(PGSHIFT-DEV_BSHIFT)) ! 110: #define dtob(x) ((x)<<DEV_BSHIFT) ! 111: ! 112: /* pages to bytes */ ! 113: #define ctob(x) ((x)<<PGSHIFT) ! 114: ! 115: /* bytes to pages */ ! 116: #define btoc(x) (((unsigned)(x)+(NBPG-1))>>PGSHIFT) ! 117: ! 118: #define btodb(bytes) /* calculates (bytes / DEV_BSIZE) */ \ ! 119: ((unsigned)(bytes) >> DEV_BSHIFT) ! 120: #define dbtob(db) /* calculates (db * DEV_BSIZE) */ \ ! 121: ((unsigned)(db) << DEV_BSHIFT) ! 122: ! 123: /* ! 124: * Map a ``block device block'' to a file system block. ! 125: * This should be device dependent, and should use the bsize ! 126: * field from the disk label. ! 127: * For now though just use DEV_BSIZE. ! 128: */ ! 129: #define bdbtofsb(bn) ((bn) / (BLKDEV_IOSIZE/DEV_BSIZE)) ! 130: ! 131: /* ! 132: * Mach derived conversion macros ! 133: */ ! 134: #define hp300_round_seg(x) ((((unsigned)(x)) + NBSEG - 1) & ~(NBSEG-1)) ! 135: #define hp300_trunc_seg(x) ((unsigned)(x) & ~(NBSEG-1)) ! 136: #define hp300_round_page(x) ((((unsigned)(x)) + NBPG - 1) & ~(NBPG-1)) ! 137: #define hp300_trunc_page(x) ((unsigned)(x) & ~(NBPG-1)) ! 138: #define hp300_btos(x) ((unsigned)(x) >> SEGSHIFT) ! 139: #define hp300_stob(x) ((unsigned)(x) << SEGSHIFT) ! 140: #define hp300_btop(x) ((unsigned)(x) >> PGSHIFT) ! 141: #define hp300_ptob(x) ((unsigned)(x) << PGSHIFT) ! 142: ! 143: /* ! 144: * spl functions; all but spl0 are done in-line ! 145: */ ! 146: #include <machine/psl.h> ! 147: ! 148: #define _spl(s) \ ! 149: ({ \ ! 150: register int _spl_r; \ ! 151: \ ! 152: asm __volatile ("clrl %0; movew sr,%0; movew %1,sr" : \ ! 153: "&=d" (_spl_r) : "di" (s)); \ ! 154: _spl_r; \ ! 155: }) ! 156: ! 157: /* spl0 requires checking for software interrupts */ ! 158: #define spl1() _spl(PSL_S|PSL_IPL1) ! 159: #define spl2() _spl(PSL_S|PSL_IPL2) ! 160: #define spl3() _spl(PSL_S|PSL_IPL3) ! 161: #define spl4() _spl(PSL_S|PSL_IPL4) ! 162: #define spl5() _spl(PSL_S|PSL_IPL5) ! 163: #define spl6() _spl(PSL_S|PSL_IPL6) ! 164: #define spl7() _spl(PSL_S|PSL_IPL7) ! 165: ! 166: #define splsoftclock() spl1() ! 167: #define splnet() spl1() ! 168: #define splbio() spl5() ! 169: #define splimp() spl5() ! 170: #define spltty() spl5() ! 171: #define splclock() spl6() ! 172: #define splvm() spl6() ! 173: #define splhigh() spl7() ! 174: #define splsched() spl7() ! 175: ! 176: /* watch out for side effects */ ! 177: #define splx(s) (s & PSL_IPL ? _spl(s) : spl0()) ! 178: ! 179: #ifdef KERNEL ! 180: #ifndef LOCORE ! 181: int cpuspeed; ! 182: #define DELAY(n) { register int N = cpuspeed * (n); while (--N > 0); } ! 183: #endif ! 184: ! 185: #else ! 186: #define DELAY(n) { register int N = (n); while (--N > 0); } ! 187: #endif ! 188: ! 189: #ifdef HPUXCOMPAT ! 190: /* ! 191: * Constants/macros for HPUX multiple mapping of user address space. ! 192: * Pages in the first 256Mb are mapped in at every 256Mb segment. ! 193: */ ! 194: #define HPMMMASK 0xF0000000 ! 195: #define ISHPMMADDR(v) \ ! 196: ((curproc->p_addr->u_pcb.pcb_flags&PCB_HPUXMMAP) && ((unsigned)(v)&HPMMMASK) != HPMMMASK) ! 197: #define HPMMBASEADDR(v) ((unsigned)(v) & ~HPMMMASK) ! 198: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.