BSD-SCCS END release
[unix-history] / usr / src / sys / hp300 / include / param.h
index 8f71e79..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,15 +9,16 @@
  *
  * %sccs.include.redist.c%
  *
  *
  * %sccs.include.redist.c%
  *
- * from: Utah $Hdr: machparam.h 1.12 91/01/18$
+ * from: Utah $Hdr: machparam.h 1.16 92/12/20$
  *
  *
- *     @(#)param.h     7.12 (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
 
 /*
  * Round p (pointer or byte index) up to a correctly-aligned value for all
@@ -51,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.
@@ -61,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
 /* 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.
@@ -161,13 +165,71 @@ int       cpuspeed;
 /*
  * Constants/macros for HPUX multiple mapping of user address space.
  * Pages in the first 256Mb are mapped in at every 256Mb segment.
 /*
  * Constants/macros for HPUX multiple mapping of user address space.
  * Pages in the first 256Mb are mapped in at every 256Mb segment.
- *
- * XXX broken in new VM XXX
  */
 #define HPMMMASK       0xF0000000
 #define ISHPMMADDR(v) \
  */
 #define HPMMMASK       0xF0000000
 #define ISHPMMADDR(v) \
-       ((curproc->p_addr->u_pcb.pcb_flags & PCB_HPUXMMAP) && \
+       ((curproc->p_md.md_flags & MDP_HPUXMMAP) && \
+        ((unsigned)(v) & HPMMMASK) && \
         ((unsigned)(v) & HPMMMASK) != HPMMMASK)
 #define HPMMBASEADDR(v) \
        ((unsigned)(v) & ~HPMMMASK)
 #endif
         ((unsigned)(v) & HPMMMASK) != HPMMMASK)
 #define HPMMBASEADDR(v) \
        ((unsigned)(v) & ~HPMMMASK)
 #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_ */