]> git.ozlabs.org Git - ppp.git/blobdiff - NeXT/spl.h
Update from NeXT-ppp-2.2-0.4.6
[ppp.git] / NeXT / spl.h
diff --git a/NeXT/spl.h b/NeXT/spl.h
new file mode 100644 (file)
index 0000000..120f480
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ *     File:   spl.h
+ *     Author: Avadis Tevanian, Jr.
+ *
+ *     Define inline macros for spl routines.
+ *     
+ * HISTORY
+ *
+ * 14-May-90  Gregg Kellogg (gk) at NeXT
+ *     Changed SPLCLOCK from 6 to 3, as much scheduling code expects
+ *     splclock() == splsched().  Added splusclock().
+ *
+ * 19-Jun-89  Mike DeMoney (mike) at NeXT
+ *     Modified to allow spl assertions in spl_measured.h
+ */
+
+#ifndef        _KERNSERV_M68K_SPL_H_
+#define        _KERNSERV_M68K_SPL_H_
+
+#ifdef KERNEL_BUILD
+#import <iplmeas.h>
+#else  KERNEL_BUILD
+/* #import <mach/features.h> */
+#endif KERNEL_BUILD
+
+#import <bsd/m68k/psl.h>
+
+#if    NIPLMEAS && !defined(NO_IPLMEAS)
+#import <machdep/m68k/spl_measured.h>
+#endif NIPLMEAS && !defined(NO_IPLMEAS)
+
+#ifndef        SPLU_MACRO
+
+#ifdef ASSEMBLER
+#define        SPLU_MACRO(ipl) \
+       movw    sr,d0; \
+       movw    \#((ipl)*256 + 0x2000),sr;
+
+#define        splx(nsr) \
+       movw    sr,d0; \
+       movw    nsr,sr;
+
+#else  ASSEMBLER
+
+#define SPLU_MACRO(x) \
+({ register short ret; \
+       asm volatile ("movw     sr,%0" : "=dm" (ret)); \
+       asm volatile ("movw     %1,sr" : "=m" (*(char *)0): "Jdm" ((short)(x)*256+0x2000)); \
+       ret; \
+})
+
+#define splx(x) \
+({ register short ret; \
+       asm volatile ("movw     sr,%0" : "=dm" (ret)); \
+       asm volatile ("movw     %1,sr" : "=m" (*(char *)0): "Jdm" ((short)x)); \
+       ret; \
+})
+
+#endif ASSEMBLER
+
+#define        SPLD_MACRO(ipl) SPLU_MACRO(ipl)
+#define        spln(x)         splx(x)
+
+#endif SPLU_MACRO
+
+#define ipltospl(ipl)  (SR_SUPER | ((ipl) << 8))
+
+/*
+ *     Define spls as the usual numbers (which should never be used
+ *     directly.
+ */
+
+#define spl0() SPLD_MACRO(0)
+#define spl1() SPLU_MACRO(1)
+#define spl2() SPLU_MACRO(2)
+#define spl3() SPLU_MACRO(3)
+#define spl4() SPLU_MACRO(4)
+#define spl5() SPLU_MACRO(5)
+#define spl6() SPLU_MACRO(6)
+#define spl7() SPLU_MACRO(7)
+
+/*
+ *     Define spl mnemonics.
+ */
+#define IPLHIGH                7
+#define IPLDMA         6
+#define IPLUSCLOCK     6
+#define IPLSCC         5
+#define IPLCLOCK       3
+#define IPLBIO         3
+#define IPLSCHED       3
+#define IPLIMP         3
+#define IPLVM          3
+#define IPLNET         2
+#define IPLTTY         1
+#define IPLSOFTCLOCK   1
+
+#define splhigh()      SPLU_MACRO(IPLHIGH)
+#define splusclock()   SPLU_MACRO(IPLUSCLOCK)
+#define spldma()       SPLU_MACRO(IPLDMA)
+#define splscc()       SPLU_MACRO(IPLSCC)
+#define splclock()     SPLU_MACRO(IPLCLOCK)
+#define splbio()       SPLU_MACRO(IPLBIO)
+#define splsched()     SPLU_MACRO(IPLSCHED)
+#define splimp()       SPLU_MACRO(IPLIMP)
+#define splvm()                SPLU_MACRO(IPLVM)
+#define splnet()       SPLU_MACRO(IPLNET)
+#define spltty()       SPLU_MACRO(IPLTTY)
+#define splsoftclock() SPLU_MACRO(IPLSOFTCLOCK)
+
+#endif _KERNSERV_M68K_SPL_H_