BSD-SCCS END release
[unix-history] / usr / src / sys / hp300 / include / param.h
index 4b703ce..22c3f35 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright (c) 1988 University of Utah.
 /*
  * Copyright (c) 1988 University of Utah.
- * Copyright (c) 1982, 1986, 1990 The Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1982, 1986, 1990, 1993
+ *     The Regents of the University of California.  All rights reserved.
  *
  * This code is derived from software contributed to Berkeley by
  * the Systems Programming Group of the University of Utah Computer
  *
  * This code is derived from software contributed to Berkeley by
  * the Systems Programming Group of the University of Utah Computer
@@ -9,22 +9,31 @@
  *
  * %sccs.include.redist.c%
  *
  *
  * %sccs.include.redist.c%
  *
- * from: Utah $Hdr: machparam.h 1.11 89/08/14$
+ * from: Utah $Hdr: machparam.h 1.16 92/12/20$
  *
  *
- *     @(#)param.h     7.5 (Berkeley) %G%
+ *     @(#)param.h     8.4 (Berkeley) %G%
  */
 
 /*
  * Machine dependent constants for HP9000 series 300.
  */
 #define        MACHINE "hp300"
  */
 
 /*
  * Machine dependent constants for HP9000 series 300.
  */
 #define        MACHINE "hp300"
+#define NCPUS  1
+
+/*
+ * Round p (pointer or byte index) up to a correctly-aligned value for all
+ * data types (int, long, ...).   The result is u_int and must be cast to
+ * any desired pointer type.
+ */
+#define        ALIGNBYTES      3
+#define        ALIGN(p)        (((u_int)(p) + ALIGNBYTES) &~ ALIGNBYTES)
 
 #define        NBPG            4096            /* bytes/page */
 #define        PGOFSET         (NBPG-1)        /* byte offset into page */
 #define        PGSHIFT         12              /* LOG2(NBPG) */
 #define        NPTEPG          (NBPG/(sizeof (struct pte)))
 
 
 #define        NBPG            4096            /* bytes/page */
 #define        PGOFSET         (NBPG-1)        /* byte offset into page */
 #define        PGSHIFT         12              /* LOG2(NBPG) */
 #define        NPTEPG          (NBPG/(sizeof (struct pte)))
 
-#define NBSEG          (1024*NBPG)     /* bytes/segment */
+#define NBSEG          0x400000        /* bytes/segment */
 #define        SEGOFSET        (NBSEG-1)       /* byte offset into segment */
 #define        SEGSHIFT        22              /* LOG2(NBSEG) */
 
 #define        SEGOFSET        (NBSEG-1)       /* byte offset into segment */
 #define        SEGSHIFT        22              /* LOG2(NBSEG) */
 
@@ -43,7 +52,7 @@
 #define        SSIZE           1               /* initial stack size/NBPG */
 #define        SINCR           1               /* increment of stack/NBPG */
 
 #define        SSIZE           1               /* initial stack size/NBPG */
 #define        SINCR           1               /* increment of stack/NBPG */
 
-#define        UPAGES          3               /* pages of u-area */
+#define        UPAGES          2               /* pages of u-area */
 
 /*
  * Constants related to network buffer management.
 
 /*
  * Constants related to network buffer management.
@@ -53,8 +62,8 @@
  * of the hardware page size.
  */
 #define        MSIZE           128             /* size of an mbuf */
  * of the hardware page size.
  */
 #define        MSIZE           128             /* size of an mbuf */
-#define        MCLBYTES        1024
-#define        MCLSHIFT        10
+#define        MCLBYTES        2048            /* large enough for ether MTU */
+#define        MCLSHIFT        11
 #define        MCLOFSET        (MCLBYTES - 1)
 #ifndef NMBCLUSTERS
 #ifdef GATEWAY
 #define        MCLOFSET        (MCLBYTES - 1)
 #ifndef NMBCLUSTERS
 #ifdef GATEWAY
@@ -68,7 +77,7 @@
  * Size of kernel malloc arena in CLBYTES-sized logical pages
  */ 
 #ifndef NKMEMCLUSTERS
  * Size of kernel malloc arena in CLBYTES-sized logical pages
  */ 
 #ifndef NKMEMCLUSTERS
-#define        NKMEMCLUSTERS   (512*1024/CLBYTES)
+#define        NKMEMCLUSTERS   (2048*1024/CLBYTES)
 #endif
 
 /* pages ("clicks") (4096 bytes) to disk blocks */
 #endif
 
 /* pages ("clicks") (4096 bytes) to disk blocks */
 /* bytes to pages */
 #define        btoc(x) (((unsigned)(x)+(NBPG-1))>>PGSHIFT)
 
 /* bytes to pages */
 #define        btoc(x) (((unsigned)(x)+(NBPG-1))>>PGSHIFT)
 
+#define LABELSECTOR    (1024/DEV_BSIZE)
+#define LABELOFFSET    0
+
 #define        btodb(bytes)                    /* calculates (bytes / DEV_BSIZE) */ \
 #define        btodb(bytes)                    /* calculates (bytes / DEV_BSIZE) */ \
-       ((unsigned)(bytes) >> DEV_BSHIFT)
+       ((bytes) >> DEV_BSHIFT)
 #define        dbtob(db)                       /* calculates (db * DEV_BSIZE) */ \
 #define        dbtob(db)                       /* calculates (db * DEV_BSIZE) */ \
-       ((unsigned)(db) << DEV_BSHIFT)
+       ((db) << DEV_BSHIFT)
 
 /*
  * Map a ``block device block'' to a file system block.
 
 /*
  * Map a ``block device block'' to a file system block.
 /*
  * Mach derived conversion macros
  */
 /*
  * Mach derived conversion macros
  */
