[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Minios-devel] [UNIKRAFT PATCHv2 7/8] lib/fdt: Introduce fdt_node_offset_by_compatible_list helper
- To: Jia He <justin.he@xxxxxxx>, minios-devel@xxxxxxxxxxxxxxxxxxxx, Simon Kuenzer <simon.kuenzer@xxxxxxxxx>, Sharan.Santhanam@xxxxxxxxx
- From: Julien Grall <julien.grall@xxxxxxx>
- Date: Mon, 11 Mar 2019 11:19:17 +0000
- Cc: Felipe Huici <felipe.huici@xxxxxxxxx>, Wei Chen <wei.chen@xxxxxxx>, Kaly Xin <Kaly.Xin@xxxxxxx>, Jianyong Wu <jianyong.wu@xxxxxxx>, Florian Schmidt <florian.schmidt@xxxxxxxxx>, yuri.volchkov@xxxxxxxxx
- Delivery-date: Mon, 11 Mar 2019 11:19:22 +0000
- List-id: Mini-os development list <minios-devel.lists.xenproject.org>
Hi,
On 11/03/2019 09:14, Jia He wrote:
From: Jianyong Wu <jianyong.wu@xxxxxxx>
For most of devices that will use the device tree will have one
or more compatible strings. This helper will avoid implement a
function to match compatible list everywhere.
Jira: ENTOS-860
What is it for?
Signed-off-by: Wei Chen <wei.chen@xxxxxxx>
Signed-off-by: Jianyong Wu <jianyong.wu@xxxxxxx>
Signed-off-by: Jia He <justin.he@xxxxxxx>
---
lib/fdt/exportsyms.uk | 1 +
lib/fdt/fdt_ro.c | 15 +++++++++++++++
lib/fdt/include/libfdt.h | 27 +++++++++++++++++++++++++++
3 files changed, 43 insertions(+)
diff --git a/lib/fdt/exportsyms.uk b/lib/fdt/exportsyms.uk
index bdef33c..a5ecf7c 100644
--- a/lib/fdt/exportsyms.uk
+++ b/lib/fdt/exportsyms.uk
@@ -64,3 +64,4 @@ fdt_getprop_u32_by_offset
fdt_interrupt_cells
fdt_get_address
fdt_get_interrupt
+fdt_node_offset_by_compatible_list
diff --git a/lib/fdt/fdt_ro.c b/lib/fdt/fdt_ro.c
index 9afede3..161928e 100644
--- a/lib/fdt/fdt_ro.c
+++ b/lib/fdt/fdt_ro.c
@@ -741,3 +741,18 @@ int fdt_node_offset_by_compatible(const void *fdt, int
startoffset,
return offset; /* error from fdt_next_node() */
}
+
+int fdt_node_offset_by_compatible_list(const void *fdt, int startoffset,
+ const char *compatibles[], int size)
As you pass an array of string, you can avoid passing the size by mandating the
array to finish with NULL.
+{
+ int idx, offset;
+
+ for (idx = 0; idx < size; idx++) {
+ offset = fdt_node_offset_by_compatible(fdt, startoffset,
+ compatibles[idx]);
+ if (offset >= 0)
+ return offset;
+ }
+
+ return FDT_ERR_NOTFOUND;
+}
diff --git a/lib/fdt/include/libfdt.h b/lib/fdt/include/libfdt.h
index d546b81..b45fe0b 100644
--- a/lib/fdt/include/libfdt.h
+++ b/lib/fdt/include/libfdt.h
@@ -991,6 +991,33 @@ int fdt_node_check_compatible(const void *fdt, int
nodeoffset,
int fdt_node_offset_by_compatible(const void *fdt, int startoffset,
const char *compatible);
+/**
+ * fdt_node_offset_by_compatible_list - find nodes with a given
+ * 'compatible' list value
+ * @fdt: pointer to the device tree blob
+ * @startoffset: only find nodes after this offset
+ * @compatibles: a list of 'compatible' string to match against
+ * @size: compatible list size
+ *
+ * fdt_node_offset_by_compatible_list() returns the offset of the
+ * first matched node after startoffset, which has a 'compatible'
+ * property which lists the given compatible string; or if
+ * startoffset is -1, the very first such node in the tree.
+ *
+ * returns:
+ * structure block offset of the located node (>= 0, >startoffset),
+ * on success
+ * -FDT_ERR_NOTFOUND, no node matching the criterion exists in the
+ * tree after startoffset
+ * -FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag
+ * -FDT_ERR_BADMAGIC,
+ * -FDT_ERR_BADVERSION,
+ * -FDT_ERR_BADSTATE,
+ * -FDT_ERR_BADSTRUCTURE, standard meanings
+ */
+int fdt_node_offset_by_compatible_list(const void *fdt, int startoffset,
+ const char *compatibles[], int size);
+
/**
* fdt_stringlist_contains - check a string list property for a string
* @strlist: Property containing a list of strings to check
Cheers,
--
Julien Grall
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|