Ejemplo n.º 1
0
/**
 * fwnode_property_present - check if a property of a firmware node is present
 * @fwnode: Firmware node whose property to check
 * @propname: Name of the property
 */
bool fwnode_property_present(struct fwnode_handle *fwnode, const char *propname)
{
    if (is_of_node(fwnode))
        return of_property_read_bool(to_of_node(fwnode), propname);
    else if (is_acpi_node(fwnode))
        return !acpi_dev_prop_get(to_acpi_node(fwnode), propname, NULL);

    return !!pset_prop_get(to_pset(fwnode), propname);
}
Ejemplo n.º 2
0
static int pset_prop_count_elems_of_size(struct property_set *pset,
					 const char *propname, size_t length)
{
	struct property_entry *prop;

	prop = pset_prop_get(pset, propname);
	if (!prop)
		return -EINVAL;

	return prop->length / length;
}
Ejemplo n.º 3
0
static void *pset_prop_find(struct property_set *pset, const char *propname,
			    size_t length)
{
	struct property_entry *prop;
	void *pointer;

	prop = pset_prop_get(pset, propname);
	if (!prop)
		return ERR_PTR(-EINVAL);
	if (prop->is_array)
		pointer = prop->pointer.raw_data;
	else
		pointer = &prop->value.raw_data;
	if (!pointer)
		return ERR_PTR(-ENODATA);
	if (length > prop->length)
		return ERR_PTR(-EOVERFLOW);
	return pointer;
}
Ejemplo n.º 4
0
static int pset_prop_read_array(struct property_set *pset, const char *name,
                                enum dev_prop_type type, void *val, size_t nval)
{
    struct property_entry *prop;
    unsigned int item_size;

    prop = pset_prop_get(pset, name);
    if (!prop)
        return -ENODATA;

    if (prop->type != type)
        return -EPROTO;

    if (!val)
        return prop->nval;

    if (prop->nval < nval)
        return -EOVERFLOW;

    switch (type) {
    case DEV_PROP_U8:
        item_size = sizeof(u8);
        break;
    case DEV_PROP_U16:
        item_size = sizeof(u16);
        break;
    case DEV_PROP_U32:
        item_size = sizeof(u32);
        break;
    case DEV_PROP_U64:
        item_size = sizeof(u64);
        break;
    case DEV_PROP_STRING:
        item_size = sizeof(const char *);
        break;
    default:
        return -EINVAL;
    }
    memcpy(val, prop->value.raw_data, nval * item_size);
    return 0;
}
Ejemplo n.º 5
0
static int pset_prop_read_string(struct property_set *pset,
				 const char *propname, const char **strings)
{
	struct property_entry *prop;
	const char **pointer;

	prop = pset_prop_get(pset, propname);
	if (!prop)
		return -EINVAL;
	if (!prop->is_string)
		return -EILSEQ;
	if (prop->is_array) {
		pointer = prop->pointer.str;
		if (!pointer)
			return -ENODATA;
	} else {
		pointer = &prop->value.str;
		if (*pointer && strnlen(*pointer, prop->length) >= prop->length)
			return -EILSEQ;
	}

	*strings = *pointer;
	return 0;
}