summaryrefslogtreecommitdiff
path: root/sys/arch/mac68k/include/psl.h
diff options
context:
space:
mode:
authorbriggs <briggs@cvs.openbsd.org>1996-02-20 05:38:46 +0000
committerbriggs <briggs@cvs.openbsd.org>1996-02-20 05:38:46 +0000
commite975a0a5924fe5f4ed8329164adf371e255e6fea (patch)
treec821803359c43bfdbaa8b58c11546500e83f431d /sys/arch/mac68k/include/psl.h
parent1079ede622eaed2a151bd314237bfd00180aabe9 (diff)
A few more things from NetBSD:
- Move spl stuff from param.h to psl.h. Prototype delay() in param.h. - param.h: Fix #includes. - param.h: Move splimp to 2 and spltty to 1.
Diffstat (limited to 'sys/arch/mac68k/include/psl.h')
-rw-r--r--sys/arch/mac68k/include/psl.h53
1 files changed, 52 insertions, 1 deletions
diff --git a/sys/arch/mac68k/include/psl.h b/sys/arch/mac68k/include/psl.h
index 327f09514ed..a2bb48afb9e 100644
--- a/sys/arch/mac68k/include/psl.h
+++ b/sys/arch/mac68k/include/psl.h
@@ -1,3 +1,54 @@
-/* $NetBSD: psl.h,v 1.4 1994/10/26 08:46:42 cgd Exp $ */
+/* $NetBSD: psl.h,v 1.5 1996/02/17 14:50:42 briggs Exp $ */
+#ifndef PSL_C
#include <m68k/psl.h>
+
+#if defined(_KERNEL) && !defined(_LOCORE)
+/*
+ * spl functions; all but spl0 are done in-line
+ */
+
+#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)
+
+/* These should be used for:
+ 1) ensuring mutual exclusion (why use processor level?)
+ 2) allowing faster devices to take priority
+
+ Note that on the mac, most things are masked at spl1, almost
+ everything at spl2, and everything but the panic switch and
+ power at spl4.
+ */
+#define splsoftclock() spl1() /* disallow softclock */
+#define splsoftnet() spl1() /* disallow network */
+#define splclock() spl1() /* disallow clock interrupt */
+#define spltty() spl1() /* disallow tty (softserial&adb) interrupts */
+#define splbio() spl2() /* disallow block I/O */
+#define splnet() spl2() /* disallow network */
+#define splimp() spl2() /* disallow imput */
+#define splhigh() spl7() /* disallow everything */
+#define splsched() spl7() /* disallow scheduling */
+
+#define splstatclock() spl2() /* This should be splclock... */
+
+/* watch out for side effects */
+#define splx(s) ((s) & PSL_IPL ? _spl(s) : spl0())
+
+#endif /* _KERNEL && !_LOCORE */
+
+#endif /* ndef PSL_C */