param.h revision 15565
1258945Sroberto/*- 2258945Sroberto * Copyright (c) 1990 The Regents of the University of California. 3258945Sroberto * All rights reserved. 4258945Sroberto * 5258945Sroberto * This code is derived from software contributed to Berkeley by 6258945Sroberto * William Jolitz. 7258945Sroberto * 8258945Sroberto * Redistribution and use in source and binary forms, with or without 9258945Sroberto * modification, are permitted provided that the following conditions 10258945Sroberto * are met: 11258945Sroberto * 1. Redistributions of source code must retain the above copyright 12258945Sroberto * notice, this list of conditions and the following disclaimer. 13258945Sroberto * 2. Redistributions in binary form must reproduce the above copyright 14258945Sroberto * notice, this list of conditions and the following disclaimer in the 15258945Sroberto * documentation and/or other materials provided with the distribution. 16258945Sroberto * 3. All advertising materials mentioning features or use of this software 17258945Sroberto * must display the following acknowledgement: 18258945Sroberto * This product includes software developed by the University of 19258945Sroberto * California, Berkeley and its contributors. 20258945Sroberto * 4. Neither the name of the University nor the names of its contributors 21258945Sroberto * may be used to endorse or promote products derived from this software 22258945Sroberto * without specific prior written permission. 23258945Sroberto * 24258945Sroberto * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 25258945Sroberto * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26258945Sroberto * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27258945Sroberto * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 28258945Sroberto * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29258945Sroberto * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30258945Sroberto * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31258945Sroberto * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32258945Sroberto * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33258945Sroberto * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34258945Sroberto * SUCH DAMAGE. 35258945Sroberto * 36258945Sroberto * from: @(#)param.h 5.8 (Berkeley) 6/28/91 37258945Sroberto * $Id: param.h,v 1.20 1996/05/02 14:20:02 phk Exp $ 38258945Sroberto */ 39258945Sroberto 40258945Sroberto#ifndef _MACHINE_PARAM_H_ 41258945Sroberto#define _MACHINE_PARAM_H_ 42258945Sroberto 43258945Sroberto/* 44258945Sroberto * Machine dependent constants for Intel 386. 45258945Sroberto */ 46258945Sroberto 47258945Sroberto#define MACHINE "i386" 48258945Sroberto#define MID_MACHINE MID_I386 49258945Sroberto 50258945Sroberto/* 51258945Sroberto * Round p (pointer or byte index) up to a correctly-aligned value 52258945Sroberto * for all data types (int, long, ...). The result is unsigned int 53258945Sroberto * and must be cast to any desired pointer type. 54258945Sroberto */ 55258945Sroberto#define ALIGNBYTES (sizeof(int) - 1) 56258945Sroberto#define ALIGN(p) (((unsigned)(p) + ALIGNBYTES) & ~ALIGNBYTES) 57258945Sroberto 58258945Sroberto#define PAGE_SHIFT 12 /* LOG2(PAGE_SIZE) */ 59258945Sroberto#define PAGE_SIZE (1<<PAGE_SHIFT) /* bytes/page */ 60258945Sroberto#define PAGE_MASK (PAGE_SIZE-1) 61258945Sroberto#define NPTEPG (PAGE_SIZE/(sizeof (pt_entry_t))) 62258945Sroberto 63258945Sroberto#define NPDEPG (PAGE_SIZE/(sizeof (pd_entry_t))) 64258945Sroberto#define PDRSHIFT 22 /* LOG2(NBPDR) */ 65258945Sroberto#define NBPDR (1<<PDRSHIFT) /* bytes/page dir */ 66258945Sroberto 67258945Sroberto#define DEV_BSHIFT 9 /* log2(DEV_BSIZE) */ 68258945Sroberto#define DEV_BSIZE (1<<DEV_BSHIFT) 69258945Sroberto 70258945Sroberto#define BLKDEV_IOSIZE 2048 71258945Sroberto#define MAXPHYS (64 * 1024) /* max raw I/O transfer size */ 72258945Sroberto 73258945Sroberto#define UPAGES 2 /* pages of u-area */ 74258945Sroberto 75258945Sroberto/* 76258945Sroberto * Constants related to network buffer management. 77258945Sroberto * MCLBYTES must be no larger than CLBYTES (the software page size), and, 78258945Sroberto * on machines that exchange pages of input or output buffers with mbuf 79258945Sroberto * clusters (MAPPED_MBUFS), MCLBYTES must also be an integral multiple 80258945Sroberto * of the hardware page size. 81258945Sroberto */ 82258945Sroberto#ifndef MSIZE 83258945Sroberto#define MSIZE 128 /* size of an mbuf */ 84258945Sroberto#endif /* MSIZE */ 85258945Sroberto 86258945Sroberto#ifndef MCLSHIFT 87258945Sroberto#define MCLSHIFT 11 /* convert bytes to m_buf clusters */ 88258945Sroberto#endif /* MCLSHIFT */ 89258945Sroberto#define MCLBYTES (1 << MCLSHIFT) /* size of an m_buf cluster */ 90258945Sroberto#define MCLOFSET (MCLBYTES - 1) /* offset within an m_buf cluster */ 91258945Sroberto 92258945Sroberto/* 93258945Sroberto * Some macros for units conversion 94258945Sroberto */ 95258945Sroberto/* Core clicks (4096 bytes) to segments and vice versa */ 96258945Sroberto#define ctos(x) (x) 97258945Sroberto#define stoc(x) (x) 98258945Sroberto 99258945Sroberto/* Core clicks (4096 bytes) to disk blocks */ 100258945Sroberto#define ctod(x) ((x)<<(PAGE_SHIFT-DEV_BSHIFT)) 101258945Sroberto#define dtoc(x) ((x)>>(PAGE_SHIFT-DEV_BSHIFT)) 102258945Sroberto#define dtob(x) ((x)<<DEV_BSHIFT) 103258945Sroberto 104258945Sroberto/* clicks to bytes */ 105258945Sroberto#define ctob(x) ((x)<<PAGE_SHIFT) 106258945Sroberto 107258945Sroberto/* bytes to clicks */ 108258945Sroberto#define btoc(x) (((unsigned)(x)+PAGE_MASK)>>PAGE_SHIFT) 109258945Sroberto 110258945Sroberto/* 111258945Sroberto * This is messy and perhaps slow because `bytes' may be an off_t. We 112258945Sroberto * have to shift an unsigned type to avoid sign extension and we don't 113258945Sroberto * want to widen `bytes' unnecessarily. Assume that off_t is long long 114258945Sroberto * and daddr_t is unsigned long. 115258945Sroberto */ 116258945Sroberto#define btodb(bytes) /* calculates (bytes / DEV_BSIZE) */ \ 117258945Sroberto (sizeof (bytes) > sizeof(long) \ 118258945Sroberto ? (unsigned long)((unsigned long long)(bytes) >> DEV_BSHIFT) \ 119258945Sroberto : (unsigned long)((unsigned long)(bytes) >> DEV_BSHIFT)) 120#define dbtob(db) /* calculates (db * DEV_BSIZE) */ \ 121 ((unsigned long long)(db) << DEV_BSHIFT) 122 123/* 124 * Mach derived conversion macros 125 */ 126#define trunc_page(x) ((unsigned)(x) & ~PAGE_MASK) 127#define round_page(x) ((((unsigned)(x)) + PAGE_MASK) & ~PAGE_MASK) 128 129#define atop(x) ((unsigned)(x) >> PAGE_SHIFT) 130#define ptoa(x) ((unsigned)(x) << PAGE_SHIFT) 131 132#define i386_round_pdr(x) ((((unsigned)(x)) + NBPDR - 1) & ~(NBPDR-1)) 133#define i386_trunc_pdr(x) ((unsigned)(x) & ~(NBPDR-1)) 134#define i386_round_page(x) ((((unsigned)(x)) + PAGE_MASK) & ~PAGE_MASK) 135#define i386_trunc_page(x) ((unsigned)(x) & ~PAGE_MASK) 136#define i386_btod(x) ((unsigned)(x) >> PDRSHIFT) 137#define i386_dtob(x) ((unsigned)(x) << PDRSHIFT) 138#define i386_btop(x) ((unsigned)(x) >> PAGE_SHIFT) 139#define i386_ptob(x) ((unsigned)(x) << PAGE_SHIFT) 140 141#endif /* !_MACHINE_PARAM_H_ */ 142