|
Hans de Goede |
1b1995 |
From 0e6cd6e6da3d0648204526e8ebd79047f48d009a Mon Sep 17 00:00:00 2001
|
|
Hans de Goede |
1b1995 |
From: Hans de Goede <hdegoede@redhat.com>
|
|
Hans de Goede |
1b1995 |
Date: Fri, 2 Mar 2012 00:36:50 +0100
|
|
Hans de Goede |
1b1995 |
Subject: [PATCH 136/140] usb-ehci: Remove dead isoch_pause code
|
|
Hans de Goede |
1b1995 |
|
|
Hans de Goede |
1b1995 |
I see no value in keeping this around, so lets delete it.
|
|
Hans de Goede |
1b1995 |
|
|
Hans de Goede |
1b1995 |
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
|
Hans de Goede |
1b1995 |
---
|
|
Hans de Goede |
1b1995 |
hw/usb-ehci.c | 60 +++++++++++++++------------------------------------------
|
|
Hans de Goede |
1b1995 |
1 file changed, 15 insertions(+), 45 deletions(-)
|
|
Hans de Goede |
1b1995 |
|
|
Hans de Goede |
1b1995 |
diff --git a/hw/usb-ehci.c b/hw/usb-ehci.c
|
|
Hans de Goede |
1b1995 |
index aa6fae5..72c3f2a 100644
|
|
Hans de Goede |
1b1995 |
--- a/hw/usb-ehci.c
|
|
Hans de Goede |
1b1995 |
+++ b/hw/usb-ehci.c
|
|
Hans de Goede |
1b1995 |
@@ -419,7 +419,6 @@ struct EHCIState {
|
|
Hans de Goede |
1b1995 |
|
|
Hans de Goede |
1b1995 |
USBPacket ipacket;
|
|
Hans de Goede |
1b1995 |
QEMUSGList isgl;
|
|
Hans de Goede |
1b1995 |
- int isoch_pause;
|
|
Hans de Goede |
1b1995 |
|
|
Hans de Goede |
1b1995 |
uint64_t last_run_ns;
|
|
Hans de Goede |
1b1995 |
};
|
|
Hans de Goede |
1b1995 |
@@ -886,7 +885,6 @@ static void ehci_reset(void *opaque)
|
|
Hans de Goede |
1b1995 |
|
|
Hans de Goede |
1b1995 |
s->astate = EST_INACTIVE;
|
|
Hans de Goede |
1b1995 |
s->pstate = EST_INACTIVE;
|
|
Hans de Goede |
1b1995 |
- s->isoch_pause = -1;
|
|
Hans de Goede |
1b1995 |
s->attach_poll_counter = 0;
|
|
Hans de Goede |
1b1995 |
|
|
Hans de Goede |
1b1995 |
for(i = 0; i < NB_PORTS; i++) {
|
|
Hans de Goede |
1b1995 |
@@ -1468,46 +1466,7 @@ static int ehci_process_itd(EHCIState *ehci,
|
|
Hans de Goede |
1b1995 |
usb_packet_unmap(&ehci->ipacket);
|
|
Hans de Goede |
1b1995 |
qemu_sglist_destroy(&ehci->isgl);
|
|
Hans de Goede |
1b1995 |
|
|
Hans de Goede |
1b1995 |
-#if 0
|
|
Hans de Goede |
1b1995 |
- /* In isoch, there is no facility to indicate a NAK so let's
|
|
Hans de Goede |
1b1995 |
- * instead just complete a zero-byte transaction. Setting
|
|
Hans de Goede |
1b1995 |
- * DBERR seems too draconian.
|
|
Hans de Goede |
1b1995 |
- */
|
|
Hans de Goede |
1b1995 |
-
|
|
Hans de Goede |
1b1995 |
- if (ret == USB_RET_NAK) {
|
|
Hans de Goede |
1b1995 |
- if (ehci->isoch_pause > 0) {
|
|
Hans de Goede |
1b1995 |
- DPRINTF("ISOCH: received a NAK but paused so returning\n");
|
|
Hans de Goede |
1b1995 |
- ehci->isoch_pause--;
|
|
Hans de Goede |
1b1995 |
- return 0;
|
|
Hans de Goede |
1b1995 |
- } else if (ehci->isoch_pause == -1) {
|
|
Hans de Goede |
1b1995 |
- DPRINTF("ISOCH: recv NAK & isoch pause inactive, setting\n");
|
|
Hans de Goede |
1b1995 |
- // Pause frindex for up to 50 msec waiting for data from
|
|
Hans de Goede |
1b1995 |
- // remote
|
|
Hans de Goede |
1b1995 |
- ehci->isoch_pause = 50;
|
|
Hans de Goede |
1b1995 |
- return 0;
|
|
Hans de Goede |
1b1995 |
- } else {
|
|
Hans de Goede |
1b1995 |
- DPRINTF("ISOCH: isoch pause timeout! return 0\n");
|
|
Hans de Goede |
1b1995 |
- ret = 0;
|
|
Hans de Goede |
1b1995 |
- }
|
|
Hans de Goede |
1b1995 |
- } else {
|
|
Hans de Goede |
1b1995 |
- DPRINTF("ISOCH: received ACK, clearing pause\n");
|
|
Hans de Goede |
1b1995 |
- ehci->isoch_pause = -1;
|
|
Hans de Goede |
1b1995 |
- }
|
|
Hans de Goede |
1b1995 |
-#else
|
|
Hans de Goede |
1b1995 |
- if (ret == USB_RET_NAK) {
|
|
Hans de Goede |
1b1995 |
- ret = 0;
|
|
Hans de Goede |
1b1995 |
- }
|
|
Hans de Goede |
1b1995 |
-#endif
|
|
Hans de Goede |
1b1995 |
-
|
|
Hans de Goede |
1b1995 |
- if (ret >= 0) {
|
|
Hans de Goede |
1b1995 |
- if (!dir) {
|
|
Hans de Goede |
1b1995 |
- /* OUT */
|
|
Hans de Goede |
1b1995 |
- set_field(&itd->transact[i], len - ret, ITD_XACT_LENGTH);
|
|
Hans de Goede |
1b1995 |
- } else {
|
|
Hans de Goede |
1b1995 |
- /* IN */
|
|
Hans de Goede |
1b1995 |
- set_field(&itd->transact[i], ret, ITD_XACT_LENGTH);
|
|
Hans de Goede |
1b1995 |
- }
|
|
Hans de Goede |
1b1995 |
- } else {
|
|
Hans de Goede |
1b1995 |
+ if (ret < 0) {
|
|
Hans de Goede |
1b1995 |
switch (ret) {
|
|
Hans de Goede |
1b1995 |
default:
|
|
Hans de Goede |
1b1995 |
fprintf(stderr, "Unexpected iso usb result: %d\n", ret);
|
|
Hans de Goede |
1b1995 |
@@ -1523,6 +1482,19 @@ static int ehci_process_itd(EHCIState *ehci,
|
|
Hans de Goede |
1b1995 |
itd->transact[i] |= ITD_XACT_BABBLE;
|
|
Hans de Goede |
1b1995 |
ehci_record_interrupt(ehci, USBSTS_ERRINT);
|
|
Hans de Goede |
1b1995 |
break;
|
|
Hans de Goede |
1b1995 |
+ case USB_RET_NAK:
|
|
Hans de Goede |
1b1995 |
+ /* no data for us, so do a zero-length transfer */
|
|
Hans de Goede |
1b1995 |
+ ret = 0;
|
|
Hans de Goede |
1b1995 |
+ break;
|
|
Hans de Goede |
1b1995 |
+ }
|
|
Hans de Goede |
1b1995 |
+ }
|
|
Hans de Goede |
1b1995 |
+ if (ret >= 0) {
|
|
Hans de Goede |
1b1995 |
+ if (!dir) {
|
|
Hans de Goede |
1b1995 |
+ /* OUT */
|
|
Hans de Goede |
1b1995 |
+ set_field(&itd->transact[i], len - ret, ITD_XACT_LENGTH);
|
|
Hans de Goede |
1b1995 |
+ } else {
|
|
Hans de Goede |
1b1995 |
+ /* IN */
|
|
Hans de Goede |
1b1995 |
+ set_field(&itd->transact[i], ret, ITD_XACT_LENGTH);
|
|
Hans de Goede |
1b1995 |
}
|
|
Hans de Goede |
1b1995 |
}
|
|
Hans de Goede |
1b1995 |
if (itd->transact[i] & ITD_XACT_IOC) {
|
|
Hans de Goede |
1b1995 |
@@ -2176,9 +2148,7 @@ static void ehci_frame_timer(void *opaque)
|
|
Hans de Goede |
1b1995 |
|
|
Hans de Goede |
1b1995 |
for (i = 0; i < frames; i++) {
|
|
Hans de Goede |
1b1995 |
if ( !(ehci->usbsts & USBSTS_HALT)) {
|
|
Hans de Goede |
1b1995 |
- if (ehci->isoch_pause <= 0) {
|
|
Hans de Goede |
1b1995 |
- ehci->frindex += 8;
|
|
Hans de Goede |
1b1995 |
- }
|
|
Hans de Goede |
1b1995 |
+ ehci->frindex += 8;
|
|
Hans de Goede |
1b1995 |
|
|
Hans de Goede |
1b1995 |
if (ehci->frindex > 0x00001fff) {
|
|
Hans de Goede |
1b1995 |
ehci->frindex = 0;
|
|
Hans de Goede |
1b1995 |
--
|
|
Hans de Goede |
1b1995 |
1.7.9.3
|
|
Hans de Goede |
1b1995 |
|