Don't retire active transaction on a NAK

This commit is contained in:
Vladimir 'phcoder' Serbinenko 2010-08-21 13:55:06 +02:00
parent d10d149667
commit 12cbb3ccd0

View file

@ -519,6 +519,8 @@ grub_uhci_transfer (grub_usb_controller_t dev,
grub_dprintf ("uhci", "t status=0x%02x\n", errtd->ctrl_status); grub_dprintf ("uhci", "t status=0x%02x\n", errtd->ctrl_status);
if (!(errtd->ctrl_status & (1 << 23)))
{
/* Check if the endpoint is stalled. */ /* Check if the endpoint is stalled. */
if (errtd->ctrl_status & (1 << 22)) if (errtd->ctrl_status & (1 << 22))
err = GRUB_USB_ERR_STALL; err = GRUB_USB_ERR_STALL;
@ -544,7 +546,8 @@ grub_uhci_transfer (grub_usb_controller_t dev,
err = GRUB_USB_ERR_BITSTUFF; err = GRUB_USB_ERR_BITSTUFF;
if (err) if (err)
goto fail; break;
}
/* Fall through, no errors occurred, so the QH might be /* Fall through, no errors occurred, so the QH might be
updated. */ updated. */
@ -554,17 +557,15 @@ grub_uhci_transfer (grub_usb_controller_t dev,
{ {
err = GRUB_USB_ERR_STALL; err = GRUB_USB_ERR_STALL;
grub_dprintf ("uhci", "transaction timed out\n"); grub_dprintf ("uhci", "transaction timed out\n");
goto fail; break;
} }
grub_cpu_idle (); grub_cpu_idle ();
} }
grub_dprintf ("uhci", "transaction complete\n");
fail:
if (err != GRUB_USB_ERR_NONE) if (err != GRUB_USB_ERR_NONE)
grub_dprintf ("uhci", "transaction failed\n"); grub_dprintf ("uhci", "transaction failed\n");
else
grub_dprintf ("uhci", "transaction complete\n");
/* Place the QH back in the free list and deallocate the associated /* Place the QH back in the free list and deallocate the associated
TDs. */ TDs. */