Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 24 Oct 2006 07:09:07 GMT
From:      Warner Losh <imp@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 108332 for review
Message-ID:  <200610240709.k9O7977w097670@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=108332

Change 108332 by imp@imp_lighthouse on 2006/10/24 07:08:52

	Do something, even if it is wrong, wrt obio

Affected files ...

.. //depot/projects/arm/src/sys/arm/at91/at91.c#22 edit
.. //depot/projects/arm/src/sys/arm/at91/at91var.h#5 edit

Differences ...

==== //depot/projects/arm/src/sys/arm/at91/at91.c#22 (text+ko) ====

@@ -31,6 +31,7 @@
 #include <sys/kernel.h>
 #include <sys/malloc.h>
 #include <sys/module.h>
+#include <sys/obio.h>
 
 #include <vm/vm.h>
 #include <vm/vm_kern.h>
@@ -171,7 +172,7 @@
 static int
 at91_probe(device_t dev)
 {
-	device_set_desc(dev, "AT91RM9200 device bus");
+	device_set_desc(dev, "AT91 device bus");
 	return (0);
 }
 
@@ -216,7 +217,7 @@
 		return;
 	}
 	device_set_ivars(kid, ivar);
-	resource_list_init(&ivar->resources);
+	resource_list_init(&ivar->obio.resources);
 	if (irq0 != -1)
 		bus_set_resource(kid, SYS_RES_IRQ, 0, irq0, 1);
 	if (irq1 != 0)
@@ -403,28 +404,29 @@
 	int i;
 
 	at91_softc = sc;
+	sc->obio.sc_bt = &at91_bs_tag;
 	sc->sc_st = &at91_bs_tag;
 	sc->sc_sh = AT91RM92_BASE;
-	sc->dev = dev;
+	sc->obio.dev = dev;
 	if (bus_space_subregion(sc->sc_st, sc->sc_sh, AT91RM92_SYS_BASE,
 	    AT91RM92_SYS_SIZE, &sc->sc_sys_sh) != 0)
 		panic("Enable to map IRQ registers");
-	sc->sc_irq_rman.rm_type = RMAN_ARRAY;
-	sc->sc_irq_rman.rm_descr = "AT91RM92 IRQs";
-	sc->sc_mem_rman.rm_type = RMAN_ARRAY;
-	sc->sc_mem_rman.rm_descr = "AT91RM92 Memory";
+	sc->obio.sc_irq_rman.rm_type = RMAN_ARRAY;
+	sc->obio.sc_irq_rman.rm_descr = "AT91RM92 IRQs";
+	sc->obio.sc_mem_rman.rm_type = RMAN_ARRAY;
+	sc->obio.sc_mem_rman.rm_descr = "AT91RM92 Memory";
 #if 0
 	sc->sc_usbmem_rman.rm_type = RMAN_ARRAY;
 	sc->sc_usbmem_rman.rm_descr = "AT91RM92 USB Memory-mapped regs";
 #endif
-	if (rman_init(&sc->sc_irq_rman) != 0 ||
-	    rman_manage_region(&sc->sc_irq_rman, 1, 31) != 0)
+	if (rman_init(&sc->obio.sc_irq_rman) != 0 ||
+	    rman_manage_region(&sc->obio.sc_irq_rman, 1, 31) != 0)
 		panic("at91_attach: failed to set up IRQ rman");
