summaryrefslogtreecommitdiff
path: root/sys/arch/mvme88k
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/mvme88k')
-rw-r--r--sys/arch/mvme88k/dev/bussw.c12
-rw-r--r--sys/arch/mvme88k/dev/cl.c47
-rw-r--r--sys/arch/mvme88k/dev/clock.c26
-rw-r--r--sys/arch/mvme88k/dev/dart.c10
-rw-r--r--sys/arch/mvme88k/dev/if_ie.c15
-rw-r--r--sys/arch/mvme88k/dev/if_le.c8
-rw-r--r--sys/arch/mvme88k/dev/if_levar.h3
-rw-r--r--sys/arch/mvme88k/dev/memc.c4
-rw-r--r--sys/arch/mvme88k/dev/osiop_pcctwo.c12
-rw-r--r--sys/arch/mvme88k/dev/pcctwo.c8
-rw-r--r--sys/arch/mvme88k/dev/pcctwovar.h4
-rw-r--r--sys/arch/mvme88k/dev/syscon.c16
-rw-r--r--sys/arch/mvme88k/dev/sysconreg.h4
-rw-r--r--sys/arch/mvme88k/dev/vme.c10
-rw-r--r--sys/arch/mvme88k/dev/vme.h4
-rw-r--r--sys/arch/mvme88k/dev/vs.c14
-rw-r--r--sys/arch/mvme88k/dev/vsvar.h4
-rw-r--r--sys/arch/mvme88k/dev/vx.c10
-rw-r--r--sys/arch/mvme88k/include/cpu.h12
-rw-r--r--sys/arch/mvme88k/mvme88k/machdep.c75
20 files changed, 121 insertions, 177 deletions
diff --git a/sys/arch/mvme88k/dev/bussw.c b/sys/arch/mvme88k/dev/bussw.c
index a466f296a24..67adc2d4667 100644
--- a/sys/arch/mvme88k/dev/bussw.c
+++ b/sys/arch/mvme88k/dev/bussw.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: bussw.c,v 1.14 2004/05/07 18:10:28 miod Exp $ */
+/* $OpenBSD: bussw.c,v 1.15 2004/07/30 19:02:05 miod Exp $ */
/*
* Copyright (c) 1999 Steve Murphree, Jr.
*
@@ -60,7 +60,7 @@ struct cfdriver bussw_cd = {
int bussw_print(void *, const char *);
int bussw_scan(struct device *, void *, void *);
int busswabort(void *);
-int busswintr_establish(int, struct intrhand *);
+int busswintr_establish(int, struct intrhand *, const char *);
int
bussw_match(parent, vcf, args)
@@ -123,7 +123,7 @@ bussw_attach(parent, self, args)
sc->sc_abih.ih_wantframe = 1;
sc->sc_abih.ih_ipl = IPL_NMI;
- busswintr_establish(BS_ABORTIRQ, &sc->sc_abih);
+ busswintr_establish(BS_ABORTIRQ, &sc->sc_abih, "abort");
bus_space_write_1(sc->sc_iot, ioh, BS_ABORT,
bus_space_read_4(sc->sc_iot, ioh, BS_ABORT) | BS_ABORT_IEN);
@@ -174,16 +174,14 @@ bussw_scan(parent, child, args)
}
int
-busswintr_establish(vec, ih)
- int vec;
- struct intrhand *ih;
+busswintr_establish(int vec, struct intrhand *ih, const char *name)
{
#ifdef DIAGNOSTIC
if (vec < 0 || vec >= BS_NVEC)
panic("busswintr_establish: illegal vector 0x%x\n", vec);
#endif
- return (intr_establish(BS_VECBASE + vec, ih));
+ return intr_establish(BS_VECBASE + vec, ih, name);
}
int
diff --git a/sys/arch/mvme88k/dev/cl.c b/sys/arch/mvme88k/dev/cl.c
index 428be1b605f..9788d57cab8 100644
--- a/sys/arch/mvme88k/dev/cl.c
+++ b/sys/arch/mvme88k/dev/cl.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cl.c,v 1.47 2004/07/02 14:00:42 miod Exp $ */
+/* $OpenBSD: cl.c,v 1.48 2004/07/30 19:02:05 miod Exp $ */
/*
* Copyright (c) 1995 Dale Rahn. All rights reserved.
@@ -35,7 +35,6 @@
#include <sys/time.h>
#include <sys/device.h>
#include <sys/syslog.h>
-#include <sys/evcount.h>
#include <machine/autoconf.h>
#include <machine/conf.h>
@@ -110,18 +109,16 @@ struct clsoftc {
struct device sc_dev;
bus_space_tag_t sc_iot;
bus_space_handle_t sc_ioh;
- struct evcount sc_txintrcnt;
- char sc_txintrname[16 + 3];
- struct evcount sc_rxintrcnt;
- char sc_rxintrname[16 + 3];
- struct evcount sc_mxintrcnt;
- char sc_mxintrname[16 + 3];
time_t sc_fotime; /* time of last fifo overrun */
struct cl_info sc_cl[CLCD_PORTS_PER_CHIP];
struct intrhand sc_ih_e;
struct intrhand sc_ih_m;
struct intrhand sc_ih_t;
struct intrhand sc_ih_r;
+ char sc_errintrname[16 + 4];
+ char sc_mxintrname[16 + 3];
+ char sc_rxintrname[16 + 3];
+ char sc_txintrname[16 + 3];
struct pcctwosoftc *sc_pcctwo;
};
@@ -361,10 +358,19 @@ clattach(parent, self, aux)
sc->sc_ih_r.ih_wantframe = 0;
sc->sc_ih_r.ih_ipl = ca->ca_ipl;
- pcctwointr_establish(PCC2V_SCC_RXE, &sc->sc_ih_e);
- pcctwointr_establish(PCC2V_SCC_M, &sc->sc_ih_m);
- pcctwointr_establish(PCC2V_SCC_TX, &sc->sc_ih_t);
- pcctwointr_establish(PCC2V_SCC_RX, &sc->sc_ih_r);
+ snprintf(sc->sc_errintrname, sizeof sc->sc_errintrname,
+ "%s_err", self->dv_xname);
+ snprintf(sc->sc_mxintrname, sizeof sc->sc_mxintrname,
+ "%s_mx", self->dv_xname);
+ snprintf(sc->sc_rxintrname, sizeof sc->sc_rxintrname,
+ "%s_rx", self->dv_xname);
+ snprintf(sc->sc_txintrname, sizeof sc->sc_txintrname,
+ "%s_tx", self->dv_xname);
+
+ pcctwointr_establish(PCC2V_SCC_RXE, &sc->sc_ih_e, sc->sc_errintrname);
+ pcctwointr_establish(PCC2V_SCC_M, &sc->sc_ih_m, sc->sc_mxintrname);
+ pcctwointr_establish(PCC2V_SCC_TX, &sc->sc_ih_t, sc->sc_txintrname);
+ pcctwointr_establish(PCC2V_SCC_RX, &sc->sc_ih_r, sc->sc_rxintrname);
bus_space_write_1(sc->sc_pcctwo->sc_iot, sc->sc_pcctwo->sc_ioh,
PCCTWO_SCCICR, PCC2_IRQ_IEN | (ca->ca_ipl & PCC2_IRQ_IPL));
@@ -373,19 +379,6 @@ clattach(parent, self, aux)
bus_space_write_1(sc->sc_pcctwo->sc_iot, sc->sc_pcctwo->sc_ioh,
PCCTWO_SCCRX, PCC2_IRQ_IEN | (ca->ca_ipl & PCC2_IRQ_IPL));
- snprintf(sc->sc_txintrname, sizeof sc->sc_txintrname,
- "%s_tx", self->dv_xname);
- evcount_attach(&sc->sc_txintrcnt, sc->sc_txintrname,
- (void *)&sc->sc_ih_t.ih_ipl, &evcount_intr);
- snprintf(sc->sc_rxintrname, sizeof sc->sc_rxintrname,
- "%s_rx", self->dv_xname);
- evcount_attach(&sc->sc_rxintrcnt, sc->sc_rxintrname,
- (void *)&sc->sc_ih_r.ih_ipl, &evcount_intr);
- snprintf(sc->sc_mxintrname, sizeof sc->sc_mxintrname,
- "%s_mx", self->dv_xname);
- evcount_attach(&sc->sc_mxintrcnt, sc->sc_mxintrname,
- (void *)&sc->sc_ih_m.ih_ipl, &evcount_intr);
-
printf("\n");
}
@@ -1315,7 +1308,6 @@ cl_mintr(arg)
log(LOG_WARNING, "cl_mintr extra intr\n");
return 0;
}
- sc->sc_mxintrcnt.ec_count++;
channel = mir & 0x03;
misr = bus_space_read_1(iot, ioh, CL_MISR);
@@ -1378,7 +1370,6 @@ cl_txintr(arg)
log(LOG_WARNING, "cl_txintr extra intr\n");
return 0;
}
- sc->sc_txintrcnt.ec_count++;
channel = tir & 0x03;
sc->sc_cl[channel].txcnt ++;
@@ -1513,7 +1504,7 @@ cl_rxintr(arg)
log(LOG_WARNING, "cl_rxintr extra intr\n");
return 0;
}
- sc->sc_rxintrcnt.ec_count++;
+
channel = rir & 0x3;
cmr = bus_space_read_1(iot, ioh, CL_CMR);
diff --git a/sys/arch/mvme88k/dev/clock.c b/sys/arch/mvme88k/dev/clock.c
index cb2e4061e38..b193c5ad6f0 100644
--- a/sys/arch/mvme88k/dev/clock.c
+++ b/sys/arch/mvme88k/dev/clock.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: clock.c,v 1.32 2004/07/23 21:00:09 miod Exp $ */
+/* $OpenBSD: clock.c,v 1.33 2004/07/30 19:02:05 miod Exp $ */
/*
* Copyright (c) 1999 Steve Murphree, Jr.
* Copyright (c) 1995 Theo de Raadt
@@ -75,7 +75,6 @@
#include <sys/kernel.h>
#include <sys/device.h>
#include <sys/systm.h>
-#include <sys/evcount.h>
#include <machine/asm.h>
#include <machine/board.h> /* for register defines */
@@ -118,9 +117,7 @@ void write_cio(int, u_int8_t);
struct clocksoftc {
struct device sc_dev;
struct intrhand sc_profih;
- struct evcount sc_profcnt;
struct intrhand sc_statih;
- struct evcount sc_statcnt;
};
struct cfattach clock_ca = {
@@ -194,14 +191,14 @@ clockattach(struct device *parent, struct device *self, void *args)
sc->sc_profih.ih_wantframe = 1;
sc->sc_profih.ih_ipl = ca->ca_ipl;
prof_reset = ca->ca_ipl | PCC2_IRQ_IEN | PCC2_IRQ_ICLR;
- pcctwointr_establish(PCC2V_TIMER1, &sc->sc_profih);
+ pcctwointr_establish(PCC2V_TIMER1, &sc->sc_profih, "clock");
md.clock_init_func = sbc_initclock;
sc->sc_statih.ih_fn = sbc_statintr;
sc->sc_statih.ih_arg = 0;
sc->sc_statih.ih_wantframe = 1;
sc->sc_statih.ih_ipl = ca->ca_ipl;
stat_reset = ca->ca_ipl | PCC2_IRQ_IEN | PCC2_IRQ_ICLR;
- pcctwointr_establish(PCC2V_TIMER2, &sc->sc_statih);
+ pcctwointr_establish(PCC2V_TIMER2, &sc->sc_statih, "stat");
md.statclock_init_func = sbc_initstatclock;
break;
#endif /* NPCCTWO */
@@ -211,22 +208,18 @@ clockattach(struct device *parent, struct device *self, void *args)
sc->sc_profih.ih_arg = 0;
sc->sc_profih.ih_wantframe = 1;
sc->sc_profih.ih_ipl = ca->ca_ipl;
- sysconintr_establish(SYSCV_TIMER1, &sc->sc_profih);
+ sysconintr_establish(SYSCV_TIMER1, &sc->sc_profih, "clock");
md.clock_init_func = m188_initclock;
sc->sc_statih.ih_fn = m188_statintr;
sc->sc_statih.ih_arg = 0;
sc->sc_statih.ih_wantframe = 1;
sc->sc_statih.ih_ipl = ca->ca_ipl;
- sysconintr_establish(SYSCV_TIMER2, &sc->sc_statih);
+ sysconintr_establish(SYSCV_TIMER2, &sc->sc_statih, "stat");
md.statclock_init_func = m188_initstatclock;
break;
#endif /* NSYSCON */
}
- evcount_attach(&sc->sc_statcnt, "stat", (void *)&sc->sc_statih.ih_ipl,
- &evcount_intr);
- evcount_attach(&sc->sc_profcnt, "clock", (void *)&sc->sc_profih.ih_ipl,
- &evcount_intr);
printf("\n");
}
@@ -262,13 +255,10 @@ sbc_initclock(void)
int
sbc_clockintr(void *eframe)
{
- struct clocksoftc *sc = clock_cd.cd_devs[0];
-
*(volatile u_int8_t *)(OBIO_START + PCC2_BASE + PCCTWO_T1ICR) =
prof_reset;
intrcnt[M88K_CLK_IRQ]++;
- sc->sc_profcnt.ec_count++;
hardclock(eframe);
#if NBUGTTY > 0
@@ -315,14 +305,12 @@ sbc_initstatclock(void)
int
sbc_statintr(void *eframe)
{
- struct clocksoftc *sc = clock_cd.cd_devs[0];
u_long newint, r, var;
*(volatile u_int8_t *)(OBIO_START + PCC2_BASE + PCCTWO_T2ICR) =
stat_reset;
intrcnt[M88K_SCLK_IRQ]++;
- sc->sc_statcnt.ec_count++;
statclock((struct clockframe *)eframe);
@@ -354,7 +342,6 @@ sbc_statintr(void *eframe)
int
m188_clockintr(void *eframe)
{
- struct clocksoftc *sc = clock_cd.cd_devs[0];
volatile int tmp;
/* acknowledge the timer interrupt */
@@ -364,7 +351,6 @@ m188_clockintr(void *eframe)
tmp = *(int *volatile)DART_STOPC;
intrcnt[M88K_CLK_IRQ]++;
- sc->sc_profcnt.ec_count++;
hardclock(eframe);
#if NBUGTTY > 0
@@ -438,13 +424,11 @@ m188_timer_init(unsigned period)
int
m188_statintr(void *eframe)
{
- struct clocksoftc *sc = clock_cd.cd_devs[0];
u_long newint, r, var;
CIO_LOCK;
intrcnt[M88K_SCLK_IRQ]++;
- sc->sc_statcnt.ec_count++;
statclock((struct clockframe *)eframe);
write_cio(CIO_CSR1, CIO_GCB | CIO_CIP); /* Ack the interrupt */
diff --git a/sys/arch/mvme88k/dev/dart.c b/sys/arch/mvme88k/dev/dart.c
index 1a72ec183c9..48e28be4448 100644
--- a/sys/arch/mvme88k/dev/dart.c
+++ b/sys/arch/mvme88k/dev/dart.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: dart.c,v 1.36 2004/07/23 23:15:49 miod Exp $ */
+/* $OpenBSD: dart.c,v 1.37 2004/07/30 19:02:05 miod Exp $ */
/*
* Mach Operating System
@@ -36,7 +36,6 @@
#include <sys/device.h>
#include <sys/simplelock.h>
#include <sys/syslog.h>
-#include <sys/evcount.h>
#include <machine/asm_macro.h> /* enable/disable interrupts */
#include <machine/autoconf.h>
@@ -74,7 +73,6 @@ struct dart_info {
struct dartsoftc {
struct device sc_dev;
- struct evcount sc_intrcnt;
union dartreg *dart_reg;
union dart_pt_io *port_reg[NDARTPORTS];
struct dart_info sc_dart[NDARTPORTS];
@@ -307,9 +305,7 @@ dartattach(parent, self, aux)
sc->sc_ih.ih_wantframe = 0;
sc->sc_ih.ih_ipl = ca->ca_ipl;
- sysconintr_establish(SYSCV_SCC, &sc->sc_ih);
- evcount_attach(&sc->sc_intrcnt, self->dv_xname,
- (void *)&sc->sc_ih.ih_ipl, &evcount_intr);
+ sysconintr_establish(SYSCV_SCC, &sc->sc_ih, self->dv_xname);
printf("\n");
}
@@ -1103,8 +1099,6 @@ dartintr(arg)
if (isr == 0) /* not interrupt from this duart */
return 0;
- sc->sc_intrcnt.ec_count++;
-
if (isr & IIPCHG) {
unsigned int ip = addr->read.rd_ip;
unsigned int ipcr = addr->read.rd_ipcr;
diff --git a/sys/arch/mvme88k/dev/if_ie.c b/sys/arch/mvme88k/dev/if_ie.c
index 9478f6516dc..e93398a3a83 100644
--- a/sys/arch/mvme88k/dev/if_ie.c
+++ b/sys/arch/mvme88k/dev/if_ie.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_ie.c,v 1.29 2004/07/02 14:00:43 miod Exp $ */
+/* $OpenBSD: if_ie.c,v 1.30 2004/07/30 19:02:05 miod Exp $ */
/*-
* Copyright (c) 1998 Steve Murphree, Jr.
@@ -105,7 +105,6 @@ Mode of operation:
#include <sys/errno.h>
#include <sys/syslog.h>
#include <sys/device.h>
-#include <sys/evcount.h>
#include <net/if.h>
#include <net/if_types.h>
@@ -164,7 +163,7 @@ struct vm_map *ie_map; /* for obio */
struct ie_softc {
struct device sc_dev; /* device structure */
struct intrhand sc_ih, sc_failih; /* interrupt info */
- struct evcount sc_intrcnt; /* # of interrupts, per ie */
+ char sc_failintrname[16 + 4];
caddr_t sc_iobase; /* KVA of base of 24 bit addr space */
caddr_t sc_maddr; /* KVA of base of chip's RAM (16bit addr sp.)*/
@@ -484,8 +483,10 @@ ieattach(parent, self, aux)
sc->sc_failih.ih_wantframe = 0;
sc->sc_failih.ih_ipl = ca->ca_ipl;
- pcctwointr_establish(PCC2V_IE, &sc->sc_ih);
- pcctwointr_establish(PCC2V_IEFAIL, &sc->sc_failih);
+ pcctwointr_establish(PCC2V_IE, &sc->sc_ih, self->dv_xname);
+ snprintf(sc->sc_failintrname, sizeof sc->sc_failintrname, "%s_err",
+ self->dv_xname);
+ pcctwointr_establish(PCC2V_IEFAIL, &sc->sc_failih, sc->sc_failintrname);
/* enable device interrupts */
bus_space_write_1(sc->sc_pcctwo->sc_iot, sc->sc_pcctwo->sc_ioh,
@@ -494,9 +495,6 @@ ieattach(parent, self, aux)
bus_space_write_1(sc->sc_pcctwo->sc_iot, sc->sc_pcctwo->sc_ioh,
PCCTWO_IEBERR, PCC2_IRQ_IEN | PCC2_IRQ_ICLR |
(ca->ca_ipl & PCC2_IRQ_IPL));
-
- evcount_attach(&sc->sc_intrcnt, self->dv_xname,
- (void *)&sc->sc_ih.ih_ipl, &evcount_intr);
}
/*
@@ -598,7 +596,6 @@ loop:
if ((status = sc->scb->ie_status) & IE_ST_WHENCE)
goto loop;
- sc->sc_intrcnt.ec_count++;
return 1;
}
diff --git a/sys/arch/mvme88k/dev/if_le.c b/sys/arch/mvme88k/dev/if_le.c
index c1275d9b0f7..50fd152a751 100644
--- a/sys/arch/mvme88k/dev/if_le.c
+++ b/sys/arch/mvme88k/dev/if_le.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_le.c,v 1.9 2004/07/02 14:00:43 miod Exp $ */
+/* $OpenBSD: if_le.c,v 1.10 2004/07/30 19:02:05 miod Exp $ */
/*-
* Copyright (c) 1982, 1992, 1993
@@ -41,7 +41,6 @@
#include <sys/socket.h>
#include <sys/device.h>
#include <sys/malloc.h>
-#include <sys/evcount.h>
#include <net/if.h>
@@ -210,7 +209,6 @@ vle_intr(sc)
struct vlereg1 *reg1 = (struct vlereg1 *)lesc->sc_r1;
int rc;
- lesc->sc_intrcnt.ec_count++;
rc = am7990_intr(sc);
ENABLE_INTR;
return (rc);
@@ -366,7 +364,5 @@ leattach(parent, self, aux)
lesc->sc_ih.ih_arg = sc;
lesc->sc_ih.ih_wantframe = 0;
lesc->sc_ih.ih_ipl = ca->ca_ipl;
- vmeintr_establish(ca->ca_vec, &lesc->sc_ih);
- evcount_attach(&lesc->sc_intrcnt, self->dv_xname,
- (void *)&lesc->sc_ih.ih_ipl, &evcount_intr);
+ vmeintr_establish(ca->ca_vec, &lesc->sc_ih, self->dv_xname);
}
diff --git a/sys/arch/mvme88k/dev/if_levar.h b/sys/arch/mvme88k/dev/if_levar.h
index bb2da7dc373..534709fb992 100644
--- a/sys/arch/mvme88k/dev/if_levar.h
+++ b/sys/arch/mvme88k/dev/if_levar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_levar.h,v 1.3 2004/07/02 14:00:43 miod Exp $ */
+/* $OpenBSD: if_levar.h,v 1.4 2004/07/30 19:02:05 miod Exp $ */
/* $NetBSD: if_levar.h,v 1.5 1996/05/07 01:27:32 thorpej Exp $ */
/*-
@@ -47,7 +47,6 @@ struct le_softc {
struct intrhand sc_ih; /* interrupt vectoring */
u_int16_t sc_csr; /* CSR image */
void *sc_r1; /* LANCE registers */
- struct evcount sc_intrcnt;
u_char sc_ipl;
u_char sc_vec;
};
diff --git a/sys/arch/mvme88k/dev/memc.c b/sys/arch/mvme88k/dev/memc.c
index 822585dbfa6..ec762b816a3 100644
--- a/sys/arch/mvme88k/dev/memc.c
+++ b/sys/arch/mvme88k/dev/memc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: memc.c,v 1.10 2004/04/24 19:51:48 miod Exp $ */
+/* $OpenBSD: memc.c,v 1.11 2004/07/30 19:02:06 miod Exp $ */
/*
* Copyright (c) 1995 Theo de Raadt
@@ -105,7 +105,7 @@ memcattach(parent, self, args)
sc->sc_ih.ih_arg = 0;
sc->sc_ih.ih_wantframe = 1;
sc->sc_ih.ih_ipl = 7;
- mcintr_establish(xxx, &sc->sc_ih);
+ mcintr_establish(xxx, &sc->sc_ih, self->dv_xname);
#endif
switch (sc->sc_memc->memc_chipid) {
diff --git a/sys/arch/mvme88k/dev/osiop_pcctwo.c b/sys/arch/mvme88k/dev/osiop_pcctwo.c
index 8d2eabc4be4..518a5dd24ff 100644
--- a/sys/arch/mvme88k/dev/osiop_pcctwo.c
+++ b/sys/arch/mvme88k/dev/osiop_pcctwo.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: osiop_pcctwo.c,v 1.2 2004/07/02 14:00:43 miod Exp $ */
+/* $OpenBSD: osiop_pcctwo.c,v 1.3 2004/07/30 19:02:06 miod Exp $ */
/*
* Copyright (c) 2004, Miodrag Vallat.
*
@@ -29,7 +29,6 @@
#include <sys/device.h>
#include <sys/disklabel.h>
#include <sys/dkstat.h>
-#include <sys/evcount.h>
#include <scsi/scsi_all.h>
#include <scsi/scsiconf.h>
@@ -54,7 +53,6 @@ int osiop_pcctwo_match(struct device *, void *, void *);
struct osiop_pcctwo_softc {
struct osiop_softc sc_osiop;
struct intrhand sc_ih;
- struct evcount sc_intrcnt;
};
struct cfattach osiop_pcctwo_ca = {
@@ -160,18 +158,14 @@ osiop_pcctwo_attach(struct device *parent, struct device *self, void *aux)
psc->sc_ih.ih_ipl = ca->ca_ipl;
/* enable device interrupts */
- pcctwointr_establish(PCC2V_SCSI, &psc->sc_ih);
+ pcctwointr_establish(PCC2V_SCSI, &psc->sc_ih, self->dv_xname);
bus_space_write_1(pcctwo->sc_iot, pcctwo->sc_ioh,
PCCTWO_SCSIICR, PCC2_IRQ_IEN | (ca->ca_ipl & PCC2_IRQ_IPL));
-
- evcount_attach(&psc->sc_intrcnt, self->dv_xname,
- (void *)&psc->sc_ih.ih_ipl, &evcount_intr);
}
int
osiop_pcctwo_intr(void *arg)
{
- struct osiop_pcctwo_softc *psc = arg;
struct osiop_softc *sc = arg;
u_int8_t istat;
@@ -182,8 +176,6 @@ osiop_pcctwo_intr(void *arg)
if ((istat & (OSIOP_ISTAT_SIP | OSIOP_ISTAT_DIP)) == 0)
return 0;
- psc->sc_intrcnt.ec_count++;
-
/*
* 53c710 manual recommends reading dstat and sstat0 at least
* 12 clk cycles apart if reading as bytes (which is what
diff --git a/sys/arch/mvme88k/dev/pcctwo.c b/sys/arch/mvme88k/dev/pcctwo.c
index 5dd819704ec..1666c8e2009 100644
--- a/sys/arch/mvme88k/dev/pcctwo.c
+++ b/sys/arch/mvme88k/dev/pcctwo.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pcctwo.c,v 1.25 2004/05/07 18:10:28 miod Exp $ */
+/* $OpenBSD: pcctwo.c,v 1.26 2004/07/30 19:02:06 miod Exp $ */
/*
* Copyright (c) 1995 Theo de Raadt
* All rights reserved.
@@ -184,14 +184,12 @@ pcctwo_scan(parent, child, args)
* PCC2 interrupts land in a PCC2_NVEC sized hole starting at PCC2_VECBASE
*/
int
-pcctwointr_establish(vec, ih)
- int vec;
- struct intrhand *ih;
+pcctwointr_establish(int vec, struct intrhand *ih, const char *name)
{
#ifdef DIAGNOSTIC
if (vec < 0 || vec >= PCC2_NVEC)
panic("pcctwo_establish: illegal vector 0x%x\n", vec);
#endif
- return (intr_establish(PCC2_VECBASE + vec, ih));
+ return intr_establish(PCC2_VECBASE + vec, ih, name);
}
diff --git a/sys/arch/mvme88k/dev/pcctwovar.h b/sys/arch/mvme88k/dev/pcctwovar.h
index 7e4f57fcf7d..70e4a38f17e 100644
--- a/sys/arch/mvme88k/dev/pcctwovar.h
+++ b/sys/arch/mvme88k/dev/pcctwovar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: pcctwovar.h,v 1.1 2004/04/24 19:51:48 miod Exp $ */
+/* $OpenBSD: pcctwovar.h,v 1.2 2004/07/30 19:02:06 miod Exp $ */
/*
* Copyright (c) 2004, Miodrag Vallat.
*
@@ -36,6 +36,6 @@ struct pcctwosoftc {
bus_space_handle_t sc_ioh;
};
-int pcctwointr_establish(int vec, struct intrhand *ih);
+int pcctwointr_establish(int, struct intrhand *, const char *);
#endif /* _MVME88K_PCCTWOVAR_H_ */
diff --git a/sys/arch/mvme88k/dev/syscon.c b/sys/arch/mvme88k/dev/syscon.c
index 739c4f1bb55..2864afe0466 100644
--- a/sys/arch/mvme88k/dev/syscon.c
+++ b/sys/arch/mvme88k/dev/syscon.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: syscon.c,v 1.20 2004/05/07 18:10:28 miod Exp $ */
+/* $OpenBSD: syscon.c,v 1.21 2004/07/30 19:02:06 miod Exp $ */
/*
* Copyright (c) 1999 Steve Murphree, Jr.
* All rights reserved.
@@ -152,25 +152,23 @@ sysconattach(parent, self, args)
sc->sc_m188ih.ih_wantframe = 1;
sc->sc_m188ih.ih_ipl = IPL_ABORT;
- sysconintr_establish(SYSCV_ABRT, &sc->sc_abih);
- sysconintr_establish(SYSCV_ACF, &sc->sc_acih);
- sysconintr_establish(SYSCV_SYSF, &sc->sc_sfih);
- intr_establish(M188_IVEC, &sc->sc_m188ih);
+ sysconintr_establish(SYSCV_ABRT, &sc->sc_abih, "abort");
+ sysconintr_establish(SYSCV_ACF, &sc->sc_acih, "acfail");
+ sysconintr_establish(SYSCV_SYSF, &sc->sc_sfih, "sysfail");
+ intr_establish(M188_IVEC, &sc->sc_m188ih, self->dv_xname);
config_search(syscon_scan, self, args);
}
int
-sysconintr_establish(vec, ih)
- int vec;
- struct intrhand *ih;
+sysconintr_establish(int vec, struct intrhand *ih, const char *name)
{
#ifdef DIAGNOSTIC
if (vec < 0 || vec >= SYSCON_NVEC)
panic("sysconintr_establish: illegal vector 0x%x\n", vec);
#endif
- return (intr_establish(SYSCON_VECT + vec, ih));
+ return intr_establish(SYSCON_VECT + vec, ih, name);
}
int
diff --git a/sys/arch/mvme88k/dev/sysconreg.h b/sys/arch/mvme88k/dev/sysconreg.h
index 385a486a6ba..b93f2d9d538 100644
--- a/sys/arch/mvme88k/dev/sysconreg.h
+++ b/sys/arch/mvme88k/dev/sysconreg.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: sysconreg.h,v 1.6 2004/04/24 19:51:48 miod Exp $ */
+/* $OpenBSD: sysconreg.h,v 1.7 2004/07/30 19:02:06 miod Exp $ */
/*
* Copyright (c) 2004, Miodrag Vallat.
@@ -42,4 +42,4 @@
#define SYSCV_TIMER2 0x08
#define SYSCV_TIMER1 0x09
-int sysconintr_establish(int, struct intrhand *);
+int sysconintr_establish(int, struct intrhand *, const char *);
diff --git a/sys/arch/mvme88k/dev/vme.c b/sys/arch/mvme88k/dev/vme.c
index 5f61cd87caa..cc1f4136944 100644
--- a/sys/arch/mvme88k/dev/vme.c
+++ b/sys/arch/mvme88k/dev/vme.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vme.c,v 1.37 2004/07/23 22:19:07 miod Exp $ */
+/* $OpenBSD: vme.c,v 1.38 2004/07/30 19:02:06 miod Exp $ */
/*
* Copyright (c) 2004, Miodrag Vallat.
* Copyright (c) 1999 Steve Murphree, Jr.
@@ -464,9 +464,7 @@ vmerw(sc, uio, flags, bus)
*/
int
-vmeintr_establish(vec, ih)
- int vec;
- struct intrhand *ih;
+vmeintr_establish(int vec, struct intrhand *ih, const char *name)
{
struct vmesoftc *sc = (struct vmesoftc *) vme_cd.cd_devs[0];
@@ -480,7 +478,7 @@ vmeintr_establish(vec, ih)
#endif
}
- return intr_establish(vec, ih);
+ return intr_establish(vec, ih, name);
}
#if NPCCTWO > 0
@@ -565,7 +563,7 @@ vme2chip_init(sc)
sc->sc_abih.ih_arg = 0;
sc->sc_abih.ih_wantframe = 1;
sc->sc_abih.ih_ipl = IPL_NMI;
- intr_establish(110, &sc->sc_abih);
+ intr_establish(110, &sc->sc_abih, sc->sc_dev.dv_xname);
irqen = bus_space_read_4(sc->sc_iot, sc->sc_ioh, VME2_IRQEN);
irqen |= VME2_IRQ_AB;
diff --git a/sys/arch/mvme88k/dev/vme.h b/sys/arch/mvme88k/dev/vme.h
index 455a94d8a96..040731c3aeb 100644
--- a/sys/arch/mvme88k/dev/vme.h
+++ b/sys/arch/mvme88k/dev/vme.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: vme.h,v 1.15 2004/04/24 19:51:48 miod Exp $ */
+/* $OpenBSD: vme.h,v 1.16 2004/07/30 19:02:06 miod Exp $ */
/*
* Copyright (c) 1995 Theo de Raadt
@@ -282,7 +282,7 @@ struct vmesoftc {
void *vmepmap(struct device *sc, off_t vmeaddr, int bustype);
int vmerw(struct device *sc, struct uio *uio, int flags, int bus);
-int vmeintr_establish(int vec, struct intrhand *ih);
+int vmeintr_establish(int, struct intrhand *, const char *);
int vme_findvec(int);
int vmescan(struct device *, void *, void *, int);
diff --git a/sys/arch/mvme88k/dev/vs.c b/sys/arch/mvme88k/dev/vs.c
index 8402ce355f5..2873e22acc5 100644
--- a/sys/arch/mvme88k/dev/vs.c
+++ b/sys/arch/mvme88k/dev/vs.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vs.c,v 1.51 2004/07/20 23:07:06 miod Exp $ */
+/* $OpenBSD: vs.c,v 1.52 2004/07/30 19:02:06 miod Exp $ */
/*
* Copyright (c) 2004, Miodrag Vallat.
@@ -48,7 +48,6 @@
#include <sys/dkstat.h>
#include <sys/buf.h>
#include <sys/malloc.h>
-#include <sys/evcount.h>
#include <uvm/uvm.h>
@@ -177,15 +176,10 @@ vsattach(struct device *parent, struct device *self, void *args)
sc->sc_ih_e.ih_wantframe = 0;
sc->sc_ih_e.ih_ipl = ca->ca_ipl;
- vmeintr_establish(sc->sc_nvec, &sc->sc_ih_n);
- vmeintr_establish(sc->sc_evec, &sc->sc_ih_e);
-
- evcount_attach(&sc->sc_intrcnt_n, self->dv_xname,
- (void *)&sc->sc_ih_n.ih_ipl, &evcount_intr);
+ vmeintr_establish(sc->sc_nvec, &sc->sc_ih_n, self->dv_xname);
snprintf(sc->sc_intrname_e, sizeof sc->sc_intrname_e,
"%s_err", self->dv_xname);
- evcount_attach(&sc->sc_intrcnt_e, sc->sc_intrname_e,
- (void *)&sc->sc_ih_e.ih_ipl, &evcount_intr);
+ vmeintr_establish(sc->sc_evec, &sc->sc_ih_e, sc->sc_intrname_e);
printf("SCSI ID");
@@ -776,7 +770,6 @@ vs_nintr(void *vsc)
/* Got a valid interrupt on this device */
s = splbio();
- sc->sc_intrcnt_n.ec_count++;
m328_cmd = (void *)crb_read(4, CRB_CTAG);
/*
@@ -821,7 +814,6 @@ vs_eintr(void *vsc)
/* Got a valid interrupt on this device */
s = splbio();
- sc->sc_intrcnt_e.ec_count++;
crsw = vs_read(2, sh_CEVSB + CEVSB_CRSW);
ecode = vs_read(1, sh_CEVSB + CEVSB_ERROR);
diff --git a/sys/arch/mvme88k/dev/vsvar.h b/sys/arch/mvme88k/dev/vsvar.h
index 7c606636f6d..3cac7e42ce9 100644
--- a/sys/arch/mvme88k/dev/vsvar.h
+++ b/sys/arch/mvme88k/dev/vsvar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: vsvar.h,v 1.15 2004/07/20 20:32:02 miod Exp $ */
+/* $OpenBSD: vsvar.h,v 1.16 2004/07/30 19:02:06 miod Exp $ */
/*
* Copyright (c) 2004, Miodrag Vallat.
* Copyright (c) 1999 Steve Murphree, Jr.
@@ -95,8 +95,6 @@ struct vs_softc {
bus_space_tag_t sc_iot;
bus_space_handle_t sc_ioh;
struct intrhand sc_ih_e, sc_ih_n;
- struct evcount sc_intrcnt_e;
- struct evcount sc_intrcnt_n;
char sc_intrname_e[16 + 4];
int sc_ipl;
int sc_evec, sc_nvec;
diff --git a/sys/arch/mvme88k/dev/vx.c b/sys/arch/mvme88k/dev/vx.c
index 069cd8f8b96..8551cf47184 100644
--- a/sys/arch/mvme88k/dev/vx.c
+++ b/sys/arch/mvme88k/dev/vx.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vx.c,v 1.35 2004/07/02 14:00:43 miod Exp $ */
+/* $OpenBSD: vx.c,v 1.36 2004/07/30 19:02:06 miod Exp $ */
/*
* Copyright (c) 1999 Steve Murphree, Jr.
* All rights reserved.
@@ -38,7 +38,6 @@
#include <sys/time.h>
#include <sys/device.h>
#include <sys/syslog.h>
-#include <sys/evcount.h>
#include <machine/autoconf.h>
#include <machine/conf.h>
@@ -66,7 +65,6 @@ struct vx_info {
struct vxsoftc {
struct device sc_dev;
- struct evcount sc_intrcnt;
struct vx_info sc_info[NVXPORTS];
struct vxreg *vx_reg;
vaddr_t board_vaddr;
@@ -227,9 +225,7 @@ vxattach(struct device *parent, struct device *self, void *aux)
sc->sc_ih.ih_wantframe = 0;
sc->sc_ih.ih_ipl = IPL_TTY;
- vmeintr_establish(ca->ca_vec, &sc->sc_ih);
- evcount_attach(&sc->sc_intrcnt, self->dv_xname,
- (void *)&sc->sc_ih.ih_ipl, &evcount_intr);
+ vmeintr_establish(ca->ca_vec, &sc->sc_ih, self->dv_xname);
}
short
@@ -975,8 +971,6 @@ vx_intr(void *arg)
short cmd;
u_char port;
- sc->sc_intrcnt.ec_count++;
-
while (env_isvalid(get_status_head(sc))) {
pktp = get_packet(sc, get_status_head(sc));
valid = env_isvalid(get_status_head(sc));
diff --git a/sys/arch/mvme88k/include/cpu.h b/sys/arch/mvme88k/include/cpu.h
index fa413df93ea..f01aa0cdf40 100644
--- a/sys/arch/mvme88k/include/cpu.h
+++ b/sys/arch/mvme88k/include/cpu.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: cpu.h,v 1.28 2004/07/24 15:05:07 miod Exp $ */
+/* $OpenBSD: cpu.h,v 1.29 2004/07/30 19:02:08 miod Exp $ */
/*
* Copyright (c) 1996 Nivas Madhur
* Copyright (c) 1992, 1993
@@ -40,17 +40,19 @@
#ifndef _MVME88K_CPU_H_
#define _MVME88K_CPU_H_
+#include <sys/evcount.h>
#include <m88k/cpu.h>
struct intrhand {
+ SLIST_ENTRY(intrhand) ih_link;
int (*ih_fn)(void *);
void *ih_arg;
int ih_ipl;
int ih_wantframe;
- struct intrhand *ih_next;
+ struct evcount ih_count;
};
-int intr_establish(int vec, struct intrhand *);
+int intr_establish(int, struct intrhand *, const char *);
/*
* There are 256 possible vectors on a mvme88k platform (including
@@ -58,6 +60,8 @@ int intr_establish(int vec, struct intrhand *);
* handler for the given vector. vector number is used to index
* into the intr_handlers[] table.
*/
-extern struct intrhand *intr_handlers[256];
+#define NVMEINTR 256
+typedef SLIST_HEAD(, intrhand) intrhand_t;
+extern intrhand_t intr_handlers[NVMEINTR];
#endif
diff --git a/sys/arch/mvme88k/mvme88k/machdep.c b/sys/arch/mvme88k/mvme88k/machdep.c
index 46bfb069380..887b7fbcc4f 100644
--- a/sys/arch/mvme88k/mvme88k/machdep.c
+++ b/sys/arch/mvme88k/mvme88k/machdep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: machdep.c,v 1.148 2004/07/29 10:17:21 miod Exp $ */
+/* $OpenBSD: machdep.c,v 1.149 2004/07/30 19:02:08 miod Exp $ */
/*
* Copyright (c) 1998, 1999, 2000, 2001 Steve Murphree, Jr.
* Copyright (c) 1996 Nivas Madhur
@@ -104,7 +104,7 @@
#include <ddb/db_interface.h>
#endif /* DDB */
-struct intrhand *intr_handlers[256];
+intrhand_t intr_handlers[NVMEINTR];
vaddr_t interrupt_stack[MAX_CPUS];
/* machine dependent function pointers. */
@@ -676,9 +676,10 @@ cpu_startup()
bufinit();
/*
- * zero out intr_handlers
+ * Set up interrupt handlers.
*/
- bzero((void *)intr_handlers, 256 * sizeof(struct intrhand *));
+ for (i = 0; i < NVMEINTR; i++)
+ SLIST_INIT(&intr_handlers[i]);
setupiackvectors();
/*
@@ -1390,32 +1391,33 @@ intr_findvec(int start, int end, int skip)
int vec;
#ifdef DEBUG
- if (start < 0 || end > 255 || start > end)
+ if (start < 0 || end >= NVMEINTR || start > end)
panic("intr_findvec(%d,%d): bad parameters", start, end);
#endif
for (vec = start; vec <= end; vec++) {
if (vec == skip)
continue;
- if (intr_handlers[vec] == NULL)
- return (vec);
+ if (SLIST_EMPTY(&intr_handlers[vec]))
+ return vec;
}
#ifdef DIAGNOSTIC
printf("intr_findvec(%d,%d,%d): no vector available\n",
start, end, skip);
#endif
- return (-1);
+ return -1;
}
/*
* Try to insert ihand in the list of handlers for vector vec.
*/
int
-intr_establish(int vec, struct intrhand *ihand)
+intr_establish(int vec, struct intrhand *ihand, const char *name)
{
struct intrhand *intr;
+ intrhand_t *list;
- if (vec < 0 || vec > 255) {
+ if (vec < 0 || vec >= NVMEINTR) {
#if DIAGNOSTIC
panic("intr_establish: vec (0x%x) not between 0x00 and 0xff",
vec);
@@ -1423,9 +1425,9 @@ intr_establish(int vec, struct intrhand *ihand)
return (EINVAL);
}
- ihand->ih_next = NULL;
-
- if ((intr = intr_handlers[vec]) != NULL) {
+ list = &intr_handlers[vec];
+ if (!SLIST_EMPTY(list)) {
+ intr = SLIST_FIRST(list);
if (intr->ih_ipl != ihand->ih_ipl) {
#if DIAGNOSTIC
panic("intr_establish: there are other handlers with "
@@ -1434,13 +1436,11 @@ intr_establish(int vec, struct intrhand *ihand)
#endif /* DIAGNOSTIC */
return (EINVAL);
}
+ }
- while (intr->ih_next)
- intr = intr->ih_next;
- intr->ih_next = ihand;
- } else
- intr_handlers[vec] = ihand;
-
+ evcount_attach(&ihand->ih_count, name, (void *)&ihand->ih_ipl,
+ &evcount_intr);
+ SLIST_INSERT_HEAD(list, ihand, ih_link);
return (0);
}
@@ -1474,6 +1474,7 @@ m188_ext_int(u_int v, struct trapframe *eframe)
unsigned int cur_mask;
unsigned int level, old_spl;
struct intrhand *intr;
+ intrhand_t *list;
int ret, intbit;
unsigned vec;
@@ -1580,7 +1581,8 @@ m188_ext_int(u_int v, struct trapframe *eframe)
level, intbit, 1 << intbit, IST_STRING);
}
- if ((intr = intr_handlers[vec]) == NULL) {
+ list = &intr_handlers[vec];
+ if (SLIST_EMPTY(list)) {
/* increment intr counter */
intrcnt[M88K_SPUR_IRQ]++;
printf("Spurious interrupt: level = %d vec = 0x%x, "
@@ -1592,14 +1594,15 @@ m188_ext_int(u_int v, struct trapframe *eframe)
* for the given vector, calling each handler in turn,
* till some handler returns a value != 0.
*/
- for (ret = 0; intr; intr = intr->ih_next) {
+ ret = 0;
+ SLIST_FOREACH(intr, list, ih_link) {
if (intr->ih_wantframe != 0)
ret = (*intr->ih_fn)((void *)eframe);
else
ret = (*intr->ih_fn)(intr->ih_arg);
if (ret != 0) {
- /* increment intr counter */
intrcnt[level]++;
+ intr->ih_count.ec_count++;
break;
}
}
@@ -1646,6 +1649,7 @@ m187_ext_int(u_int v, struct trapframe *eframe)
{
int mask, level;
struct intrhand *intr;
+ intrhand_t *list;
int ret;
u_char vec;
@@ -1691,14 +1695,16 @@ m187_ext_int(u_int v, struct trapframe *eframe)
enable_interrupt();
- if ((intr = intr_handlers[vec]) == NULL) {
+ list = &intr_handlers[vec];
+ if (SLIST_EMPTY(list)) {
/* increment intr counter */
intrcnt[M88K_SPUR_IRQ]++;
printf("Spurious interrupt (level %x and vec %x)\n",
level, vec);
} else {
#ifdef DIAGNOSTIC
- if (intr && intr->ih_ipl != level) {
+ intr = SLIST_FIRST(list);
+ if (intr->ih_ipl != level) {
panic("Handler ipl %x not the same as level %x. "
"vec = 0x%x",
intr->ih_ipl, level, vec);
@@ -1711,14 +1717,15 @@ m187_ext_int(u_int v, struct trapframe *eframe)
* returns a value != 0.
*/
- for (ret = 0; intr; intr = intr->ih_next) {
- if (intr->ih_wantframe != 0) {
+ ret = 0;
+ SLIST_FOREACH(intr, list, ih_link) {
+ if (intr->ih_wantframe != 0)
ret = (*intr->ih_fn)((void *)eframe);
- } else
+ else
ret = (*intr->ih_fn)(intr->ih_arg);
if (ret != 0) {
- /* increment intr counter */
intrcnt[level]++;
+ intr->ih_count.ec_count++;
break;
}
}
@@ -1751,6 +1758,7 @@ m197_ext_int(u_int v, struct trapframe *eframe)
{
int mask, level, src;
struct intrhand *intr;
+ intrhand_t *list;
int ret;
u_char vec;
@@ -1798,14 +1806,16 @@ m197_ext_int(u_int v, struct trapframe *eframe)
enable_interrupt();
}
- if ((intr = intr_handlers[vec]) == NULL) {
+ list = &intr_handlers[vec];
+ if (SLIST_EMPTY(list)) {
/* increment intr counter */
intrcnt[M88K_SPUR_IRQ]++;
printf("Spurious interrupt (level %x and vec %x)\n",
level, vec);
} else {
#ifdef DIAGNOSTIC
- if (intr && intr->ih_ipl != level) {
+ intr = SLIST_FIRST(list);
+ if (intr->ih_ipl != level) {
panic("Handler ipl %x not the same as level %x. "
"vec = 0x%x",
intr->ih_ipl, level, vec);
@@ -1818,14 +1828,15 @@ m197_ext_int(u_int v, struct trapframe *eframe)
* returns a value != 0.
*/
- for (ret = 0; intr; intr = intr->ih_next) {
+ ret = 0;
+ SLIST_FOREACH(intr, list, ih_link) {
if (intr->ih_wantframe != 0)
ret = (*intr->ih_fn)((void *)eframe);
else
ret = (*intr->ih_fn)(intr->ih_arg);
if (ret != 0) {
- /* increment intr counter */
intrcnt[level]++;
+ intr->ih_count.ec_count++;
break;
}
}