Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/vax/include Move spl macros from <machine/param.h> ...



details:   https://anonhg.NetBSD.org/src/rev/85141564e81c
branches:  trunk
changeset: 487078:85141564e81c
user:      matt <matt%NetBSD.org@localhost>
date:      Fri Jun 02 21:47:02 2000 +0000

description:
Move spl macros from <machine/param.h> to <machine/intr.h>
Fix botch on my part and make the IPL_* match reality on VAX.
Redefine spl macro using the symbolic IPL_ instead of being hardcoded.
Move schedsoftnet, schedsoftclock from <machine/cpu.h> to <machine/intr.h>
Add a _setsirr macro for schedsoft*.
Add softintr function and framework.

diffstat:

 sys/arch/vax/include/cpu.h   |    5 +-
 sys/arch/vax/include/intr.h  |  135 ++++++++++++++++++++++++++++++++++++++----
 sys/arch/vax/include/param.h |   46 +--------------
 3 files changed, 123 insertions(+), 63 deletions(-)

diffs (234 lines):

diff -r a9b1b0213d8b -r 85141564e81c sys/arch/vax/include/cpu.h
--- a/sys/arch/vax/include/cpu.h        Fri Jun 02 21:39:54 2000 +0000
+++ b/sys/arch/vax/include/cpu.h        Fri Jun 02 21:47:02 2000 +0000
@@ -1,4 +1,4 @@
-/*      $NetBSD: cpu.h,v 1.49 2000/05/31 23:55:52 matt Exp $      */
+/*      $NetBSD: cpu.h,v 1.50 2000/06/02 21:47:02 matt Exp $      */
 
 /*
  * Copyright (c) 1994 Ludd, University of Lule}, Sweden
@@ -111,9 +111,6 @@
 
 extern int mastercpu;
 
-#define        setsoftnet()    mtpr(12,PR_SIRR)
-#define setsoftclock() mtpr(8,PR_SIRR)
-
 /*
  * Notify the current process (p) that it has a signal pending,
  * process as soon as possible.
diff -r a9b1b0213d8b -r 85141564e81c sys/arch/vax/include/intr.h
--- a/sys/arch/vax/include/intr.h       Fri Jun 02 21:39:54 2000 +0000
+++ b/sys/arch/vax/include/intr.h       Fri Jun 02 21:47:02 2000 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: intr.h,v 1.1 1998/08/18 23:55:00 matt Exp $    */
+/*     $NetBSD: intr.h,v 1.2 2000/06/02 21:47:02 matt Exp $    */
 
 /*
  * Copyright (c) 1998 Matt Thomas.
@@ -32,26 +32,131 @@
 #ifndef _VAX_INTR_H_
 #define _VAX_INTR_H_
 
+#include <sys/queue.h>
+
 /* Define the various Interrupt Priority Levels */
 
 /* Interrupt Priority Levels are not mutually exclusive. */
 
-#define IPL_BIO                0       /* block I/O */
-#define IPL_NET                1       /* network */
-#define IPL_TTY                2       /* terminal */
-#define IPL_IMP                3       /* memory allocation */
-#define        IPL_AUDIO       4       /* audio */
-#define IPL_CLOCK      5       /* clock */
-#define IPL_NONE       6
+/* Hardware interrupt levels are 16 (0x10) thru 31 (0x1f)
+ */
+#define IPL_HIGH       0x1f    /* high -- blocks all interrupts */
+#define IPL_CLOCK      0x18    /* clock */
+#define IPL_UBA                0x17    /* unibus adapters */
+#define IPL_IMP                0x17    /* memory allocation */
+#define IPL_BIO                0x15    /* block I/O */
+#define IPL_NET                0x15    /* network */
+#define IPL_TTY                0x15    /* terminal */
+#define IPL_AUDIO      0x15    /* audio */
+#define IPL_CONSMEDIA  0x14    /* console media */
+
+/* Software interrupt level s are 0 (0x00) thru 15 (0x0f)
+ */
+#define IPL_SOFTDDB    0x0f    /* used by DDB on VAX */
+#define IPL_SOFTSERIAL 0x0d    /* soft serial */
+#define IPL_SOFTNET    0x0c    /* soft network */
+#define IPL_SOFTCLOCK  0x08
+#define IPL_NONE       0x00
+
+#define IPL_LEVELS     32
+
+#define IST_UNUSABLE   -1      /* interrupt cannot be used */
+#define IST_NONE       0       /* none (dummy) */
+#define IST_PULSE      1       /* pulsed */
+#define IST_EDGE       2       /* edge-triggered */
+#define IST_LEVEL      3       /* level-triggered */
+
 
