Commit 72a04d0c authored by Hans de Goede's avatar Hans de Goede Committed by Gerd Hoffmann
Browse files

uhci: Don't queue up packets after one with the SPD flag set



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: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>
parent 35efba2c
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -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;