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

[Minios-devel] [UNIKRAFT PATCH 1/8] lib/fdt: Introduce fdt_getprop_u32_by_offset helper



This helper will be used very frequcently to u32 from properties.
So we provide this helper here to avoid using fdt_getprop and
fdt32_to_cpu everywhere.

Signed-off-by: Wei Chen <wei.chen@xxxxxxx>
Signed-off-by: Jianyong Wu <jianyong.wu@xxxxxxx>
---
 lib/fdt/exportsyms.uk    |  1 +
 lib/fdt/fdt_ro.c         | 18 ++++++++++++++++++
 lib/fdt/include/libfdt.h | 21 +++++++++++++++++++++
 3 files changed, 40 insertions(+)

diff --git a/lib/fdt/exportsyms.uk b/lib/fdt/exportsyms.uk
index 2fe4c32..d64d9dc 100644
--- a/lib/fdt/exportsyms.uk
+++ b/lib/fdt/exportsyms.uk
@@ -60,3 +60,4 @@ fdt_size_cells
 fdt_stringlist_contains
 fdt_resize
 fdt_overlay_apply
+fdt_getprop_u32_by_offset
diff --git a/lib/fdt/fdt_ro.c b/lib/fdt/fdt_ro.c
index 08de2cc..9077cff 100644
--- a/lib/fdt/fdt_ro.c
+++ b/lib/fdt/fdt_ro.c
@@ -438,6 +438,24 @@ int fdt_get_path(const void *fdt, int nodeoffset, char 
*buf, int buflen)
        return offset; /* error from fdt_next_node() */
 }
 
+int fdt_getprop_u32_by_offset(const void *fdt, int offset,
+               const char *name, uint32_t *out)
+{
+       const fdt32_t *prop;
+       int prop_len;
+
+       prop = fdt_getprop(fdt, offset, name, &prop_len);
+       if (!prop)
+               return prop_len;
+
+       if (prop_len >= sizeof(fdt32_t)) {
+               *out = fdt32_to_cpu(prop[0]);
+               return 0;
+       }
+
+       return -FDT_ERR_NOTFOUND;
+}
+
 int fdt_supernode_atdepth_offset(const void *fdt, int nodeoffset,
                                 int supernodedepth, int *nodedepth)
 {
diff --git a/lib/fdt/include/libfdt.h b/lib/fdt/include/libfdt.h
index 05dedbd..1383f42 100644
--- a/lib/fdt/include/libfdt.h
+++ b/lib/fdt/include/libfdt.h
@@ -768,6 +768,27 @@ const char *fdt_get_alias(const void *fdt, const char 
*name);
  */
 int fdt_get_path(const void *fdt, int nodeoffset, char *buf, int buflen);
 
+/**
+ * fdt_getprop_u32_by_offset - retrieve u32 of a given property
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to find
+ * @name: name of the property to find
+ * @out: pointer to u32 variable (will be overwritten) or NULL
+ *
+ * fdt_getprop_u32_by_offset() retrieves u32 to the value of the property
+ * named 'name' of the node at offset nodeoffset (this will be a
+ * pointer to within the device blob itself, not a copy of the value).
+ * If out is non-NULL, the u32 of the property value is returned.
+ *
+ * returns:
+ *     0, on success
+ *             out contains the u32 of a given property at nodeoffset.
+ *     -FDT_ERR_NOTFOUND, node does not have named property
+ *     -FDT_ERR_BADNCELLS,
+ */
+int fdt_getprop_u32_by_offset(const void *fdt, int nodeoffset,
+               const char *name, uint32_t *out);
+
 /**
  * fdt_supernode_atdepth_offset - find a specific ancestor of a node
  * @fdt: pointer to the device tree blob
-- 
2.17.1


_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

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