aboutsummaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/altera/avgen/altera_avgen_fdt.c8
-rw-r--r--sys/dev/atkbdc/atkbdc_ebus.c2
-rw-r--r--sys/dev/etherswitch/e6000sw/e6000sw.c4
-rw-r--r--sys/dev/extres/regulator/regulator.c4
-rw-r--r--sys/dev/fdt/fdt_pinctrl.c2
-rw-r--r--sys/dev/fdt/fdt_slicer.c4
-rw-r--r--sys/dev/gpio/gpiokeys.c4
-rw-r--r--sys/dev/gpio/gpioled_fdt.c6
-rw-r--r--sys/dev/iicbus/adt746x.c4
-rw-r--r--sys/dev/le/lebuffer_sbus.c4
-rw-r--r--sys/dev/neta/if_mvneta_fdt.c2
-rw-r--r--sys/dev/ofw/ofw_bus_subr.c18
-rw-r--r--sys/dev/ofw/openfirm.c41
-rw-r--r--sys/dev/ofw/openfirm.h2
-rw-r--r--sys/dev/usb/controller/ehci_fsl.c2
-rw-r--r--sys/dev/vnic/thunder_bgx_fdt.c2
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 **)&reg);
+ nreg = OF_getprop_alloc_multi(node, "reg", sizeof(*reg), (void **)&reg);
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;