diff options
author | marius <marius@FreeBSD.org> | 2005-12-03 11:59:26 +0000 |
---|---|---|
committer | marius <marius@FreeBSD.org> | 2005-12-03 11:59:26 +0000 |
commit | 0c322e42b4c0add7658e901b171eeec9561841c1 (patch) | |
tree | 26eb1d1b2099ad9663e1929190c0a54b0c12e62d | |
parent | a8b03f7b44193e86cc1e0f70b2296e57b237d5ab (diff) | |
download | FreeBSD-src-0c322e42b4c0add7658e901b171eeec9561841c1.zip FreeBSD-src-0c322e42b4c0add7658e901b171eeec9561841c1.tar.gz |
Convert to use the recently introduced set of ofw_bus_gen_get_*() for
providing the ofw_bus KOBJ interface.
Tested by: grehan
-rw-r--r-- | sys/powerpc/powermac/macio.c | 127 | ||||
-rw-r--r-- | sys/powerpc/powermac/maciovar.h | 6 |
2 files changed, 40 insertions, 93 deletions
diff --git a/sys/powerpc/powermac/macio.c b/sys/powerpc/powermac/macio.c index a16903c..22f71d4 100644 --- a/sys/powerpc/powermac/macio.c +++ b/sys/powerpc/powermac/macio.c @@ -48,6 +48,7 @@ #include <machine/resource.h> #include <dev/ofw/ofw_bus.h> +#include <dev/ofw/ofw_bus_subr.h> #include <dev/ofw/openfirm.h> #include <powerpc/powermac/maciovar.h> @@ -80,11 +81,7 @@ static int macio_deactivate_resource(device_t, device_t, int, int, static int macio_release_resource(device_t, device_t, int, int, struct resource *); static struct resource_list *macio_get_resource_list (device_t, device_t); -static ofw_bus_get_compat_t macio_get_compat; -static ofw_bus_get_model_t macio_get_model; -static ofw_bus_get_name_t macio_get_name; -static ofw_bus_get_node_t macio_get_node; -static ofw_bus_get_type_t macio_get_type; +static ofw_bus_get_devinfo_t macio_get_devinfo; /* * Bus interface definition @@ -111,11 +108,12 @@ static device_method_t macio_methods[] = { DEVMETHOD(bus_get_resource_list, macio_get_resource_list), /* ofw_bus interface */ - DEVMETHOD(ofw_bus_get_compat, macio_get_compat), - DEVMETHOD(ofw_bus_get_model, macio_get_model), - DEVMETHOD(ofw_bus_get_name, macio_get_name), - DEVMETHOD(ofw_bus_get_node, macio_get_node), - DEVMETHOD(ofw_bus_get_type, macio_get_type), + DEVMETHOD(ofw_bus_get_devinfo, macio_get_devinfo), + DEVMETHOD(ofw_bus_get_compat, ofw_bus_gen_get_compat), + DEVMETHOD(ofw_bus_get_model, ofw_bus_gen_get_model), + DEVMETHOD(ofw_bus_get_name, ofw_bus_gen_get_name), + DEVMETHOD(ofw_bus_get_node, ofw_bus_gen_get_node), + DEVMETHOD(ofw_bus_get_type, ofw_bus_gen_get_type), { 0, 0 } }; @@ -256,7 +254,6 @@ macio_attach(device_t dev) phandle_t subchild; device_t cdev; u_int reg[3]; - char *name; int quirks; sc = device_get_softc(dev); @@ -286,43 +283,36 @@ macio_attach(device_t dev) * Iterate through the sub-devices */ for (child = OF_child(root); child != 0; child = OF_peer(child)) { - OF_getprop_alloc(child, "name", 1, (void **)&name); - - quirks = macio_get_quirks(name); + dinfo = malloc(sizeof(*dinfo), M_MACIO, M_WAITOK | M_ZERO); + if (ofw_bus_gen_setup_devinfo(&dinfo->mdi_obdinfo, child) != + 0) { + free(dinfo, M_MACIO); + continue; + } + quirks = macio_get_quirks(dinfo->mdi_obdinfo.obd_name); if ((quirks & MACIO_QUIRK_IGNORE) != 0) { - free(name, M_OFWPROP); + ofw_bus_gen_destroy_devinfo(&dinfo->mdi_obdinfo); + free(dinfo, M_MACIO); continue; } - + resource_list_init(&dinfo->mdi_resources); + dinfo->mdi_ninterrupts = 0; + macio_add_intr(child, dinfo); + macio_add_reg(child, dinfo); + if ((quirks & MACIO_QUIRK_CHILD_HAS_INTR) != 0) + for (subchild = OF_child(child); subchild != 0; + subchild = OF_peer(subchild)) + macio_add_intr(subchild, dinfo); cdev = device_add_child(dev, NULL, -1); - if (cdev != NULL) { - dinfo = malloc(sizeof(*dinfo), M_MACIO, M_WAITOK); - memset(dinfo, 0, sizeof(*dinfo)); - resource_list_init(&dinfo->mdi_resources); - dinfo->mdi_node = child; - dinfo->mdi_name = name; - OF_getprop_alloc(child, "compatible", 1, - (void **)&dinfo->mdi_compat); - OF_getprop_alloc(child, "device_type", 1, - (void **)&dinfo->mdi_type); - OF_getprop_alloc(child, "model", 1, - (void **)&dinfo->mdi_model); - dinfo->mdi_ninterrupts = 0; - macio_add_intr(child, dinfo); - macio_add_reg(child, dinfo); - - - if ((quirks & MACIO_QUIRK_CHILD_HAS_INTR) != 0) { - for (subchild = OF_child(child); subchild != 0; - subchild = OF_peer(subchild)) { - macio_add_intr(subchild, dinfo); - } - } - - device_set_ivars(cdev, dinfo); - } else { - free(name, M_OFWPROP); + if (cdev == NULL) { + device_printf(dev, "<%s>: device_add_child failed\n", + dinfo->mdi_obdinfo.obd_name); + resource_list_free(&dinfo->mdi_resources); + ofw_bus_gen_destroy_devinfo(&dinfo->mdi_obdinfo); + free(dinfo, M_MACIO); + continue; } + device_set_ivars(cdev, dinfo); } return (bus_generic_attach(dev)); @@ -535,56 +525,17 @@ macio_deactivate_resource(device_t bus, device_t child, int type, int rid, static struct resource_list * macio_get_resource_list (device_t dev, device_t child) { - struct macio_devinfo *dinfo = device_get_ivars(child); - struct resource_list *rl = &dinfo->mdi_resources; - - if (!rl) - return (NULL); - - return (rl); -} - -const char * -macio_get_compat(device_t bus, device_t dev) -{ - struct macio_devinfo *dinfo; - - dinfo = device_get_ivars(dev); - return (dinfo->mdi_compat); -} - -const char * -macio_get_model(device_t bus, device_t dev) -{ - struct macio_devinfo *dinfo; - - dinfo = device_get_ivars(dev); - return (dinfo->mdi_model); -} - -const char * -macio_get_name(device_t bus, device_t dev) -{ struct macio_devinfo *dinfo; - dinfo = device_get_ivars(dev); - return (dinfo->mdi_name); -} - -static phandle_t -macio_get_node(device_t bus, device_t dev) -{ - struct macio_devinfo *dinfo; - - dinfo = device_get_ivars(dev); - return (dinfo->mdi_node); + dinfo = device_get_ivars(child); + return (&dinfo->mdi_resources); } -const char * -macio_get_type(device_t bus, device_t dev) +static const struct ofw_bus_devinfo * +macio_get_devinfo(device_t dev, device_t child) { struct macio_devinfo *dinfo; - dinfo = device_get_ivars(dev); - return (dinfo->mdi_type); + dinfo = device_get_ivars(child); + return (&dinfo->mdi_obdinfo); } diff --git a/sys/powerpc/powermac/maciovar.h b/sys/powerpc/powermac/maciovar.h index 1f1d0de..e289102 100644 --- a/sys/powerpc/powermac/maciovar.h +++ b/sys/powerpc/powermac/maciovar.h @@ -49,14 +49,10 @@ struct macio_reg { * Per macio device structure. */ struct macio_devinfo { - char *mdi_compat; - char *mdi_model; - char *mdi_name; - phandle_t mdi_node; - char *mdi_type; int mdi_interrupts[5]; int mdi_ninterrupts; int mdi_base; + struct ofw_bus_devinfo mdi_obdinfo; struct resource_list mdi_resources; }; |