提交 0070f095 编写于 作者: G Gerd Hoffmann

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: NGerd Hoffmann <kraxel@redhat.com>
上级 e7e73892
...@@ -730,6 +730,9 @@ out: ...@@ -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: ...@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册