[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 16/17] PCI: Convert pci_device_hot_add() to QObject
From: |
Luiz Capitulino |
Subject: |
[Qemu-devel] [PATCH 16/17] PCI: Convert pci_device_hot_add() to QObject |
Date: |
Fri, 4 Dec 2009 15:11:34 -0200 |
Return a QDict with information about the just added device.
This commit should not change user output.
Please, note that this patch does not do error handling
conversion. In error conditions the handler still calls
monitor_printf().
Signed-off-by: Luiz Capitulino <address@hidden>
---
hw/pci-hotplug.c | 40 ++++++++++++++++++++++++++++++++++++----
qemu-monitor.hx | 3 ++-
sysemu.h | 3 ++-
3 files changed, 40 insertions(+), 6 deletions(-)
diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c
index 081d6d1..3ef124a 100644
--- a/hw/pci-hotplug.c
+++ b/hw/pci-hotplug.c
@@ -33,6 +33,7 @@
#include "scsi.h"
#include "virtio-blk.h"
#include "qemu-config.h"
+#include "qemu-objects.h"
#if defined(TARGET_I386)
static PCIDevice *qemu_pci_hot_add_nic(Monitor *mon,
@@ -212,7 +213,36 @@ static PCIDevice *qemu_pci_hot_add_storage(Monitor *mon,
return dev;
}
-void pci_device_hot_add(Monitor *mon, const QDict *qdict)
+void pci_device_hot_add_print(Monitor *mon, const QObject *data)
+{
+ QDict *qdict;
+
+ assert(qobject_type(data) == QTYPE_QDICT);
+ qdict = qobject_to_qdict(data);
+
+ monitor_printf(mon, "OK domain %d, bus %d, slot %d, function %d\n",
+ (int) qdict_get_int(qdict, "domain"),
+ (int) qdict_get_int(qdict, "bus"),
+ (int) qdict_get_int(qdict, "slot"),
+ (int) qdict_get_int(qdict, "function"));
+
+}
+
+/**
+ * pci_device_hot_add(): Hot add PCI device
+ *
+ * Return a QDict with the following device information:
+ *
+ * - "domain": domain number
+ * - "bus": bus number
+ * - "slot": slot number
+ * - "function": function number
+ *
+ * Example:
+ *
+ * { "domain": 0, "bus": 0, "slot": 5, "function": 0 }
+ */
+void pci_device_hot_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
{
PCIDevice *dev = NULL;
const char *pci_addr = qdict_get_str(qdict, "pci_addr");
@@ -239,9 +269,11 @@ void pci_device_hot_add(Monitor *mon, const QDict *qdict)
monitor_printf(mon, "invalid type: %s\n", type);
if (dev) {
- monitor_printf(mon, "OK domain %d, bus %d, slot %d, function %d\n",
- 0, pci_bus_num(dev->bus), PCI_SLOT(dev->devfn),
- PCI_FUNC(dev->devfn));
+ *ret_data =
+ qobject_from_jsonf("{ 'domain': 0, 'bus': %d, 'slot': %d, "
+ "'function': %d }", pci_bus_num(dev->bus),
+ PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn));
+ assert(*ret_data != NULL);
} else
monitor_printf(mon, "failed to add %s\n", opts);
}
diff --git a/qemu-monitor.hx b/qemu-monitor.hx
index 62e395b..b50a2da 100644
--- a/qemu-monitor.hx
+++ b/qemu-monitor.hx
@@ -809,7 +809,8 @@ ETEXI
.args_type = "pci_addr:s,type:s,opts:s?",
.params = "auto|[[<domain>:]<bus>:]<slot> nic|storage
[[vlan=n][,macaddr=addr][,model=type]] [file=file][,if=type][,bus=nr]...",
.help = "hot-add PCI device",
- .mhandler.cmd = pci_device_hot_add,
+ .user_print = pci_device_hot_add_print,
+ .mhandler.cmd_new = pci_device_hot_add,
},
#endif
diff --git a/sysemu.h b/sysemu.h
index efed771..9d80bb2 100644
--- a/sysemu.h
+++ b/sysemu.h
@@ -212,7 +212,8 @@ extern DriveInfo *drive_init(QemuOpts *arg, void *machine,
int *fatal_error);
DriveInfo *add_init_drive(const char *opts);
/* pci-hotplug */
-void pci_device_hot_add(Monitor *mon, const QDict *qdict);
+void pci_device_hot_add_print(Monitor *mon, const QObject *data);
+void pci_device_hot_add(Monitor *mon, const QDict *qdict, QObject **ret_data);
void drive_hot_add(Monitor *mon, const QDict *qdict);
void pci_device_hot_remove(Monitor *mon, const char *pci_addr);
void do_pci_device_hot_remove(Monitor *mon, const QDict *qdict,
--
1.6.6.rc1.5.ge21a85
- Re: [Qemu-devel] [PATCH 07/17] monitor: Convert do_info_kvm() to QObject, (continued)
- [Qemu-devel] [PATCH 08/17] monitor: Convert do_info_name() to QObject, Luiz Capitulino, 2009/12/04
- [Qemu-devel] [PATCH 09/17] monitor: Convert do_info_hpet() to QObject, Luiz Capitulino, 2009/12/04
- [Qemu-devel] [PATCH 10/17] monitor: Convert do_info_uuid() to QObject, Luiz Capitulino, 2009/12/04
- [Qemu-devel] [PATCH 11/17] monitor: Convert do_info_mice() to QObject, Luiz Capitulino, 2009/12/04
- [Qemu-devel] [PATCH 12/17] migration: Convert do_info_migrate() to QObject, Luiz Capitulino, 2009/12/04
- [Qemu-devel] [PATCH 13/17] block: Convert bdrv_info() to QObject, Luiz Capitulino, 2009/12/04
- [Qemu-devel] [PATCH 14/17] block: Convert bdrv_info_stats() to QObject, Luiz Capitulino, 2009/12/04
- [Qemu-devel] [PATCH 15/17] char: Convert qemu_chr_info() to QObject, Luiz Capitulino, 2009/12/04
- [Qemu-devel] [PATCH 16/17] PCI: Convert pci_device_hot_add() to QObject,
Luiz Capitulino <=
- [Qemu-devel] [PATCH 17/17] VNC: Convert do_info_vnc() to QObject, Luiz Capitulino, 2009/12/04