[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [RFC for-4.5 05/12] xen/dts: Add dt_parse_phandle_with_args and dt_parse_phandle



On Fri, 2014-02-07 at 17:43 +0000, Julien Grall wrote:
> Code adapted from linux drivers/of/base.c (commit ef42c58).

On that basis I only took a cursory glance through that monster
function.

> 
> Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx>
> diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.h
> index 7c075d9..d429e60 100644
> --- a/xen/include/xen/device_tree.h
> +++ b/xen/include/xen/device_tree.h
> @@ -112,6 +112,13 @@ struct dt_device_node {
>  
>  };
>  
> +#define MAX_PHANDLE_ARGS 16
> +struct dt_phandle_args {
> +    struct dt_device_node *np;
> +    int args_count;
> +    uint32_t args[MAX_PHANDLE_ARGS];
> +};
> +
>  /**
>   * IRQ line type.
>   *
> @@ -621,6 +628,53 @@ void dt_set_range(__be32 **cellp, const struct 
> dt_device_node *np,
>  void dt_get_range(const __be32 **cellp, const struct dt_device_node *np,
>                    u64 *address, u64 *size);
>  
> +/**
> + * dt_parse_phandle - Resolve a phandle property to a device_node pointer
> + * @np: Pointer to device node holding phandle property
> + * @phandle_name: Name of property holding a phandle value
> + * @index: For properties holding a table of phandles, this is the index into
> + *         the table

Otherwise it is -1 or something else?

> + *
> + * Returns the device_node pointer.
> + */
> +struct dt_device_node *dt_parse_phandle(const struct dt_device_node *np,
> +                                                     const char 
> *phandle_name,

Stray hard tabs?

> +                                        int index);
> +
> +/**
> + * dt_parse_phandle_with_args() - Find a node pointed by phandle in a list
> + * @np:      pointer to a device tree node containing a list
> + * @list_name: property name that contains a list
> + * @cells_name: property name that specifies phandles' arguments count
> + * @index: index of a phandle to parse out
> + * @out_args: optional pointer to output arguments structure (will be filled)
> + *
> + * This function is useful to parse lists of phandles and their arguments.
> + * Returns 0 on success and fills out_args, on error returns appropriate
> + * errno value.
> + *
> + * Example:
> + *
> + * phandle1: node1 {
> + *   #list-cells = <2>;
> + * }
> + *
> + * phandle2: node2 {
> + *   #list-cells = <1>;
> + * }
> + *
> + * node3 {
> + *   list = <&phandle1 1 2 &phandle2 3>;
> + * }
> + *
> + * To get a device_node of the `node2' node you may call this:
> + * dt_parse_phandle_with_args(node3, "list", "#list-cells", 1, &args);

Wow, what an exciting function!

How do I decide the correct size for out_args?

> + */
> +int dt_parse_phandle_with_args(const struct dt_device_node *np,
> +                               const char *list_name,
> +                               const char *cells_name, int index,
> +                               struct dt_phandle_args *out_args);
> +
>  #endif /* __XEN_DEVICE_TREE_H */
>  
>  /*



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.