PERFORCE change 136703 for review
Marcel Moolenaar
marcel at FreeBSD.org
Sun Mar 2 23:46:56 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=136703
Change 136703 by marcel at marcel_xcllnt on 2008/03/02 23:46:50
Fix quicc(4) WRT resource handling.
Affected files ...
.. //depot/projects/e500/sys/dev/quicc/quicc_bfe.h#3 edit
.. //depot/projects/e500/sys/dev/quicc/quicc_bfe_ocp.c#2 edit
.. //depot/projects/e500/sys/dev/quicc/quicc_core.c#4 edit
.. //depot/projects/e500/sys/powerpc/conf/MPC85XX#4 edit
Differences ...
==== //depot/projects/e500/sys/dev/quicc/quicc_bfe.h#3 (text+ko) ====
@@ -44,6 +44,7 @@
void *sc_icookie;
int sc_irid;
+ struct rman sc_rman;
struct quicc_device *sc_device;
u_int sc_clock;
==== //depot/projects/e500/sys/dev/quicc/quicc_bfe_ocp.c#2 (text+ko) ====
@@ -37,6 +37,7 @@
#include <sys/lock.h>
#include <sys/malloc.h>
#include <sys/module.h>
+#include <sys/rman.h>
#include <sys/tty.h>
#include <machine/bus.h>
==== //depot/projects/e500/sys/dev/quicc/quicc_core.c#4 (text+ko) ====
@@ -64,7 +64,7 @@
MALLOC_DEFINE(M_QUICC, "QUICC", "QUICC driver");
struct quicc_device {
- struct resource qd_rres;
+ struct rman *qd_rman;
struct resource_list qd_rlist;
device_t qd_dev;
int qd_devtype;
@@ -115,6 +115,23 @@
if (sc->sc_rres == NULL)
return (ENXIO);
+ start = rman_get_start(sc->sc_rres);
+ size = rman_get_size(sc->sc_rres);
+
+ sc->sc_rman.rm_start = start;
+ sc->sc_rman.rm_end = start + size - 1;
+ sc->sc_rman.rm_type = RMAN_ARRAY;
+ sc->sc_rman.rm_descr = "QUICC resources";
+ error = rman_init(&sc->sc_rman);
+ if (!error)
+ error = rman_manage_region(&sc->sc_rman, start,
+ start + size - 1);
+ if (error) {
+ bus_release_resource(dev, sc->sc_rtype, sc->sc_rrid,
+ sc->sc_rres);
+ return (error);
+ }
+
/*
* Allocate interrupt resource.
*/
@@ -161,16 +178,11 @@
M_WAITOK | M_ZERO);
qd->qd_devtype = QUICC_DEVTYPE_SCC;
+ qd->qd_rman = &sc->sc_rman;
resource_list_init(&qd->qd_rlist);
- start = rman_get_start(sc->sc_rres);
- size = rman_get_size(sc->sc_rres);
resource_list_add(&qd->qd_rlist, sc->sc_rtype, 0, start,
- start + size - 1, size);
- rle = resource_list_find(&qd->qd_rlist, sc->sc_rtype, 0);
- rle->res = &qd->qd_rres;
- rman_set_bushandle(rle->res, rman_get_bushandle(sc->sc_rres));
- rman_set_bustag(rle->res, rman_get_bustag(sc->sc_rres));
+ start + size - 1, size);
resource_list_add(&qd->qd_rlist, SYS_RES_IRQ, 0, 0xf00, 0xf00, 1);
rle = resource_list_find(&qd->qd_rlist, SYS_RES_IRQ, 0);
@@ -178,7 +190,7 @@
qd->qd_dev = device_add_child(dev, NULL, -1);
device_set_ivars(qd->qd_dev, (void *)qd);
- error = device_probe_and_attach(qd->qd_dev);
+ error = device_probe_and_attach(qd->qd_dev);
/* Enable all SCC interrupts. */
quicc_write4(sc->sc_rres, QUICC_REG_SIMR_L, 0x00f00000);
@@ -256,7 +268,18 @@
qd = device_get_ivars(child);
rle = resource_list_find(&qd->qd_rlist, type, *rid);
- return (rle != NULL) ? rle->res : NULL;
+ if (rle == NULL)
+ return (NULL);
+
+ if (rle->res == NULL) {
+ rle->res = rman_reserve_resource(qd->qd_rman, rle->start,
+ rle->start + rle->count - 1, rle->count, flags, child);
+ if (rle->res != NULL) {
+ rman_set_bustag(rle->res, &bs_be_tag);
+ rman_set_bushandle(rle->res, rle->start);
+ }
+ }
+ return (rle->res);
}
int
==== //depot/projects/e500/sys/powerpc/conf/MPC85XX#4 (text+ko) ====
@@ -52,7 +52,7 @@
device miibus
device pci
device pty
-#device quicc
+device quicc
device random
#device rl
device scbus
More information about the p4-projects
mailing list