home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1997 April / macformat-049.iso / mac / Shareware Plus / Developers / dropg++ / usr / include / machine / param.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-02-20  |  6.5 KB  |  202 lines  |  [TEXT/R*ch]

  1. /*
  2.  * Copyright (c) 1988 University of Utah.
  3.  * Copyright (c) 1982, 1986, 1990, 1993
  4.  *    The Regents of the University of California.  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.16 92/12/20$
  39.  *
  40.  *    @(#)param.h    8.1 (Berkeley) 6/10/93
  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 for all
  50.  * data types (int, long, ...).   The result is u_int and must be cast to
  51.  * any desired pointer type.
  52.  */
  53. #define    ALIGNBYTES    3
  54. #define    ALIGN(p)    (((u_int)(p) + ALIGNBYTES) &~ ALIGNBYTES)
  55.  
  56. #define    NBPG        4096        /* bytes/page */
  57. #define    PGOFSET        (NBPG-1)    /* byte offset into page */
  58. #define    PGSHIFT        12        /* LOG2(NBPG) */
  59. #define    NPTEPG        (NBPG/(sizeof (struct pte)))
  60.  
  61. #define NBSEG        0x400000    /* bytes/segment */
  62. #define    SEGOFSET    (NBSEG-1)    /* byte offset into segment */
  63. #define    SEGSHIFT    22        /* LOG2(NBSEG) */
  64.  
  65. #define    KERNBASE    0x00000000    /* start of kernel virtual */
  66. #define    BTOPKERNBASE    ((u_long)KERNBASE >> PGSHIFT)
  67.  
  68. #define    DEV_BSIZE    512
  69. #define    DEV_BSHIFT    9        /* log2(DEV_BSIZE) */
  70. #define BLKDEV_IOSIZE    2048
  71. #define    MAXPHYS        (64 * 1024)    /* max raw I/O transfer size */
  72.  
  73. #define    CLSIZE        1
  74. #define    CLSIZELOG2    0
  75.  
  76. /* NOTE: SSIZE, SINCR and UPAGES must be multiples of CLSIZE */
  77. #define    SSIZE        1        /* initial stack size/NBPG */
  78. #define    SINCR        1        /* increment of stack/NBPG */
  79.  
  80. #define    UPAGES        2        /* pages of u-area */
  81.  
  82. /*
  83.  * Constants related to network buffer management.
  84.  * MCLBYTES must be no larger than CLBYTES (the software page size), and,
  85.  * on machines that exchange pages of input or output buffers with mbuf
  86.  * clusters (MAPPED_MBUFS), MCLBYTES must also be an integral multiple
  87.  * of the hardware page size.
  88.  */
  89. #define    MSIZE        128        /* size of an mbuf */
  90. #define    MCLBYTES    2048        /* large enough for ether MTU */
  91. #define    MCLSHIFT    11
  92. #define    MCLOFSET    (MCLBYTES - 1)
  93. #ifndef NMBCLUSTERS
  94. #ifdef GATEWAY
  95. #define    NMBCLUSTERS    512        /* map size, max cluster allocation */
  96. #else
  97. #define    NMBCLUSTERS    256        /* map size, max cluster allocation */
  98. #endif
  99. #endif
  100.  
  101. /*
  102.  * Size of kernel malloc arena in CLBYTES-sized logical pages
  103.  */ 
  104. #ifndef NKMEMCLUSTERS
  105. #define    NKMEMCLUSTERS    (2048*1024/CLBYTES)
  106. #endif
  107.  
  108. /* pages ("clicks") (4096 bytes) to disk blocks */
  109. #define    ctod(x)    ((x)<<(PGSHIFT-DEV_BSHIFT))
  110. #define    dtoc(x)    ((x)>>(PGSHIFT-DEV_BSHIFT))
  111. #define    dtob(x)    ((x)<<DEV_BSHIFT)
  112.  
  113. /* pages to bytes */
  114. #define    ctob(x)    ((x)<<PGSHIFT)
  115.  
  116. /* bytes to pages */
  117. #define    btoc(x)    (((unsigned)(x)+(NBPG-1))>>PGSHIFT)
  118.  
  119. #define LABELSECTOR    (1024/DEV_BSIZE)
  120. #define LABELOFFSET    0
  121.  
  122. #define    btodb(bytes)             /* calculates (bytes / DEV_BSIZE) */ \
  123.     ((unsigned)(bytes) >> DEV_BSHIFT)
  124. #define    dbtob(db)            /* calculates (db * DEV_BSIZE) */ \
  125.     ((unsigned)(db) << DEV_BSHIFT)
  126.  
  127. /*
  128.  * Map a ``block device block'' to a file system block.
  129.  * This should be device dependent, and should use the bsize
  130.  * field from the disk label.
  131.  * For now though just use DEV_BSIZE.
  132.  */
  133. #define    bdbtofsb(bn)    ((bn) / (BLKDEV_IOSIZE/DEV_BSIZE))
  134.  
  135. /*
  136.  * Mach derived conversion macros
  137.  */
  138. #define hp300_round_page(x)    ((((unsigned)(x)) + NBPG - 1) & ~(NBPG-1))
  139. #define hp300_trunc_page(x)    ((unsigned)(x) & ~(NBPG-1))
  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 splstatclock()    spl6()
  173. #define splvm()        spl6()
  174. #define splhigh()    spl7()
  175. #define splsched()    spl7()
  176.  
  177. /* watch out for side effects */
  178. #define splx(s)         (s & PSL_IPL ? _spl(s) : spl0())
  179.  
  180. #ifdef KERNEL
  181. #ifndef LOCORE
  182. int    cpuspeed;
  183. #define    DELAY(n)    { register int N = cpuspeed * (n); while (--N > 0); }
  184. #endif
  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_md.md_flags & MDP_HPUXMMAP) && \
  197.      ((unsigned)(v) & HPMMMASK) && \
  198.      ((unsigned)(v) & HPMMMASK) != HPMMMASK)
  199. #define HPMMBASEADDR(v) \
  200.     ((unsigned)(v) & ~HPMMMASK)
  201. #endif
  202.