qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 24/25] xhci: remote wakeup support


From: Gerd Hoffmann
Subject: [Qemu-devel] [PATCH 24/25] xhci: remote wakeup support
Date: Mon, 23 Jan 2012 15:55:10 +0100

Signed-off-by: Gerd Hoffmann <address@hidden>
---
 hw/usb-xhci.c |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/hw/usb-xhci.c b/hw/usb-xhci.c
index cd88c76..a42bb96 100644
--- a/hw/usb-xhci.c
+++ b/hw/usb-xhci.c
@@ -2696,6 +2696,26 @@ static void xhci_detach(USBPort *usbport)
     xhci_update_port(xhci, port, 1);
 }
 
+static void xhci_wakeup(USBPort *usbport)
+{
+    XHCIState *xhci = usbport->opaque;
+    XHCIPort *port = &xhci->ports[usbport->index];
+    int nr = port->port.index + 1;
+    XHCIEvent ev = { ER_PORT_STATUS_CHANGE, CC_SUCCESS, nr << 24};
+    uint32_t pls;
+
+    pls = (port->portsc >> PORTSC_PLS_SHIFT) & PORTSC_PLS_MASK;
+    if (pls != 3) {
+        return;
+    }
+    port->portsc |= 0xf << PORTSC_PLS_SHIFT;
+    if (port->portsc & PORTSC_PLC) {
+        return;
+    }
+    port->portsc |= PORTSC_PLC;
+    xhci_event(xhci, &ev);
+}
+
 static void xhci_complete(USBPort *port, USBPacket *packet)
 {
     XHCITransfer *xfer = container_of(packet, XHCITransfer, packet);
@@ -2712,6 +2732,7 @@ static void xhci_child_detach(USBPort *port, USBDevice 
*child)
 static USBPortOps xhci_port_ops = {
     .attach   = xhci_attach,
     .detach   = xhci_detach,
+    .wakeup   = xhci_wakeup,
     .complete = xhci_complete,
     .child_detach = xhci_child_detach,
 };
-- 
1.7.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]