-	if (rman_init(&sc->sc_mem_rman) != 0 ||
-	    rman_manage_region(&sc->sc_mem_rman, 0xdff00000ul,
+	if (rman_init(&sc->obio.sc_mem_rman) != 0 ||
+	    rman_manage_region(&sc->obio.sc_mem_rman, 0xdff00000ul,
 	    0xdffffffful) != 0)
 		panic("at91_attach: failed to set up memory rman");
-	if (rman_manage_region(&sc->sc_mem_rman, AT91RM92_OHCI_BASE,
+	if (rman_manage_region(&sc->obio.sc_mem_rman, AT91RM92_OHCI_BASE,
 	    AT91RM92_OHCI_BASE + AT91RM92_OHCI_SIZE - 1) != 0)
 		panic("at91_attach: failed to set up ohci memory");
 
@@ -463,84 +465,6 @@
 	return (0);
 }
 
-static struct resource *
-at91_alloc_resource(device_t dev, device_t child, int type, int *rid,
-    u_long start, u_long end, u_long count, u_int flags)
-{
-	struct at91_softc *sc = device_get_softc(dev);
-	struct resource_list_entry *rle;
-	struct at91_ivar *ivar = device_get_ivars(child);
-	struct resource_list *rl = &ivar->resources;
-
-	if (device_get_parent(child) != dev)
-		return (BUS_ALLOC_RESOURCE(device_get_parent(dev), child,
-		    type, rid, start, end, count, flags));
-	
-	rle = resource_list_find(rl, type, *rid);
-	if (rle == NULL)
-		return (NULL);
-	if (rle->res)
-		panic("Resource rid %d type %d already in use", *rid, type);
-	if (start == 0UL && end == ~0UL) {
-		start = rle->start;
-		count = ulmax(count, rle->count);
-		end = ulmax(rle->end, start + count - 1);
-	}
-	switch (type)
-	{
-	case SYS_RES_IRQ:
-		rle->res = rman_reserve_resource(&sc->sc_irq_rman,
-		    start, end, count, flags, child);
-		break;
-	case SYS_RES_MEMORY:
-#if 0
-		if (start >= 0x00300000 && start <= 0x003fffff)
-			rle->res = rman_reserve_resource(&sc->sc_usbmem_rman,
-			    start, end, count, flags, child);
-		else
-#endif
-			rle->res = rman_reserve_resource(&sc->sc_mem_rman,
-			    start, end, count, flags, child);
-		rman_set_bustag(rle->res, &at91_bs_tag);
-		rman_set_bushandle(rle->res, start);
-		break;
-	}
-	if (rle->res) {
-		rle->start = rman_get_start(rle->res);
-		rle->end = rman_get_end(rle->res);
-		rle->count = count;
-		rman_set_rid(rle->res, *rid);
-	}
-	return (rle->res);
-}
-
-static struct resource_list *
-at91_get_resource_list(device_t dev, device_t child)
-{
-	struct at91_ivar *ivar;
-
-	ivar = device_get_ivars(child);
-	return (&(ivar->resources));
-}
-
-static int
-at91_release_resource(device_t dev, device_t child, int type,
-    int rid, struct resource *r)
-{
-	struct resource_list *rl;
-	struct resource_list_entry *rle;
-
-	rl = at91_get_resource_list(dev, child);
-	if (rl == NULL)
-		return (EINVAL);
-	rle = resource_list_find(rl, type, rid);
-	if (rle == NULL)
-		return (EINVAL);
-	rman_release_resource(r);
-	rle->res = NULL;
-	return (0);
-}
-
 static int
 at91_setup_intr(device_t dev, device_t child,
     struct resource *ires, int flags, driver_intr_t *intr, void *arg,
@@ -568,48 +492,6 @@
 	return (BUS_TEARDOWN_INTR(device_get_parent(dev), child, res, cookie));
 }
 
-static int
-at91_activate_resource(device_t bus, device_t child, int type, int rid,
-    struct resource *r)
-{
-#if 0
-	u_long p;
-	int error;
-	
-	if (type == SYS_RES_MEMORY) {
-		error = bus_space_map(rman_get_bustag(r),
-		    rman_get_bushandle(r), rman_get_size(r), 0, &p);
-		if (error) 
-			return (error);
-		rman_set_bushandle(r, p);
-	}
-#endif	
-	return (rman_activate_resource(r));
-}
-
-static int
-at91_print_child(device_t dev, device_t child)
-{
-	struct at91_ivar *ivars;
-	struct resource_list *rl;
-	int retval = 0;
-
-	ivars = device_get_ivars(child);
-	rl = &ivars->resources;
-
-	retval += bus_print_child_header(dev, child);
-
-	retval += resource_list_print_type(rl, "port", SYS_RES_IOPORT, "%#lx");
-	retval += resource_list_print_type(rl, "mem", SYS_RES_MEMORY, "%#lx");
-	retval += resource_list_print_type(rl, "irq", SYS_RES_IRQ, "%ld");
-	if (device_get_flags(dev))
-		retval += printf(" flags %#x", device_get_flags(dev));
-
-	retval += bus_print_child_footer(dev, child);
-
-	return (retval);
-}
-
 void
 arm_mask_irq(uintptr_t nb)
 {
@@ -654,16 +536,16 @@
 	DEVMETHOD(device_attach, at91_attach),
 	DEVMETHOD(device_identify, at91_identify),
 
-	DEVMETHOD(bus_alloc_resource, at91_alloc_resource),
+	DEVMETHOD(bus_alloc_resource, obio_alloc_resource),
 	DEVMETHOD(bus_setup_intr, at91_setup_intr),
 	DEVMETHOD(bus_teardown_intr, at91_teardown_intr),
-	DEVMETHOD(bus_activate_resource, at91_activate_resource),
+	DEVMETHOD(bus_activate_resource, obio_activate_resource),
 	DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource),
-	DEVMETHOD(bus_get_resource_list,at91_get_resource_list),
+	DEVMETHOD(bus_get_resource_list,obio_get_resource_list),
 	DEVMETHOD(bus_set_resource,	bus_generic_rl_set_resource),
 	DEVMETHOD(bus_get_resource,	bus_generic_rl_get_resource),
-	DEVMETHOD(bus_release_resource,	at91_release_resource),
-	DEVMETHOD(bus_print_child,	at91_print_child),
+	DEVMETHOD(bus_release_resource,	obio_release_resource),
+	DEVMETHOD(bus_print_child,	obio_print_child),
 
 	{0, 0},
 };

==== //depot/projects/arm/src/sys/arm/at91/at91var.h#5 (text+ko) ====

@@ -28,18 +28,17 @@
 #define _AT91VAR_H_
 
 #include <sys/rman.h>
+#include <sys/obio.h>
 
 struct at91_softc {
-	device_t dev;
+	struct obio_softc obio;
 	bus_space_tag_t sc_st;
 	bus_space_handle_t sc_sh;
 	bus_space_handle_t sc_sys_sh;
-	struct rman sc_irq_rman;
-	struct rman sc_mem_rman;
 };
 
 struct at91_ivar {
-	struct resource_list resources;
+	struct obio_ivar obio;
 };
 
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200610240709.k9O7977w097670>