diff options
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/altera/avgen/altera_avgen_fdt.c | 8 | ||||
| -rw-r--r-- | sys/dev/atkbdc/atkbdc_ebus.c | 2 | ||||
| -rw-r--r-- | sys/dev/etherswitch/e6000sw/e6000sw.c | 4 | ||||
| -rw-r--r-- | sys/dev/extres/regulator/regulator.c | 4 | ||||
| -rw-r--r-- | sys/dev/fdt/fdt_pinctrl.c | 2 | ||||
| -rw-r--r-- | sys/dev/fdt/fdt_slicer.c | 4 | ||||
| -rw-r--r-- | sys/dev/gpio/gpiokeys.c | 4 | ||||
| -rw-r--r-- | sys/dev/gpio/gpioled_fdt.c | 6 | ||||
| -rw-r--r-- | sys/dev/iicbus/adt746x.c | 4 | ||||
| -rw-r--r-- | sys/dev/le/lebuffer_sbus.c | 4 | ||||
| -rw-r--r-- | sys/dev/neta/if_mvneta_fdt.c | 2 | ||||
| -rw-r--r-- | sys/dev/ofw/ofw_bus_subr.c | 18 | ||||
| -rw-r--r-- | sys/dev/ofw/openfirm.c | 41 | ||||
| -rw-r--r-- | sys/dev/ofw/openfirm.h | 2 | ||||
| -rw-r--r-- | sys/dev/usb/controller/ehci_fsl.c | 2 | ||||
| -rw-r--r-- | sys/dev/vnic/thunder_bgx_fdt.c | 2 |
16 files changed, 69 insertions, 40 deletions
diff --git a/sys/dev/altera/avgen/altera_avgen_fdt.c b/sys/dev/altera/avgen/altera_avgen_fdt.c index 12a31d4e384cd..50cf26bc56bed 100644 --- a/sys/dev/altera/avgen/altera_avgen_fdt.c +++ b/sys/dev/altera/avgen/altera_avgen_fdt.c @@ -100,13 +100,13 @@ altera_avgen_fdt_attach(device_t dev) node = ofw_bus_get_node(dev); if (OF_getprop(node, "sri-cambridge,width", &cell, sizeof(cell)) > 0) sc->avg_width = cell; - (void)OF_getprop_alloc(node, "sri-cambridge,fileio", sizeof(char), + (void)OF_getprop_alloc(node, "sri-cambridge,fileio", (void **)&str_fileio); - (void)OF_getprop_alloc(node, "sri-cambridge,geomio", sizeof(char), + (void)OF_getprop_alloc(node, "sri-cambridge,geomio", (void **)&str_geomio); - (void)OF_getprop_alloc(node, "sri-cambridge,mmapio", sizeof(char), + (void)OF_getprop_alloc(node, "sri-cambridge,mmapio", (void **)&str_mmapio); - (void)OF_getprop_alloc(node, "sri-cambridge,devname", sizeof(char), + (void)OF_getprop_alloc(node, "sri-cambridge,devname", (void **)&str_devname); if (OF_getprop(node, "sri-cambridge,devunit", &cell, sizeof(cell)) > 0) devunit = cell; diff --git a/sys/dev/atkbdc/atkbdc_ebus.c b/sys/dev/atkbdc/atkbdc_ebus.c index 704837e39c6e8..53c40433d6bad 100644 --- a/sys/dev/atkbdc/atkbdc_ebus.c +++ b/sys/dev/atkbdc/atkbdc_ebus.c @@ -238,7 +238,7 @@ atkbdc_ebus_attach(device_t dev) children = 0; for (child = OF_child(ofw_bus_get_node(dev)); child != 0; child = OF_peer(child)) { - if ((OF_getprop_alloc(child, "name", 1, (void **)&cname)) == -1) + if ((OF_getprop_alloc(child, "name", (void **)&cname)) == -1) continue; if (children >= 2) { device_printf(dev, diff --git a/sys/dev/etherswitch/e6000sw/e6000sw.c b/sys/dev/etherswitch/e6000sw/e6000sw.c index d9e3570bf69d3..931d6ad33040d 100644 --- a/sys/dev/etherswitch/e6000sw/e6000sw.c +++ b/sys/dev/etherswitch/e6000sw/e6000sw.c @@ -276,7 +276,7 @@ e6000sw_parse_child_fdt(e6000sw_softc_t *sc, phandle_t child, int *pport) return (ENXIO); *pport = port; - if (OF_getprop_alloc(child, "label", 1, (void **)&portlabel) > 0) { + if (OF_getprop_alloc(child, "label", (void **)&portlabel) > 0) { if (strncmp(portlabel, "cpu", 3) == 0) { device_printf(sc->dev, "CPU port at %d\n", port); sc->cpuports_mask |= (1 << port); @@ -287,7 +287,7 @@ e6000sw_parse_child_fdt(e6000sw_softc_t *sc, phandle_t child, int *pport) fixed_link = OF_child(child); if (fixed_link != 0 && - OF_getprop_alloc(fixed_link, "name", 1, (void **)&name) > 0) { + OF_getprop_alloc(fixed_link, "name", (void **)&name) > 0) { if (strncmp(name, "fixed-link", 10) == 0) { /* Assume defaults: 1g - full-duplex. */ sc->fixed_mask |= (1 << port); diff --git a/sys/dev/extres/regulator/regulator.c b/sys/dev/extres/regulator/regulator.c index 45129f068d426..d0528093e2282 100644 --- a/sys/dev/extres/regulator/regulator.c +++ b/sys/dev/extres/regulator/regulator.c @@ -1007,7 +1007,7 @@ regulator_parse_ofw_stdparam(device_t pdev, phandle_t node, int rv; par = &def->std_param; - rv = OF_getprop_alloc(node, "regulator-name", 1, + rv = OF_getprop_alloc(node, "regulator-name", (void **)&def->name); if (rv <= 0) { device_printf(pdev, "%s: Missing regulator name\n", @@ -1057,7 +1057,7 @@ regulator_parse_ofw_stdparam(device_t pdev, phandle_t node, rv = OF_getencprop(node, "vin-supply", &supply_xref, sizeof(supply_xref)); if (rv >= 0) { - rv = OF_getprop_alloc(supply_xref, "regulator-name", 1, + rv = OF_getprop_alloc(supply_xref, "regulator-name", (void **)&def->parent_name); if (rv <= 0) def->parent_name = NULL; diff --git a/sys/dev/fdt/fdt_pinctrl.c b/sys/dev/fdt/fdt_pinctrl.c index 0c88e3fa908bf..389dd0749c914 100644 --- a/sys/dev/fdt/fdt_pinctrl.c +++ b/sys/dev/fdt/fdt_pinctrl.c @@ -67,7 +67,7 @@ fdt_pinctrl_configure_by_name(device_t client, const char * name) int i, offset, nameslen; nameslen = OF_getprop_alloc(ofw_bus_get_node(client), "pinctrl-names", - sizeof(*names), (void **)&names); + (void **)&names); if (nameslen <= 0) return (ENOENT); for (i = 0, offset = 0; offset < nameslen; i++) { diff --git a/sys/dev/fdt/fdt_slicer.c b/sys/dev/fdt/fdt_slicer.c index 5470256073e01..312300e64d3b2 100644 --- a/sys/dev/fdt/fdt_slicer.c +++ b/sys/dev/fdt/fdt_slicer.c @@ -94,12 +94,12 @@ fdt_flash_fill_slices(device_t dev, const char *provider __unused, /* * Retrieve label. */ - name_len = OF_getprop_alloc(dt_child, "label", sizeof(char), + name_len = OF_getprop_alloc(dt_child, "label", (void **)&slice_name); if (name_len <= 0) { /* Use node name if no label defined */ name_len = OF_getprop_alloc(dt_child, "name", - sizeof(char), (void **)&slice_name); + (void **)&slice_name); if (name_len <= 0) { debugf("slice i=%d with no name\n", i); slice_name = NULL; diff --git a/sys/dev/gpio/gpiokeys.c b/sys/dev/gpio/gpiokeys.c index d2662e17337c4..3b727985b17e6 100644 --- a/sys/dev/gpio/gpiokeys.c +++ b/sys/dev/gpio/gpiokeys.c @@ -271,8 +271,8 @@ gpiokeys_attach_key(struct gpiokeys_softc *sc, phandle_t node, callout_init_mtx(&key->repeat_callout, &key->mtx, 0); name = NULL; - if (OF_getprop_alloc(node, "label", 1, (void **)&name) == -1) - OF_getprop_alloc(node, "name", 1, (void **)&name); + if (OF_getprop_alloc(node, "label", (void **)&name) == -1) + OF_getprop_alloc(node, "name", (void **)&name); if (name != NULL) key_name = name; diff --git a/sys/dev/gpio/gpioled_fdt.c b/sys/dev/gpio/gpioled_fdt.c index 3c3478861dfa3..3f627706860af 100644 --- a/sys/dev/gpio/gpioled_fdt.c +++ b/sys/dev/gpio/gpioled_fdt.c @@ -89,7 +89,7 @@ gpioleds_attach_led(struct gpioleds_softc *sc, phandle_t node, state = 0; if (OF_getprop_alloc(node, "default-state", - sizeof(char), (void **)&default_state) != -1) { + (void **)&default_state) != -1) { if (strcasecmp(default_state, "on") == 0) state = 1; else if (strcasecmp(default_state, "off") == 0) @@ -105,8 +105,8 @@ gpioleds_attach_led(struct gpioleds_softc *sc, phandle_t node, } name = NULL; - if (OF_getprop_alloc(node, "label", 1, (void **)&name) == -1) - OF_getprop_alloc(node, "name", 1, (void **)&name); + if (OF_getprop_alloc(node, "label", (void **)&name) == -1) + OF_getprop_alloc(node, "name", (void **)&name); if (name == NULL) { device_printf(sc->sc_dev, diff --git a/sys/dev/iicbus/adt746x.c b/sys/dev/iicbus/adt746x.c index bd4bb70103c6c..3b908453a0d71 100644 --- a/sys/dev/iicbus/adt746x.c +++ b/sys/dev/iicbus/adt746x.c @@ -360,8 +360,8 @@ adt746x_fill_fan_prop(device_t dev) child = ofw_bus_get_node(dev); /* Fill the fan location property. */ - location_len = OF_getprop_alloc(child, "hwctrl-location", 1, (void **)&location); - id_len = OF_getprop_alloc(child, "hwctrl-id", sizeof(cell_t), (void **)&id); + location_len = OF_getprop_alloc(child, "hwctrl-location", (void **)&location); + id_len = OF_getprop_alloc_multi(child, "hwctrl-id", sizeof(cell_t), (void **)&id); if (location_len == -1 || id_len == -1) { OF_prop_free(location); OF_prop_free(id); diff --git a/sys/dev/le/lebuffer_sbus.c b/sys/dev/le/lebuffer_sbus.c index 9c5620dad9189..f40aca1b6830b 100644 --- a/sys/dev/le/lebuffer_sbus.c +++ b/sys/dev/le/lebuffer_sbus.c @@ -183,7 +183,7 @@ lebuffer_setup_dinfo(device_t dev, phandle_t node) } resource_list_init(&ldi->ldi_rl); slot = -1; - nreg = OF_getprop_alloc(node, "reg", sizeof(*reg), (void **)®); + nreg = OF_getprop_alloc_multi(node, "reg", sizeof(*reg), (void **)®); if (nreg == -1) { device_printf(dev, "<%s>: incomplete\n", ldi->ldi_obdinfo.obd_name); @@ -217,7 +217,7 @@ lebuffer_setup_dinfo(device_t dev, phandle_t node) /* * The `interrupts' property contains the SBus interrupt level. */ - nintr = OF_getprop_alloc(node, "interrupts", sizeof(*intr), + nintr = OF_getprop_alloc_multi(node, "interrupts", sizeof(*intr), (void **)&intr); if (nintr != -1) { for (i = 0; i < nintr; i++) { diff --git a/sys/dev/neta/if_mvneta_fdt.c b/sys/dev/neta/if_mvneta_fdt.c index a858babf06ec5..6b773e379e883 100644 --- a/sys/dev/neta/if_mvneta_fdt.c +++ b/sys/dev/neta/if_mvneta_fdt.c @@ -159,7 +159,7 @@ mvneta_fdt_phy_acquire(device_t dev) /* Test for fixed-link (present i.e. in 388-gp) */ for (child = OF_child(node); child != 0; child = OF_peer(child)) { if (OF_getprop_alloc(child, - "name", 1, (void **)&name) <= 0) { + "name", (void **)&name) <= 0) { continue; } if (strncmp(name, "fixed-link", 10) == 0) { diff --git a/sys/dev/ofw/ofw_bus_subr.c b/sys/dev/ofw/ofw_bus_subr.c index 3e2da5a2e8ce1..80b59f43708a5 100644 --- a/sys/dev/ofw/ofw_bus_subr.c +++ b/sys/dev/ofw/ofw_bus_subr.c @@ -57,12 +57,12 @@ ofw_bus_gen_setup_devinfo(struct ofw_bus_devinfo *obd, phandle_t node) if (obd == NULL) return (ENOMEM); /* The 'name' property is considered mandatory. */ - if ((OF_getprop_alloc(node, "name", 1, (void **)&obd->obd_name)) == -1) + if ((OF_getprop_alloc(node, "name", (void **)&obd->obd_name)) == -1) return (EINVAL); - OF_getprop_alloc(node, "compatible", 1, (void **)&obd->obd_compat); - OF_getprop_alloc(node, "device_type", 1, (void **)&obd->obd_type); - OF_getprop_alloc(node, "model", 1, (void **)&obd->obd_model); - OF_getprop_alloc(node, "status", 1, (void **)&obd->obd_status); + OF_getprop_alloc(node, "compatible", (void **)&obd->obd_compat); + OF_getprop_alloc(node, "device_type", (void **)&obd->obd_type); + OF_getprop_alloc(node, "model", (void **)&obd->obd_model); + OF_getprop_alloc(node, "status", (void **)&obd->obd_status); obd->obd_node = node; return (0); } @@ -502,7 +502,7 @@ ofw_bus_reg_to_rl_helper(device_t dev, phandle_t node, pcell_t acells, pcell_t s * This may be just redundant when having ofw_bus_devinfo * but makes this routine independent of it. */ - ret = OF_getprop_alloc(node, "name", sizeof(*name), (void **)&name); + ret = OF_getprop_alloc(node, "name", (void **)&name); if (ret == -1) name = NULL; @@ -720,7 +720,7 @@ ofw_bus_find_child(phandle_t start, const char *child_name) phandle_t child; for (child = OF_child(start); child != 0; child = OF_peer(child)) { - ret = OF_getprop_alloc(child, "name", sizeof(*name), (void **)&name); + ret = OF_getprop_alloc(child, "name", (void **)&name); if (ret == -1) continue; if (strcmp(name, child_name) == 0) { @@ -916,7 +916,7 @@ ofw_bus_find_string_index(phandle_t node, const char *list_name, int rv, i, cnt, nelems; elems = NULL; - nelems = OF_getprop_alloc(node, list_name, 1, (void **)&elems); + nelems = OF_getprop_alloc(node, list_name, (void **)&elems); if (nelems <= 0) return (ENOENT); @@ -947,7 +947,7 @@ ofw_bus_string_list_to_array(phandle_t node, const char *list_name, int i, cnt, nelems, len; elems = NULL; - nelems = OF_getprop_alloc(node, list_name, 1, (void **)&elems); + nelems = OF_getprop_alloc(node, list_name, (void **)&elems); if (nelems <= 0) return (nelems); diff --git a/sys/dev/ofw/openfirm.c b/sys/dev/ofw/openfirm.c index dc781d42ad8cb..4f1066e1cb149 100644 --- a/sys/dev/ofw/openfirm.c +++ b/sys/dev/ofw/openfirm.c @@ -440,11 +440,35 @@ OF_searchencprop(phandle_t node, const char *propname, void *buf, size_t len) /* * Store the value of a property of a package into newly allocated memory + * (using the M_OFWPROP malloc pool and M_WAITOK). + */ +ssize_t +OF_getprop_alloc(phandle_t package, const char *propname, void **buf) +{ + int len; + + *buf = NULL; + if ((len = OF_getproplen(package, propname)) == -1) + return (-1); + + if (len > 0) { + *buf = malloc(len, M_OFWPROP, M_WAITOK); + if (OF_getprop(package, propname, *buf, len) == -1) { + free(*buf, M_OFWPROP); + *buf = NULL; + return (-1); + } + } + return (len); +} + +/* + * Store the value of a property of a package into newly allocated memory * (using the M_OFWPROP malloc pool and M_WAITOK). elsz is the size of a * single element, the number of elements is return in number. */ ssize_t -OF_getprop_alloc(phandle_t package, const char *propname, int elsz, void **buf) +OF_getprop_alloc_multi(phandle_t package, const char *propname, int elsz, void **buf) { int len; @@ -453,15 +477,18 @@ OF_getprop_alloc(phandle_t package, const char *propname, int elsz, void **buf) len % elsz != 0) return (-1); - *buf = malloc(len, M_OFWPROP, M_WAITOK); - if (OF_getprop(package, propname, *buf, len) == -1) { - free(*buf, M_OFWPROP); - *buf = NULL; - return (-1); + if (len > 0) { + *buf = malloc(len, M_OFWPROP, M_WAITOK); + if (OF_getprop(package, propname, *buf, len) == -1) { + free(*buf, M_OFWPROP); + *buf = NULL; + return (-1); + } } return (len / elsz); } + ssize_t OF_getencprop_alloc(phandle_t package, const char *name, int elsz, void **buf) { @@ -469,7 +496,7 @@ OF_getencprop_alloc(phandle_t package, const char *name, int elsz, void **buf) pcell_t *cell; int i; - retval = OF_getprop_alloc(package, name, elsz, buf); + retval = OF_getprop_alloc_multi(package, name, elsz, buf); if (retval == -1) return (-1); if (retval * elsz % 4 != 0) { diff --git a/sys/dev/ofw/openfirm.h b/sys/dev/ofw/openfirm.h index e17011640b550..4983a00b015c1 100644 --- a/sys/dev/ofw/openfirm.h +++ b/sys/dev/ofw/openfirm.h @@ -116,6 +116,8 @@ ssize_t OF_searchprop(phandle_t node, const char *propname, void *buf, ssize_t OF_searchencprop(phandle_t node, const char *propname, void *buf, size_t len); ssize_t OF_getprop_alloc(phandle_t node, const char *propname, + void **buf); +ssize_t OF_getprop_alloc_multi(phandle_t node, const char *propname, int elsz, void **buf); ssize_t OF_getencprop_alloc(phandle_t node, const char *propname, int elsz, void **buf); diff --git a/sys/dev/usb/controller/ehci_fsl.c b/sys/dev/usb/controller/ehci_fsl.c index 525a2c49a8c32..726c40a4b31f7 100644 --- a/sys/dev/usb/controller/ehci_fsl.c +++ b/sys/dev/usb/controller/ehci_fsl.c @@ -175,7 +175,7 @@ enable_usb(device_t dev, bus_space_tag_t iot, bus_space_handle_t ioh) node = ofw_bus_get_node(dev); if ((node != 0) && - (OF_getprop_alloc(node, "phy_type", 1, (void **)&phy_type) > 0)) { + (OF_getprop_alloc(node, "phy_type", (void **)&phy_type) > 0)) { if (strncasecmp(phy_type, "utmi", strlen("utmi")) == 0) tmp |= UTMI_PHY_EN; OF_prop_free(phy_type); diff --git a/sys/dev/vnic/thunder_bgx_fdt.c b/sys/dev/vnic/thunder_bgx_fdt.c index 380d7f90697ed..bdb7594a0fb4e 100644 --- a/sys/dev/vnic/thunder_bgx_fdt.c +++ b/sys/dev/vnic/thunder_bgx_fdt.c @@ -396,7 +396,7 @@ bgx_fdt_init_phy(struct bgx *bgx) continue; } } else { - len = OF_getprop_alloc(child, "name", 1, + len = OF_getprop_alloc(child, "name", (void **)&node_name); if (len <= 0) { continue; |
