[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 04/18] qdev: provide an interface to return canonica
From: |
Anthony Liguori |
Subject: |
[Qemu-devel] [PATCH 04/18] qdev: provide an interface to return canonical path from root |
Date: |
Wed, 30 Nov 2011 15:03:34 -0600 |
The canonical path is the path in the composition tree from the root to the
device. This is effectively the name of the device.
This is an incredibly unefficient implementation that will be optimized in
a future patch.
Signed-off-by: Anthony Liguori <address@hidden>
---
hw/qdev.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
hw/qdev.h | 9 +++++++++
2 files changed, 58 insertions(+), 0 deletions(-)
diff --git a/hw/qdev.c b/hw/qdev.c
index 2db2d8e..6b2b194 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -1155,3 +1155,52 @@ DeviceState *qdev_get_root(void)
return qdev_root;
}
+
+static gchar *qdev_get_path_in(DeviceState *parent, DeviceState *dev)
+{
+ GSList *i;
+
+ if (parent == dev) {
+ return g_strdup("");
+ }
+
+ for (i = parent->properties; i; i = i->next) {
+ DeviceProperty *prop = i->data;
+ gchar *subpath;
+
+ if (!strstart(prop->type, "child<", NULL)) {
+ continue;
+ }
+
+ /* Check to see if the device is one of parent's children */
+ if (prop->opaque == dev) {
+ return g_strdup(prop->name);
+ }
+
+ /* Check to see if the device is a child of our child */
+ subpath = qdev_get_path_in(prop->opaque, dev);
+ if (subpath) {
+ gchar *path;
+
+ path = g_strdup_printf("%s/%s", prop->name, subpath);
+ g_free(subpath);
+
+ return path;
+ }
+ }
+
+ return NULL;
+}
+
+gchar *qdev_get_canonical_path(DeviceState *dev)
+{
+ gchar *path, *newpath;
+
+ path = qdev_get_path_in(qdev_get_root(), dev);
+ g_assert(path != NULL);
+
+ newpath = g_strdup_printf("/%s", path);
+ g_free(path);
+
+ return newpath;
+}
diff --git a/hw/qdev.h b/hw/qdev.h
index 79d691f..82e6d95 100644
--- a/hw/qdev.h
+++ b/hw/qdev.h
@@ -462,4 +462,13 @@ void qdev_property_add_legacy(DeviceState *dev, Property
*prop, Error **errp);
*/
DeviceState *qdev_get_root(void);
+/**
+ * @qdev_get_canonical_path - returns the canonical path for a device. This
+ * is the path within the composition tree starting from the root.
+ *
+ * Returns:
+ * The canonical path in the composition tree.
+ */
+gchar *qdev_get_canonical_path(DeviceState *dev);
+
#endif
--
1.7.4.1
- [Qemu-devel] [PATCH 00/18] qom: dynamic properties and composition tree, Anthony Liguori, 2011/11/30
- [Qemu-devel] [PATCH 03/18] qom: introduce root device, Anthony Liguori, 2011/11/30
- [Qemu-devel] [PATCH 04/18] qdev: provide an interface to return canonical path from root,
Anthony Liguori <=
- [Qemu-devel] [PATCH 05/18] qdev: provide a path resolution, Anthony Liguori, 2011/11/30
- [Qemu-devel] [PATCH 01/18] qom: add new dynamic property infrastructure based on Visitors, Anthony Liguori, 2011/11/30
- [Qemu-devel] [PATCH 07/18] qom: add link properties, Anthony Liguori, 2011/11/30
- [Qemu-devel] [PATCH 06/18] qom: add child properties (composition), Anthony Liguori, 2011/11/30
- [Qemu-devel] [PATCH 02/18] qom: register legacy properties as new style properties, Anthony Liguori, 2011/11/30
- [Qemu-devel] [PATCH 08/18] qapi: allow a 'gen' key to suppress code generation, Anthony Liguori, 2011/11/30
- [Qemu-devel] [PATCH 10/18] qom: qom_{get,set} monitor commands, Anthony Liguori, 2011/11/30
- [Qemu-devel] [PATCH 11/18] qdev: add explicitly named devices to the root complex, Anthony Liguori, 2011/11/30
- [Qemu-devel] [PATCH 17/18] Add test tools, Anthony Liguori, 2011/11/30
- [Qemu-devel] [PATCH 16/18] Make qmp.py easier to use, Anthony Liguori, 2011/11/30