Module Name: src
Committed By: matt
Date: Wed Dec 29 08:16:23 UTC 2010
Modified Files:
src/sys/arch/ews4800mips/ews4800mips [matt-nb5-mips64]: autoconf.c
interrupt.c mainbus.c tr2.c tr2_intr.c tr2a.c tr2a_intr.c
src/sys/arch/ews4800mips/include [matt-nb5-mips64]: intr.h sbdvar.h
src/sys/arch/hpcmips/hpcmips [matt-nb5-mips64]: autoconf.c
hpcapm_machdep.c interrupt.c machdep.c
src/sys/arch/hpcmips/include [matt-nb5-mips64]: intr.h sysconf.h
src/sys/arch/hpcmips/tx [matt-nb5-mips64]: tx39.c
src/sys/arch/hpcmips/vr [matt-nb5-mips64]: vr.c
src/sys/arch/mipsco/include [matt-nb5-mips64]: intr.h sysconf.h
src/sys/arch/mipsco/mipsco [matt-nb5-mips64]: autoconf.c interrupt.c
machdep.c mips_3x30.c
Log Message:
Adapt to the new interrupt framework.
(XXX hpcmips still has calls to _spllower which are not supported.)
To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.7.18.1 src/sys/arch/ews4800mips/ews4800mips/autoconf.c
cvs rdiff -u -r1.4.18.1 -r1.4.18.2 \
src/sys/arch/ews4800mips/ews4800mips/interrupt.c
cvs rdiff -u -r1.4 -r1.4.18.1 src/sys/arch/ews4800mips/ews4800mips/mainbus.c
cvs rdiff -u -r1.3.18.1 -r1.3.18.2 src/sys/arch/ews4800mips/ews4800mips/tr2.c \
src/sys/arch/ews4800mips/ews4800mips/tr2a.c
cvs rdiff -u -r1.10 -r1.10.18.1 \
src/sys/arch/ews4800mips/ews4800mips/tr2_intr.c
cvs rdiff -u -r1.12 -r1.12.18.1 \
src/sys/arch/ews4800mips/ews4800mips/tr2a_intr.c
cvs rdiff -u -r1.10 -r1.10.18.1 src/sys/arch/ews4800mips/include/intr.h
cvs rdiff -u -r1.4 -r1.4.18.1 src/sys/arch/ews4800mips/include/sbdvar.h
cvs rdiff -u -r1.21 -r1.21.28.1 src/sys/arch/hpcmips/hpcmips/autoconf.c
cvs rdiff -u -r1.2 -r1.2.96.1 src/sys/arch/hpcmips/hpcmips/hpcapm_machdep.c
cvs rdiff -u -r1.13 -r1.13.18.1 src/sys/arch/hpcmips/hpcmips/interrupt.c
cvs rdiff -u -r1.96.10.5 -r1.96.10.6 src/sys/arch/hpcmips/hpcmips/machdep.c
cvs rdiff -u -r1.22 -r1.22.28.1 src/sys/arch/hpcmips/include/intr.h
cvs rdiff -u -r1.13 -r1.13.62.1 src/sys/arch/hpcmips/include/sysconf.h
cvs rdiff -u -r1.39.18.1 -r1.39.18.2 src/sys/arch/hpcmips/tx/tx39.c
cvs rdiff -u -r1.51.22.1 -r1.51.22.2 src/sys/arch/hpcmips/vr/vr.c
cvs rdiff -u -r1.16.36.1 -r1.16.36.2 src/sys/arch/mipsco/include/intr.h
cvs rdiff -u -r1.4 -r1.4.62.1 src/sys/arch/mipsco/include/sysconf.h
cvs rdiff -u -r1.18 -r1.18.36.1 src/sys/arch/mipsco/mipsco/autoconf.c
cvs rdiff -u -r1.6.18.1 -r1.6.18.2 src/sys/arch/mipsco/mipsco/interrupt.c
cvs rdiff -u -r1.58.10.3 -r1.58.10.4 src/sys/arch/mipsco/mipsco/machdep.c
cvs rdiff -u -r1.10.18.1 -r1.10.18.2 src/sys/arch/mipsco/mipsco/mips_3x30.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/ews4800mips/ews4800mips/autoconf.c
diff -u src/sys/arch/ews4800mips/ews4800mips/autoconf.c:1.7 src/sys/arch/ews4800mips/ews4800mips/autoconf.c:1.7.18.1
--- src/sys/arch/ews4800mips/ews4800mips/autoconf.c:1.7 Mon Apr 28 20:23:18 2008
+++ src/sys/arch/ews4800mips/ews4800mips/autoconf.c Wed Dec 29 08:16:21 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: autoconf.c,v 1.7 2008/04/28 20:23:18 martin Exp $ */
+/* $NetBSD: autoconf.c,v 1.7.18.1 2010/12/29 08:16:21 matt Exp $ */
/*-
* Copyright (c) 2001, 2004 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.7 2008/04/28 20:23:18 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.7.18.1 2010/12/29 08:16:21 matt Exp $");
#include "opt_sbd.h"
@@ -35,6 +35,7 @@
#include <sys/systm.h>
#include <sys/conf.h>
#include <sys/device.h>
+#include <sys/intr.h>
#include <machine/sbdvar.h>
#include <machine/disklabel.h>
@@ -50,7 +51,7 @@
splhigh();
if (config_rootfound("mainbus", NULL) == NULL)
panic("no mainbus found");
- _splnone();
+ spl0();
}
void
Index: src/sys/arch/ews4800mips/ews4800mips/interrupt.c
diff -u src/sys/arch/ews4800mips/ews4800mips/interrupt.c:1.4.18.1 src/sys/arch/ews4800mips/ews4800mips/interrupt.c:1.4.18.2
--- src/sys/arch/ews4800mips/ews4800mips/interrupt.c:1.4.18.1 Fri Feb 5 07:39:53 2010
+++ src/sys/arch/ews4800mips/ews4800mips/interrupt.c Wed Dec 29 08:16:21 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: interrupt.c,v 1.4.18.1 2010/02/05 07:39:53 matt Exp $ */
+/* $NetBSD: interrupt.c,v 1.4.18.2 2010/12/29 08:16:21 matt Exp $ */
/*-
* Copyright (c) 2004 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.4.18.1 2010/02/05 07:39:53 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.4.18.2 2010/12/29 08:16:21 matt Exp $");
#include <sys/param.h>
#include <sys/intr.h>
@@ -39,8 +39,7 @@
#include <machine/sbdvar.h>
-const uint32_t *ipl_sr_bits;
-static void (*platform_intr)(uint32_t, uint32_t, uint32_t, uint32_t);
+static void (*platform_intr)(int, vaddr_t, uint32_t);
void
intr_init(void)
@@ -65,21 +64,9 @@
}
void
-cpu_intr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending)
+cpu_intr(int ppl, vaddr_t pc, uint32_t status)
{
- struct cpu_info *ci;
-
- ci = curcpu();
uvmexp.intrs++;
- ci->ci_idepth++;
- (*platform_intr)(status, cause, pc, ipending);
- ci->ci_idepth--;
-
-#ifdef __HAVE_FAST_SOFTINTS
- ipending &= MIPS_SOFT_INT_MASK;
- if (ipending == 0)
- return;
- softint_process(ipending);
-#endif
+ (*platform_intr)(ppl, pc, status);
}
Index: src/sys/arch/ews4800mips/ews4800mips/mainbus.c
diff -u src/sys/arch/ews4800mips/ews4800mips/mainbus.c:1.4 src/sys/arch/ews4800mips/ews4800mips/mainbus.c:1.4.18.1
--- src/sys/arch/ews4800mips/ews4800mips/mainbus.c:1.4 Mon Apr 28 20:23:18 2008
+++ src/sys/arch/ews4800mips/ews4800mips/mainbus.c Wed Dec 29 08:16:21 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: mainbus.c,v 1.4 2008/04/28 20:23:18 martin Exp $ */
+/* $NetBSD: mainbus.c,v 1.4.18.1 2010/12/29 08:16:21 matt Exp $ */
/*-
* Copyright (c) 2001, 2004, 2005 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.4 2008/04/28 20:23:18 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.4.18.1 2010/12/29 08:16:21 matt Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -59,7 +59,7 @@
mainbus_attach(device_t parent, device_t self, void *aux)
{
struct mainbus_attach_args ma;
- const char **p;
+ const char * const *p;
mainbus_found = 1;
aprint_normal("\n");
Index: src/sys/arch/ews4800mips/ews4800mips/tr2.c
diff -u src/sys/arch/ews4800mips/ews4800mips/tr2.c:1.3.18.1 src/sys/arch/ews4800mips/ews4800mips/tr2.c:1.3.18.2
--- src/sys/arch/ews4800mips/ews4800mips/tr2.c:1.3.18.1 Wed Jan 20 09:04:33 2010
+++ src/sys/arch/ews4800mips/ews4800mips/tr2.c Wed Dec 29 08:16:21 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: tr2.c,v 1.3.18.1 2010/01/20 09:04:33 matt Exp $ */
+/* $NetBSD: tr2.c,v 1.3.18.2 2010/12/29 08:16:21 matt Exp $ */
/*-
* Copyright (c) 2004, 2005 The NetBSD Foundation, Inc.
@@ -30,8 +30,9 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tr2.c,v 1.3.18.1 2010/01/20 09:04:33 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tr2.c,v 1.3.18.2 2010/12/29 08:16:21 matt Exp $");
+#define __INTR_PRIVATE
#include "fb_sbdio.h"
#include "kbms_sbdio.h"
#include "zsc_sbdio.h"
@@ -59,7 +60,7 @@
SBD_DECL(tr2);
/* EWS4800/350 mainbus device list */
-static const char *tr2_mainbusdevs[] =
+static const char * const tr2_mainbusdevs[] =
{
"sbdio",
#ifdef notyet
@@ -102,7 +103,7 @@
platform.mainbusdevs = tr2_mainbusdevs;
platform.sbdiodevs = tr2_sbdiodevs;
- ipl_sr_bits = tr2_sr_bits;
+ ipl_sr_map = tr2_ipl_sr_map;
kseg2iobufsize = 0x02000000; /* 32MB for VME and framebuffer */
Index: src/sys/arch/ews4800mips/ews4800mips/tr2a.c
diff -u src/sys/arch/ews4800mips/ews4800mips/tr2a.c:1.3.18.1 src/sys/arch/ews4800mips/ews4800mips/tr2a.c:1.3.18.2
--- src/sys/arch/ews4800mips/ews4800mips/tr2a.c:1.3.18.1 Wed Jan 20 09:04:33 2010
+++ src/sys/arch/ews4800mips/ews4800mips/tr2a.c Wed Dec 29 08:16:21 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: tr2a.c,v 1.3.18.1 2010/01/20 09:04:33 matt Exp $ */
+/* $NetBSD: tr2a.c,v 1.3.18.2 2010/12/29 08:16:21 matt Exp $ */
/*-
* Copyright (c) 2004, 2005 The NetBSD Foundation, Inc.
@@ -30,8 +30,9 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tr2a.c,v 1.3.18.1 2010/01/20 09:04:33 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tr2a.c,v 1.3.18.2 2010/12/29 08:16:21 matt Exp $");
+#define __INTR_PRIVATE
#include "fb_sbdio.h"
#include "kbms_sbdio.h"
#include "zsc_sbdio.h"
@@ -59,7 +60,7 @@
SBD_DECL(tr2a);
/* EWS4800/360 bus list */
-static const char *tr2a_mainbusdevs[] = {
+static const char * const tr2a_mainbusdevs[] = {
"sbdio",
#ifdef notyet
"apbus",
@@ -151,7 +152,7 @@
if (have_fb_sbdio)
platform.sbdiodevs = tr2a_sbdiodevs;
- ipl_sr_bits = tr2a_sr_bits;
+ ipl_sr_map = tr2a_ipl_sr_map;
kseg2iobufsize = 0x02000000; /* 32MB for APbus and framebuffer */
Index: src/sys/arch/ews4800mips/ews4800mips/tr2_intr.c
diff -u src/sys/arch/ews4800mips/ews4800mips/tr2_intr.c:1.10 src/sys/arch/ews4800mips/ews4800mips/tr2_intr.c:1.10.18.1
--- src/sys/arch/ews4800mips/ews4800mips/tr2_intr.c:1.10 Mon Apr 28 20:23:18 2008
+++ src/sys/arch/ews4800mips/ews4800mips/tr2_intr.c Wed Dec 29 08:16:21 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: tr2_intr.c,v 1.10 2008/04/28 20:23:18 martin Exp $ */
+/* $NetBSD: tr2_intr.c,v 1.10.18.1 2010/12/29 08:16:21 matt Exp $ */
/*-
* Copyright (c) 2004, 2005 The NetBSD Foundation, Inc.
@@ -30,12 +30,15 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tr2_intr.c,v 1.10 2008/04/28 20:23:18 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tr2_intr.c,v 1.10.18.1 2010/12/29 08:16:21 matt Exp $");
+#define __INTR_PRIVATE
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
-#include <sys/device.h>
+#include <sys/evcnt.h>
+#include <sys/cpu.h>
+#include <sys/lwp.h>
#include <sys/intr.h>
#include <machine/locore.h> /* mips3_cp0* */
@@ -47,23 +50,24 @@
SBD_DECL(tr2);
-const uint32_t tr2_sr_bits[_IPL_N] = {
- [IPL_NONE] = 0,
- [IPL_SOFTCLOCK] = MIPS_SOFT_INT_MASK_0,
- [IPL_SOFTNET] =
- MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1,
- [IPL_VM] =
- MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 |
- MIPS_INT_MASK_0 |
- MIPS_INT_MASK_2 |
- MIPS_INT_MASK_4,
- [IPL_SCHED] =
- MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 |
- MIPS_INT_MASK_0 |
- MIPS_INT_MASK_2 |
- MIPS_INT_MASK_4 |
- MIPS_INT_MASK_5,
+const struct ipl_sr_map tr2_ipl_sr_map = {
+ {
+ [IPL_NONE] = 0,
+ [IPL_SOFTCLOCK] = MIPS_SOFT_INT_MASK_0,
+ [IPL_SOFTNET] = MIPS_SOFT_INT_MASK,
+ [IPL_VM] = MIPS_SOFT_INT_MASK
+ | MIPS_INT_MASK_0
+ | MIPS_INT_MASK_2
+ | MIPS_INT_MASK_4,
+ [IPL_SCHED] = MIPS_SOFT_INT_MASK
+ | MIPS_INT_MASK_0
+ | MIPS_INT_MASK_2
+ | MIPS_INT_MASK_4
+ | MIPS_INT_MASK_5,
+ [IPL_DDB] = MIPS_INT_MASK,
+ [IPL_HIGH] = MIPS_INT_MASK,
/* !!! TEST !!! VME INTERRUPT IS NOT MASKED */
+ },
};
#define NIRQ 8
@@ -139,121 +143,116 @@
}
void
-tr2_intr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending)
+tr2_intr(int ppl, vaddr_t pc, uint32_t status)
{
struct tr2_intr_handler *ih;
struct clockframe cf;
- uint32_t r, handled;
+ uint32_t r, ipending;
+ int ipl;
- handled = 0;
+ while (ppl < (ipl = splintr(&ipending))) {
+ if (ipending & MIPS_INT_MASK_5) { /* CLOCK */
+ cf.pc = pc;
+ cf.sr = status;
+ cf.intr = (curcpu()->ci_idepth > 0);
- if (ipending & MIPS_INT_MASK_5) { /* CLOCK */
- cf.pc = pc;
- cf.sr = status;
+ *PICNIC_INT5_STATUS_REG = 0;
+ r = *PICNIC_INT5_STATUS_REG;
- *PICNIC_INT5_STATUS_REG = 0;
- r = *PICNIC_INT5_STATUS_REG;
-
- hardclock(&cf);
- timer_tr2_ev.ev_count++;
- handled |= MIPS_INT_MASK_5;
- }
- _splset((status & handled) | MIPS_SR_INT_IE);
+ hardclock(&cf);
+ timer_tr2_ev.ev_count++;
+ }
- if (ipending & MIPS_INT_MASK_4) { /* KBD, MOUSE, SERIAL */
- r = *PICNIC_INT4_STATUS_REG;
+ if (ipending & MIPS_INT_MASK_4) { /* KBD, MOUSE, SERIAL */
+ r = *PICNIC_INT4_STATUS_REG;
- if (r & PICNIC_INT_KBMS) {
- ih = &tr2_intr_handler[0];
- if (ih->func) {
- ih->func(ih->arg);
- ih->evcnt.ev_count++;
+ if (r & PICNIC_INT_KBMS) {
+ ih = &tr2_intr_handler[0];
+ if (ih->func) {
+ ih->func(ih->arg);
+ ih->evcnt.ev_count++;
+ }
+ r &= ~PICNIC_INT_KBMS;
}
- r &= ~PICNIC_INT_KBMS;
- }
- if (r & PICNIC_INT_SERIAL) {
+ if (r & PICNIC_INT_SERIAL) {
#if 0
- printf("SIO interrupt\n");
+ printf("SIO interrupt\n");
#endif
- ih = &tr2_intr_handler[2];
- if (ih->func) {
- ih->func(ih->arg);
- ih->evcnt.ev_count++;
+ ih = &tr2_intr_handler[2];
+ if (ih->func) {
+ ih->func(ih->arg);
+ ih->evcnt.ev_count++;
+ }
+ r &= ~PICNIC_INT_SERIAL;
}
- r &= ~PICNIC_INT_SERIAL;
}
- handled |= MIPS_INT_MASK_4;
- }
- _splset((status & handled) | MIPS_SR_INT_IE);
+ if (ipending & MIPS_INT_MASK_3) { /* VME */
+ printf("VME interrupt\n");
- if (ipending & MIPS_INT_MASK_3) { /* VME */
- printf("VME interrupt\n");
-
- r = *(volatile uint32_t *)0xbfb00018; /* NABI? */
- if ((r & 0x10) != 0) {
- /* vme high interrupt */
- } else if ((r & 0x4) != 0) {
- /* vme lo interrupt */
- } else {
- /* error */
+ r = *(volatile uint32_t *)0xbfb00018; /* NABI? */
+ if ((r & 0x10) != 0) {
+ /* vme high interrupt */
+ } else if ((r & 0x4) != 0) {
+ /* vme lo interrupt */
+ } else {
+ /* error */
+ }
}
- }
- if (ipending & MIPS_INT_MASK_2) { /* ETHER, SCSI */
- r = *PICNIC_INT2_STATUS_REG;
+ if (ipending & MIPS_INT_MASK_2) { /* ETHER, SCSI */
+ r = *PICNIC_INT2_STATUS_REG;
- if (r & PICNIC_INT_ETHER) {
- ih = &tr2_intr_handler[6];
- if (ih->func) {
- ih->func(ih->arg);
- ih->evcnt.ev_count++;
+ if (r & PICNIC_INT_ETHER) {
+ ih = &tr2_intr_handler[6];
+ if (ih->func) {
+ ih->func(ih->arg);
+ ih->evcnt.ev_count++;
+ }
+ r &= ~PICNIC_INT_ETHER;
}
- r &= ~PICNIC_INT_ETHER;
- }
- if (r & PICNIC_INT_SCSI) {
- ih = &tr2_intr_handler[5];
- if (ih->func) {
- ih->func(ih->arg);
- ih->evcnt.ev_count++;
+ if (r & PICNIC_INT_SCSI) {
+ ih = &tr2_intr_handler[5];
+ if (ih->func) {
+ ih->func(ih->arg);
+ ih->evcnt.ev_count++;
+ }
+ r &= ~PICNIC_INT_SCSI;
}
- r &= ~PICNIC_INT_SCSI;
- }
- if ((r & PICNIC_INT_FDDLPT) &&
- ((cause & status) & MIPS_INT_MASK_5)) {
+ if ((r & PICNIC_INT_FDDLPT) &&
+ (ipending & MIPS_INT_MASK_5)) {
#ifdef DEBUG
- printf("FDD LPT interrupt\n");
+ printf("FDD LPT interrupt\n");
#endif
- ih = &tr2_intr_handler[7];
- if (ih->func) {
- ih->func(ih->arg);
- ih->evcnt.ev_count++;
+ ih = &tr2_intr_handler[7];
+ if (ih->func) {
+ ih->func(ih->arg);
+ ih->evcnt.ev_count++;
+ }
+ r &= ~PICNIC_INT_FDDLPT;
}
- r &= ~PICNIC_INT_FDDLPT;
}
- handled |= MIPS_INT_MASK_2;
- }
- _splset((status & handled) | MIPS_SR_INT_IE);
-
- if (ipending & MIPS_INT_MASK_1)
- panic("unknown interrupt INT1\n");
+ if (ipending & MIPS_INT_MASK_1)
+ panic("unknown interrupt INT1\n");
- if (ipending & MIPS_INT_MASK_0) { /* FDD, PRINTER */
- printf("printer, printer interrupt\n");
- r = *PICNIC_INT0_STATUS_REG;
- if (r & PICNIC_INT_FDDLPT) {
- printf("FDD, Printer interrupt.\n");
- } else {
- printf("unknown interrupt INT0\n");
+ if (ipending & MIPS_INT_MASK_0) { /* FDD, PRINTER */
+#ifdef DEBUG
+ printf("printer, printer interrupt\n");
+#endif
+ r = *PICNIC_INT0_STATUS_REG;
+ if (r & PICNIC_INT_FDDLPT) {
+#ifdef DEBUG
+ printf("FDD, Printer interrupt.\n");
+#endif
+ } else {
+ printf("unknown interrupt INT0\n");
+ }
}
- handled |= MIPS_INT_MASK_0;
}
- cause &= ~handled;
- _splset(((status & ~cause) & MIPS_HARD_INT_MASK) | MIPS_SR_INT_IE);
}
void
Index: src/sys/arch/ews4800mips/ews4800mips/tr2a_intr.c
diff -u src/sys/arch/ews4800mips/ews4800mips/tr2a_intr.c:1.12 src/sys/arch/ews4800mips/ews4800mips/tr2a_intr.c:1.12.18.1
--- src/sys/arch/ews4800mips/ews4800mips/tr2a_intr.c:1.12 Mon Apr 28 20:23:18 2008
+++ src/sys/arch/ews4800mips/ews4800mips/tr2a_intr.c Wed Dec 29 08:16:21 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: tr2a_intr.c,v 1.12 2008/04/28 20:23:18 martin Exp $ */
+/* $NetBSD: tr2a_intr.c,v 1.12.18.1 2010/12/29 08:16:21 matt Exp $ */
/*-
* Copyright (c) 2004, 2005 The NetBSD Foundation, Inc.
@@ -30,12 +30,15 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tr2a_intr.c,v 1.12 2008/04/28 20:23:18 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tr2a_intr.c,v 1.12.18.1 2010/12/29 08:16:21 matt Exp $");
+#define __INTR_PRIVATE
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/evcnt.h>
+#include <sys/lwp.h>
+#include <sys/cpu.h>
#include <sys/intr.h>
#include <machine/locore.h> /* mips3_cp0* */
@@ -45,27 +48,16 @@
SBD_DECL(tr2a);
-const uint32_t tr2a_sr_bits[_IPL_N] = {
+const struct ipl_sr_map tr2a_ipl_sr_map = {
+ .sr_bits = {
[IPL_NONE] = 0,
- [IPL_SOFTCLOCK] =
- MIPS_SOFT_INT_MASK_0,
- [IPL_SOFTNET] =
- MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1,
- [IPL_VM] =
- MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 |
- MIPS_INT_MASK_0 |
- MIPS_INT_MASK_1 |
- MIPS_INT_MASK_2 |
- MIPS_INT_MASK_3 |
- MIPS_INT_MASK_4,
- [IPL_SCHED] =
- MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 |
- MIPS_INT_MASK_0 |
- MIPS_INT_MASK_1 |
- MIPS_INT_MASK_2 |
- MIPS_INT_MASK_3 |
- MIPS_INT_MASK_4 |
- MIPS_INT_MASK_5,
+ [IPL_SOFTCLOCK] = MIPS_SOFT_INT_MASK_0,
+ [IPL_SOFTNET] = MIPS_SOFT_INT_MASK,
+ [IPL_VM] = MIPS_INT_MASK & ~MIPS_INT_MASK_5,
+ [IPL_SCHED] = MIPS_INT_MASK,
+ [IPL_DDB] = MIPS_INT_MASK,
+ [IPL_HIGH] = MIPS_INT_MASK,
+ },
};
#define NIRQ 16
@@ -178,134 +170,124 @@
}
void
-tr2a_intr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending)
+tr2a_intr(int ppl, vaddr_t pc, uint32_t status)
{
struct tr2a_intr_handler *ih;
struct clockframe cf;
- uint32_t r, intc_cause, handled;
+ uint32_t r, intc_cause, ipending;
+ int ipl;
- handled = 0;
intc_cause = *INTC_STATUS_REG & *INTC_MASK_REG;
- if ((ipending & MIPS_INT_MASK_5) && (intc_cause & INTC_INT5)) {
- cf.pc = pc;
- cf.sr = status;
- tr2a_wbflush();
- *INTC_CLEAR_REG = 0x7c;
- *INTC_STATUS_REG;
-
- hardclock(&cf);
- timer_tr2a_ev.ev_count++;
- handled |= MIPS_INT_MASK_5;
- }
- _splset((status & handled) | MIPS_SR_INT_IE);
-
+ while (ppl < (ipl = splintr(&ipending))) {
+ if ((ipending & MIPS_INT_MASK_5) && (intc_cause & INTC_INT5)) {
+ cf.pc = pc;
+ cf.sr = status;
+ cf.intr = (curcpu()->ci_idepth > 0);
+ tr2a_wbflush();
+ *INTC_CLEAR_REG = 0x7c;
+ *INTC_STATUS_REG;
- if ((ipending & MIPS_INT_MASK_4) && (intc_cause & INTC_INT4)) {
- /* KBD, MOUSE, SERIAL */
- r = *ASO_INT_STATUS_REG;
- if (r & 0x300010) {
- ih = &tr2a_intr_handler[4];
- if (ih->func) {
- ih->func(ih->arg);
- ih->evcnt.ev_count++;
- }
- } else if (r & 0x40) {
- /* kbms */
- ih = &tr2a_intr_handler[9];
- if (ih->func) {
- ih->func(ih->arg);
- ih->evcnt.ev_count++;
- }
- } else if (r & 0x20) {
- printf("INT4 (1)\n");
- } else if (r & 0x00800000) {
- printf("INT4 (2)\n");
- } else if (r & 0x00400000) {
- printf("INT4 (3)\n");
- } else if (r != 0) {
- printf("not for INT4 %x\n", r);
+ hardclock(&cf);
+ timer_tr2a_ev.ev_count++;
}
- tr2a_wbflush();
- *INTC_CLEAR_REG = 0x68;
- *INTC_STATUS_REG;
+ if ((ipending & MIPS_INT_MASK_4) && (intc_cause & INTC_INT4)) {
+ /* KBD, MOUSE, SERIAL */
+ r = *ASO_INT_STATUS_REG;
+ if (r & 0x300010) {
+ ih = &tr2a_intr_handler[4];
+ if (ih->func) {
+ ih->func(ih->arg);
+ ih->evcnt.ev_count++;
+ }
+ } else if (r & 0x40) {
+ /* kbms */
+ ih = &tr2a_intr_handler[9];
+ if (ih->func) {
+ ih->func(ih->arg);
+ ih->evcnt.ev_count++;
+ }
+ } else if (r & 0x20) {
+ printf("INT4 (1)\n");
+ } else if (r & 0x00800000) {
+ printf("INT4 (2)\n");
+ } else if (r & 0x00400000) {
+ printf("INT4 (3)\n");
+ } else if (r != 0) {
+ printf("not for INT4 %x\n", r);
+ }
- handled |= MIPS_INT_MASK_4;
- }
- _splset((status & handled) | MIPS_SR_INT_IE);
+ tr2a_wbflush();
+ *INTC_CLEAR_REG = 0x68;
+ *INTC_STATUS_REG;
+ }
- if ((ipending & MIPS_INT_MASK_3) && (intc_cause & INTC_INT3)) {
- /* APbus HI */
- printf("APbus HI\n");
- tr2a_wbflush();
- *INTC_CLEAR_REG = 0x54;
- *INTC_STATUS_REG;
- handled |= MIPS_INT_MASK_3;
- }
+ if ((ipending & MIPS_INT_MASK_3) && (intc_cause & INTC_INT3)) {
+ /* APbus HI */
+ printf("APbus HI\n");
+ tr2a_wbflush();
+ *INTC_CLEAR_REG = 0x54;
+ *INTC_STATUS_REG;
+ }
- if ((ipending & MIPS_INT_MASK_2) && (intc_cause & INTC_INT2)) {
- /* SCSI, ETHER */
- r = *ASO_INT_STATUS_REG;
- if (r & 0x100) { /* SCSI-A */
- ih = &tr2a_intr_handler[6];
- if (ih->func) {
- ih->func(ih->arg);
- ih->evcnt.ev_count++;
+ if ((ipending & MIPS_INT_MASK_2) && (intc_cause & INTC_INT2)) {
+ /* SCSI, ETHER */
+ r = *ASO_INT_STATUS_REG;
+ if (r & 0x100) { /* SCSI-A */
+ ih = &tr2a_intr_handler[6];
+ if (ih->func) {
+ ih->func(ih->arg);
+ ih->evcnt.ev_count++;
+ }
+ } else if (r & 0x200) { /* SCSI-B */
+ ih = &tr2a_intr_handler[10];
+ if (ih->func) {
+ ih->func(ih->arg);
+ ih->evcnt.ev_count++;
+ }
+ } else if (r & 0x1) { /* LANCE */
+ ih = &tr2a_intr_handler[0];
+ if (ih->func) {
+ ih->func(ih->arg);
+ ih->evcnt.ev_count++;
+ }
+ } else if (r != 0) {
+ printf("not for INT2 %x %x\n", r,
+ *ASO_DMAINT_STATUS_REG);
}
- } else if (r & 0x200) { /* SCSI-B */
- ih = &tr2a_intr_handler[10];
- if (ih->func) {
- ih->func(ih->arg);
- ih->evcnt.ev_count++;
- }
- } else if (r & 0x1) { /* LANCE */
- ih = &tr2a_intr_handler[0];
- if (ih->func) {
- ih->func(ih->arg);
- ih->evcnt.ev_count++;
- }
- } else if (r != 0) {
- printf("not for INT2 %x %x\n", r,
- *ASO_DMAINT_STATUS_REG);
- }
- tr2a_wbflush();
- *INTC_CLEAR_REG = 0x40;
- *INTC_STATUS_REG;
- handled |= MIPS_INT_MASK_2;
- }
- _splset((status & handled) | MIPS_SR_INT_IE);
+ tr2a_wbflush();
+ *INTC_CLEAR_REG = 0x40;
+ *INTC_STATUS_REG;
+ }
- if ((ipending & MIPS_INT_MASK_1) && (intc_cause & INTC_INT1)) {
- /* APbus LO */
- printf("APbus LO\n");
- tr2a_wbflush();
- *INTC_CLEAR_REG = 0x2c;
- *INTC_STATUS_REG;
- handled |= MIPS_INT_MASK_1;
- }
+ if ((ipending & MIPS_INT_MASK_1) && (intc_cause & INTC_INT1)) {
+ /* APbus LO */
+ printf("APbus LO\n");
+ tr2a_wbflush();
+ *INTC_CLEAR_REG = 0x2c;
+ *INTC_STATUS_REG;
+ }
- if ((ipending & MIPS_INT_MASK_0) && (intc_cause & INTC_INT0)) {
- /* NMI etc. */
- r = *ASO_INT_STATUS_REG;
- printf("INT0 %08x\n", r);
- if (r & 0x8000) {
- printf("INT0(1) NMI\n");
- } else if (r & 0x8) {
- printf("INT0(2)\n");
- } else if (r & 0x4) {
- printf("INT0(3)\n");
- } else if (r != 0) {
- printf("not for INT0 %x\n", r);
+ if ((ipending & MIPS_INT_MASK_0) && (intc_cause & INTC_INT0)) {
+ /* NMI etc. */
+ r = *ASO_INT_STATUS_REG;
+ printf("INT0 %08x\n", r);
+ if (r & 0x8000) {
+ printf("INT0(1) NMI\n");
+ } else if (r & 0x8) {
+ printf("INT0(2)\n");
+ } else if (r & 0x4) {
+ printf("INT0(3)\n");
+ } else if (r != 0) {
+ printf("not for INT0 %x\n", r);
+ }
+ tr2a_wbflush();
+ *INTC_CLEAR_REG = 0x14;
+ *INTC_STATUS_REG;
}
- tr2a_wbflush();
- *INTC_CLEAR_REG = 0x14;
- *INTC_STATUS_REG;
- handled |= MIPS_INT_MASK_0;
}
- cause &= ~handled;
- _splset(((status & ~cause) & MIPS_HARD_INT_MASK) | MIPS_SR_INT_IE);
}
void
Index: src/sys/arch/ews4800mips/include/intr.h
diff -u src/sys/arch/ews4800mips/include/intr.h:1.10 src/sys/arch/ews4800mips/include/intr.h:1.10.18.1
--- src/sys/arch/ews4800mips/include/intr.h:1.10 Mon Apr 28 20:23:18 2008
+++ src/sys/arch/ews4800mips/include/intr.h Wed Dec 29 08:16:22 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: intr.h,v 1.10 2008/04/28 20:23:18 martin Exp $ */
+/* $NetBSD: intr.h,v 1.10.18.1 2010/12/29 08:16:22 matt Exp $ */
/*-
* Copyright (c) 2000, 2001, 2004 The NetBSD Foundation, Inc.
@@ -32,59 +32,18 @@
#ifndef _EWS4800MIPS_INTR_H_
#define _EWS4800MIPS_INTR_H_
-#define IPL_NONE 0 /* disable only this interrupt */
-#define IPL_SOFTCLOCK 1 /* clock software interrupts (SI 0) */
-#define IPL_SOFTBIO 1 /* bio software interrupts (SI 0) */
-#define IPL_SOFTNET 2 /* network software interrupts (SI 1) */
-#define IPL_SOFTSERIAL 2 /* serial software interrupts (SI 1) */
-#define IPL_VM 3
-#define IPL_SCHED 4 /* disable clock interrupts */
-#define IPL_HIGH 4 /* disable all interrupts */
-
-#define _IPL_N 5
-
-#define _IPL_SI0_FIRST IPL_SOFTCLOCK
-#define _IPL_SI0_LAST IPL_SOFTBIO
-
-#define _IPL_SI1_FIRST IPL_SOFTNET
-#define _IPL_SI1_LAST IPL_SOFTSERIAL
-
-#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 */
-
-#include <mips/locore.h>
-
-extern const uint32_t *ipl_sr_bits;
-
-#define spl0() (void) _spllower(0)
-#define splx(s) (void) _splset(s)
-
-typedef int ipl_t;
-typedef struct {
- ipl_t _sr;
-} ipl_cookie_t;
-
-static inline ipl_cookie_t
-makeiplcookie(ipl_t ipl)
-{
-
- return (ipl_cookie_t){._sr = ipl_sr_bits[ipl]};
-}
-
-static inline int
-splraiseipl(ipl_cookie_t icookie)
-{
-
- return _splraise(icookie._sr);
-}
-
-#include <sys/spl.h>
+#include <mips/intr.h>
+#ifdef _KERNEL
void intr_init(void);
void intr_establish(int, int (*)(void *), void *);
void intr_disestablish(void *);
+#ifdef __INTR_PRIVATE
+extern const struct ipl_sr_map tr2_ipl_sr_map;
+extern const struct ipl_sr_map tr2a_ipl_sr_map;
+#endif
+
+#endif
+
#endif /* !_EWS4800MIPS_INTR_H_ */
Index: src/sys/arch/ews4800mips/include/sbdvar.h
diff -u src/sys/arch/ews4800mips/include/sbdvar.h:1.4 src/sys/arch/ews4800mips/include/sbdvar.h:1.4.18.1
--- src/sys/arch/ews4800mips/include/sbdvar.h:1.4 Mon Apr 28 20:23:18 2008
+++ src/sys/arch/ews4800mips/include/sbdvar.h Wed Dec 29 08:16:22 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: sbdvar.h,v 1.4 2008/04/28 20:23:18 martin Exp $ */
+/* $NetBSD: sbdvar.h,v 1.4.18.1 2010/12/29 08:16:22 matt Exp $ */
/*-
* Copyright (c) 2004, 2005 The NetBSD Foundation, Inc.
@@ -47,7 +47,7 @@
int cpu_clock;
/* mainbus node table */
- const char **mainbusdevs;
+ const char * const *mainbusdevs;
/* System Board I/O device table */
const struct sbdiodevdesc *sbdiodevs;
@@ -68,7 +68,7 @@
void (*intr_init)(void);
void *(*intr_establish)(int, int (*)(void *), void *);
void (*intr_disestablish)(void *);
- void (*intr)(uint32_t, uint32_t, uint32_t, uint32_t);
+ void (*intr)(int, vaddr_t, uint32_t);
/* Interval timer helper routines */
void (*initclocks)(void);
@@ -88,14 +88,13 @@
void x ## _intr_init(void); \
void *x ## _intr_establish(int, int (*)(void *), void *); \
void x ## _intr_disestablish(void *); \
-void x ## _intr(uint32_t, uint32_t, uint32_t, uint32_t); \
+void x ## _intr(int, vaddr_t, uint32_t); \
void x ## _initclocks(void); \
void x ## _consinit(void); \
int x ## _ipl_bootdev(void); \
void x ## _reboot(void); \
void x ## _poweroff(void); \
void x ## _ether_addr(uint8_t *); \
-extern const uint32_t x ## _sr_bits[]
#define _SBD_OPS_SET(m, x) platform . x = m ## _ ## x
Index: src/sys/arch/hpcmips/hpcmips/autoconf.c
diff -u src/sys/arch/hpcmips/hpcmips/autoconf.c:1.21 src/sys/arch/hpcmips/hpcmips/autoconf.c:1.21.28.1
--- src/sys/arch/hpcmips/hpcmips/autoconf.c:1.21 Tue Feb 12 17:30:57 2008
+++ src/sys/arch/hpcmips/hpcmips/autoconf.c Wed Dec 29 08:16:22 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: autoconf.c,v 1.21 2008/02/12 17:30:57 joerg Exp $ */
+/* $NetBSD: autoconf.c,v 1.21.28.1 2010/12/29 08:16:22 matt Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -77,7 +77,7 @@
*/
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.21 2008/02/12 17:30:57 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.21.28.1 2010/12/29 08:16:22 matt Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -114,7 +114,7 @@
panic("no mainbus found");
/* Configuration is finished, turn on interrupts. */
- _splnone(); /* enable all source forcing SOFT_INTs cleared */
+ spl0(); /* enable all source forcing SOFT_INTs cleared */
}
void
Index: src/sys/arch/hpcmips/hpcmips/hpcapm_machdep.c
diff -u src/sys/arch/hpcmips/hpcmips/hpcapm_machdep.c:1.2 src/sys/arch/hpcmips/hpcmips/hpcapm_machdep.c:1.2.96.1
--- src/sys/arch/hpcmips/hpcmips/hpcapm_machdep.c:1.2 Sun Dec 11 12:17:33 2005
+++ src/sys/arch/hpcmips/hpcmips/hpcapm_machdep.c Wed Dec 29 08:16:22 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: hpcapm_machdep.c,v 1.2 2005/12/11 12:17:33 christos Exp $ */
+/* $NetBSD: hpcapm_machdep.c,v 1.2.96.1 2010/12/29 08:16:22 matt Exp $ */
/*
* Copyright (c) 2000 Takemura Shin
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hpcapm_machdep.c,v 1.2 2005/12/11 12:17:33 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hpcapm_machdep.c,v 1.2.96.1 2010/12/29 08:16:22 matt Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -91,35 +91,35 @@
machine_sleep()
{
#if NVRIP_COMMON > 0
- if (platid_match(&platid, &platid_mask_CPU_MIPS_VR_41XX)) {
- /*
- * disable all interrupts except PIU interrupt
- */
- vrip_intr_suspend();
- _spllower(~MIPS_INT_MASK_0);
-
- /*
- * SUSPEND instruction puts the CPU into power saveing
- * state until some interrupt occuer.
- * It sleeps until you push the power button.
- */
- __asm(".set noreorder");
- __asm(".word " ___STRING(VR_OPCODE_SUSPEND));
- __asm("nop");
- __asm("nop");
- __asm("nop");
- __asm("nop");
- __asm("nop");
- __asm(".set reorder");
-
- splhigh();
- vrip_intr_resume();
- delay(1000); /* 1msec */
- }
+ if (platid_match(&platid, &platid_mask_CPU_MIPS_VR_41XX)) {
+ /*
+ * disable all interrupts except PIU interrupt
+ */
+ vrip_intr_suspend();
+ _spllower(~MIPS_INT_MASK_0);
+
+ /*
+ * SUSPEND instruction puts the CPU into power saveing
+ * state until some interrupt occuer.
+ * It sleeps until you push the power button.
+ */
+ __asm(".set noreorder");
+ __asm(".word " ___STRING(VR_OPCODE_SUSPEND));
+ __asm("nop");
+ __asm("nop");
+ __asm("nop");
+ __asm("nop");
+ __asm("nop");
+ __asm(".set reorder");
+
+ splhigh();
+ vrip_intr_resume();
+ delay(1000); /* 1msec */
+ }
#endif /* NVRIP_COMMON > 0 */
#ifdef TX39XX
- if (platid_match(&platid, &platid_mask_CPU_MIPS_TX)) {
- tx39power_suspend_cpu();
- }
+ if (platid_match(&platid, &platid_mask_CPU_MIPS_TX)) {
+ tx39power_suspend_cpu();
+ }
#endif
}
Index: src/sys/arch/hpcmips/hpcmips/interrupt.c
diff -u src/sys/arch/hpcmips/hpcmips/interrupt.c:1.13 src/sys/arch/hpcmips/hpcmips/interrupt.c:1.13.18.1
--- src/sys/arch/hpcmips/hpcmips/interrupt.c:1.13 Mon Apr 28 20:23:21 2008
+++ src/sys/arch/hpcmips/hpcmips/interrupt.c Wed Dec 29 08:16:22 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: interrupt.c,v 1.13 2008/04/28 20:23:21 martin Exp $ */
+/* $NetBSD: interrupt.c,v 1.13.18.1 2010/12/29 08:16:22 matt Exp $ */
/*-
* Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -30,28 +30,26 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.13 2008/04/28 20:23:21 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.13.18.1 2010/12/29 08:16:22 matt Exp $");
#include "opt_vr41xx.h"
#include "opt_tx39xx.h"
+#define __INTR_PRIVATE
+
#include <sys/param.h>
#include <sys/malloc.h>
+#include <sys/intr.h>
#include <uvm/uvm_extern.h>
#include <machine/sysconf.h>
-extern const u_int32_t __ipl_sr_bits_vr[];
-extern const u_int32_t __ipl_sr_bits_tx[];
-
-const u_int32_t *ipl_sr_bits;
-
void
-intr_init()
+intr_init(void)
{
- ipl_sr_bits = CPUISMIPS3 ? __ipl_sr_bits_vr : __ipl_sr_bits_tx;
+ ipl_sr_map = CPUISMIPS3 ? __ipl_sr_map_vr : __ipl_sr_map_tx;
}
#if defined(VR41XX) && defined(TX39XX)
@@ -64,9 +62,9 @@
*
*/
void
-cpu_intr(u_int32_t status, u_int32_t cause, u_int32_t pc, u_int32_t ipending)
+cpu_intr(int ppl, vaddr_t pc, uint32_t status)
{
- (*platform.cpu_intr)(status, cause, pc, ipending);
+ (*platform.cpu_intr)(ppl, pc, status);
}
#endif /* VR41XX && TX39XX */
Index: src/sys/arch/hpcmips/hpcmips/machdep.c
diff -u src/sys/arch/hpcmips/hpcmips/machdep.c:1.96.10.5 src/sys/arch/hpcmips/hpcmips/machdep.c:1.96.10.6
--- src/sys/arch/hpcmips/hpcmips/machdep.c:1.96.10.5 Sun Mar 21 17:38:34 2010
+++ src/sys/arch/hpcmips/hpcmips/machdep.c Wed Dec 29 08:16:22 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.96.10.5 2010/03/21 17:38:34 cliff Exp $ */
+/* $NetBSD: machdep.c,v 1.96.10.6 2010/12/29 08:16:22 matt Exp $ */
/*-
* Copyright (c) 1999 Shin Takemura, All rights reserved.
@@ -108,7 +108,7 @@
*/
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.96.10.5 2010/03/21 17:38:34 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.96.10.6 2010/12/29 08:16:22 matt Exp $");
#include "opt_vr41xx.h"
#include "opt_tx39xx.h"
@@ -142,6 +142,7 @@
#include <ufs/mfs/mfs_extern.h> /* mfs_initminiroot() */
#include <dev/cons.h> /* cntab access (cpu_reboot) */
+#include <machine/locore.h>
#include <machine/psl.h>
#include <machine/sysconf.h>
#include <machine/platid.h>
Index: src/sys/arch/hpcmips/include/intr.h
diff -u src/sys/arch/hpcmips/include/intr.h:1.22 src/sys/arch/hpcmips/include/intr.h:1.22.28.1
--- src/sys/arch/hpcmips/include/intr.h:1.22 Fri Jan 4 22:03:25 2008
+++ src/sys/arch/hpcmips/include/intr.h Wed Dec 29 08:16:22 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: intr.h,v 1.22 2008/01/04 22:03:25 ad Exp $ */
+/* $NetBSD: intr.h,v 1.22.28.1 2010/12/29 08:16:22 matt Exp $ */
/*
* Copyright (c) 1998 Jonathan Stone. All rights reserved.
@@ -33,62 +33,17 @@
#ifndef _HPCMIPS_INTR_H_
#define _HPCMIPS_INTR_H_
-#define IPL_NONE 0 /* disable only this interrupt */
-#define IPL_SOFTCLOCK 1 /* clock software interrupts (SI 0) */
-#define IPL_SOFTBIO 1 /* bio software interrupts (SI 0) */
-#define IPL_SOFTNET 2 /* network software interrupts (SI 1) */
-#define IPL_SOFTSERIAL 2 /* serial software interrupts (SI 1) */
-#define IPL_VM 3
-#define IPL_SCHED 4
-#define IPL_HIGH 4 /* disable all interrupts */
-
-#define _IPL_N 5
-
-#define _IPL_SI0_FIRST IPL_SOFTCLOCK
-#define _IPL_SI0_LAST IPL_SOFTBIO
-
-#define _IPL_SI1_FIRST IPL_SOFTNET
-#define _IPL_SI1_LAST IPL_SOFTSERIAL
-
-/* Interrupt sharing types. */
-#define IST_UNUSABLE -1 /* interrupt cannot be used */
-#define IST_NONE 0 /* none */
-#define IST_PULSE 1 /* pulsed */
-#define IST_EDGE 2 /* edge-triggered */
-#define IST_LEVEL 3 /* level-triggered */
+#include <mips/intr.h>
#ifdef _KERNEL
#ifndef _LOCORE
-#include <mips/cpuregs.h>
-#include <mips/locore.h>
-
-extern const u_int32_t *ipl_sr_bits;
void intr_init(void);
-#define spl0() (void) _spllower(0)
-#define splx(s) (void) _splset(s)
-
-typedef int ipl_t;
-typedef struct {
- ipl_t _sr;
-} ipl_cookie_t;
-
-static inline ipl_cookie_t
-makeiplcookie(ipl_t ipl)
-{
-
- return (ipl_cookie_t){._sr = ipl_sr_bits[ipl]};
-}
-
-static inline int
-splraiseipl(ipl_cookie_t icookie)
-{
-
- return _splraise(icookie._sr);
-}
-
-#include <sys/spl.h>
+#ifdef __INTR_PRIVATE
+extern const struct ipl_sr_map __ipl_sr_map_vr;
+extern const struct ipl_sr_map __ipl_sr_map_tx;
+#endif
#endif /* !_LOCORE */
#endif /* _KERNEL */
Index: src/sys/arch/hpcmips/include/sysconf.h
diff -u src/sys/arch/hpcmips/include/sysconf.h:1.13 src/sys/arch/hpcmips/include/sysconf.h:1.13.62.1
--- src/sys/arch/hpcmips/include/sysconf.h:1.13 Sun Mar 4 05:59:53 2007
+++ src/sys/arch/hpcmips/include/sysconf.h Wed Dec 29 08:16:22 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: sysconf.h,v 1.13 2007/03/04 05:59:53 christos Exp $ */
+/* $NetBSD: sysconf.h,v 1.13.62.1 2010/12/29 08:16:22 matt Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All rights reserved.
@@ -62,7 +62,7 @@
* reboot - reboot or powerdown
* clock -
*/
- void (*cpu_intr)(u_int32_t, u_int32_t, u_int32_t, u_int32_t);
+ void (*cpu_intr)(int, vaddr_t, u_int32_t);
void (*cpu_idle)(void);
void (*cons_init)(void);
void (*fb_init)(void **);
Index: src/sys/arch/hpcmips/tx/tx39.c
diff -u src/sys/arch/hpcmips/tx/tx39.c:1.39.18.1 src/sys/arch/hpcmips/tx/tx39.c:1.39.18.2
--- src/sys/arch/hpcmips/tx/tx39.c:1.39.18.1 Mon Feb 1 04:18:31 2010
+++ src/sys/arch/hpcmips/tx/tx39.c Wed Dec 29 08:16:22 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: tx39.c,v 1.39.18.1 2010/02/01 04:18:31 matt Exp $ */
+/* $NetBSD: tx39.c,v 1.39.18.2 2010/12/29 08:16:22 matt Exp $ */
/*-
* Copyright (c) 1999, 2000 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tx39.c,v 1.39.18.1 2010/02/01 04:18:31 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tx39.c,v 1.39.18.2 2010/12/29 08:16:22 matt Exp $");
#include "opt_vr41xx.h"
#include "opt_tx39xx.h"
@@ -39,6 +39,7 @@
#include <sys/param.h>
#include <sys/systm.h>
+#include <sys/intr.h>
#include <uvm/uvm_extern.h>
@@ -83,7 +84,7 @@
#define TX_INTR cpu_intr /* locore_mips3 directly call this */
#endif
-extern void TX_INTR(u_int32_t, u_int32_t, u_int32_t, u_int32_t);
+extern void TX_INTR(int, vaddr_t, uint32_t);
void tx39clock_cpuspeed(int *, int *);
@@ -179,9 +180,9 @@
tx_find_dram(paddr_t start, paddr_t end)
{
char *page, *startaddr, *endaddr;
- u_int32_t magic0, magic1;
-#define MAGIC0 (*(volatile u_int32_t *)(page + 0))
-#define MAGIC1 (*(volatile u_int32_t *)(page + 4))
+ uint32_t magic0, magic1;
+#define MAGIC0 (*(volatile uint32_t *)(page + 0))
+#define MAGIC1 (*(volatile uint32_t *)(page + 4))
startaddr = (char *)MIPS_PHYS_TO_KSEG1(start);
endaddr = (char *)MIPS_PHYS_TO_KSEG1(end);
@@ -236,7 +237,7 @@
tx_reboot(int howto, char *bootstr)
{
- goto *(u_int32_t *)MIPS_RESET_EXC_VEC;
+ goto *(uint32_t *)MIPS_RESET_EXC_VEC;
}
void
Index: src/sys/arch/hpcmips/vr/vr.c
diff -u src/sys/arch/hpcmips/vr/vr.c:1.51.22.1 src/sys/arch/hpcmips/vr/vr.c:1.51.22.2
--- src/sys/arch/hpcmips/vr/vr.c:1.51.22.1 Fri Feb 5 07:39:53 2010
+++ src/sys/arch/hpcmips/vr/vr.c Wed Dec 29 08:16:23 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: vr.c,v 1.51.22.1 2010/02/05 07:39:53 matt Exp $ */
+/* $NetBSD: vr.c,v 1.51.22.2 2010/12/29 08:16:23 matt Exp $ */
/*-
* Copyright (c) 1999-2002
@@ -35,12 +35,14 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vr.c,v 1.51.22.1 2010/02/05 07:39:53 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vr.c,v 1.51.22.2 2010/12/29 08:16:23 matt Exp $");
#include "opt_vr41xx.h"
#include "opt_tx39xx.h"
#include "opt_kgdb.h"
+#define __INTR_PRIVATE
+
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/reboot.h>
@@ -126,22 +128,19 @@
* This is a mask of bits to clear in the SR when we go to a
* given interrupt priority level.
*/
-const u_int32_t __ipl_sr_bits_vr[_IPL_N] = {
- 0, /* IPL_NONE */
-
- MIPS_SOFT_INT_MASK_0, /* IPL_SOFTCLOCK */
-
- MIPS_SOFT_INT_MASK_0|
- MIPS_SOFT_INT_MASK_1, /* IPL_SOFTNET */
-
- MIPS_SOFT_INT_MASK_0|
- MIPS_SOFT_INT_MASK_1|
- MIPS_INT_MASK_0, /* IPL_VM */
-
- MIPS_SOFT_INT_MASK_0|
- MIPS_SOFT_INT_MASK_1|
- MIPS_INT_MASK_0|
- MIPS_INT_MASK_1, /* IPL_SCHED */
+const struct ipl_sr_map __ipl_sr_map_vr = {
+ .sr_bits = {
+ [IPL_NONE] = 0,
+ [IPL_SOFTCLOCK] = MIPS_SOFT_INT_MASK_0,
+ [IPL_SOFTNET] = MIPS_SOFT_INT_MASK,
+ [IPL_VM] = MIPS_SOFT_INT_MASK
+ | MIPS_INT_MASK_0,
+ [IPL_SCHED] = MIPS_SOFT_INT_MASK
+ | MIPS_INT_MASK_0
+ | MIPS_INT_MASK_1,
+ [IPL_DDB] = MIPS_INT_MASK,
+ [IPL_VM] = MIPS_INT_MASK,
+ },
};
#if defined(VR41XX) && defined(TX39XX)
@@ -151,7 +150,7 @@
#endif
void vr_init(void);
-void VR_INTR(u_int32_t, u_int32_t, u_int32_t, u_int32_t);
+void VR_INTR(int, vaddr_t, uint32_t);
extern void vr_idle(void);
STATIC void vr_cons_init(void);
STATIC void vr_fb_init(void **);
@@ -162,8 +161,8 @@
/*
* CPU interrupt dispatch table (HwInt[0:3])
*/
-STATIC int vr_null_handler(void *, u_int32_t, u_int32_t);
-STATIC int (*vr_intr_handler[4])(void *, u_int32_t, u_int32_t) =
+STATIC int vr_null_handler(void *, uint32_t, uint32_t);
+STATIC int (*vr_intr_handler[4])(void *, uint32_t, uint32_t) =
{
vr_null_handler,
vr_null_handler,
@@ -428,6 +427,7 @@
printf("%s(%d): can't init kgdb's serial port",
__FILE__, __LINE__);
}
+ }
#else /* KGDB */
if (com_info->attach != NULL && (bootinfo->bi_cnuse&BI_CNUSE_SERIAL)) {
/* Serial console */
@@ -530,45 +530,32 @@
* Handle interrupts.
*/
void
-VR_INTR(u_int32_t status, u_int32_t cause, u_int32_t pc, u_int32_t ipending)
+VR_INTR(int ppl, vaddr_t pc, uint32_t status)
{
- struct cpu_info *ci;
+ uint32_t ipending;
+ int ipl;
- ci = curcpu();
- ci->ci_idepth++;
uvmexp.intrs++;
- /* Deal with unneded compare interrupts occasionally so that we can
- * keep spllowersoftclock. */
- if (ipending & MIPS_INT_MASK_5) {
- mips3_cp0_compare_write(0);
- }
+ while (ppl < (ipl = splintr(&ipending))) {
+ /* Deal with unneded compare interrupts occasionally so that
+ * we can keep spllowersoftclock. */
+ if (ipending & MIPS_INT_MASK_5) {
+ mips3_cp0_compare_write(0);
+ }
- if (ipending & MIPS_INT_MASK_1) {
- _splset(MIPS_SR_INT_IE); /* for spllowersoftclock */
- /* Remove the lower priority pending bits from status so that
- * spllowersoftclock will not happen if other interrupts are
- * pending. */
- (*vr_intr_handler[1])(vr_intr_arg[1], pc, status & ~(ipending
- & (MIPS_INT_MASK_0|MIPS_SOFT_INT_MASK_0|MIPS_SOFT_INT_MASK_1)));
- }
+ if (ipending & MIPS_INT_MASK_1) {
+ (*vr_intr_handler[1])(vr_intr_arg[1], pc, ipending);
+ }
- if (ipending & MIPS_INT_MASK_0) {
- _splset(MIPS_INT_MASK_1|MIPS_SR_INT_IE);
- (*vr_intr_handler[0])(vr_intr_arg[0], pc, status);
+ if (ipending & MIPS_INT_MASK_0) {
+ (*vr_intr_handler[0])(vr_intr_arg[0], pc, status);
+ }
}
- ci->ci_idepth--;
-
-#ifdef __HAVE_FAST_SOFTINTS
- ipending &= MIPS_SOFT_INT_MASK;
- if (ipending == 0)
- return;
- softint_process(ipending);
-#endif
}
void *
-vr_intr_establish(int line, int (*ih_fun)(void *, u_int32_t, u_int32_t),
+vr_intr_establish(int line, int (*ih_fun)(void *, uint32_t, uint32_t),
void *ih_arg)
{
@@ -590,7 +577,7 @@
}
int
-vr_null_handler(void *arg, u_int32_t pc, u_int32_t status)
+vr_null_handler(void *arg, uint32_t pc, uint32_t status)
{
printf("vr_null_handler\n");
Index: src/sys/arch/mipsco/include/intr.h
diff -u src/sys/arch/mipsco/include/intr.h:1.16.36.1 src/sys/arch/mipsco/include/intr.h:1.16.36.2
--- src/sys/arch/mipsco/include/intr.h:1.16.36.1 Fri Feb 5 07:39:54 2010
+++ src/sys/arch/mipsco/include/intr.h Wed Dec 29 08:16:21 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: intr.h,v 1.16.36.1 2010/02/05 07:39:54 matt Exp $ */
+/* $NetBSD: intr.h,v 1.16.36.2 2010/12/29 08:16:21 matt Exp $ */
/*
* Copyright (c) 1998 Jonathan Stone. All rights reserved.
@@ -33,29 +33,12 @@
#ifndef _MACHINE_INTR_H_
#define _MACHINE_INTR_H_
-#define IPL_NONE 0 /* disable only this interrupt */
-#define IPL_SOFTCLOCK 1 /* generic software interrupts */
-#define IPL_SOFTBIO 1 /* clock software interrupts */
-#define IPL_SOFTNET 2 /* network software interrupts */
-#define IPL_SOFTSERIAL 2 /* serial software interrupts */
-#define IPL_VM 3
-#define IPL_SCHED 4
-#define IPL_HIGH 4 /* disable all interrupts */
-
-#define IPL_N 5
-
-/* Interrupt sharing types. */
-#define IST_NONE 0 /* none */
-#define IST_PULSE 1 /* pulsed */
-#define IST_EDGE 2 /* edge-triggered */
-#define IST_LEVEL 3 /* level-triggered */
+#include <mips/intr.h>
#ifdef _KERNEL
-#ifndef _LOCORE
-#include <sys/types.h>
-#include <sys/device.h>
-#include <sys/queue.h>
-#include <mips/locore.h>
+#ifdef __INTR_PRIVATE
+#include <sys/evcnt.h>
+#include <mips/cpuregs.h>
/*
* nesting interrupt masks.
@@ -69,49 +52,27 @@
#define MIPS_INT_MASK_SPL4 (MIPS_INT_MASK_4|MIPS_INT_MASK_SPL3)
#define MIPS_INT_MASK_SPL5 (MIPS_INT_MASK_5|MIPS_INT_MASK_SPL4)
-#define spl0() (void)_spllower(0)
-#define splx(s) (void)_splset(s)
-#define splvm() _splraise(MIPS_INT_MASK_SPL2)
-#define splsched() _splraise(MIPS_INT_MASK_SPL2)
-#define splhigh() _splraise(MIPS_INT_MASK_SPL2)
-
-#define splsoftclock() _splraise(MIPS_INT_MASK_SPL_SOFT0)
-#define splsoftbio() _splraise(MIPS_INT_MASK_SPL_SOFT0)
-#define splsoftnet() _splraise(MIPS_INT_MASK_SPL_SOFT1)
-#define splsoftserial() _splraise(MIPS_INT_MASK_SPL_SOFT1)
-
-typedef int ipl_t;
-typedef struct {
- int _sr;
-} ipl_cookie_t;
-
-ipl_cookie_t makeiplcookie(ipl_t ipl);
-
-static inline int
-splraiseipl(ipl_cookie_t icookie)
-{
-
- return _splraise(icookie._sr);
-}
-
struct mipsco_intrhand {
- LIST_ENTRY(mipsco_intrhand)
- ih_q;
- int (*ih_fun) __P((void *));
+ LIST_ENTRY(mipsco_intrhand) ih_q;
+ int (*ih_fun)(void *);
void *ih_arg;
struct mipsco_intr *ih_intrhead;
int ih_pending;
};
struct mipsco_intr {
- LIST_HEAD(,mipsco_intrhand)
- intr_q;
+ LIST_HEAD(,mipsco_intrhand) intr_q;
struct evcnt ih_evcnt;
unsigned long intr_siq;
};
-
+extern const struct ipl_sr_map mipsco_ipl_sr_map;
extern struct mipsco_intrhand intrtab[];
+#define CALL_INTR(lev) ((*intrtab[lev].ih_fun)(intrtab[lev].ih_arg))
+
+#define MAX_INTR_COOKIES 16
+
+#endif /* __INTR_PRIVATE */
#define SYS_INTR_LEVEL0 0
#define SYS_INTR_LEVEL1 1
@@ -126,10 +87,5 @@
#define SYS_INTR_FDC 10
#define SYS_INTR_ATBUS 11
-#define MAX_INTR_COOKIES 16
-
-#define CALL_INTR(lev) ((*intrtab[lev].ih_fun)(intrtab[lev].ih_arg))
-
-#endif /* !_LOCORE */
#endif /* _KERNEL */
#endif /* _MACHINE_INTR_H_ */
Index: src/sys/arch/mipsco/include/sysconf.h
diff -u src/sys/arch/mipsco/include/sysconf.h:1.4 src/sys/arch/mipsco/include/sysconf.h:1.4.62.1
--- src/sys/arch/mipsco/include/sysconf.h:1.4 Sun Mar 4 06:00:13 2007
+++ src/sys/arch/mipsco/include/sysconf.h Wed Dec 29 08:16:21 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: sysconf.h,v 1.4 2007/03/04 06:00:13 christos Exp $ */
+/* $NetBSD: sysconf.h,v 1.4.62.1 2010/12/29 08:16:21 matt Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All rights reserved.
@@ -53,11 +53,11 @@
* write_todr - Write TOD registers
* clkinit - Initialize clocks
*/
- void (*cons_init) __P((void));
- void (*iointr) __P((unsigned, unsigned, unsigned, unsigned));
- int (*memsize) __P((void *));
- void (*intr_establish) __P((int, int (*)__P((void *)), void *));
- void (*clkinit) __P((void));
+ void (*cons_init)(void);
+ void (*iointr)(uint32_t, vaddr_t, uint32_t);
+ int (*memsize)(void *);
+ void (*intr_establish)(int, int (*)(void *), void *);
+ void (*clkinit)(void);
};
extern struct platform platform;
Index: src/sys/arch/mipsco/mipsco/autoconf.c
diff -u src/sys/arch/mipsco/mipsco/autoconf.c:1.18 src/sys/arch/mipsco/mipsco/autoconf.c:1.18.36.1
--- src/sys/arch/mipsco/mipsco/autoconf.c:1.18 Mon Dec 3 15:33:57 2007
+++ src/sys/arch/mipsco/mipsco/autoconf.c Wed Dec 29 08:16:21 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: autoconf.c,v 1.18 2007/12/03 15:33:57 ad Exp $ */
+/* $NetBSD: autoconf.c,v 1.18.36.1 2010/12/29 08:16:21 matt Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -84,8 +84,9 @@
* and the drivers are initialized.
*/
+#define __INTR_PRIVATE
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.18 2007/12/03 15:33:57 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.18.36.1 2010/12/29 08:16:21 matt Exp $");
#include <sys/param.h>
#include <sys/systm.h>
Index: src/sys/arch/mipsco/mipsco/interrupt.c
diff -u src/sys/arch/mipsco/mipsco/interrupt.c:1.6.18.1 src/sys/arch/mipsco/mipsco/interrupt.c:1.6.18.2
--- src/sys/arch/mipsco/mipsco/interrupt.c:1.6.18.1 Fri Feb 5 07:39:54 2010
+++ src/sys/arch/mipsco/mipsco/interrupt.c Wed Dec 29 08:16:21 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: interrupt.c,v 1.6.18.1 2010/02/05 07:39:54 matt Exp $ */
+/* $NetBSD: interrupt.c,v 1.6.18.2 2010/12/29 08:16:21 matt Exp $ */
/*
* Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -29,55 +29,40 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#define __INTR_PRIVATE
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.6.18.1 2010/02/05 07:39:54 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.6.18.2 2010/12/29 08:16:21 matt Exp $");
#include <sys/param.h>
#include <sys/malloc.h>
#include <sys/intr.h>
-#include <sys/cpu.h>
#include <uvm/uvm_extern.h>
#include <machine/sysconf.h>
void
-cpu_intr(status, cause, pc, ipending)
- u_int32_t status;
- u_int32_t cause;
- u_int32_t pc;
- u_int32_t ipending;
+cpu_intr(int ppl, vaddr_t pc, uint32_t status)
{
- struct cpu_info *ci;
+ uint32_t ipending;
+ int ipl;
- ci = curcpu();
uvmexp.intrs++;
- /* device interrupts */
- ci->ci_idepth++;
- (*platform.iointr)(status, cause, pc, ipending);
- ci->ci_idepth--;
-
-#ifdef __HAVE_FAST_SOFTINTS
- /* software simulated interrupt */
- ipending &= MIPS_SOFT_INT_MASK;
- if (ipending == 0)
- return;
- softint_process(ipending);
-#endif
+ while (ppl < (ipl = splintr(&ipending))) {
+ /* device interrupts */
+ (*platform.iointr)(status, pc, ipending);
+ }
+
}
-static const int ipl_sr_bits[] = {
+const struct ipl_sr_map mipsco_ipl_sr_map = {
+ .sr_bits = {
[IPL_NONE] = 0,
[IPL_SOFTCLOCK] = MIPS_INT_MASK_SPL_SOFT0,
[IPL_SOFTNET] = MIPS_INT_MASK_SPL_SOFT1,
[IPL_VM] = MIPS_INT_MASK_SPL2,
[IPL_SCHED] = MIPS_INT_MASK_SPL2,
+ [IPL_HIGH] = MIPS_INT_MASK,
+ },
};
-
-ipl_cookie_t
-makeiplcookie(ipl_t ipl)
-{
-
- return (ipl_cookie_t){._sr = ipl_sr_bits[ipl]};
-}
Index: src/sys/arch/mipsco/mipsco/machdep.c
diff -u src/sys/arch/mipsco/mipsco/machdep.c:1.58.10.3 src/sys/arch/mipsco/mipsco/machdep.c:1.58.10.4
--- src/sys/arch/mipsco/mipsco/machdep.c:1.58.10.3 Sun Mar 21 17:38:34 2010
+++ src/sys/arch/mipsco/mipsco/machdep.c Wed Dec 29 08:16:21 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.58.10.3 2010/03/21 17:38:34 cliff Exp $ */
+/* $NetBSD: machdep.c,v 1.58.10.4 2010/12/29 08:16:21 matt Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -76,7 +76,7 @@
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.58.10.3 2010/03/21 17:38:34 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.58.10.4 2010/12/29 08:16:21 matt Exp $");
/* from: Utah Hdr: machdep.c 1.63 91/04/24 */
@@ -150,26 +150,26 @@
phys_ram_seg_t mem_clusters[VM_PHYSSEG_MAX];
int mem_cluster_cnt;
-void to_monitor __P((int)) __attribute__((__noreturn__));
-void prom_halt __P((int)) __attribute__((__noreturn__));
+void to_monitor(int) __dead;
+void prom_halt(int) __dead;
#ifdef KGDB
-void zs_kgdb_init __P((void));
-void kgdb_connect __P((int));
+void zs_kgdb_init(void);
+void kgdb_connect(int);
#endif
/*
* Local functions.
*/
-int initcpu __P((void));
-void configure __P((void));
+int initcpu(void);
+void configure(void);
-void mach_init __P((int, char *[], char*[], u_int, char *));
-int memsize_scan __P((void *));
+void mach_init(int, char *[], char*[], u_int, char *);
+int memsize_scan(void *);
#ifdef DEBUG
/* stacktrace code violates prototypes to get callee's registers */
-extern void stacktrace __P((void)); /*XXX*/
+extern void stacktrace(void); /*XXX*/
#endif
/*
@@ -182,15 +182,15 @@
extern struct user *proc0paddr;
/* locore callback-vector setup */
-extern void mips_vector_init __P((const struct splsw *));
-extern void prom_init __P((void));
-extern void pizazz_init __P((void));
+extern void mips_vector_init(const struct splsw *);
+extern void prom_init(void);
+extern void pizazz_init(void);
/* platform-specific initialization vector */
-static void unimpl_cons_init __P((void));
-static void unimpl_iointr __P((unsigned, unsigned, unsigned, unsigned));
-static int unimpl_memsize __P((void *));
-static void unimpl_intr_establish __P((int, int (*)__P((void *)), void *));
+static void unimpl_cons_init(void);
+static void unimpl_iointr(uint32_t, vaddr_t, uint32_t);
+static int unimpl_memsize(void *);
+static void unimpl_intr_establish(int, int (*)(void *), void *);
struct platform platform = {
.iobus = "iobus not set",
@@ -205,11 +205,11 @@
extern struct consdev consdev_prom;
extern struct consdev consdev_zs;
-static void null_cnprobe __P((struct consdev *));
-static void prom_cninit __P((struct consdev *));
-static int prom_cngetc __P((dev_t));
-static void prom_cnputc __P((dev_t, int));
-static void null_cnpollc __P((dev_t, int));
+static void null_cnprobe(struct consdev *);
+static void prom_cninit(struct consdev *);
+static int prom_cngetc(dev_t);
+static void prom_cnputc(dev_t, int);
+static void null_cnpollc(dev_t, int);
struct consdev consdev_prom = {
null_cnprobe,
@@ -246,7 +246,6 @@
struct btinfo_symtab *bi_syms;
#endif
-
/* Check for valid bootinfo passed from bootstrap */
if (bim == BOOTINFO_MAGIC) {
struct btinfo_magic *bi_magic;
@@ -264,6 +263,13 @@
kernend = (void *)mips_round_page(end);
memset(edata, 0, end - edata);
+ /*
+ * Copy exception-dispatch code down to exception vector.
+ * Initialize locore-function vector.
+ * Clear out the I and D caches.
+ */
+ mips_vector_init(NULL);
+
#if NKSYMS || defined(DDB) || defined(LKM)
bi_syms = lookup_bootinfo(BTINFO_SYMTAB);
@@ -298,13 +304,6 @@
mem_clusters[0].size = ctob(physmem);
mem_cluster_cnt = 1;
- /*
- * Copy exception-dispatch code down to exception vector.
- * Initialize locore-function vector.
- * Clear out the I and D caches.
- */
- mips_vector_init();
-
/* Look at argv[0] and compute bootdev */
makebootdev(argv[0]);
@@ -531,50 +530,41 @@
}
int
-initcpu()
+initcpu(void)
{
spl0(); /* safe to turn interrupts on now */
return 0;
}
static void
-unimpl_cons_init()
+unimpl_cons_init(void)
{
panic("sysconf.init didn't set cons_init");
}
static void
-unimpl_iointr(mask, pc, statusreg, causereg)
- u_int mask;
- u_int pc;
- u_int statusreg;
- u_int causereg;
+unimpl_iointr(uint32_t status, vaddr_t pc, uint32_t ipending)
{
panic("sysconf.init didn't set intr");
}
static int
-unimpl_memsize(first)
-void *first;
+unimpl_memsize(void *first)
{
panic("sysconf.init didn't set memsize");
}
void
-unimpl_intr_establish(level, func, arg)
- int level;
- int (*func) __P((void *));
- void *arg;
+unimpl_intr_establish(int level, int (*func)(void *), void *arg)
{
panic("sysconf.init didn't init intr_establish");
}
void
-delay(n)
- int n;
+delay(int n)
{
DELAY(n);
}
Index: src/sys/arch/mipsco/mipsco/mips_3x30.c
diff -u src/sys/arch/mipsco/mipsco/mips_3x30.c:1.10.18.1 src/sys/arch/mipsco/mipsco/mips_3x30.c:1.10.18.2
--- src/sys/arch/mipsco/mipsco/mips_3x30.c:1.10.18.1 Mon Feb 1 04:18:31 2010
+++ src/sys/arch/mipsco/mipsco/mips_3x30.c Wed Dec 29 08:16:21 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: mips_3x30.c,v 1.10.18.1 2010/02/01 04:18:31 matt Exp $ */
+/* $NetBSD: mips_3x30.c,v 1.10.18.2 2010/12/29 08:16:21 matt Exp $ */
/*
* Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -29,19 +29,20 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#define __INTR_PRIVATE
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mips_3x30.c,v 1.10.18.1 2010/02/01 04:18:31 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mips_3x30.c,v 1.10.18.2 2010/12/29 08:16:21 matt Exp $");
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/device.h>
#include <sys/proc.h>
#include <sys/kernel.h>
+#include <sys/cpu.h>
+#include <sys/intr.h>
#include <machine/trap.h>
#include <machine/psl.h>
-#include <machine/cpu.h>
-#include <machine/intr.h>
#include <machine/mainboard.h>
#include <machine/sysconf.h>
@@ -49,9 +50,9 @@
/* Local functions */
void pizazz_init (void);
-void pizazz_intr (u_int, u_int, u_int, u_int);
+void pizazz_intr (uint32_t, vaddr_t, uint32_t);
int pizazz_level0_intr (void *);
-void pizazz_level5_intr (int, int, int);
+void pizazz_level5_intr (uint32_t, vaddr_t);
void pizazz_intr_establish (int, int (*)(void *), void *);
#define INT_MASK_FPU MIPS_INT_MASK_3
@@ -64,6 +65,8 @@
platform.iointr = pizazz_intr;
platform.intr_establish = pizazz_intr_establish;
+ ipl_sr_map = mipsco_ipl_sr_map;
+
pizazz_intr_establish(SYS_INTR_LEVEL0, pizazz_level0_intr, NULL);
strcpy(cpu_model, "Mips 3230 Magnum (Pizazz)");
@@ -78,11 +81,7 @@
} while (0)
void
-pizazz_intr(status, cause, pc, ipending)
- u_int status; /* status register at time of the exception */
- u_int cause; /* cause register at time of exception */
- u_int pc; /* program counter where to continue */
- u_int ipending;
+pizazz_intr(uint32_t status, vaddr_t pc, uint32_t ipending)
{
/* handle clock interrupts ASAP */
if (ipending & MIPS_INT_MASK_2) { /* Timer Interrupt */
@@ -91,35 +90,25 @@
cf.pc = pc;
cf.sr = status;
+ cf.intr = (curcpu()->ci_idepth > 0);
rambo_clkintr(&cf);
-
- /* keep clock interrupts enabled when we return */
- cause &= ~MIPS_INT_MASK_2;
}
- /* If clock interrupts were enabled, re-enable them ASAP. */
- _splset(MIPS_SR_INT_IE | (status & MIPS_INT_MASK_2));
-
if (ipending & MIPS_INT_MASK_5) /* level 5 interrupt */
- pizazz_level5_intr(pc, cause, status);
+ pizazz_level5_intr(status, pc);
HANDLE_INTR(SYS_INTR_FDC, MIPS_INT_MASK_4);
HANDLE_INTR(SYS_INTR_SCSI, MIPS_INT_MASK_1);
HANDLE_INTR(SYS_INTR_LEVEL0, MIPS_INT_MASK_0);
- /* XXX: Keep FDC interrupt masked off */
- cause &= ~(MIPS_INT_MASK_0 | MIPS_INT_MASK_1 | MIPS_INT_MASK_5);
-
- _splset((status & ~cause & MIPS_HARD_INT_MASK) | MIPS_SR_INT_IE);
-
#if !defined(NOFPU)
/* FPU nofiticaition */
if (ipending & INT_MASK_FPU) {
if (!USERMODE(status))
- panic("kernel used FPU: PC %x, CR %x, SR %x",
- pc, cause, status);
- MachFPInterrupt(status, cause, pc, curlwp->l_md.md_utf);
+ panic("kernel used FPU: PC %x, SR %x",
+ pc, status);
+ MachFPInterrupt(status, 0, pc, curlwp->l_md.md_utf);
}
#endif
}
@@ -155,16 +144,13 @@
* Motherboard Parity Error
*/
void
-pizazz_level5_intr(pc, cause, status)
- int pc;
- int cause;
- int status;
+pizazz_level5_intr(uint32_t status, vaddr_t pc)
{
u_int32_t ereg;
ereg = *(u_int32_t *)RAMBO_ERREG;
- printf("interrupt: pc=%p cr=%x sr=%x\n", (void *)pc, cause, status);
+ printf("interrupt: pc=%p sr=%x\n", (void *)pc, status);
printf("parity error: %p mask: 0x%x\n", (void *)ereg, ereg & 0xf);
panic("memory fault");
}