Don't retire active transaction on a NAK
This commit is contained in:
parent
d10d149667
commit
12cbb3ccd0
1 changed files with 26 additions and 25 deletions
|
@ -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. */
|
||||
|
|
Loading…
Reference in a new issue