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

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