From patchwork Thu Dec 10 19:16:09 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Capitulino X-Patchwork-Id: 40887 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 3082AB6EFE for ; Fri, 11 Dec 2009 06:59:17 +1100 (EST) Received: from localhost ([127.0.0.1]:47599 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NIpAQ-0007T1-JB for incoming@patchwork.ozlabs.org; Thu, 10 Dec 2009 14:59:14 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NIoVe-0007L1-Vk for qemu-devel@nongnu.org; Thu, 10 Dec 2009 14:17:07 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NIoVZ-0007C0-M5 for qemu-devel@nongnu.org; Thu, 10 Dec 2009 14:17:06 -0500 Received: from [199.232.76.173] (port=56488 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NIoVZ-0007Ba-Bl for qemu-devel@nongnu.org; Thu, 10 Dec 2009 14:17:01 -0500 Received: from mx1.redhat.com ([209.132.183.28]:15555) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NIoVY-0001Fo-Ua for qemu-devel@nongnu.org; Thu, 10 Dec 2009 14:17:01 -0500 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id nBAJGxm8010494 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 10 Dec 2009 14:17:00 -0500 Received: from localhost (vpn-9-38.rdu.redhat.com [10.11.9.38]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id nBAJGw4Z017325; Thu, 10 Dec 2009 14:16:59 -0500 From: Luiz Capitulino To: qemu-devel@nongnu.org Date: Thu, 10 Dec 2009 17:16:09 -0200 Message-Id: <1260472570-13973-20-git-send-email-lcapitulino@redhat.com> In-Reply-To: <1260472570-13973-1-git-send-email-lcapitulino@redhat.com> References: <1260472570-13973-1-git-send-email-lcapitulino@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-detected-operating-system: by monty-python.gnu.org: Genre and OS details not recognized. Cc: aliguori@us.ibm.com Subject: [Qemu-devel] [PATCH 19/20] PCI: Convert pci_device_hot_add() to QObject X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org 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 --- 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..455fedd 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 a 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 0657b2d..c788c73 100644 --- a/qemu-monitor.hx +++ b/qemu-monitor.hx @@ -810,7 +810,8 @@ ETEXI .args_type = "pci_addr:s,type:s,opts:s?", .params = "auto|[[:]:] 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,