qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Gerd Hoffmann <kraxel@redhat.com>
To: qemu-devel@nongnu.org
Cc: Gerd Hoffmann <kraxel@redhat.com>
Subject: [Qemu-devel] [PULL 26/26] usb: tag standalone ehci as hotpluggable
Date: Tue, 23 Sep 2014 14:13:37 +0200	[thread overview]
Message-ID: <1411474417-9704-27-git-send-email-kraxel@redhat.com> (raw)
In-Reply-To: <1411474417-9704-1-git-send-email-kraxel@redhat.com>

Add a flag to EHCIPCIInfo saying whenever the controller supports
companions or not.  Make sure we only allow registering companions for
ehci versions supporting that.  Enable pci hotplug for the ehci
variants not supporting companions.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/usb/hcd-ehci-pci.c | 12 +++++++++++-
 hw/usb/hcd-ehci.c     |  8 ++++++--
 hw/usb/hcd-ehci.h     |  1 +
 3 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/hw/usb/hcd-ehci-pci.c b/hw/usb/hcd-ehci-pci.c
index 289ca3b..490f2b6 100644
--- a/hw/usb/hcd-ehci-pci.c
+++ b/hw/usb/hcd-ehci-pci.c
@@ -23,6 +23,7 @@ typedef struct EHCIPCIInfo {
     uint16_t vendor_id;
     uint16_t device_id;
     uint8_t  revision;
+    bool companion;
 } EHCIPCIInfo;
 
 static int usb_ehci_pci_initfn(PCIDevice *dev)
@@ -71,6 +72,7 @@ static int usb_ehci_pci_initfn(PCIDevice *dev)
 
 static void usb_ehci_pci_init(Object *obj)
 {
+    DeviceClass *dc = OBJECT_GET_CLASS(DeviceClass, obj, TYPE_DEVICE);
     EHCIPCIState *i = PCI_EHCI(obj);
     EHCIState *s = &i->ehci;
 
@@ -81,6 +83,10 @@ static void usb_ehci_pci_init(Object *obj)
     s->portscbase = 0x44;
     s->portnr = NB_PORTS;
 
+    if (!dc->hotpluggable) {
+        s->companion_enable = true;
+    }
+
     usb_ehci_init(s, DEVICE(obj));
 }
 
@@ -137,7 +143,6 @@ static void ehci_class_init(ObjectClass *klass, void *data)
     k->exit = usb_ehci_pci_exit;
     k->class_id = PCI_CLASS_SERIAL_USB;
     k->config_write = usb_ehci_pci_write_config;
-    dc->hotpluggable = false;
     dc->vmsd = &vmstate_ehci_pci;
     dc->props = ehci_pci_properties;
 }
@@ -161,6 +166,9 @@ static void ehci_data_class_init(ObjectClass *klass, void *data)
     k->device_id = i->device_id;
     k->revision = i->revision;
     set_bit(DEVICE_CATEGORY_USB, dc->categories);
+    if (i->companion) {
+        dc->hotpluggable = false;
+    }
 }
 
 static struct EHCIPCIInfo ehci_pci_info[] = {
@@ -174,11 +182,13 @@ static struct EHCIPCIInfo ehci_pci_info[] = {
         .vendor_id = PCI_VENDOR_ID_INTEL,
         .device_id = PCI_DEVICE_ID_INTEL_82801I_EHCI1,
         .revision  = 0x03,
+        .companion = true,
     },{
         .name      = "ich9-usb-ehci2", /* 00:1a.7 */
         .vendor_id = PCI_VENDOR_ID_INTEL,
         .device_id = PCI_DEVICE_ID_INTEL_82801I_EHCI2,
         .revision  = 0x03,
+        .companion = true,
     }
 };
 
diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c
index bacb7ce..1cc0fc1 100644
--- a/hw/usb/hcd-ehci.c
+++ b/hw/usb/hcd-ehci.c
@@ -2347,10 +2347,13 @@ static USBPortOps ehci_port_ops = {
     .complete = ehci_async_complete_packet,
 };
 
-static USBBusOps ehci_bus_ops = {
+static USBBusOps ehci_bus_ops_companion = {
     .register_companion = ehci_register_companion,
     .wakeup_endpoint = ehci_wakeup_endpoint,
 };
+static USBBusOps ehci_bus_ops_standalone = {
+    .wakeup_endpoint = ehci_wakeup_endpoint,
+};
 
 static void usb_ehci_pre_save(void *opaque)
 {
@@ -2456,7 +2459,8 @@ void usb_ehci_realize(EHCIState *s, DeviceState *dev, Error **errp)
         return;
     }
 
-    usb_bus_new(&s->bus, sizeof(s->bus), &ehci_bus_ops, dev);
+    usb_bus_new(&s->bus, sizeof(s->bus), s->companion_enable ?
+                &ehci_bus_ops_companion : &ehci_bus_ops_standalone, dev);
     for (i = 0; i < s->portnr; i++) {
         usb_register_port(&s->bus, &s->ports[i], s, i, &ehci_port_ops,
                           USB_SPEED_MASK_HIGH);
diff --git a/hw/usb/hcd-ehci.h b/hw/usb/hcd-ehci.h
index 4858b7e..2bc259c 100644
--- a/hw/usb/hcd-ehci.h
+++ b/hw/usb/hcd-ehci.h
@@ -262,6 +262,7 @@ struct EHCIState {
     MemoryRegion mem_opreg;
     MemoryRegion mem_ports;
     int companion_count;
+    bool companion_enable;
     uint16_t capsbase;
     uint16_t opregbase;
     uint16_t portscbase;
-- 
1.8.3.1

  parent reply	other threads:[~2014-09-23 12:31 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-23 12:13 [Qemu-devel] [PULL 00/26] usb patch queue Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 01/26] usb-storage: Fix how legacy init handles option ID clash Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 02/26] usb-storage: fix possible memory leak and missing error message Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 03/26] ohci: Convert fprint/DPRINTF/print to traces Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 04/26] usb-bus: convert USBDeviceClass init to realize Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 05/26] usb-net: convert " Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 06/26] libusb: " Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 07/26] libusb: using error_report instead of fprintf Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 08/26] usb-hub: convert init to realize Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 09/26] dev-storage: " Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 10/26] dev-storage: usring error_report instead of fprintf/printf Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 11/26] dev-uas: convert init to realize Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 12/26] dev-uas: using error_report instead of fprintf Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 13/26] dev-bluetooth: convert init to realize Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 14/26] dev-serial: " Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 15/26] usb-ccid: " Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 16/26] dev-hid: " Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 17/26] dev-wacom: " Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 18/26] usb-audio: " Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 19/26] usb-redir: " Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 20/26] usb-mtp: " Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 21/26] usb-bus: remove "init" from USBDeviceClass struct Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 22/26] usb-bus: introduce a wrapper function to check speed Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 23/26] usb-serial: only check speed once at realize time Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 24/26] usb: tag xhci as hotpluggable Gerd Hoffmann
2014-09-23 12:13 ` [Qemu-devel] [PULL 25/26] usb: tag standalone uhci " Gerd Hoffmann
2014-09-23 12:13 ` Gerd Hoffmann [this message]
2014-09-23 15:56 ` [Qemu-devel] [PULL 00/26] usb patch queue Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1411474417-9704-27-git-send-email-kraxel@redhat.com \
    --to=kraxel@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).