Index: arch/arc/include/intr.h
===================================================================
RCS file: /cvsroot/syssrc/sys/arch/arc/include/intr.h,v
retrieving revision 1.7
diff -u -r1.7 intr.h
--- arch/arc/include/intr.h 2001/01/14 02:00:38 1.7
+++ arch/arc/include/intr.h 2001/03/31 23:25:28
@@ -64,14 +64,7 @@
#ifndef _LOCORE
#include <mips/cpuregs.h>
-
-extern int _splraise __P((int));
-extern int _spllower __P((int));
-extern int _splset __P((int));
-extern int _splget __P((void));
-extern void _splnone __P((void));
-extern void _setsoftintr __P((int));
-extern void _clrsoftintr __P((int));
+#include <mips/psl.h>
#define setsoftclock() _setsoftintr(MIPS_SOFT_INT_MASK_0)
#define setsoftnet() _setsoftintr(MIPS_SOFT_INT_MASK_1)
Index: arch/cobalt/include/intr.h
===================================================================
RCS file: /cvsroot/syssrc/sys/arch/cobalt/include/intr.h,v
retrieving revision 1.9
diff -u -r1.9 intr.h
--- arch/cobalt/include/intr.h 2001/01/14 02:00:39 1.9
+++ arch/cobalt/include/intr.h 2001/03/31 23:25:39
@@ -52,14 +52,7 @@
#ifndef _LOCORE
#include <mips/cpuregs.h>
-
-extern int _splraise(int);
-extern int _spllower(int);
-extern int _splset(int);
-extern int _splget(void);
-extern void _splnone(void);
-extern void _setsoftintr(int);
-extern void _clrsoftintr(int);
+#include <mips/psl.h>
#define setsoftclock() _setsoftintr(MIPS_SOFT_INT_MASK_0)
#define setsoftnet() _setsoftintr(MIPS_SOFT_INT_MASK_1)
Index: arch/hpcmips/include/intr.h
===================================================================
RCS file: /cvsroot/syssrc/sys/arch/hpcmips/include/intr.h,v
retrieving revision 1.8
diff -u -r1.8 intr.h
--- arch/hpcmips/include/intr.h 2001/01/14 02:00:40 1.8
+++ arch/hpcmips/include/intr.h 2001/03/31 23:25:46
@@ -55,14 +55,7 @@
#ifndef _LOCORE
#include <mips/cpuregs.h>
-
-int _splraise __P((int));
-int _spllower __P((int));
-int _splset __P((int));
-int _splget __P((void));
-void _splnone __P((void));
-void _setsoftintr __P((int));
-void _clrsoftintr __P((int));
+#include <mips/psl.h>
#define splhigh() _splraise(MIPS_INT_MASK)
#define spl0() (void)_spllower(0)
Index: arch/mips/include/profile.h
===================================================================
RCS file: /cvsroot/syssrc/sys/arch/mips/include/profile.h,v
retrieving revision 1.15
diff -u -r1.15 profile.h
--- arch/mips/include/profile.h 2000/07/18 06:25:32 1.15
+++ arch/mips/include/profile.h 2001/03/31 23:25:48
@@ -42,13 +42,7 @@
#define _MIPS_PROFILE_H_
#ifdef _KERNEL
- /*
- * Declare non-profiled _splhigh() /_splx() entrypoints for _mcount.
- * see MCOUNT_ENTER and MCOUNT_EXIT.
- */
-#define _KERNEL_MCOUNT_DECL \
- int _splraise_noprof __P((int)); \
- int _splset_noprof __P((int));
+#define _KERNEL_MCOUNT_DECL
#else /* !_KERNEL */
/* Make __mcount static. */
#define _KERNEL_MCOUNT_DECL static
@@ -95,15 +89,8 @@
".set at");
#ifdef _KERNEL
-/*
- * The following two macros do splhigh and splx respectively.
- * We use versions of _splraise() and _splset that don't
- * including profiling support.
- */
-
-#define MCOUNT_ENTER s = _splraise_noprof(MIPS_INT_MASK)
-
-#define MCOUNT_EXIT (void)_splset_noprof(s)
+#define MCOUNT_ENTER s = splhigh()
+#define MCOUNT_EXIT splx(s);
#endif /* _KERNEL */
#endif /* _MIPS_PROFILE_H_ */
Index: arch/mips/include/psl.h
===================================================================
RCS file: /cvsroot/syssrc/sys/arch/mips/include/psl.h,v
retrieving revision 1.14
diff -u -r1.14 psl.h
--- arch/mips/include/psl.h 2000/07/11 06:26:08 1.14
+++ arch/mips/include/psl.h 2001/03/31 23:25:48
@@ -38,6 +38,9 @@
* @(#)psl.h 8.1 (Berkeley) 6/10/93
*/
+#ifndef _MIPS_PSL_H_
+#define _MIPS_PSL_H_ 1
+
/*
* Define PSL_LOWIPL, PSL_USERSET, PSL_USERCLR, USERMODE, BASEPRI
* for MI code, for MIPS1, MIPS3, or both, depending on the
@@ -123,3 +126,123 @@
# define BASEPRI(ps) \
(CPUISMIPS3 ? MIPS3_BASEPRI(ps) : MIPS1_BASEPRI(ps))
#endif
+
+
+static inline int _splmask(int);
+static inline int _splraise(int);
+static inline int _spllower(int);
+static inline void _splset(int);
+static inline void _setsoftintr(int);
+static inline void _clrsoftintr(int);
+static inline void _splnone(void);
+
+
+static inline int
+_splmask(int streg)
+{
+#ifdef MIPS_DYNAMIC_STATUS_MASK
+ streg &= mips_dynamic_status_mask;
+#endif
+ return streg;
+}
+
+static inline int
+_getst(void)
+{
+ int val;
+
+ __asm__ __volatile__("mfc0 %0, $12" : "=r" (val));
+ return val;
+}
+
+static inline void
+_setst(int val)
+{
+ __asm__ __volatile__("mtc0 %0, $12" : : "r" (val));
+}
+
+static inline int
+_getcause(void)
+{
+ int val;
+
+ __asm__ __volatile__("mfc0 %0, $13" : "=r" (val));
+ return val;
+}
+
+static inline void
+_setcause(int val)
+{
+ __asm__ __volatile__("mtc0 %0, $13" : : "r" (val));
+}
+
+
+static inline int
+_splraise(int newipl)
+{
+ int streg;
+
+ streg = _getst();
+ newipl &= MIPS_INT_MASK;
+ _setst(_splmask(streg & ~newipl));
+ return streg & (MIPS_INT_MASK | MIPS_SR_INT_IE);
+}
+
+static inline int
+_spllower(int newipl)
+{
+ int streg;
+
+ streg = _getst();
+ _setst(_splmask((streg & ~MIPS_INT_MASK) | (~newipl & MIPS_INT_MASK)));
+ return streg & (MIPS_INT_MASK | MIPS_SR_INT_IE);
+}
+
+static inline void
+_splset(int newipl)
+{
+ int streg;
+
+ streg = _getst();
+ newipl &= (MIPS_INT_MASK | MIPS_SR_INT_IE);
+ streg &= ~(MIPS_INT_MASK | MIPS_SR_INT_IE);
+ _setst(_splmask(streg | newipl));
+}
+
+static inline void
+_setsoftintr(int setbits)
+{
+ int streg, causereg;
+
+ streg = _getst();
+ _setst(0);
+ __asm__ __volatile__("nop; nop");
+ __asm__ __volatile__("mfc0 %0, $13" : "=r" (causereg));
+ __asm__ __volatile__("mtc0 %0, $13" : : "r" (causereg | setbits));
+ _setst(streg);
+}
+
+static inline void
+_clrsoftintr(int clrbits)
+{
+ int streg, causereg;
+
+ streg = _getst();
+ _setst(0);
+ __asm__ __volatile__("nop; nop");
+ __asm__ __volatile__("mfc0 %0, $13" : "=r" (causereg));
+ __asm__ __volatile__("mtc0 %0, $13" : : "r" (causereg & ~clrbits));
+ _setst(streg);
+}
+
+static inline void
+_splnone(void)
+{
+ int streg;
+
+ __asm__ __volatile__("mtc0 $0, $13");
+ streg = MIPS_INT_MASK | MIPS_SR_INT_IE;
+ _setst(_splmask(streg));
+}
+
+#endif /* _MIPS_PSL_H_ */
Index: arch/mips/mips/locore.S
===================================================================
RCS file: /cvsroot/syssrc/sys/arch/mips/mips/locore.S,v
retrieving revision 1.120
diff -u -r1.120 locore.S
--- arch/mips/mips/locore.S 2000/12/14 21:29:51 1.120
+++ arch/mips/mips/locore.S 2001/03/31 23:25:48
@@ -552,112 +552,6 @@
END(longjmp)
#endif
-
-/*
- * MIPS processor interrupt control
- *
- * Used as building blocks for spl(9) kernel interface.
- */
-LEAF(_splraise)
-XLEAF(_splraise_noprof) # does not get mcount hooks
- mfc0 v0, MIPS_COP_0_STATUS # fetch status register
- and a0, a0, MIPS_INT_MASK # extract INT bits
- nor a0, zero, a0 # bitwise inverse of A0
- and a0, a0, v0 # disable retaining other bits
- DYNAMIC_STATUS_MASK(a0,t0) # machine dependent masking
- mtc0 a0, MIPS_COP_0_STATUS # store back
- nop
- j ra
- and v0, v0, (MIPS_INT_MASK | MIPS_SR_INT_IE)
-END(_splraise)
-
-LEAF(_spllower)
- mfc0 v0, MIPS_COP_0_STATUS # fetch status register
- li v1, ~MIPS_INT_MASK
- and v1, v0, v1 # turn off INT bit
- nor a0, zero, a0 # bitwise inverse of A0
- and a0, a0, MIPS_INT_MASK # extract INT bits
- or a0, a0, v1 # disable making other bits on
- DYNAMIC_STATUS_MASK(a0,t0) # machine dependent masking
- mtc0 a0, MIPS_COP_0_STATUS # store back
- nop
- j ra
- and v0, v0, (MIPS_INT_MASK | MIPS_SR_INT_IE)
-END(_spllower)
-
-LEAF(_splrestore)
- mfc0 v0, MIPS_COP_0_STATUS # fetch status register
- and a0, a0, MIPS_INT_MASK
- li v1, ~MIPS_INT_MASK
- and v1, v1, v0 # turn off every INT bit
- or v1, v1, a0 # set old INT bits
- DYNAMIC_STATUS_MASK(v1,t0) # machine dependent masking
- mtc0 v1, MIPS_COP_0_STATUS # store back
- nop
- j ra
- and v0, v0, MIPS_INT_MASK
-END(_splrestore)
-
-LEAF(_splset)
-XLEAF(_splset_noprof) # does not get mcount hooks
- mfc0 v0, MIPS_COP_0_STATUS # fetch status register
- and a0, a0, (MIPS_INT_MASK | MIPS_SR_INT_IE)
- li v1, ~(MIPS_INT_MASK | MIPS_SR_INT_IE)
- and v1, v1, v0 # turn off every INT bit
- or v1, v1, a0 # set old INT bits
- DYNAMIC_STATUS_MASK(v1,t0) # machine dependent masking
- mtc0 v1, MIPS_COP_0_STATUS # store back
- nop
- j ra
- and v0, v0, (MIPS_INT_MASK | MIPS_SR_INT_IE)
-END(_splset)
-
-LEAF(_splget)
- mfc0 v0, MIPS_COP_0_STATUS # fetch status register
- nop
- j ra
- and v0, v0, (MIPS_INT_MASK | MIPS_SR_INT_IE)
-END(_splget)
-
-LEAF(_setsoftintr)
- mfc0 v1, MIPS_COP_0_STATUS # save status register
- mtc0 zero, MIPS_COP_0_STATUS # disable interrupts (2 cycles)
- nop
- nop
- mfc0 v0, MIPS_COP_0_CAUSE # fetch cause register
- nop
- or v0, v0, a0 # set soft intr. bits
- mtc0 v0, MIPS_COP_0_CAUSE # store back
- mtc0 v1, MIPS_COP_0_STATUS # enable interrupts
- j ra
- nop
-END(_setsoftintr)
-
-LEAF(_clrsoftintr)
- mfc0 v1, MIPS_COP_0_STATUS # save status register
- mtc0 zero, MIPS_COP_0_STATUS # disable interrupts (2 cycles)
- nop
- nop
- mfc0 v0, MIPS_COP_0_CAUSE # fetch cause register
- nor a0, zero, a0 # bitwise inverse of A0
- and v0, v0, a0 # clear soft intr. bits
- mtc0 v0, MIPS_COP_0_CAUSE # store back
- mtc0 v1, MIPS_COP_0_STATUS # enable interrupts
- j ra
- nop
-END(_clrsoftintr)
-
-LEAF(_splnone)
- mtc0 zero, MIPS_COP_0_CAUSE # clear SOFT_INT bits
- li v0, (MIPS_INT_MASK | MIPS_SR_INT_IE)
- DYNAMIC_STATUS_MASK(v0,t0) # machine dependent masking
- mtc0 v0, MIPS_COP_0_STATUS # enable all sources
- nop
- j ra
- nop
-END(_splnone)
-
-
/*
* int copystr(void *kfaddr, void *kdaddr, size_t maxlen, size_t *lencopied)
* Copy a NIL-terminated string, at most maxlen characters long. Return the
Index: arch/mipsco/include/intr.h
===================================================================
RCS file: /cvsroot/syssrc/sys/arch/mipsco/include/intr.h,v
retrieving revision 1.5
diff -u -r1.5 intr.h
--- arch/mipsco/include/intr.h 2001/01/14 02:00:40 1.5
+++ arch/mipsco/include/intr.h 2001/03/31 23:25:50
@@ -56,14 +56,7 @@
#ifdef _KERNEL
#ifndef _LOCORE
#include <mips/cpuregs.h>
-
-extern int _splraise __P((int));
-extern int _spllower __P((int));
-extern int _splset __P((int));
-extern int _splget __P((void));
-extern void _splnone __P((void));
-extern void _setsoftintr __P((int));
-extern void _clrsoftintr __P((int));
+#include <mips/psl.h>
/*
* software simulated interrupt
Index: arch/newsmips/include/intr.h
===================================================================
RCS file: /cvsroot/syssrc/sys/arch/newsmips/include/intr.h,v
retrieving revision 1.10
diff -u -r1.10 intr.h
--- arch/newsmips/include/intr.h 2001/01/14 02:00:41 1.10
+++ arch/newsmips/include/intr.h 2001/03/31 23:25:50
@@ -45,14 +45,7 @@
#ifdef _KERNEL
#ifndef _LOCORE
#include <mips/cpuregs.h>
-
-extern int _splraise __P((int));
-extern int _spllower __P((int));
-extern int _splset __P((int));
-extern int _splget __P((void));
-extern void _splnone __P((void));
-extern void _setsoftintr __P((int));
-extern void _clrsoftintr __P((int));
+#include <mips/psl.h>
/*
* software simulated interrupt
Index: arch/pmax/include/intr.h
===================================================================
RCS file: /cvsroot/syssrc/sys/arch/pmax/include/intr.h,v
retrieving revision 1.18
diff -u -r1.18 intr.h
--- arch/pmax/include/intr.h 2001/01/14 02:00:41 1.18
+++ arch/pmax/include/intr.h 2001/03/31 23:25:50
@@ -47,14 +47,7 @@
#ifndef _LOCORE
#include <mips/cpuregs.h>
-
-int _splraise __P((int));
-int _spllower __P((int));
-int _splset __P((int));
-int _splget __P((void));
-void _splnone __P((void));
-void _setsoftintr __P((int));
-void _clrsoftintr __P((int));
+#include <mips/psl.h>
#define splhigh() _splraise(MIPS_INT_MASK)
#define spl0() (void)_spllower(0)
Index: arch/sgimips/include/intr.h
===================================================================
RCS file: /cvsroot/syssrc/sys/arch/sgimips/include/intr.h,v
retrieving revision 1.5
diff -u -r1.5 intr.h
--- arch/sgimips/include/intr.h 2001/01/14 02:00:42 1.5
+++ arch/sgimips/include/intr.h 2001/03/31 23:25:51
@@ -61,14 +61,7 @@
#ifndef _LOCORE
#include <mips/cpuregs.h>
-
-extern int _splraise(int);
-extern int _spllower(int);
-extern int _splset(int);
-extern int _splget(void);
-extern void _splnone(void);
-extern void _setsoftintr(int);
-extern void _clrsoftintr(int);
+#include <mips/psl.h>
#define setsoftclock() _setsoftintr(MIPS_SOFT_INT_MASK_0)
#define setsoftnet() _setsoftintr(MIPS_SOFT_INT_MASK_1)