diff options
author | cognet <cognet@FreeBSD.org> | 2005-06-09 12:26:20 +0000 |
---|---|---|
committer | cognet <cognet@FreeBSD.org> | 2005-06-09 12:26:20 +0000 |
commit | cbb8d627a3fbeb8a57e0e6a4548e4b4c2e0f23d5 (patch) | |
tree | bbf540ccfed9fe660603798a3164154ccbd14bf0 /sys/arm/xscale | |
parent | 97eb32fd8d89cafdbf76f349f5d634af803dbc6a (diff) | |
download | FreeBSD-src-cbb8d627a3fbeb8a57e0e6a4548e4b4c2e0f23d5.zip FreeBSD-src-cbb8d627a3fbeb8a57e0e6a4548e4b4c2e0f23d5.tar.gz |
- MFp4: modify slightly the arm intr API, there's arm CPUs with more than 32
interrupts.
- Implement teardown methods where appropriate.
Diffstat (limited to 'sys/arm/xscale')
-rw-r--r-- | sys/arm/xscale/i80321/i80321.c | 9 | ||||
-rw-r--r-- | sys/arm/xscale/i80321/i80321_pci.c | 10 | ||||
-rw-r--r-- | sys/arm/xscale/i80321/iq80321.c | 18 |
3 files changed, 28 insertions, 9 deletions
diff --git a/sys/arm/xscale/i80321/i80321.c b/sys/arm/xscale/i80321/i80321.c index 23d25a1..dfd03a1 100644 --- a/sys/arm/xscale/i80321/i80321.c +++ b/sys/arm/xscale/i80321/i80321.c @@ -259,10 +259,11 @@ i80321_iintsrc_read(void) } int -arm_get_irqnb(void *clockframe) +arm_get_next_irq() { + int irq; - return (i80321_iintsrc_read()); + if ((irq = i80321_iintsrc_read())) + return (ffs(irq) - 1); + return (-1); } - - diff --git a/sys/arm/xscale/i80321/i80321_pci.c b/sys/arm/xscale/i80321/i80321_pci.c index 0bb7810..50ebe49 100644 --- a/sys/arm/xscale/i80321/i80321_pci.c +++ b/sys/arm/xscale/i80321/i80321_pci.c @@ -426,6 +426,14 @@ i80321_pci_setup_intr(device_t dev, device_t child, return (BUS_SETUP_INTR(device_get_parent(dev), child, ires, flags, intr, arg, cookiep)); } + +static int +i80321_pci_teardown_intr(device_t dev, device_t child, struct resource *res, + void *cookie) +{ + return (BUS_TEARDOWN_INTR(device_get_parent(dev), child, res, cookie)); +} + static device_method_t i80321_pci_methods[] = { /* Device interface */ DEVMETHOD(device_probe, i80321_pci_probe), @@ -443,7 +451,7 @@ static device_method_t i80321_pci_methods[] = { DEVMETHOD(bus_activate_resource, i80321_pci_activate_resource), DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource), DEVMETHOD(bus_setup_intr, i80321_pci_setup_intr), - DEVMETHOD(bus_teardown_intr, bus_generic_teardown_intr), + DEVMETHOD(bus_teardown_intr, i80321_pci_teardown_intr), /* pcib interface */ DEVMETHOD(pcib_maxslots, i80321_pci_maxslots), diff --git a/sys/arm/xscale/i80321/iq80321.c b/sys/arm/xscale/i80321/iq80321.c index 20a11c7..3292406 100644 --- a/sys/arm/xscale/i80321/iq80321.c +++ b/sys/arm/xscale/i80321/iq80321.c @@ -263,19 +263,20 @@ iq80321_attach(device_t dev) } void -arm_mask_irqs(int nb) +arm_mask_irq(uintptr_t nb) { - intr_enabled &= ~nb; + intr_enabled &= ~(1 << nb); i80321_set_intrmask(); } void -arm_unmask_irqs(int nb) +arm_unmask_irq(uintptr_t nb) { - intr_enabled |= nb; + intr_enabled |= (1 << nb); i80321_set_intrmask(); } + void cpu_reset() { @@ -311,12 +312,21 @@ iq80321_setup_intr(device_t dev, device_t child, return (0); } + +static int +iq80321_teardown_intr(device_t dev, device_t child, struct resource *res, + void *cookie) +{ + return (BUS_TEARDOWN_INTR(device_get_parent(dev), child, res, cookie)); +} + static device_method_t iq80321_methods[] = { DEVMETHOD(device_probe, iq80321_probe), DEVMETHOD(device_attach, iq80321_attach), DEVMETHOD(device_identify, iq80321_identify), DEVMETHOD(bus_alloc_resource, iq80321_alloc_resource), DEVMETHOD(bus_setup_intr, iq80321_setup_intr), + DEVMETHOD(bus_teardown_intr, iq80321_teardown_intr), {0, 0}, }; |