summaryrefslogtreecommitdiffstats
path: root/sys/powerpc
diff options
context:
space:
mode:
authormarius <marius@FreeBSD.org>2005-12-03 11:59:26 +0000
committermarius <marius@FreeBSD.org>2005-12-03 11:59:26 +0000
commit0c322e42b4c0add7658e901b171eeec9561841c1 (patch)
tree26eb1d1b2099ad9663e1929190c0a54b0c12e62d /sys/powerpc
parenta8b03f7b44193e86cc1e0f70b2296e57b237d5ab (diff)
downloadFreeBSD-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
Diffstat (limited to 'sys/powerpc')
-rw-r--r--sys/powerpc/powermac/macio.c127
-rw-r--r--sys/powerpc/powermac/maciovar.h6
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;
};
OpenPOWER on IntegriCloud