Home | History | Annotate | Line # | Download | only in include
param.h revision 1.22
      1 /*	$NetBSD: param.h,v 1.22 1996/01/13 01:41:05 briggs Exp $	*/
      2 
      3 /*
      4  * Copyright (c) 1988 University of Utah.
      5  * Copyright (c) 1982, 1990 The Regents of the University of California.
      6  * All rights reserved.
      7  *
      8  * This code is derived from software contributed to Berkeley by
      9  * the Systems Programming Group of the University of Utah Computer
     10  * Science Department.
     11  *
     12  * Redistribution and use in source and binary forms, with or without
     13  * modification, are permitted provided that the following conditions
     14  * are met:
     15  * 1. Redistributions of source code must retain the above copyright
     16  *    notice, this list of conditions and the following disclaimer.
     17  * 2. Redistributions in binary form must reproduce the above copyright
     18  *    notice, this list of conditions and the following disclaimer in the
     19  *    documentation and/or other materials provided with the distribution.
     20  * 3. All advertising materials mentioning features or use of this software
     21  *    must display the following acknowledgement:
     22  *	This product includes software developed by the University of
     23  *	California, Berkeley and its contributors.
     24  * 4. Neither the name of the University nor the names of its contributors
     25  *    may be used to endorse or promote products derived from this software
     26  *    without specific prior written permission.
     27  *
     28  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     29  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     30  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     31  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     32  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     33  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     34  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     35  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     36  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     37  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     38  * SUCH DAMAGE.
     39  */
     40 /*-
     41  * Copyright (C) 1993	Allen K. Briggs, Chris P. Caputo,
     42  *			Michael L. Finch, Bradley A. Grantham, and
     43  *			Lawrence A. Kesteloot
     44  * All rights reserved.
     45  *
     46  * Redistribution and use in source and binary forms, with or without
     47  * modification, are permitted provided that the following conditions
     48  * are met:
     49  * 1. Redistributions of source code must retain the above copyright
     50  *    notice, this list of conditions and the following disclaimer.
     51  * 2. Redistributions in binary form must reproduce the above copyright
     52  *    notice, this list of conditions and the following disclaimer in the
     53  *    documentation and/or other materials provided with the distribution.
     54  * 3. All advertising materials mentioning features or use of this software
     55  *    must display the following acknowledgement:
     56  *	This product includes software developed by the Alice Group.
     57  * 4. The names of the Alice Group or any of its members may not be used
     58  *    to endorse or promote products derived from this software without
     59  *    specific prior written permission.
     60  *
     61  * THIS SOFTWARE IS PROVIDED BY THE ALICE GROUP ``AS IS'' AND ANY EXPRESS OR
     62  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     63  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     64  * IN NO EVENT SHALL THE ALICE GROUP BE LIABLE FOR ANY DIRECT, INDIRECT,
     65  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     66  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     67  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     68  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     69  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     70  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     71  *
     72  */
     73 /*
     74  * from: Utah $Hdr: machparam.h 1.11 89/08/14$
     75  *
     76  *	@(#)param.h	7.8 (Berkeley) 6/28/91
     77  */
     78 
     79 #ifndef _MACHINE_PARAM_H_
     80 #define _MACHINE_PARAM_H_	1
     81 
     82 #ifndef PSL_IPL
     83 #include "machine/psl.h"
     84 #endif /* PSL_IPL */
     85 
     86 /*
     87  * Machine dependent constants for Macintosh II-and-similar series.
     88  */
     89 #define	MACHINE		"mac68k"
     90 #define	MACHINE_ARCH	"m68k"
     91 #define	MID_MACHINE	MID_M68K
     92 
     93 /*
     94  * Round p (pointer or byte index) up to a correctly-aligned value
     95  * for all data types (int, long, ...).   The result is u_int and
     96  * must be cast to any desired pointer type.
     97  */
     98 #define ALIGNBYTES	(sizeof(int) - 1)
     99 #define	ALIGN(p)	(((u_int)(p) + ALIGNBYTES) &~ ALIGNBYTES)
    100 
    101 #define	PGSHIFT		12		/* LOG2(NBPG) */
    102 #define	NBPG		(1 << PGSHIFT)	/* bytes/page */
    103 #define	PGOFSET		(NBPG-1)	/* byte offset into page */
    104 #define	NPTEPG		(NBPG/(sizeof (pt_entry_t)))
    105 
    106 #define	SEGSHIFT	22		/* LOG2(NBSEG) */
    107 #define NBSEG		(1 << SEGSHIFT)	/* bytes/segment */
    108 #define	SEGOFSET	(NBSEG-1)	/* byte offset into segment */
    109 
    110 #define	KERNBASE	0x00000000	/* start of kernel virtual */
    111 #define	BTOPKERNBASE	((u_long)KERNBASE >> PGSHIFT)
    112 
    113 #define	DEV_BSHIFT	9		/* log2(DEV_BSIZE) */
    114 #define	DEV_BSIZE	(1 << DEV_BSHIFT)
    115 #define BLKDEV_IOSIZE	2048
    116 #define	MAXPHYS		(64 * 1024)	/* max raw I/O transfer size */
    117 
    118 #define	CLSIZELOG2	0
    119 #define	CLSIZE		(1 << CLSIZELOG2)
    120 
    121 /* NOTE: SSIZE, SINCR and UPAGES must be multiples of CLSIZE */
    122 #define	SSIZE		1		/* initial stack size/NBPG */
    123 #define	SINCR		1		/* increment of stack/NBPG */
    124 #define	UPAGES		3  		/* pages of u-area */
    125 #define USPACE		(UPAGES * NBPG)	/* total size of u-area */
    126 
    127 /*
    128  * Constants related to network buffer management.
    129  * MCLBYTES must be no larger than CLBYTES (the software page size), and,
    130  * on machines that exchange pages of input or output buffers with mbuf
    131  * clusters (MAPPED_MBUFS), MCLBYTES must also be an integral multiple
    132  * of the hardware page size.
    133  */
    134 #define	MSIZE		128		/* size of an mbuf */
    135 #define MCLSHIFT        11              /* convert bytes to m_buf clusters */
    136 #define MCLBYTES        (1 << MCLSHIFT) /* size of an m_buf cluster */
    137 #define MCLOFSET        (MCLBYTES - 1)  /* offset within an m_buf cluster */
    138 
    139 #ifndef NMBCLUSTERS
    140 #ifdef GATEWAY
    141 #define	NMBCLUSTERS	512		/* map size, max cluster allocation */
    142 #else
    143 #define	NMBCLUSTERS	256		/* map size, max cluster allocation */
    144 #endif
    145 #endif
    146 
    147 /*
    148  * Size of kernel malloc arena in CLBYTES-sized logical pages
    149  */
    150 #ifndef NKMEMCLUSTERS
    151 #define	NKMEMCLUSTERS	(2048 * 1024 / CLBYTES)
    152 #endif
    153 
    154 /* pages ("clicks") to disk blocks */
    155 #define	ctod(x)		((x) << (PGSHIFT - DEV_BSHIFT))
    156 #define	dtoc(x)		((x) >> (PGSHIFT - DEV_BSHIFT))
    157 
    158 /* pages to bytes */
    159 #define	ctob(x)		((x) << PGSHIFT)
    160 #define	btoc(x)		(((x) + PGOFSET) >> PGSHIFT)
    161 
    162 /* bytes to disk blocks */
    163 #define	btodb(x)	((x) >> DEV_BSHIFT)
    164 #define	dbtob(x)	((x) << DEV_BSHIFT)
    165 
    166 /*
    167  * Map a ``block device block'' to a file system block.
    168  * This should be device dependent, and should use the bsize
    169  * field from the disk label.
    170  * For now though just use DEV_BSIZE.
    171  */
    172 #define	bdbtofsb(bn)	((bn) / (BLKDEV_IOSIZE / DEV_BSIZE))
    173 
    174 /*
    175  * Mach derived conversion macros
    176  */
    177 #define mac68k_round_page(x)	((((unsigned)(x)) + PGOFSET) & ~PGOFSET)
    178 #define mac68k_trunc_page(x)	((unsigned)(x) & ~PGOFSET)
    179 #define mac68k_btop(x)		((unsigned)(x) >> PGSHIFT)
    180 #define mac68k_ptob(x)		((unsigned)(x) << PGSHIFT)
    181 
    182 /*
    183  * spl functions; all but spl0 are done in-line
    184  */
    185 
    186 #define _spl(s) \
    187 ({ \
    188         register int _spl_r; \
    189 \
    190         __asm __volatile ("clrl %0; movew sr,%0; movew %1,sr" : \
    191                 "&=d" (_spl_r) : "di" (s)); \
    192         _spl_r; \
    193 })
    194 
    195 /* spl0 requires checking for software interrupts */
    196 #define spl1()  _spl(PSL_S|PSL_IPL1)
    197 #define spl2()  _spl(PSL_S|PSL_IPL2)
    198 #define spl3()  _spl(PSL_S|PSL_IPL3)
    199 #define spl4()  _spl(PSL_S|PSL_IPL4)
    200 #define spl5()  _spl(PSL_S|PSL_IPL5)
    201 #define spl6()  _spl(PSL_S|PSL_IPL6)
    202 #define spl7()  _spl(PSL_S|PSL_IPL7)
    203 
    204 /* These should be used for:
    205    1) ensuring mutual exclusion (why use processor level?)
    206    2) allowing faster devices to take priority
    207 
    208    Note that on the mac, most things are masked at spl1, almost
    209    everything at spl2, and everything but the panic switch and
    210    power at spl4.
    211  */
    212 #define splsoftclock()  spl1()	/* disallow softclock */
    213 #define splsoftnet()    spl1()	/* disallow network */
    214 #define splclock()      spl1()	/* disallow clock interrupt */
    215 #define spltty()        spl1()	/* disallow tty (softserial&adb) interrupts */
    216 #define splbio()        spl2()	/* disallow block I/O */
    217 #define splnet()        spl2()	/* disallow network */
    218 #define splimp()        spl2()	/* disallow imput */
    219 #define splhigh()       spl7()	/* disallow everything */
    220 #define splsched()      spl7()	/* disallow scheduling */
    221 
    222 #define splstatclock()  spl2()	/* This should be splclock... */
    223 
    224 /* watch out for side effects */
    225 #define splx(s)         ((s) & PSL_IPL ? _spl(s) : spl0())
    226 
    227 #define DELAY(ms)	delay(ms)
    228 
    229 #endif /* _MACHINE_PARAM_H_ */
    230