[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 10/11] qdev: Add do_info_qbus and friends.
From: |
Nathan Baum |
Subject: |
[Qemu-devel] [PATCH 10/11] qdev: Add do_info_qbus and friends. |
Date: |
Sat, 26 Dec 2009 21:19:21 +0000 |
Places information about a bus and the devices on into a QObject.
Signed-off-by: Nathan Baum <address@hidden>
---
hw/qdev.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 73 insertions(+), 0 deletions(-)
diff --git a/hw/qdev.c b/hw/qdev.c
index b6bd4ae..f5d68c6 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -30,6 +30,8 @@
#include "sysemu.h"
#include "monitor.h"
#include "qerror.h"
+#include "qint.h"
+#include "qbool.h"
static int qdev_hotplug = 0;
@@ -654,6 +656,77 @@ void qbus_free(BusState *bus)
}
}
+static void do_info_qbus(Monitor *mon, BusState *bus, QObject **ret_data);
+
+static void do_info_qdev_props(Monitor *mon, DeviceState *dev, Property
*props, const char *prefix,
+ QDict *qdict)
+{
+ char name[64];
+ char value[64];
+
+ if (!props)
+ return;
+ while (props->name) {
+ if (props->info->print) {
+ props->info->print(dev, props, value, sizeof(value));
+ snprintf(name, sizeof(name), "%s-%s", prefix, props->name);
+ qdict_put(qdict, name, qstring_from_str(value));
+ }
+ props++;
+ }
+}
+
+static void do_info_qdev(Monitor *mon, DeviceState *dev, QObject **ret_data)
+{
+ BusState *child;
+ QDict *qdict;
+ QList *children;
+
+ qdict = qdict_new();
+ qdict_put(qdict, "name", qstring_from_str(dev->info->name));
+ if (dev->id)
+ qdict_put(qdict, "id", qstring_from_str(dev->id));
+ qdict_put(qdict, "gpio-in", qint_from_int(dev->num_gpio_in));
+ qdict_put(qdict, "gpio-out", qint_from_int(dev->num_gpio_out));
+ do_info_qdev_props(mon, dev, dev->info->props, "dev", qdict);
+ do_info_qdev_props(mon, dev, dev->parent_bus->info->props, "bus", qdict);
+ children = qlist_new();
+ QLIST_FOREACH(child, &dev->child_bus, sibling) {
+ QObject *data = NULL;
+ do_info_qbus(mon, child, &data);
+ if (data)
+ qlist_append_obj(children, data);
+ }
+ if (!qlist_empty(children))
+ qdict_put(qdict, "children", children);
+ if (dev->parent_bus->info->info_dev) {
+ qdict_put_obj(qdict, "info", dev->parent_bus->info->info_dev(mon,
dev));
+ }
+ *ret_data = (QObject *) qdict;
+}
+
+static void do_info_qbus(Monitor *mon, BusState *bus, QObject **ret_data)
+{
+ struct DeviceState *dev;
+ QDict *qdict;
+ QList *children;
+
+ qdict = qdict_new();
+ qdict_put(qdict, "bus", qstring_from_str(bus->name));
+ qdict_put(qdict, "type", qstring_from_str(bus->info->name));
+ qdict_put(qdict, "allow_hotplug", qbool_from_int(bus->allow_hotplug));
+ children = qlist_new();
+ qdict_put(qdict, "children", children);
+ QLIST_FOREACH(dev, &bus->children, sibling) {
+ QObject *data = NULL;
+ do_info_qdev(mon, dev, &data);
+ if (data)
+ qlist_append_obj(children, data);
+ }
+
+ *ret_data = (QObject *) qdict;
+}
+
#define qdev_printf(fmt, ...) monitor_printf(mon, "%*s" fmt, indent, "", ##
__VA_ARGS__)
static void qbus_print(Monitor *mon, BusState *bus, int indent);
--
1.6.3.3
- [Qemu-devel] [PATCH 05/11] qdev: Add pcibus_dev_info to pci_bus_info, (continued)
- [Qemu-devel] [PATCH 05/11] qdev: Add pcibus_dev_info to pci_bus_info, Nathan Baum, 2009/12/26
- [Qemu-devel] [PATCH 06/11] qdev: sysbus_dev_info, Nathan Baum, 2009/12/26
- [Qemu-devel] [PATCH 03/11] qdev: Add isabuf_dev_info to ISA's BusInfo struct., Nathan Baum, 2009/12/26
- [Qemu-devel] [PATCH 07/11] qdev: Add sysbus_dev_info to system_bus_info, Nathan Baum, 2009/12/26
- [Qemu-devel] [PATCH 08/11] qdev: Add usb_bus_dev_info, Nathan Baum, 2009/12/26
- [Qemu-devel] [PATCH 04/11] qdev: pcibus_dev_info, Nathan Baum, 2009/12/26
- [Qemu-devel] [PATCH 10/11] qdev: Add do_info_qbus and friends.,
Nathan Baum <=
- [Qemu-devel] [PATCH 11/11] Change the monitor to use the new do_info_qtree., Nathan Baum, 2009/12/26
- [Qemu-devel] [PATCH 09/11] qdev: Add usb_bus_dev_info to usb_bus_info., Nathan Baum, 2009/12/26
- Re: [Qemu-devel] [RFC,PATCH 00/11] Half-convert info qtree to QMP., Luiz Capitulino, 2009/12/29
- [Qemu-devel] [RFC,PATCH 00/11] Half-convert info qtree to QMP., Nathan Baum, 2009/12/26