]> Git Repo - qemu.git/commitdiff
uhci: Don't queue up packets after one with the SPD flag set
authorHans de Goede <[email protected]>
Wed, 12 Sep 2012 13:08:40 +0000 (15:08 +0200)
committerGerd Hoffmann <[email protected]>
Thu, 13 Sep 2012 07:50:47 +0000 (09:50 +0200)
Don't queue up packets after a packet with the SPD (short packet detect)
flag set. Since we won't know if the packet will actually be short until it
has completed, and if it is short we should stop the queue.

This fixes a miniature photoframe emulating a USB cdrom with the windows
software for it not working.

Signed-off-by: Hans de Goede <[email protected]>
Signed-off-by: Gerd Hoffmann <[email protected]>
hw/usb/hcd-uhci.c

index c7c878635af54dd627df90e228eb226523161e1b..cdc8bc3fbaa1366dcb0a680b7855de883bf47120 100644 (file)
@@ -1000,6 +1000,9 @@ static void uhci_fill_queue(UHCIState *s, UHCI_TD *td)
         }
         assert(ret == TD_RESULT_ASYNC_START);
         assert(int_mask == 0);
+        if (ptd.ctrl & TD_CTRL_SPD) {
+            break;
+        }
         plink = ptd.link;
     }
 }
@@ -1097,7 +1100,7 @@ static void uhci_process_frame(UHCIState *s)
 
         case TD_RESULT_ASYNC_START:
             trace_usb_uhci_td_async(curr_qh & ~0xf, link & ~0xf);
-            if (is_valid(td.link)) {
+            if (is_valid(td.link) && !(td.ctrl & TD_CTRL_SPD)) {
                 uhci_fill_queue(s, &td);
             }
             link = curr_qh ? qh.link : td.link;
This page took 0.028177 seconds and 4 git commands to generate.