summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Pieuchot <mpi@cvs.openbsd.org>2015-06-22 12:56:56 +0000
committerMartin Pieuchot <mpi@cvs.openbsd.org>2015-06-22 12:56:56 +0000
commiteb9176cc781090737b89b8968fb77e3a7399fec3 (patch)
treeb0b12d017fd5b2ffada073198908951bc7efb5b3
parentd89838dc8da0ce6f7832c5abab9b4a52b5899ba5 (diff)
Do not update frame lengths to reflect what has really been transfered
when an isochronous transfer is done. Frame lengths are just input values and no driver mess with them. ok ratchov@, jmatthew@
-rw-r--r--sys/dev/usb/dwc2/dwc2.c10
-rw-r--r--sys/dev/usb/ehci.c4
-rw-r--r--sys/dev/usb/ohci.c15
-rw-r--r--sys/dev/usb/uhci.c3
4 files changed, 11 insertions, 21 deletions
diff --git a/sys/dev/usb/dwc2/dwc2.c b/sys/dev/usb/dwc2/dwc2.c
index b90ff51de0d..f6d5ecca661 100644
--- a/sys/dev/usb/dwc2/dwc2.c
+++ b/sys/dev/usb/dwc2/dwc2.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: dwc2.c,v 1.28 2015/06/08 08:47:38 jmatthew Exp $ */
+/* $OpenBSD: dwc2.c,v 1.29 2015/06/22 12:56:55 mpi Exp $ */
/* $NetBSD: dwc2.c,v 1.32 2014/09/02 23:26:20 macallan Exp $ */
/*-
@@ -1771,14 +1771,14 @@ void dwc2_host_complete(struct dwc2_hsotg *hsotg, struct dwc2_qtd *qtd,
}
if (xfertype == UE_ISOCHRONOUS) {
+ uint32_t len;
int i;
xfer->actlen = 0;
for (i = 0; i < xfer->nframes; ++i) {
- xfer->frlengths[i] =
- dwc2_hcd_urb_get_iso_desc_actual_length(
- qtd->urb, i);
- xfer->actlen += xfer->frlengths[i];
+ len = dwc2_hcd_urb_get_iso_desc_actual_length(qtd->urb,
+ i);
+ xfer->actlen += len;
}
}
diff --git a/sys/dev/usb/ehci.c b/sys/dev/usb/ehci.c
index b21bb200b79..0672d7b5e7a 100644
--- a/sys/dev/usb/ehci.c
+++ b/sys/dev/usb/ehci.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ehci.c,v 1.185 2015/04/16 14:23:48 mpi Exp $ */
+/* $OpenBSD: ehci.c,v 1.186 2015/06/22 12:56:55 mpi Exp $ */
/* $NetBSD: ehci.c,v 1.66 2004/06/30 03:11:56 mycroft Exp $ */
/*
@@ -825,7 +825,6 @@ ehci_isoc_idone(struct usbd_xfer *xfer)
if (EHCI_ITD_GET_STATUS(status) != 0)
len = 0; /*No valid data on error*/
- xfer->frlengths[nframes++] = len;
actlen += len;
}
}
@@ -843,7 +842,6 @@ ehci_isoc_idone(struct usbd_xfer *xfer)
else
len = 0;
- xfer->frlengths[nframes++] = len;
actlen += len;
}
}
diff --git a/sys/dev/usb/ohci.c b/sys/dev/usb/ohci.c
index 40c4a4a48b5..ababa51bdbe 100644
--- a/sys/dev/usb/ohci.c
+++ b/sys/dev/usb/ohci.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ohci.c,v 1.143 2015/03/14 03:38:49 jsg Exp $ */
+/* $OpenBSD: ohci.c,v 1.144 2015/06/22 12:56:55 mpi Exp $ */
/* $NetBSD: ohci.c,v 1.139 2003/02/22 05:24:16 tsutsui Exp $ */
/* $FreeBSD: src/sys/dev/usb/ohci.c,v 1.22 1999/11/17 22:33:40 n_hibma Exp $ */
@@ -1218,7 +1218,7 @@ ohci_softintr(void *v)
struct usbd_xfer *xfer;
struct ohci_pipe *opipe;
int len, cc, s;
- int i, j, actlen, iframes, uedir;
+ int i, j, actlen, iframes;
DPRINTFN(10,("ohci_softintr: enter\n"));
@@ -1351,8 +1351,6 @@ ohci_softintr(void *v)
opipe = (struct ohci_pipe *)xfer->pipe;
opipe->u.iso.inuse -= xfer->nframes;
- uedir = UE_GET_DIR(xfer->pipe->endpoint->edesc->
- bEndpointAddress);
xfer->status = USBD_NORMAL_COMPLETION;
actlen = 0;
for (i = 0, sitd = xfer->hcpriv; ;
@@ -1361,10 +1359,7 @@ ohci_softintr(void *v)
if (OHCI_ITD_GET_CC(letoh32(sitd->
itd.itd_flags)) != OHCI_CC_NO_ERROR)
xfer->status = USBD_IOERROR;
- /* For input, update frlengths with actual */
- /* XXX anything necessary for output? */
- if (uedir == UE_DIR_IN &&
- xfer->status == USBD_NORMAL_COMPLETION) {
+ if (xfer->status == USBD_NORMAL_COMPLETION) {
iframes = OHCI_ITD_GET_FC(letoh32(
sitd->itd.itd_flags));
for (j = 0; j < iframes; i++, j++) {
@@ -1376,7 +1371,6 @@ ohci_softintr(void *v)
len = 0;
else
len = OHCI_ITD_PSW_LENGTH(len);
- xfer->frlengths[i] = len;
actlen += len;
}
}
@@ -1385,8 +1379,7 @@ ohci_softintr(void *v)
ohci_free_sitd(sc, sitd);
}
ohci_free_sitd(sc, sitd);
- if (uedir == UE_DIR_IN &&
- xfer->status == USBD_NORMAL_COMPLETION)
+ if (xfer->status == USBD_NORMAL_COMPLETION)
xfer->actlen = actlen;
xfer->hcpriv = NULL;
diff --git a/sys/dev/usb/uhci.c b/sys/dev/usb/uhci.c
index 5af934b78b1..b18f9590a28 100644
--- a/sys/dev/usb/uhci.c
+++ b/sys/dev/usb/uhci.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: uhci.c,v 1.136 2015/03/14 03:38:50 jsg Exp $ */
+/* $OpenBSD: uhci.c,v 1.137 2015/06/22 12:56:55 mpi Exp $ */
/* $NetBSD: uhci.c,v 1.172 2003/02/23 04:19:26 simonb Exp $ */
/* $FreeBSD: src/sys/dev/usb/uhci.c,v 1.33 1999/11/17 22:33:41 n_hibma Exp $ */
@@ -1234,7 +1234,6 @@ uhci_idone(struct usbd_xfer *xfer)
n = 0;
status = letoh32(std->td.td_status);
len = UHCI_TD_GET_ACTLEN(status);
- xfer->frlengths[i] = len;
actlen += len;
}
upipe->u.iso.inuse -= nframes;