[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 50/50] monitor: convert do_device_add() to QObject
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PATCH 50/50] monitor: convert do_device_add() to QObject |
Date: |
Thu, 4 Mar 2010 16:57:11 +0100 |
Signed-off-by: Markus Armbruster <address@hidden>
---
hw/qdev.c | 42 ++++++++++++++++++++++++++++++++++--------
hw/qdev.h | 2 +-
qemu-monitor.hx | 3 ++-
3 files changed, 37 insertions(+), 10 deletions(-)
diff --git a/hw/qdev.c b/hw/qdev.c
index 241f204..35e7a88 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)
diff --git a/hw/qdev.h b/hw/qdev.h
index 0eb45b0..c86a59d 100644
--- a/hw/qdev.h
+++ b/hw/qdev.h
@@ -171,7 +171,7 @@ void qbus_free(BusState *bus);
void do_info_qtree(Monitor *mon);
void do_info_qdm(Monitor *mon);
-void do_device_add(Monitor *mon, const QDict *qdict);
+int do_device_add(Monitor *mon, const QDict *qdict, QObject **ret_data);
void do_device_del(Monitor *mon, const QDict *qdict);
/*** qdev-properties.c ***/
diff --git a/qemu-monitor.hx b/qemu-monitor.hx
index 45e5fd1..5308f36 100644
--- a/qemu-monitor.hx
+++ b/qemu-monitor.hx
@@ -573,7 +573,8 @@ ETEXI
.args_type = "device:O",
.params = "driver[,prop=value][,...]",
.help = "add device, like -device on the command line",
- .mhandler.cmd = do_device_add,
+ .user_print = monitor_user_noop,
+ .mhandler.cmd_new = do_device_add,
},
STEXI
--
1.6.6.1
- [Qemu-devel] Re: [PATCH 28/50] error: Let converted handlers print in human monitor, (continued)
[Qemu-devel] [PATCH 44/50] error: Convert do_device_add() to QError, Markus Armbruster, 2010/03/04
[Qemu-devel] [PATCH 37/50] qdev: Convert qbus_find() to QError, Markus Armbruster, 2010/03/04
[Qemu-devel] [PATCH 43/50] Revert "qdev: Use QError for 'device not found' error", Markus Armbruster, 2010/03/04
[Qemu-devel] [PATCH 33/50] qdev: Relax parsing of bus option, Markus Armbruster, 2010/03/04
[Qemu-devel] [PATCH 50/50] monitor: convert do_device_add() to QObject,
Markus Armbruster <=
[Qemu-devel] [PATCH 27/50] monitor: New monitor_cur_is_qmp(), Markus Armbruster, 2010/03/04
[Qemu-devel] [PATCH 30/50] error: New QERR_PROPERTY_NOT_FOUND, Markus Armbruster, 2010/03/04
[Qemu-devel] [PATCH 25/50] qdev: Hide "no_user" devices from users, Markus Armbruster, 2010/03/04
[Qemu-devel] [PATCH 36/50] error: New QERR_DEVICE_NO_BUS, Markus Armbruster, 2010/03/04
[Qemu-devel] [PATCH 17/50] error: Rename qemu_error_new() to qerror_report(), Markus Armbruster, 2010/03/04
[Qemu-devel] [PULL v2] Convert device_add to QObject / QError, Markus Armbruster, 2010/03/16