On 06/06/2012 10:55 AM, Alexander Graf wrote:
> On 06/06/2012 07:01 AM, Peter Crosthwaite wrote:
>> On Wed, 2012-06-06 at 01:52 +0200, Alexander Graf wrote:
>>> We have device tree helpers that allow us to create single cell (u32)
>>> wide properties. However, when creating properties that contain an
>>> array of
>>> cells, we need to jump through hoops, manually passing in an array with
>>> converted endianness.
>>>
>>> To ease the pain of this a bit, create helpers for the most common array
>>> sizes, namely 2, 3 and 4 cells wide properties.
>>>
>>> Signed-off-by: Alexander Graf<ag...@suse.de>
>>> ---
>>>   device_tree.c |   30 ++++++++++++++++++++++++++++++
>>>   device_tree.h |    9 +++++++++
>>>   2 files changed, 39 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/device_tree.c b/device_tree.c
>>> index 94a239e..b1dff4f 100644
>>> --- a/device_tree.c
>>> +++ b/device_tree.c
>>> @@ -117,6 +117,36 @@ int qemu_devtree_setprop_cell(void *fdt, const
>>> char *node_path,
>>>       return r;
>>>   }
>>>
>>> +int qemu_devtree_setprop_cell2(void *fdt, const char *node_path,
>>> +                               const char *property, uint32_t val,
>>> +                               uint32_t val2)
>>> +{
>>> +    uint32_t tmp[] = { cpu_to_be32(val),
>>> +                       cpu_to_be32(val2) };
>>> +    return qemu_devtree_setprop(fdt, node_path, property, tmp,
>>> sizeof(tmp));
>>> +}

>From the subject line I was expecting these to add multi-cell numbers
together (e.g. for ranges parsing).

>>> +
>>> +int qemu_devtree_setprop_cell3(void *fdt, const char *node_path,
>>> +                               const char *property, uint32_t val,
>>> +                               uint32_t val2, uint32_t val3)
>>> +{
>>> +    uint32_t tmp[] = { cpu_to_be32(val),
>>> +                       cpu_to_be32(val2),
>>> +                       cpu_to_be32(val3) };
>>> +    return qemu_devtree_setprop(fdt, node_path, property, tmp,
>>> sizeof(tmp));
>>> +}
>>> +
>>> +int qemu_devtree_setprop_cell4(void *fdt, const char *node_path,
>>> +                               const char *property, uint32_t val,
>>> +                               uint32_t val2, uint32_t val3,
>>> uint32_t val4)
>>> +{
>>> +    uint32_t tmp[] = { cpu_to_be32(val),
>>> +                       cpu_to_be32(val2),
>>> +                       cpu_to_be32(val3),
>>> +                       cpu_to_be32(val4) };
>>> +    return qemu_devtree_setprop(fdt, node_path, property, tmp,
>>> sizeof(tmp));
>>> +}
>>> +
>> Cant this be generalised to the n case rather than having functional
>> replication for 2/3/4 word props?
>>
>> +int qemu_devtree_setprop_celln(void *fdt, const char *node_path,
>> +                               const char *property, uint32_t *vals,
>> int n)
> 
> You mean internally? Yeah, probably. Externally? The point of these
> helpers is to make the code look less cluttered. We can already pass in
> an array just fine, but C is quite annoying about generating those on
> the fly, while it's easy to pass in ints as parameters :)

Varargs?

-Scott


Reply via email to