changes to pass clock frame by reference rather than value;
[unix-history] / usr / src / sys / hp300 / include / param.h
index 4d57f24..8f71e79 100644 (file)
@@ -9,9 +9,9 @@
  *
  * %sccs.include.redist.c%
  *
  *
  * %sccs.include.redist.c%
  *
- * from: Utah $Hdr: machparam.h 1.11 89/08/14$
+ * from: Utah $Hdr: machparam.h 1.12 91/01/18$
  *
  *
- *     @(#)param.h     7.3 (Berkeley) %G%
+ *     @(#)param.h     7.12 (Berkeley) %G%
  */
 
 /*
  */
 
 /*
  */
 #define        MACHINE "hp300"
 
  */
 #define        MACHINE "hp300"
 
+/*
+ * 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) */
 
@@ -39,6 +47,7 @@
 #define        CLSIZE          1
 #define        CLSIZELOG2      0
 
 #define        CLSIZE          1
 #define        CLSIZELOG2      0
 
+/* NOTE: SSIZE, SINCR and UPAGES must be multiples of CLSIZE */
 #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 */
 
  * 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
 
 #endif
 
-/*
- * Some macros for units conversion
- */
-/* Core clicks (4096 bytes) to segments and vice versa */
-#define        ctos(x) (x)
-#define        stoc(x) (x)
-
-/* Core clicks (4096 bytes) to disk blocks */
+/* pages ("clicks") (4096 bytes) to disk blocks */
 #define        ctod(x) ((x)<<(PGSHIFT-DEV_BSHIFT))
 #define        dtoc(x) ((x)>>(PGSHIFT-DEV_BSHIFT))
 #define        dtob(x) ((x)<<DEV_BSHIFT)
 
 #define        ctod(x) ((x)<<(PGSHIFT-DEV_BSHIFT))
 #define        dtoc(x) ((x)>>(PGSHIFT-DEV_BSHIFT))
 #define        dtob(x) ((x)<<DEV_BSHIFT)
 
-/* clicks to bytes */
+/* pages to bytes */
 #define        ctob(x) ((x)<<PGSHIFT)
 
 #define        ctob(x) ((x)<<PGSHIFT)
 
-/* bytes to clicks */
+/* bytes to pages */
 #define        btoc(x) (((unsigned)(x)+(NBPG-1))>>PGSHIFT)
 
 #define        btodb(bytes)                    /* calculates (bytes / DEV_BSIZE) */ \
 #define        btoc(x) (((unsigned)(x)+(NBPG-1))>>PGSHIFT)
 
 #define        btodb(bytes)                    /* calculates (bytes / DEV_BSIZE) */ \
@@ -95,8 +97,8 @@
 
 /*
  * Map a ``block device block'' to a file system block.
 
 /*
  * Map a ``block device block'' to a file system block.
- * This should be device dependent, and will be if we
- * add an entry to cdevsw/bdevsw for that purpose.
+ * This should be device dependent, and should use the bsize
+ * field from the disk label.
  * For now though just use DEV_BSIZE.
  */
 #define        bdbtofsb(bn)    ((bn) / (BLKDEV_IOSIZE/DEV_BSIZE))
  * For now though just use DEV_BSIZE.
  */
 #define        bdbtofsb(bn)    ((bn) / (BLKDEV_IOSIZE/DEV_BSIZE))
 /*
  * 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)
 
 /*
- * Macros to decode processor status word.
+ * spl functions; all but spl0 are done in-line
  */
  */
-#define        USERMODE(ps)    (((ps) & PSL_S) == 0)
-#define        BASEPRI(ps)     (((ps) & PSL_IPL7) == 0)
+#include <machine/psl.h>
+
+#define _spl(s) \
+({ \
+        register int _spl_r; \
+\
+        asm __volatile ("clrl %0; movew sr,%0; movew %1,sr" : \
+                "&=d" (_spl_r) : "di" (s)); \
+        _spl_r; \
+})
+
+/* spl0 requires checking for software interrupts */
+#define spl1()  _spl(PSL_S|PSL_IPL1)
+#define spl2()  _spl(PSL_S|PSL_IPL2)
+#define spl3()  _spl(PSL_S|PSL_IPL3)
+#define spl4()  _spl(PSL_S|PSL_IPL4)
+#define spl5()  _spl(PSL_S|PSL_IPL5)
+#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 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())
 
 #ifdef KERNEL
 #ifndef LOCORE
 int    cpuspeed;
 #define        DELAY(n)        { register int N = cpuspeed * (n); while (--N > 0); }
 #endif
 
 #ifdef KERNEL
 #ifndef LOCORE
 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
 /*
  * Constants/macros for HPUX multiple mapping of user address space.
  * Pages in the first 256Mb are mapped in at every 256Mb segment.
 
 #ifdef HPUXCOMPAT
 /*
  * 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 HPMMMASK       0xF0000000
-#define ISHPMMADDR(v)  \
-    ((u.u_pcb.pcb_flags&PCB_HPUXMMAP) && ((unsigned)(v)&HPMMMASK) != HPMMMASK)
-#define HPMMBASEADDR(v)        ((unsigned)(v) & ~HPMMMASK)
+#define ISHPMMADDR(v) \
+       ((curproc->p_addr->u_pcb.pcb_flags & PCB_HPUXMMAP) && \
+        ((unsigned)(v) & HPMMMASK) != HPMMMASK)
+#define HPMMBASEADDR(v) \
+       ((unsigned)(v) & ~HPMMMASK)
 #endif
 #endif