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);
if (!(errtd->ctrl_status & (1 << 23)))
{
/* Check if the endpoint is stalled. */
if (errtd->ctrl_status & (1 << 22))
err = GRUB_USB_ERR_STALL;
@ -544,7 +546,8 @@ grub_uhci_transfer (grub_usb_controller_t dev,
err = GRUB_USB_ERR_BITSTUFF;
if (err)
goto fail;
break;
}
/* Fall through, no errors occurred, so the QH might be
updated. */
@ -554,17 +557,15 @@ grub_uhci_transfer (grub_usb_controller_t dev,
{
err = GRUB_USB_ERR_STALL;
grub_dprintf ("uhci", "transaction timed out\n");
goto fail;
break;
}
grub_cpu_idle ();
}
grub_dprintf ("uhci", "transaction complete\n");
fail:
if (err != GRUB_USB_ERR_NONE)
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
TDs. */