diff options
author | gonzo <gonzo@FreeBSD.org> | 2010-08-05 21:31:29 +0000 |
---|---|---|
committer | gonzo <gonzo@FreeBSD.org> | 2010-08-05 21:31:29 +0000 |
commit | 75e94a3cbb5970210dd50b932cd2ce4212c8a7b5 (patch) | |
tree | 1e9cedcc5f8b441173b7fa1b4253633703e25f41 | |
parent | d71ba1ed02be1fbaf6c970351956dc9160a455f4 (diff) | |
download | FreeBSD-src-75e94a3cbb5970210dd50b932cd2ce4212c8a7b5.zip FreeBSD-src-75e94a3cbb5970210dd50b932cd2ce4212c8a7b5.tar.gz |
- Add interrupts counter for PCI devices
-rw-r--r-- | sys/mips/atheros/ar71xx_pci.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/sys/mips/atheros/ar71xx_pci.c b/sys/mips/atheros/ar71xx_pci.c index d96f5a5..2e6a5fa 100644 --- a/sys/mips/atheros/ar71xx_pci.c +++ b/sys/mips/atheros/ar71xx_pci.c @@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$"); #include <machine/bus.h> #include <machine/cpu.h> +#include <machine/intr_machdep.h> #include <machine/pmap.h> #include <dev/pci/pcivar.h> @@ -70,6 +71,7 @@ struct ar71xx_pci_softc { struct rman sc_irq_rman; struct intr_event *sc_eventstab[AR71XX_PCI_NIRQS]; + mips_intrcnt_t sc_intr_counter[AR71XX_PCI_NIRQS]; struct resource *sc_irq; void *sc_ih; }; @@ -436,13 +438,20 @@ ar71xx_pci_setup_intr(device_t bus, device_t child, struct resource *ires, if (event == NULL) { error = intr_event_create(&event, (void *)irq, 0, irq, ar71xx_pci_mask_irq, ar71xx_pci_unmask_irq, NULL, NULL, - "ar71xx_pci intr%d:", irq); + "pci intr%d:", irq); - sc->sc_eventstab[irq] = event; + if (error == 0) { + sc->sc_eventstab[irq] = event; + sc->sc_intr_counter[irq] = + mips_intrcnt_create(event->ie_name); + } + else + return error; } intr_event_add_handler(event, device_get_nameunit(child), filt, handler, arg, intr_priority(flags), flags, cookiep); + mips_intrcnt_setname(sc->sc_intr_counter[irq], event->ie_fullname); ar71xx_pci_unmask_irq((void*)irq); @@ -497,6 +506,7 @@ ar71xx_pci_intr(void *arg) /* TODO: frame instead of NULL? */ intr_event_handle(event, NULL); + mips_intrcnt_inc(sc->sc_intr_counter[irq]); } } |