aboutsummaryrefslogtreecommitdiff
path: root/hw/qdev.c
diff options
context:
space:
mode:
authorMarkus Armbruster <armbru@redhat.com>2010-02-10 20:52:01 +0100
committerMarkus Armbruster <armbru@redhat.com>2010-03-16 17:45:35 +0100
commit8bc27249f0f62524887ea355a6604722edd276a9 (patch)
tree506d3fa3bfb6b9c7b54aa1bd4b88314d404781ad /hw/qdev.c
parentc7e4e8ceb379e15c8cb79427f10169b2ccaa8de6 (diff)
downloadqemu-8bc27249f0f62524887ea355a6604722edd276a9.zip
qemu-8bc27249f0f62524887ea355a6604722edd276a9.tar.gz
qemu-8bc27249f0f62524887ea355a6604722edd276a9.tar.bz2
monitor: convert do_device_add() to QObject
Diffstat (limited to 'hw/qdev.c')
-rw-r--r--hw/qdev.c42
1 files changed, 34 insertions, 8 deletions
diff --git a/hw/qdev.c b/hw/qdev.c
index a28e262..17a46a7 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -586,7 +586,9 @@ static BusState *qbus_find(const char *path)
dev = qbus_find_dev(bus, elem);
if (!dev) {
qerror_report(QERR_DEVICE_NOT_FOUND, elem);
- qbus_list_dev(bus);
+ if (!monitor_cur_is_qmp()) {
+ qbus_list_dev(bus);
+ }
return NULL;
}
@@ -605,7 +607,9 @@ static BusState *qbus_find(const char *path)
return QLIST_FIRST(&dev->child_bus);
default:
qerror_report(QERR_DEVICE_MULTIPLE_BUSSES, elem);
- qbus_list_bus(dev);
+ if (!monitor_cur_is_qmp()) {
+ qbus_list_bus(dev);
+ }
return NULL;
}
}
@@ -619,7 +623,9 @@ static BusState *qbus_find(const char *path)
bus = qbus_find_bus(dev, elem);
if (!bus) {
qerror_report(QERR_BUS_NOT_FOUND, elem);
- qbus_list_bus(dev);
+ if (!monitor_cur_is_qmp()) {
+ qbus_list_bus(dev);
+ }
return NULL;
}
}
@@ -762,16 +768,36 @@ void do_info_qdm(Monitor *mon)
}
}
-void do_device_add(Monitor *mon, const QDict *qdict)
+/**
+ * do_device_add(): Add a device
+ *
+ * Argument qdict contains
+ * - "driver": the name of the new device's driver
+ * - "bus": the device's parent bus (device tree path)
+ * - "id": the device's ID (must be unique)
+ * - device properties
+ *
+ * Example:
+ *
+ * { "driver": "usb-net", "id": "eth1", "netdev": "netdev1" }
+ */
+int do_device_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
{
QemuOpts *opts;
opts = qemu_opts_from_qdict(&qemu_device_opts, qdict);
- if (opts) {
- if (qdev_device_help(opts) || qdev_device_add(opts) == NULL) {
- qemu_opts_del(opts);
- }
+ if (!opts) {
+ return -1;
+ }
+ if (!monitor_cur_is_qmp() && qdev_device_help(opts)) {
+ qemu_opts_del(opts);
+ return 0;
}
+ if (!qdev_device_add(opts)) {
+ qemu_opts_del(opts);
+ return -1;
+ }
+ return 0;
}
void do_device_del(Monitor *mon, const QDict *qdict)