Deleted Added
full compact
28c28
< __FBSDID("$FreeBSD: head/sys/sparc64/fhc/fhc.c 146995 2005-06-05 10:16:27Z marius $");
---
> __FBSDID("$FreeBSD: head/sys/sparc64/fhc/fhc.c 152684 2005-11-22 16:39:44Z marius $");
38a39
> #include <dev/ofw/ofw_bus_subr.h>
60,64c61
< char *fdi_compat;
< char *fdi_model;
< char *fdi_name;
< char *fdi_type;
< phandle_t fdi_node;
---
> struct ofw_bus_devinfo fdi_obdinfo;
69a67
> static int fhc_print_res(struct fhc_devinfo *);
87,88d84
< bus_addr_t size;
< bus_addr_t off;
142c138,140
< if ((OF_getprop_alloc(child, "name", 1, (void **)&name)) == -1)
---
> fdi = malloc(sizeof(*fdi), M_DEVBUF, M_WAITOK | M_ZERO);
> if (ofw_bus_gen_setup_devinfo(&fdi->fdi_obdinfo, child) != 0) {
> free(fdi, M_DEVBUF);
144,168c142,165
< cdev = device_add_child(dev, NULL, -1);
< if (cdev != NULL) {
< fdi = malloc(sizeof(*fdi), M_DEVBUF, M_WAITOK | M_ZERO);
< if (fdi == NULL)
< continue;
< fdi->fdi_name = name;
< fdi->fdi_node = child;
< OF_getprop_alloc(child, "compatible", 1,
< (void **)&fdi->fdi_compat);
< OF_getprop_alloc(child, "device_type", 1,
< (void **)&fdi->fdi_type);
< OF_getprop_alloc(child, "model", 1,
< (void **)&fdi->fdi_model);
< resource_list_init(&fdi->fdi_rl);
< nreg = OF_getprop_alloc(child, "reg", sizeof(*reg),
< (void **)&reg);
< if (nreg != -1) {
< for (i = 0; i < nreg; i++) {
< off = reg[i].sbr_offset;
< size = reg[i].sbr_size;
< resource_list_add(&fdi->fdi_rl,
< SYS_RES_MEMORY, i, off, off + size,
< size);
< }
< free(reg, M_OFWPROP);
---
> }
> nreg = OF_getprop_alloc(child, "reg", sizeof(*reg),
> (void **)&reg);
> if (nreg == -1) {
> device_printf(dev, "<%s>: incomplete\n",
> fdi->fdi_obdinfo.obd_name);
> ofw_bus_gen_destroy_devinfo(&fdi->fdi_obdinfo);
> free(fdi, M_DEVBUF);
> continue;
> }
> resource_list_init(&fdi->fdi_rl);
> for (i = 0; i < nreg; i++)
> resource_list_add(&fdi->fdi_rl, SYS_RES_MEMORY, i,
> reg[i].sbr_offset, reg[i].sbr_offset +
> reg[i].sbr_size, reg[i].sbr_size);
> free(reg, M_OFWPROP);
> nintr = OF_getprop_alloc(child, "interrupts", sizeof(*intr),
> (void **)&intr);
> if (nintr != -1) {
> for (i = 0; i < nintr; i++) {
> iv = INTINO(intr[i]) |
> (sc->sc_ign << INTMAP_IGN_SHIFT);
> resource_list_add(&fdi->fdi_rl, SYS_RES_IRQ, i,
> iv, iv, 1);
170,183c167,178
< nintr = OF_getprop_alloc(child, "interrupts",
< sizeof(*intr), (void **)&intr);
< if (nintr != -1) {
< for (i = 0; i < nintr; i++) {
< iv = INTINO(intr[i]) |
< (sc->sc_ign << INTMAP_IGN_SHIFT);
< resource_list_add(&fdi->fdi_rl,
< SYS_RES_IRQ, i, iv, iv, 1);
< }
< free(intr, M_OFWPROP);
< }
< device_set_ivars(cdev, fdi);
< } else
< free(name, M_OFWPROP);
---
> free(intr, M_OFWPROP);
> }
> cdev = device_add_child(dev, NULL, -1);
> if (cdev == NULL) {
> device_printf(dev, "<%s>: device_add_child failed\n",
> fdi->fdi_obdinfo.obd_name);
> resource_list_free(&fdi->fdi_rl);
> ofw_bus_gen_destroy_devinfo(&fdi->fdi_obdinfo);
> free(fdi, M_DEVBUF);
> continue;
> }
> device_set_ivars(cdev, fdi);
192d186
< struct fhc_devinfo *fdi;
195d188
< fdi = device_get_ivars(child);
197,199c190
< rv += resource_list_print_type(&fdi->fdi_rl, "mem",
< SYS_RES_MEMORY, "%#lx");
< rv += resource_list_print_type(&fdi->fdi_rl, "irq", SYS_RES_IRQ, "%ld");
---
> rv += fhc_print_res(device_get_ivars(child));
207c198
< struct fhc_devinfo *fdi;
---
> const char *type;
209,212c200,202
< fdi = device_get_ivars(child);
< device_printf(dev, "<%s>", fdi->fdi_name);
< resource_list_print_type(&fdi->fdi_rl, "mem", SYS_RES_MEMORY, "%#lx");
< resource_list_print_type(&fdi->fdi_rl, "irq", SYS_RES_IRQ, "%ld");
---
> device_printf(dev, "<%s>", ofw_bus_get_name(child));
> fhc_print_res(device_get_ivars(child));
> type = ofw_bus_get_type(child);
214c204
< fdi->fdi_type != NULL ? fdi->fdi_type : "unknown");
---
> type != NULL ? type : "unknown");
367a358,366
> const struct ofw_bus_devinfo *
> fhc_get_devinfo(device_t bus, device_t child)
> {
> struct fhc_devinfo *fdi;
>
> fdi = device_get_ivars(child);
> return (&fdi->fdi_obdinfo);
> }
>
389,399c388,389
< const char *
< fhc_get_compat(device_t bus, device_t dev)
< {
< struct fhc_devinfo *dinfo;
<
< dinfo = device_get_ivars(dev);
< return (dinfo->fdi_compat);
< }
<
< const char *
< fhc_get_model(device_t bus, device_t dev)
---
> static int
> fhc_print_res(struct fhc_devinfo *fdi)
401c391
< struct fhc_devinfo *dinfo;
---
> int rv;
403,404c393,397
< dinfo = device_get_ivars(dev);
< return (dinfo->fdi_model);
---
> rv = 0;
> rv += resource_list_print_type(&fdi->fdi_rl, "mem", SYS_RES_MEMORY,
> "%#lx");
> rv += resource_list_print_type(&fdi->fdi_rl, "irq", SYS_RES_IRQ, "%ld");
> return (rv);
406,432d398
<
< const char *
< fhc_get_name(device_t bus, device_t dev)
< {
< struct fhc_devinfo *dinfo;
<
< dinfo = device_get_ivars(dev);
< return (dinfo->fdi_name);
< }
<
< phandle_t
< fhc_get_node(device_t bus, device_t dev)
< {
< struct fhc_devinfo *dinfo;
<
< dinfo = device_get_ivars(dev);
< return (dinfo->fdi_node);
< }
<
< const char *
< fhc_get_type(device_t bus, device_t dev)
< {
< struct fhc_devinfo *dinfo;
<
< dinfo = device_get_ivars(dev);
< return (dinfo->fdi_type);
< }