summaryrefslogtreecommitdiffstats
path: root/sys/arm/sa11x0
diff options
context:
space:
mode:
authorcognet <cognet@FreeBSD.org>2005-09-25 21:06:50 +0000
committercognet <cognet@FreeBSD.org>2005-09-25 21:06:50 +0000
commitc29db74a1dfa1602e82f3930206670b2f97ac86a (patch)
tree5f88b1817b03154839245df7933fa4770c364c8f /sys/arm/sa11x0
parent8f159104044d99aba9a96d75f191aa76b33e1a02 (diff)
downloadFreeBSD-src-c29db74a1dfa1602e82f3930206670b2f97ac86a.zip
FreeBSD-src-c29db74a1dfa1602e82f3930206670b2f97ac86a.tar.gz
Fix multiple abuses of __RMAN_RESOURCE_VISIBLE in the arm code.
Spotted out by: phk
Diffstat (limited to 'sys/arm/sa11x0')
-rw-r--r--sys/arm/sa11x0/sa11x0.c24
-rw-r--r--sys/arm/sa11x0/sa11x0_irqhandler.c5
-rw-r--r--sys/arm/sa11x0/sa11x0_var.h2
3 files changed, 21 insertions, 10 deletions
diff --git a/sys/arm/sa11x0/sa11x0.c b/sys/arm/sa11x0/sa11x0.c
index 57fc719..f0d6456 100644
--- a/sys/arm/sa11x0/sa11x0.c
+++ b/sys/arm/sa11x0/sa11x0.c
@@ -59,7 +59,6 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#define __RMAN_RESOURCE_VISIBLE
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/bus.h>
@@ -70,6 +69,7 @@ __FBSDID("$FreeBSD$");
#include <sys/bus.h>
#include <sys/interrupt.h>
#include <sys/module.h>
+#include <sys/rman.h>
#include <vm/vm.h>
#include <vm/vm_extern.h>
@@ -83,7 +83,6 @@ __FBSDID("$FreeBSD$");
#include <arm/sa11x0/sa11x0_ppcreg.h>
#include <arm/sa11x0/sa11x0_gpioreg.h>
#include <machine/bus.h>
-#include <sys/rman.h>
extern void sa11x0_activateirqs(void);
@@ -105,12 +104,12 @@ sa1110_setup_intr(device_t dev, device_t child,
int saved_cpsr;
if (flags & INTR_TYPE_TTY)
- ires->r_start = 15;
+ rman_set_start(ires, 15);
else if (flags & INTR_TYPE_CLK) {
- if (ires->r_start == 0)
- ires->r_start = 26;
+ if (rman_get_start(ires) == 0)
+ rman_set_start(ires, 26);
else
- ires->r_start = 27;
+ rman_set_start(ires, 27);
}
saved_cpsr = SetCPSR(I32_bit, I32_bit);
@@ -124,9 +123,11 @@ static struct resource *
sa1110_alloc_resource(device_t bus, device_t child, int type, int *rid,
u_long start, u_long end, u_long count, u_int flags)
{
- struct resource *res = malloc(sizeof(*res), M_DEVBUF, M_WAITOK);
-/* XXX */
- res->r_start = *rid;
+ struct resource *res;
+
+ res = rman_reserve_resource(&sa11x0_softc->sa11x0_rman, *rid, *rid,
+ count, flags, child);
+
return (res);
}
static int
@@ -227,6 +228,11 @@ sa11x0_attach(device_t dev)
/*
* Attach each devices
*/
+ sc->sa11x0_rman.rm_type = RMAN_ARRAY;
+ sc->sa11x0_rman.rm_descr = "SA11x0 IRQs";
+ if (rman_init(&sc->sa11x0_rman) != 0 ||
+ rman_manage_region(&sc->sa11x0_rman, 0, 32) != 0)
+ panic("sa11x0_attach: failed to set up rman");
device_add_child(dev, "uart", 0);
device_add_child(dev, "saost", 0);
bus_generic_probe(dev);
diff --git a/sys/arm/sa11x0/sa11x0_irqhandler.c b/sys/arm/sa11x0/sa11x0_irqhandler.c
index 5cda4c6..ba64751 100644
--- a/sys/arm/sa11x0/sa11x0_irqhandler.c
+++ b/sys/arm/sa11x0/sa11x0_irqhandler.c
@@ -86,6 +86,8 @@ __FBSDID("$FreeBSD$");
#include <sys/types.h>
#include <sys/bus.h>
#include <sys/interrupt.h>
+#include <sys/rman.h>
+
#include <vm/vm.h>
#include <vm/vm_extern.h>
@@ -111,7 +113,8 @@ arm_get_next_irq()
{
int irq;
- if ((irq = (bus_space_read_4(sc->sc_iot, sc->sc_ioh, SAIPIC_IP) &
+ if ((irq = (bus_space_read_4(sa11x0_softc->sc_iot, sa11x0_softc->sc_ioh,
+ SAIPIC_IP) &
sa11x0_irq_mask)) != 0)
return (ffs(irq) - 1);
return (-1);
diff --git a/sys/arm/sa11x0/sa11x0_var.h b/sys/arm/sa11x0/sa11x0_var.h
index b1bf2a0..1ee4d66 100644
--- a/sys/arm/sa11x0/sa11x0_var.h
+++ b/sys/arm/sa11x0/sa11x0_var.h
@@ -45,6 +45,7 @@
#include <sys/bus.h>
#include <machine/bus.h>
+#include <sys/rman.h>
struct sa11x0_softc {
device_t sc_dev;
@@ -55,6 +56,7 @@ struct sa11x0_softc {
bus_space_handle_t sc_dmach;
bus_space_handle_t sc_reseth;
u_int32_t sc_intrmask;
+ struct rman sa11x0_rman;
};
/* Attach args all devices */
OpenPOWER on IntegriCloud