From patchwork Wed Sep 24 11:48:17 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Mammedov X-Patchwork-Id: 392910 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 7B7D7140080 for ; Wed, 24 Sep 2014 22:04:59 +1000 (EST) Received: from localhost ([::1]:59250 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XWlJZ-0005TG-CV for incoming@patchwork.ozlabs.org; Wed, 24 Sep 2014 08:04:57 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45559) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XWl62-000794-Qt for qemu-devel@nongnu.org; Wed, 24 Sep 2014 07:51:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XWl5t-0006fP-Nc for qemu-devel@nongnu.org; Wed, 24 Sep 2014 07:50:58 -0400 Received: from mx1.redhat.com ([209.132.183.28]:28329) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XWl5t-0006el-EY for qemu-devel@nongnu.org; Wed, 24 Sep 2014 07:50:49 -0400 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s8OBnc4U020897 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Wed, 24 Sep 2014 07:49:38 -0400 Received: from dell-pet610-01.lab.eng.brq.redhat.com (dell-pet610-01.lab.eng.brq.redhat.com [10.34.42.20]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s8OBmO1b024637; Wed, 24 Sep 2014 07:49:36 -0400 From: Igor Mammedov To: qemu-devel@nongnu.org Date: Wed, 24 Sep 2014 11:48:17 +0000 Message-Id: <1411559299-19042-29-git-send-email-imammedo@redhat.com> In-Reply-To: <1411559299-19042-1-git-send-email-imammedo@redhat.com> References: <1411559299-19042-1-git-send-email-imammedo@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 209.132.183.28 Cc: dmitry@daynix.com, borntraeger@de.ibm.com, mst@redhat.com, agraf@suse.de, cornelia.huck@de.ibm.com, kraxel@redhat.com, amit.shah@redhat.com, pbonzini@redhat.com, rth@twiddle.net Subject: [Qemu-devel] [PATCH 28/30] usb: convert to hotplug handler API X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Signed-off-by: Igor Mammedov --- hw/usb/bus.c | 3 +-- hw/usb/dev-smartcard-reader.c | 8 +++++++- hw/usb/hcd-ehci-pci.c | 6 ++++++ hw/usb/hcd-ehci-sysbus.c | 6 ++++++ hw/usb/hcd-ohci.c | 12 ++++++++++++ hw/usb/hcd-uhci.c | 6 ++++++ hw/usb/hcd-xhci.c | 6 ++++++ 7 files changed, 44 insertions(+), 3 deletions(-) diff --git a/hw/usb/bus.c b/hw/usb/bus.c index da1eba9..16c2bb3 100644 --- a/hw/usb/bus.c +++ b/hw/usb/bus.c @@ -81,7 +81,7 @@ void usb_bus_new(USBBus *bus, size_t bus_size, qbus_create_inplace(bus, bus_size, TYPE_USB_BUS, host, NULL); bus->ops = ops; bus->busnr = next_usb_bus++; - bus->qbus.allow_hotplug = 1; /* Yes, we can */ + qbus_set_hotplug_handler(BUS(bus), host, &error_abort); QTAILQ_INIT(&bus->free); QTAILQ_INIT(&bus->used); QTAILQ_INSERT_TAIL(&busses, bus, next); @@ -701,7 +701,6 @@ static void usb_device_class_init(ObjectClass *klass, void *data) { DeviceClass *k = DEVICE_CLASS(klass); k->bus_type = TYPE_USB_BUS; - k->unplug = qdev_simple_unplug_cb; k->realize = usb_qdev_realize; k->unrealize = usb_qdev_unrealize; k->props = usb_props; diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c index d37ed02..91f7d87 100644 --- a/hw/usb/dev-smartcard-reader.c +++ b/hw/usb/dev-smartcard-reader.c @@ -1313,7 +1313,7 @@ static void ccid_realize(USBDevice *dev, Error **errp) qbus_create_inplace(&s->bus, sizeof(s->bus), TYPE_CCID_BUS, DEVICE(dev), NULL); s->intr = usb_ep_get(dev, USB_TOKEN_IN, CCID_INT_IN_EP); - s->bus.qbus.allow_hotplug = 1; + qbus_set_hotplug_handler(BUS(&s->bus), DEVICE(dev), &error_abort); s->card = NULL; s->migration_state = MIGRATION_NONE; s->migration_target_ip = 0; @@ -1439,6 +1439,7 @@ static void ccid_class_initfn(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); USBDeviceClass *uc = USB_DEVICE_CLASS(klass); + HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(klass); uc->realize = ccid_realize; uc->product_desc = "QEMU USB CCID"; @@ -1451,6 +1452,7 @@ static void ccid_class_initfn(ObjectClass *klass, void *data) dc->vmsd = &ccid_vmstate; dc->props = ccid_properties; set_bit(DEVICE_CATEGORY_INPUT, dc->categories); + hc->unplug = qdev_simple_device_unplug_cb; } static const TypeInfo ccid_info = { @@ -1458,6 +1460,10 @@ static const TypeInfo ccid_info = { .parent = TYPE_USB_DEVICE, .instance_size = sizeof(USBCCIDState), .class_init = ccid_class_initfn, + .interfaces = (InterfaceInfo[]) { + { TYPE_HOTPLUG_HANDLER }, + { } + } }; static void ccid_card_class_init(ObjectClass *klass, void *data) diff --git a/hw/usb/hcd-ehci-pci.c b/hw/usb/hcd-ehci-pci.c index 490f2b6..b7990da 100644 --- a/hw/usb/hcd-ehci-pci.c +++ b/hw/usb/hcd-ehci-pci.c @@ -138,6 +138,7 @@ static void ehci_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); + HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(klass); k->init = usb_ehci_pci_initfn; k->exit = usb_ehci_pci_exit; @@ -145,6 +146,7 @@ static void ehci_class_init(ObjectClass *klass, void *data) k->config_write = usb_ehci_pci_write_config; dc->vmsd = &vmstate_ehci_pci; dc->props = ehci_pci_properties; + hc->unplug = qdev_simple_device_unplug_cb; } static const TypeInfo ehci_pci_type_info = { @@ -154,6 +156,10 @@ static const TypeInfo ehci_pci_type_info = { .instance_init = usb_ehci_pci_init, .abstract = true, .class_init = ehci_class_init, + .interfaces = (InterfaceInfo[]) { + { TYPE_HOTPLUG_HANDLER }, + { } + } }; static void ehci_data_class_init(ObjectClass *klass, void *data) diff --git a/hw/usb/hcd-ehci-sysbus.c b/hw/usb/hcd-ehci-sysbus.c index 19ed2c2..25eb885 100644 --- a/hw/usb/hcd-ehci-sysbus.c +++ b/hw/usb/hcd-ehci-sysbus.c @@ -63,6 +63,7 @@ static void ehci_sysbus_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); SysBusEHCIClass *sec = SYS_BUS_EHCI_CLASS(klass); + HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(klass); sec->portscbase = 0x44; sec->portnr = NB_PORTS; @@ -71,6 +72,7 @@ static void ehci_sysbus_class_init(ObjectClass *klass, void *data) dc->vmsd = &vmstate_ehci_sysbus; dc->props = ehci_sysbus_properties; set_bit(DEVICE_CATEGORY_USB, dc->categories); + hc->unplug = qdev_simple_device_unplug_cb; } static const TypeInfo ehci_type_info = { @@ -81,6 +83,10 @@ static const TypeInfo ehci_type_info = { .abstract = true, .class_init = ehci_sysbus_class_init, .class_size = sizeof(SysBusEHCIClass), + .interfaces = (InterfaceInfo[]) { + { TYPE_HOTPLUG_HANDLER }, + { } + } }; static void ehci_xlnx_class_init(ObjectClass *oc, void *data) diff --git a/hw/usb/hcd-ohci.c b/hw/usb/hcd-ohci.c index 7ea871d..5b2552f 100644 --- a/hw/usb/hcd-ohci.c +++ b/hw/usb/hcd-ohci.c @@ -2083,6 +2083,7 @@ static void ohci_pci_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); + HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(klass); k->init = usb_ohci_initfn_pci; k->exit = usb_ohci_exit; @@ -2094,6 +2095,7 @@ static void ohci_pci_class_init(ObjectClass *klass, void *data) dc->props = ohci_pci_properties; dc->hotpluggable = false; dc->vmsd = &vmstate_ohci; + hc->unplug = qdev_simple_device_unplug_cb; } static const TypeInfo ohci_pci_info = { @@ -2101,6 +2103,10 @@ static const TypeInfo ohci_pci_info = { .parent = TYPE_PCI_DEVICE, .instance_size = sizeof(OHCIPCIState), .class_init = ohci_pci_class_init, + .interfaces = (InterfaceInfo[]) { + { TYPE_HOTPLUG_HANDLER }, + { } + } }; static Property ohci_sysbus_properties[] = { @@ -2112,11 +2118,13 @@ static Property ohci_sysbus_properties[] = { static void ohci_sysbus_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); + HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(klass); dc->realize = ohci_realize_pxa; set_bit(DEVICE_CATEGORY_USB, dc->categories); dc->desc = "OHCI USB Controller"; dc->props = ohci_sysbus_properties; + hc->unplug = qdev_simple_device_unplug_cb; } static const TypeInfo ohci_sysbus_info = { @@ -2124,6 +2132,10 @@ static const TypeInfo ohci_sysbus_info = { .parent = TYPE_SYS_BUS_DEVICE, .instance_size = sizeof(OHCISysBusState), .class_init = ohci_sysbus_class_init, + .interfaces = (InterfaceInfo[]) { + { TYPE_HOTPLUG_HANDLER }, + { } + } }; static void ohci_register_types(void) diff --git a/hw/usb/hcd-uhci.c b/hw/usb/hcd-uhci.c index 5b88f30..76f6deb 100644 --- a/hw/usb/hcd-uhci.c +++ b/hw/usb/hcd-uhci.c @@ -1298,6 +1298,7 @@ static void uhci_class_init(ObjectClass *klass, void *data) PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); UHCIPCIDeviceClass *u = container_of(k, UHCIPCIDeviceClass, parent_class); UHCIInfo *info = data; + HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(klass); k->init = info->initfn ? info->initfn : usb_uhci_common_initfn; k->exit = info->unplug ? usb_uhci_exit : NULL; @@ -1315,6 +1316,7 @@ static void uhci_class_init(ObjectClass *klass, void *data) } set_bit(DEVICE_CATEGORY_USB, dc->categories); u->info = *info; + hc->unplug = qdev_simple_device_unplug_cb; } static UHCIInfo uhci_info[] = { @@ -1392,6 +1394,10 @@ static void uhci_register_types(void) .instance_size = sizeof(UHCIState), .class_size = sizeof(UHCIPCIDeviceClass), .class_init = uhci_class_init, + .interfaces = (InterfaceInfo[]) { + { TYPE_HOTPLUG_HANDLER }, + { } + } }; int i; diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c index c556367..5ef74ee 100644 --- a/hw/usb/hcd-xhci.c +++ b/hw/usb/hcd-xhci.c @@ -3870,6 +3870,7 @@ static void xhci_class_init(ObjectClass *klass, void *data) { PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); DeviceClass *dc = DEVICE_CLASS(klass); + HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(klass); dc->vmsd = &vmstate_xhci; dc->props = xhci_properties; @@ -3882,6 +3883,7 @@ static void xhci_class_init(ObjectClass *klass, void *data) k->class_id = PCI_CLASS_SERIAL_USB; k->revision = 0x03; k->is_express = 1; + hc->unplug = qdev_simple_device_unplug_cb; } static const TypeInfo xhci_info = { @@ -3889,6 +3891,10 @@ static const TypeInfo xhci_info = { .parent = TYPE_PCI_DEVICE, .instance_size = sizeof(XHCIState), .class_init = xhci_class_init, + .interfaces = (InterfaceInfo[]) { + { TYPE_HOTPLUG_HANDLER }, + { } + } }; static void xhci_register_types(void)