peterdelevoryas / rpms / qemu

Forked from rpms/qemu 2 years ago
Clone

Blame 0368-uhci-Don-t-queue-up-packets-after-one-with-the-SPD-f.patch

93b7e3
From 41f5d67c0649d74b505edc2a874c91148355eb25 Mon Sep 17 00:00:00 2001
93b7e3
From: Hans de Goede <hdegoede@redhat.com>
93b7e3
Date: Wed, 12 Sep 2012 13:30:51 +0200
93b7e3
Subject: [PATCH 368/369] uhci: Don't queue up packets after one with the SPD
93b7e3
 flag set
93b7e3
93b7e3
Don't queue up packets after a packet with the SPD (short packet detect)
93b7e3
flag set. Since we won't know if the packet will actually be short until it
93b7e3
has completed, and if it is short we should stop the queue.
93b7e3
93b7e3
This fixes a miniature photoframe emulating a USB cdrom with the windows
93b7e3
software for it not working.
93b7e3
93b7e3
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
93b7e3
---
93b7e3
 hw/usb/hcd-uhci.c | 5 ++++-
93b7e3
 1 file changed, 4 insertions(+), 1 deletion(-)
93b7e3
93b7e3
diff --git a/hw/usb/hcd-uhci.c b/hw/usb/hcd-uhci.c
93b7e3
index c7c8786..cdc8bc3 100644
93b7e3
--- a/hw/usb/hcd-uhci.c
93b7e3
+++ b/hw/usb/hcd-uhci.c
93b7e3
@@ -1000,6 +1000,9 @@ static void uhci_fill_queue(UHCIState *s, UHCI_TD *td)
93b7e3
         }
93b7e3
         assert(ret == TD_RESULT_ASYNC_START);
93b7e3
         assert(int_mask == 0);
93b7e3
+        if (ptd.ctrl & TD_CTRL_SPD) {
93b7e3
+            break;
93b7e3
+        }
93b7e3
         plink = ptd.link;
93b7e3
     }
93b7e3
 }
93b7e3
@@ -1097,7 +1100,7 @@ static void uhci_process_frame(UHCIState *s)
93b7e3
 
93b7e3
         case TD_RESULT_ASYNC_START:
93b7e3
             trace_usb_uhci_td_async(curr_qh & ~0xf, link & ~0xf);
93b7e3
-            if (is_valid(td.link)) {
93b7e3
+            if (is_valid(td.link) && !(td.ctrl & TD_CTRL_SPD)) {
93b7e3
                 uhci_fill_queue(s, &td);
93b7e3
             }
93b7e3
             link = curr_qh ? qh.link : td.link;
93b7e3
-- 
93b7e3
1.7.12
93b7e3