mirror of
https://github.com/torvalds/linux.git
synced 2024-12-26 12:52:30 +00:00
software node: replace is_array with is_inline
We do not need a special flag to know if we are dealing with an array, as we can get that data from ratio between element length and the data size, but we do need a flag to know whether or not the data is stored directly inside property_entry. Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> [ rjw: Subject & changelog, struct property_entry kerneldoc ] Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
67b8ed29e0
commit
e6bff4665c
@ -108,10 +108,7 @@ static const void *property_get_pointer(const struct property_entry *prop)
|
||||
if (!prop->length)
|
||||
return NULL;
|
||||
|
||||
if (prop->is_array)
|
||||
return prop->pointer;
|
||||
|
||||
return &prop->value;
|
||||
return prop->is_inline ? &prop->value : prop->pointer;
|
||||
}
|
||||
|
||||
static const void *property_entry_find(const struct property_entry *props,
|
||||
@ -205,7 +202,7 @@ static void property_entry_free_data(const struct property_entry *p)
|
||||
const char * const *src_str;
|
||||
size_t i, nval;
|
||||
|
||||
if (p->is_array) {
|
||||
if (!p->is_inline) {
|
||||
if (p->type == DEV_PROP_STRING && p->pointer) {
|
||||
src_str = p->pointer;
|
||||
nval = p->length / sizeof(const char *);
|
||||
@ -250,7 +247,7 @@ static int property_entry_copy_data(struct property_entry *dst,
|
||||
const void *pointer = property_get_pointer(src);
|
||||
const void *new;
|
||||
|
||||
if (src->is_array) {
|
||||
if (!src->is_inline) {
|
||||
if (!src->length)
|
||||
return -ENODATA;
|
||||
|
||||
@ -264,15 +261,16 @@ static int property_entry_copy_data(struct property_entry *dst,
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
dst->is_array = true;
|
||||
dst->pointer = new;
|
||||
} else if (src->type == DEV_PROP_STRING) {
|
||||
new = kstrdup(src->value.str, GFP_KERNEL);
|
||||
if (!new && src->value.str)
|
||||
return -ENOMEM;
|
||||
|
||||
dst->is_inline = true;
|
||||
dst->value.str = new;
|
||||
} else {
|
||||
dst->is_inline = true;
|
||||
dst->value = src->value;
|
||||
}
|
||||
|
||||
|
@ -227,15 +227,15 @@ static inline int fwnode_property_count_u64(const struct fwnode_handle *fwnode,
|
||||
* struct property_entry - "Built-in" device property representation.
|
||||
* @name: Name of the property.
|
||||
* @length: Length of data making up the value.
|
||||
* @is_array: True when the property is an array.
|
||||
* @is_inline: True when the property value is stored inline.
|
||||
* @type: Type of the data in unions.
|
||||
* @pointer: Pointer to the property (an array of items of the given type).
|
||||
* @value: Value of the property (when it is a single item of the given type).
|
||||
* @pointer: Pointer to the property when it is not stored inline.
|
||||
* @value: Value of the property when it is stored inline.
|
||||
*/
|
||||
struct property_entry {
|
||||
const char *name;
|
||||
size_t length;
|
||||
bool is_array;
|
||||
bool is_inline;
|
||||
enum dev_prop_type type;
|
||||
union {
|
||||
const void *pointer;
|
||||
@ -262,7 +262,6 @@ struct property_entry {
|
||||
(struct property_entry) { \
|
||||
.name = _name_, \
|
||||
.length = (_len_) * __PROPERTY_ENTRY_ELEMENT_SIZE(_elem_), \
|
||||
.is_array = true, \
|
||||
.type = DEV_PROP_##_Type_, \
|
||||
{ .pointer = _val_ }, \
|
||||
}
|
||||
@ -293,6 +292,7 @@ struct property_entry {
|
||||
(struct property_entry) { \
|
||||
.name = _name_, \
|
||||
.length = __PROPERTY_ENTRY_ELEMENT_SIZE(_elem_), \
|
||||
.is_inline = true, \
|
||||
.type = DEV_PROP_##_Type_, \
|
||||
{ .value = { ._elem_ = _val_ } }, \
|
||||
}
|
||||
@ -311,6 +311,7 @@ struct property_entry {
|
||||
#define PROPERTY_ENTRY_BOOL(_name_) \
|
||||
(struct property_entry) { \
|
||||
.name = _name_, \
|
||||
.is_inline = true, \
|
||||
}
|
||||
|
||||
struct property_entry *
|
||||
|
Loading…
Reference in New Issue
Block a user