[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RESEND RFC 3/6] device_tree: introduce qemu_fdt_node_path
From: |
Eric Auger |
Subject: |
[Qemu-devel] [RESEND RFC 3/6] device_tree: introduce qemu_fdt_node_path |
Date: |
Thu, 19 Nov 2015 15:22:05 +0000 |
This new helper routine returns the node path of a device
referred to by its name and compat string.
Signed-off-by: Eric Auger <address@hidden>
---
device_tree.c | 40 ++++++++++++++++++++++++++++++++++++++++
include/sysemu/device_tree.h | 3 +++
2 files changed, 43 insertions(+)
diff --git a/device_tree.c b/device_tree.c
index 58a5329..f184e3c 100644
--- a/device_tree.c
+++ b/device_tree.c
@@ -171,6 +171,46 @@ static int findnode_nofail(void *fdt, const char
*node_path)
return offset;
}
+/**
+ * qemu_fdt_node_path
+ *
+ * return the node path of a device, referred to by its node name
+ * and its compat string
+ * fdt: pointer to the dt blob
+ * name: name of the device
+ * compat: compatibility string of the device
+ *
+ * returns the node path
+ */
+int qemu_fdt_node_path(void *fdt, const char *name, char *compat,
+ char **node_path)
+{
+ int offset = 0, len;
+ const char *iter_name;
+ char path[256];
+ int ret;
+
+ *node_path = NULL;
+ while (1) {
+ offset = fdt_node_offset_by_compatible(fdt, offset, compat);
+ if (offset == -FDT_ERR_NOTFOUND) {
+ break;
+ }
+ iter_name = fdt_get_name(fdt, offset, &len);
+ if (!strncmp(iter_name, name, len)) {
+ goto found;
+ }
+ }
+ return offset;
+
+found:
+ ret = fdt_get_path(fdt, offset, path, 256);
+ if (!ret) {
+ *node_path = g_strdup(path);
+ }
+ return ret;
+}
+
int qemu_fdt_setprop(void *fdt, const char *node_path,
const char *property, const void *val, int size)
{
diff --git a/include/sysemu/device_tree.h b/include/sysemu/device_tree.h
index 307e53d..f9e6e6e 100644
--- a/include/sysemu/device_tree.h
+++ b/include/sysemu/device_tree.h
@@ -18,6 +18,9 @@ void *create_device_tree(int *sizep);
void *load_device_tree(const char *filename_path, int *sizep);
void *load_device_tree_from_sysfs(void);
+int qemu_fdt_node_path(void *fdt, const char *name, char *compat,
+ char **node_path);
+
int qemu_fdt_setprop(void *fdt, const char *node_path,
const char *property, const void *val, int size);
int qemu_fdt_setprop_cell(void *fdt, const char *node_path,
--
1.8.3.2
- [Qemu-devel] [RESEND RFC 0/6] AMD XGBE KVM platform passthrough, Eric Auger, 2015/11/19
- [Qemu-devel] [RESEND RFC 2/6] device_tree: introduce load_device_tree_from_sysfs, Eric Auger, 2015/11/19
- [Qemu-devel] [RESEND RFC 3/6] device_tree: introduce qemu_fdt_node_path,
Eric Auger <=
- [Qemu-devel] [RESEND RFC 4/6] device_tree: introduce qemu_fdt_getprop_optional, Eric Auger, 2015/11/19
- [Qemu-devel] [RESEND RFC 5/6] hw/arm/sysbus-fdt: helpers for clock node generation, Eric Auger, 2015/11/19
- [Qemu-devel] [RESEND RFC 1/6] hw/vfio/platform: amd-xgbe device, Eric Auger, 2015/11/19
- [Qemu-devel] [RESEND RFC 6/6] hw/arm/sysbus-fdt: enable amd-xgbe dynamic instantiation, Eric Auger, 2015/11/19