-#define IPL_LEVELS     7
+#ifdef _KERNEL
+#ifndef lint
+#define splx(reg)                                              \
+({                                                             \
+       register int val;                                       \
+       __asm __volatile ("mfpr $0x12,%0;mtpr %1,$0x12"         \
+                               : "&=g" (val)                   \
+                               : "g" (reg));                   \
+       val;                                                    \
+})
+
+#define _splraise(reg)                                         \
+({                                                             \
+       register int val;                                       \
+       __asm __volatile ("mfpr $0x12,%0"                       \
+                               : "&=g" (val)                   \
+                               : );                            \
+       if ((reg) > val) {                                      \
+               __asm __volatile ("mtpr %0,$0x12"               \
+                               :                               \
+                               : "g" (reg));                   \
+       }                                                       \
+       val;                                                    \
+})
+#define _setsirr(reg)                                          \
+({                                                             \
+       __asm __volatile ("mtpr %0,$0x14"                       \
+                               :                               \
+                               : "g" (reg));                   \
+})
+#endif
 
-#define        IST_UNUSABLE    -1      /* interrupt cannot be used */
-#define        IST_NONE        0       /* none (dummy) */
-#define        IST_PULSE       1       /* pulsed */
-#define        IST_EDGE        2       /* edge-triggered */
-#define        IST_LEVEL       3       /* level-triggered */
+#define spl0()         splx(IPL_NONE)                  /* IPL0  */
+#define spllowersoftclock() splx(IPL_SOFTCLOCK)                /* IPL08 */
+#define splsoftclock() _splraise(IPL_SOFTCLOCK)        /* IPL08 */
+#define splsoftnet()   _splraise(IPL_SOFTNET)          /* IPL0C */
+#define splsoftserial()        _splraise(IPL_SOFTSERIAL)       /* IPL0D */
+#define splddb()       _splraise(IPL_SOFTDDB)          /* IPL0F */
+#define splconsmedia() _splraise(IPL_CONSMEDIA)        /* IPL14 */
+#define splbio()       _splraise(IPL_BIO)              /* IPL15 */
+#define splnet()       _splraise(IPL_NET)              /* IPL15 */
+#define spltty()       _splraise(IPL_TTY)              /* IPL15 */
+#define splimp()       _splraise(IPL_IMP)              /* IPL17 */
+#define splclock()     _splraise(IPL_CLOCK)            /* IPL18 */
+#define splhigh()      _splraise(IPL_HIGH)             /* IPL1F */
+#define splstatclock() splclock()
+
+/* These are better to use when playing with VAX buses */
+#define spl4()         splx(0x14)
+#define spl5()         splx(0x15)
+#define spl6()         splx(0x16)
+#define spl7()         splx(0x17)
+
+/* schedule software interrupts
+ */
+#define setsoftddb()   _setsirr(IPL_SOFTDDB)
+#define setsoftserial()        _setsirr(IPL_SOFTSERIAL)
+#define setsoftnet()   _setsirr(IPL_SOFTNET)
+#define setsoftclock() _setsirr(IPL_SOFTCLOCK)
+
+#define __GENERIC_SOFT_INTERRUPTS
 
