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

[Xen-devel] [RFC PATCH 09/31] xen/device-tree: Add dt_property_for_each_string macros



From: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx>

This is a port from Linux.

Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx>
CC: Stefano Stabellini <sstabellini@xxxxxxxxxx>
CC: Julien Grall <julien.grall@xxxxxxxxxx>
---
 xen/common/device_tree.c      | 18 ++++++++++++++++++
 xen/include/xen/device_tree.h | 21 +++++++++++++++++++++
 2 files changed, 39 insertions(+)

diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c
index 60b0095..08f8072 100644
--- a/xen/common/device_tree.c
+++ b/xen/common/device_tree.c
@@ -208,6 +208,24 @@ int dt_property_read_string(const struct dt_device_node 
*np,
     return 0;
 }
 
+const char *dt_property_next_string(const struct dt_property *prop,
+                                    const char *cur)
+{
+    const void *curv = cur;
+
+    if ( !prop )
+        return NULL;
+
+    if ( !cur )
+        return prop->value;
+
+    curv += strlen(cur) + 1;
+    if ( curv >= prop->value + prop->length )
+        return NULL;
+
+    return curv;
+}
+
 bool_t dt_device_is_compatible(const struct dt_device_node *device,
                                const char *compat)
 {
diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.h
index 738f1b6..9e0931c 100644
--- a/xen/include/xen/device_tree.h
+++ b/xen/include/xen/device_tree.h
@@ -420,6 +420,27 @@ int dt_property_read_string(const struct dt_device_node 
*np,
                             const char *propname, const char **out_string);
 
 /**
+ * dt_property_for_each_string - Iterate over an array of strings within
+ * a property with a given name for a given node.
+ *
+ * Example:
+ *
+ * struct dt_property *prop;
+ * const char *s;
+ *
+ * dt_property_for_each_string(np, "propname", prop, s)
+ *     printk("String value: %s\n", s);
+ */
+const char *dt_property_next_string(const struct dt_property *prop,
+                                    const char *cur);
+
+#define dt_property_for_each_string(np, propname, prop, s)    \
+    for (prop = dt_find_property(np, propname, NULL),         \
+        s = dt_property_next_string(prop, NULL);              \
+        s;                                                    \
+        s = dt_property_next_string(prop, s))
+
+/**
  * Checks if the given "compat" string matches one of the strings in
  * the device's "compatible" property
  */
-- 
2.7.4


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

 


Rackspace

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