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