usb-uhci: fix irq handling on error.
Spec on UHCI_STS_USBERR: "If the TD on which the error interrupt occurred also had its IOC bit set, both this bit and Bit 0 are set." Make UHCI emulation do that. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
e7e73892a6
commit
0070f095d9
|
@ -730,6 +730,9 @@ out:
|
||||||
td->ctrl |= TD_CTRL_STALL;
|
td->ctrl |= TD_CTRL_STALL;
|
||||||
td->ctrl &= ~TD_CTRL_ACTIVE;
|
td->ctrl &= ~TD_CTRL_ACTIVE;
|
||||||
s->status |= UHCI_STS_USBERR;
|
s->status |= UHCI_STS_USBERR;
|
||||||
|
if (td->ctrl & TD_CTRL_IOC) {
|
||||||
|
*int_mask |= 0x01;
|
||||||
|
}
|
||||||
uhci_update_irq(s);
|
uhci_update_irq(s);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
@ -737,6 +740,9 @@ out:
|
||||||
td->ctrl |= TD_CTRL_BABBLE | TD_CTRL_STALL;
|
td->ctrl |= TD_CTRL_BABBLE | TD_CTRL_STALL;
|
||||||
td->ctrl &= ~TD_CTRL_ACTIVE;
|
td->ctrl &= ~TD_CTRL_ACTIVE;
|
||||||
s->status |= UHCI_STS_USBERR;
|
s->status |= UHCI_STS_USBERR;
|
||||||
|
if (td->ctrl & TD_CTRL_IOC) {
|
||||||
|
*int_mask |= 0x01;
|
||||||
|
}
|
||||||
uhci_update_irq(s);
|
uhci_update_irq(s);
|
||||||
/* frame interrupted */
|
/* frame interrupted */
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in a new issue