home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / dev / gcc / ixemulsrc.lha / ixemul / include / machine / param.h < prev    next >
C/C++ Source or Header  |  1996-12-11  |  8KB  |  237 lines

  1. /*    $NetBSD: param.h,v 1.25 1995/08/18 15:28:25 chopps Exp $    */
  2.  
  3. /*
  4.  * Copyright (c) 1988 University of Utah.
  5.  * Copyright (c) 1982, 1986, 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.  * from: Utah $Hdr: machparam.h 1.11 89/08/14$
  41.  *
  42.  *    @(#)param.h    7.8 (Berkeley) 6/28/91
  43.  */
  44. #ifndef _MACHINE_PARAM_H_
  45. #define _MACHINE_PARAM_H_
  46.  
  47. /*
  48.  * Machine dependent constants for amiga
  49.  */
  50. #define    MACHINE        "amiga"
  51. #define MACHINE_ARCH    "m68k"
  52. #define MID_MACHINE    MID_M68K
  53.  
  54. /*
  55.  * Round p (pointer or byte index) up to a correctly-aligned value
  56.  * for all data types (int, long, ...).   The result is u_int and
  57.  * must be cast to any desired pointer type.
  58.  */
  59. #define ALIGNBYTES    (sizeof(int) - 1)
  60. #define    ALIGN(p)    (((u_int)(p) + (sizeof(int) - 1)) &~ (sizeof(int) - 1))
  61.  
  62. #define    NBPG        8192        /* bytes/page */
  63. #define    PGOFSET        (NBPG-1)    /* byte offset into page */
  64. #define    PGSHIFT        13        /* LOG2(NBPG) */
  65. #define    NPTEPG        (NBPG/(sizeof(u_int)))
  66.  
  67. #define NBSEG        ((mmutype == MMU_68040) ? 32*NBPG : 2048*NBPG)    /* bytes/segment */
  68. #define    SEGOFSET    (NBSEG-1)    /* byte offset into segment */
  69. #define    SEGSHIFT    24        /* LOG2(NBSEG) [68030 value] */
  70.  
  71. #define    KERNBASE    0x0        /* start of kernel virtual */
  72. #define    BTOPKERNBASE    ((u_long)KERNBASE >> PGSHIFT)
  73.  
  74. #define    DEV_BSIZE    512
  75. #define    DEV_BSHIFT    9        /* log2(DEV_BSIZE) */
  76. #define BLKDEV_IOSIZE    2048
  77. #define    MAXPHYS        (64 * 1024)    /* max raw I/O transfer size */
  78.  
  79. #define    CLSIZE        1
  80. #define    CLSIZELOG2    0
  81.  
  82. /* NOTE: SSIZE, SINCR and UPAGES must be multiples of CLSIZE */
  83. #define    SSIZE        1        /* initial stack size/NBPG */
  84. #define    SINCR        1        /* increment of stack/NBPG */
  85.  
  86. #define    UPAGES        2        /* pages of u-area */
  87. #define USPACE        (UPAGES * NBPG)
  88.  
  89. /*
  90.  * Constants related to network buffer management.
  91.  * MCLBYTES must be no larger than CLBYTES (the software page size), and,
  92.  * on machines that exchange pages of input or output buffers with mbuf
  93.  * clusters (MAPPED_MBUFS), MCLBYTES must also be an integral multiple
  94.  * of the hardware page size.
  95.  */
  96. #define    MSIZE        128        /* size of an mbuf */
  97. #define    MCLBYTES    1024
  98. #define    MCLSHIFT    10
  99. #define    MCLOFSET    (MCLBYTES - 1)
  100. #ifndef NMBCLUSTERS
  101. #ifdef GATEWAY
  102. #define    NMBCLUSTERS    512        /* map size, max cluster allocation */
  103. #else
  104. #define    NMBCLUSTERS    256        /* map size, max cluster allocation */
  105. #endif
  106. #endif
  107.  
  108. /*
  109.  * Size of kernel malloc arena in CLBYTES-sized logical pages
  110.  */ 
  111. #ifndef NKMEMCLUSTERS
  112. #define    NKMEMCLUSTERS    (3072*1024/CLBYTES)
  113. #endif
  114.  
  115. #define MAXPARTITIONS    16
  116.  
  117. /* pages ("clicks") to disk blocks */
  118. #define    ctod(x)        ((x) << (PGSHIFT - DEV_BSHIFT))
  119. #define    dtoc(x)        ((x) >> (PGSHIFT - DEV_BSHIFT))
  120.  
  121. /* pages to bytes */
  122. #define    ctob(x)        ((x) << PGSHIFT)
  123. #define    btoc(x)        (((x) + PGOFSET) >> PGSHIFT)
  124.  
  125. /* bytes to disk blocks */
  126. #define    btodb(x)    ((x) >> DEV_BSHIFT)
  127. #define    dbtob(x)    ((x) << DEV_BSHIFT)
  128.  
  129. /*
  130.  * Map a ``block device block'' to a file system block.
  131.  * This should be device dependent, and should use the bsize
  132.  * field from the disk label.
  133.  * For now though just use DEV_BSIZE.
  134.  */
  135. #define    bdbtofsb(bn)    ((bn) / (BLKDEV_IOSIZE/DEV_BSIZE))
  136.  
  137. /*
  138.  * Mach derived conversion macros
  139.  */
  140. #define amiga_round_seg(x)    ((((unsigned)(x)) + NBSEG - 1) & ~(NBSEG-1))
  141. #define amiga_trunc_seg(x)    ((unsigned)(x) & ~(NBSEG-1))
  142. #define amiga_round_page(x)    ((((unsigned)(x)) + NBPG - 1) & ~(NBPG-1))
  143. #define amiga_trunc_page(x)    ((unsigned)(x) & ~(NBPG-1))
  144. #define amiga_btop(x)        ((unsigned)(x) >> PGSHIFT)
  145. #define amiga_ptob(x)        ((unsigned)(x) << PGSHIFT)
  146.  
  147. /*
  148.  * spl functions; all are normally done in-line
  149.  */
  150. #include <machine/psl.h>
  151.  
  152. /*
  153.  * point to the custom.intenar and custom.intenaw respectively.
  154.  */
  155. extern volatile unsigned short *amiga_intena_read, *amiga_intena_write;
  156.  
  157. #if 0
  158. #define _debug_spl(s) \
  159. ({ \
  160.         register int _spl_r; \
  161. \
  162.         __asm __volatile ("clrl %0; movew sr,%0; movew %1,sr" : \
  163.                 "&=d" (_spl_r) : "di" (s)); \
  164.     if ((_spl_r&PSL_IPL) > ((s)&PSL_IPL)&&((s)&PSL_IPL)!=PSL_IPL1) \
  165.         printf ("%s:%d:spl(%d) ==> spl(%d)!!\n",__FILE__,__LINE__, \
  166.             ((PSL_IPL&_spl_r)>>8), ((PSL_IPL&(s))>>8)); \
  167.         _spl_r; \
  168. })
  169. #else
  170. /*
  171.  * Don't lower IPL below current IPL (unless new IPL is 6)
  172.  */
  173. #define _debug_spl(s) \
  174. ({ \
  175.         register int _spl_r; \
  176. \
  177.         __asm __volatile ("clrl %0; movew sr,%0" : \
  178.                 "&=d" (_spl_r)); \
  179.     if ((((s)&PSL_IPL) >= PSL_IPL6) || (_spl_r&PSL_IPL) < ((s)&PSL_IPL) || ((s)&PSL_IPL) <= PSL_IPL1) \
  180.         __asm __volatile ("movew %0,sr" : : "di" (s)); \
  181.         _spl_r; \
  182. })
  183. #endif
  184.  
  185. #define _spl_no_check(s) \
  186. ({ \
  187.         register int _spl_r; \
  188. \
  189.         __asm __volatile ("clrl %0; movew sr,%0; movew %1,sr" : \
  190.                 "&=d" (_spl_r) : "di" (s)); \
  191.         _spl_r; \
  192. })
  193. #if defined (DEBUGXX)        /* No workee */
  194. #define _spl _debug_spl
  195. #else
  196. #define _spl _spl_no_check
  197. #endif
  198.  
  199. #define spl0()    _spl(PSL_S|PSL_IPL0)
  200. #define spl1()    _spl(PSL_S|PSL_IPL1)
  201. #define spl2()    _spl(PSL_S|PSL_IPL2)
  202. #define spl3()    _spl(PSL_S|PSL_IPL3)
  203. #define spl4()    _spl(PSL_S|PSL_IPL4)
  204. #define spl5()    _spl(PSL_S|PSL_IPL5)
  205. #define spl6()    _spl(PSL_S|PSL_IPL6)
  206. #define spl7()    _spl(PSL_S|PSL_IPL7)
  207.  
  208. #define splnone()    spl0()
  209. #define splsoftclock()    spl1()
  210. #define splsoftnet()    spl1()
  211. #define splbio()    spl3()
  212. #define splnet()    spl3()
  213. #define spltty()    spl4()
  214. #define splimp()    spl4()
  215. #ifndef LEV6_DEFER
  216. #define splclock()    spl6()
  217. #define splstatclock()    spl6()
  218. #define splvm()        spl6()
  219. #define splhigh()    spl7()
  220. #define splsched()    spl7()
  221. #else
  222. #define splclock()    spl4()
  223. #define splstatclock()    spl4()
  224. #define splvm()        spl4()
  225. #define splhigh()    spl4()
  226. #define splsched()    spl4()
  227. #endif
  228.  
  229. #define splx(s)         _spl_no_check(s)
  230.  
  231. #ifdef _KERNEL
  232. void delay __P((int));
  233. void DELAY __P((int));
  234. #endif
  235.  
  236. #endif /* !_MACHINE_PARAM_H_ */
  237.