summaryrefslogtreecommitdiffstats
path: root/sys/arm/xscale
diff options
context:
space:
mode:
authorcognet <cognet@FreeBSD.org>2005-06-09 12:26:20 +0000
committercognet <cognet@FreeBSD.org>2005-06-09 12:26:20 +0000
commitcbb8d627a3fbeb8a57e0e6a4548e4b4c2e0f23d5 (patch)
treebbf540ccfed9fe660603798a3164154ccbd14bf0 /sys/arm/xscale
parent97eb32fd8d89cafdbf76f349f5d634af803dbc6a (diff)
downloadFreeBSD-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.c9
-rw-r--r--sys/arm/xscale/i80321/i80321_pci.c10
-rw-r--r--sys/arm/xscale/i80321/iq80321.c18
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},
};
OpenPOWER on IntegriCloud