-#define hp300_round_seg(x)     ((((unsigned)(x)) + NBSEG - 1) & ~(NBSEG-1))
-#define hp300_trunc_seg(x)     ((unsigned)(x) & ~(NBSEG-1))
 #define hp300_round_page(x)    ((((unsigned)(x)) + NBPG - 1) & ~(NBPG-1))
 #define hp300_trunc_page(x)    ((unsigned)(x) & ~(NBPG-1))
 #define hp300_round_page(x)    ((((unsigned)(x)) + NBPG - 1) & ~(NBPG-1))
 #define hp300_trunc_page(x)    ((unsigned)(x) & ~(NBPG-1))
-#define hp300_btos(x)          ((unsigned)(x) >> SEGSHIFT)
-#define hp300_stob(x)          ((unsigned)(x) << SEGSHIFT)
 #define hp300_btop(x)          ((unsigned)(x) >> PGSHIFT)
 #define hp300_ptob(x)          ((unsigned)(x) << PGSHIFT)
 
 #define hp300_btop(x)          ((unsigned)(x) >> PGSHIFT)
 #define hp300_ptob(x)          ((unsigned)(x) << PGSHIFT)
 
 #define spl6()  _spl(PSL_S|PSL_IPL6)
 #define spl7()  _spl(PSL_S|PSL_IPL7)
 
 #define spl6()  _spl(PSL_S|PSL_IPL6)
 #define spl7()  _spl(PSL_S|PSL_IPL7)
 
-#define splsoftclock()  spl1()
-#define splnet()        spl1()
-#define splbio()        spl5()
-#define splimp()        spl5()
-#define spltty()        spl5()
-#define splclock()      spl6()
-#define splvm()         spl6()
-#define splhigh()       spl7()
-#define splsched()      spl7()
+#define splsoftclock() spl1()
+#define splnet()       spl1()
+#define splbio()       spl5()
+#define splimp()       spl5()
+#define spltty()       spl5()
+#define splclock()     spl6()
+#define splstatclock() spl6()
+#define splvm()                spl6()
+#define splhigh()      spl7()
+#define splsched()     spl7()
 
 /* watch out for side effects */
 #define splx(s)         (s & PSL_IPL ? _spl(s) : spl0())
 
 /* watch out for side effects */
 #define splx(s)         (s & PSL_IPL ? _spl(s) : spl0())
 int    cpuspeed;
 #define        DELAY(n)        { register int N = cpuspeed * (n); while (--N > 0); }
 #endif
 int    cpuspeed;
 #define        DELAY(n)        { register int N = cpuspeed * (n); while (--N > 0); }
 #endif
-
-#else KERNEL
+#else
 #define        DELAY(n)        { register int N = (n); while (--N > 0); }
 #define        DELAY(n)        { register int N = (n); while (--N > 0); }
-#endif KERNEL
+#endif
 
 #ifdef HPUXCOMPAT
 /*
 
 #ifdef HPUXCOMPAT
 /*
@@ -159,7 +167,69 @@ int        cpuspeed;
  * Pages in the first 256Mb are mapped in at every 256Mb segment.
  */
 #define HPMMMASK       0xF0000000
  * Pages in the first 256Mb are mapped in at every 256Mb segment.
  */
 #define HPMMMASK       0xF0000000
-#define ISHPMMADDR(v)  \
-    ((curproc->p_addr->u_pcb.pcb_flags&PCB_HPUXMMAP) && ((unsigned)(v)&HPMMMASK) != HPMMMASK)
-#define HPMMBASEADDR(v)        ((unsigned)(v) & ~HPMMMASK)
+#define ISHPMMADDR(v) \
+       ((curproc->p_md.md_flags & MDP_HPUXMMAP) && \
+        ((unsigned)(v) & HPMMMASK) && \
+        ((unsigned)(v) & HPMMMASK) != HPMMMASK)
+#define HPMMBASEADDR(v) \
+       ((unsigned)(v) & ~HPMMMASK)
 #endif
 #endif
+
+#ifndef _SIMPLELOCK_H_
+#define _SIMPLELOCK_H_
+/*
+ * A simple spin lock.
+ *
+ * This structure only sets one bit of data, but is sized based on the
+ * minimum word size that can be operated on by the hardware test-and-set
+ * instruction. It is only needed for multiprocessors, as uniprocessors
+ * will always run to completion or a sleep. It is an error to hold one
+ * of these locks while a process is sleeping.
+ */
+struct simplelock {
+       int     lock_data;
+};
+
+#if !defined(DEBUG) && NCPUS > 1
+/*
+ * The simple-lock routines are the primitives out of which the lock
+ * package is built. The machine-dependent code must implement an
+ * atomic test_and_set operation that indivisibly sets the simple lock
+ * to non-zero and returns its old value. It also assumes that the
+ * setting of the lock to zero below is indivisible. Simple locks may
+ * only be used for exclusive locks.
+ */
+static __inline void
+simple_lock_init(lkp)
+       struct simplelock *lkp;
+{
+
+       lkp->lock_data = 0;
+}
+
+static __inline void
+simple_lock(lkp)
+       __volatile struct simplelock *lkp;
+{
+
+       while (test_and_set(&lkp->lock_data))
+               continue;
+}
+
+static __inline int
+simple_lock_try(lkp)
+       __volatile struct simplelock *lkp;
+{
+
+       return (!test_and_set(&lkp->lock_data))
+}
+
+static __inline void
+simple_unlock(lkp)
+       __volatile struct simplelock *lkp;
+{
+
+       lkp->lock_data = 0;
+}
+#endif /* NCPUS > 1 */
+#endif /* !_SIMPLELOCK_H_ */