-#include <machine/param.h>
+#if !defined(_LOCORE)
+LIST_HEAD(sh_head, softintr_handler);
+
+struct softintr_head {
+       int shd_ipl;
+       struct sh_head shd_intrs;
+};
+
+struct softintr_handler {
+       struct softintr_head *sh_head;
+       LIST_ENTRY(softintr_handler) sh_link;
+       void (*sh_func)(void *);
+       void *sh_arg;
+       int sh_pending;
+};
 
+extern void *softintr_establish(int, void (*)(void *), void *);
+extern void softintr_disestablish(void *);
+
+static __inline void
+softintr_schedule(void *arg)
+{
+       struct softintr_handler * const sh = arg;
+       int s = _splraise(sh->sh_head->shd_ipl);        /* movl @(r0), ... */
+       sh->sh_pending = 1;
+       _setsirr(sh->sh_head->shd_ipl);
+       splx(s);
+}
+#endif /* _LOCORE */
+#endif /* _KERNEL */
 #endif /* _VAX_INTR_H */
diff -r a9b1b0213d8b -r 85141564e81c sys/arch/vax/include/param.h
--- a/sys/arch/vax/include/param.h      Fri Jun 02 21:39:54 2000 +0000
+++ b/sys/arch/vax/include/param.h      Fri Jun 02 21:47:02 2000 +0000
@@ -1,4 +1,4 @@
-/*      $NetBSD: param.h,v 1.42 2000/03/07 00:05:59 matt Exp $    */
+/*      $NetBSD: param.h,v 1.43 2000/06/02 21:47:02 matt Exp $    */
 /*-
  * Copyright (c) 1990 The Regents of the University of California.
  * All rights reserved.
@@ -161,49 +161,7 @@
 #define        bdbtofsb(bn)    ((bn) / (BLKDEV_IOSIZE/DEV_BSIZE))
 
 #ifdef _KERNEL
-#ifndef lint
-#define splx(reg)                                              \
-({                                                             \
-       register int val;                                       \
-       __asm __volatile ("mfpr $0x12,%0;mtpr %1,$0x12"         \
-                               : "&=g" (val)                   \
-                               : "g" (reg));                   \
-       val;                                                    \
-})
-
-#define        _splraise(reg)                                          \
-({                                                             \
-       register int val;                                       \
-       __asm __volatile ("mfpr $0x12,%0"                       \
-                               : "&=g" (val)                   \
-                               : );                            \
-       if ((reg) > val) {                                      \
-               __asm __volatile ("mtpr %0,$0x12"               \
-                               :                               \
-                               : "g" (reg));                   \
-       }                                                       \
-       val;                                                    \
-})
-#endif
-
-#define        spl0()          splx(0)         /* IPL0  */
-#define spllowersoftclock() splx(8)    /* IPL08 */
-#define splsoftclock() _splraise(8)    /* IPL08 */
-#define splsoftnet()   _splraise(0xc)  /* IPL0C */
-#define        splddb()        _splraise(0xf)  /* IPL0F */
-#define splbio()       _splraise(0x15) /* IPL15 */
-#define splnet()       _splraise(0x15) /* IPL15 */
-#define spltty()       _splraise(0x15) /* IPL15 */
-#define splimp()       _splraise(0x17) /* IPL17 */
-#define splclock()     _splraise(0x18) /* IPL18 */
-#define splhigh()      _splraise(0x1f) /* IPL1F */
-#define        splstatclock()  splclock()
-
-/* These are better to use when playing with VAX buses */
-#define        spl4()          splx(0x14)
-#define        spl5()          splx(0x15)
-#define        spl6()          splx(0x16)
-#define        spl7()          splx(0x17)
+#include <machine/intr.h>
 
 /* Prototype needed for delay() */
 #ifndef        _LOCORE



Home | Main Index | Thread Index | Old Index