svn commit: r206316 - stable/8/sys/dev/usb
Andrew Thompson
thompsa at FreeBSD.org
Tue Apr 6 23:27:05 UTC 2010
Author: thompsa
Date: Tue Apr 6 23:27:04 2010
New Revision: 206316
URL: http://svn.freebsd.org/changeset/base/206316
Log:
MFC r205035
Make sure there is a way to reset the endpoint FIFO on transfer errors for
ISOCHRONOUS transfers
Submitted by: Hans Petter Selasky
Modified:
stable/8/sys/dev/usb/usb_transfer.c
Directory Properties:
stable/8/sys/ (props changed)
stable/8/sys/amd64/include/xen/ (props changed)
stable/8/sys/cddl/contrib/opensolaris/ (props changed)
stable/8/sys/contrib/dev/acpica/ (props changed)
stable/8/sys/contrib/pf/ (props changed)
stable/8/sys/dev/xen/xenpci/ (props changed)
Modified: stable/8/sys/dev/usb/usb_transfer.c
==============================================================================
--- stable/8/sys/dev/usb/usb_transfer.c Tue Apr 6 23:26:40 2010 (r206315)
+++ stable/8/sys/dev/usb/usb_transfer.c Tue Apr 6 23:27:04 2010 (r206316)
@@ -2410,21 +2410,24 @@ usbd_pipe_start(struct usb_xfer_queue *p
* Check if we are supposed to stall the endpoint:
*/
if (xfer->flags.stall_pipe) {
+ struct usb_device *udev;
+ struct usb_xfer_root *info;
+
/* clear stall command */
xfer->flags.stall_pipe = 0;
+ /* get pointer to USB device */
+ info = xfer->xroot;
+ udev = info->udev;
+
/*
* Only stall BULK and INTERRUPT endpoints.
*/
type = (ep->edesc->bmAttributes & UE_XFERTYPE);
if ((type == UE_BULK) ||
(type == UE_INTERRUPT)) {
- struct usb_device *udev;
- struct usb_xfer_root *info;
uint8_t did_stall;
- info = xfer->xroot;
- udev = info->udev;
did_stall = 1;
if (udev->flags.usb_mode == USB_MODE_DEVICE) {
@@ -2452,6 +2455,17 @@ usbd_pipe_start(struct usb_xfer_queue *p
ep->is_stalled = 1;
return;
}
+ } else if (type == UE_ISOCHRONOUS) {
+
+ /*
+ * Make sure any FIFO overflow or other FIFO
+ * error conditions go away by resetting the
+ * endpoint FIFO through the clear stall
+ * method.
+ */
+ if (udev->flags.usb_mode == USB_MODE_DEVICE) {
+ (udev->bus->methods->clear_stall) (udev, ep);
+ }
}
}
/* Set or clear stall complete - special case */
More information about the svn-src-stable-8
mailing list