svn commit: r189546 - head/sys/dev/usb/serial

Andrew Thompson thompsa at FreeBSD.org
Sun Mar 8 15:55:18 PDT 2009


Author: thompsa
Date: Sun Mar  8 22:55:17 2009
New Revision: 189546
URL: http://svn.freebsd.org/changeset/base/189546

Log:
  MFp4 //depot/projects/usb at 158869
  
  Fix sael init code.
  
  Reported by:	Alberto Mijares
  Submitted by:	Hans Petter Selasky

Modified:
  head/sys/dev/usb/serial/u3g.c

Modified: head/sys/dev/usb/serial/u3g.c
==============================================================================
--- head/sys/dev/usb/serial/u3g.c	Sun Mar  8 22:19:28 2009	(r189545)
+++ head/sys/dev/usb/serial/u3g.c	Sun Mar  8 22:55:17 2009	(r189546)
@@ -299,6 +299,7 @@ u3g_sael_m460_init(struct usb2_device *u
 	};
 
 	struct usb2_device_request req;
+	usb2_error_t err;
 	uint16_t len;
 	uint8_t buf[0x300];
 	uint8_t n;
@@ -320,25 +321,28 @@ u3g_sael_m460_init(struct usb2_device *u
 				DPRINTFN(0, "too small buffer\n");
 				continue;
 			}
-			if (usb2_do_request(udev, NULL, &req, buf)) {
-				DPRINTFN(0, "request %u failed\n",
-				    (unsigned int)n);
-				break;
-			}
+			err = usb2_do_request(udev, NULL, &req, buf);
 		} else {
 			if (len > (sizeof(setup[0]) - 8)) {
 				DPRINTFN(0, "too small buffer\n");
 				continue;
 			}
-			if (usb2_do_request(udev, NULL, &req, 
-			    __DECONST(uint8_t *, &setup[n][8]))) {
-				DPRINTFN(0, "request %u failed\n",
-				    (unsigned int)n);
+			err = usb2_do_request(udev, NULL, &req, 
+			    __DECONST(uint8_t *, &setup[n][8]));
+		}
+		if (err) {
+			DPRINTFN(1, "request %u failed\n",
+			    (unsigned int)n);
+			/*
+			 * Some of the requests will fail. Stop doing
+			 * requests when we are getting timeouts so
+			 * that we don't block the explore/attach
+			 * thread forever.
+			 */
+			if (err == USB_ERR_TIMEOUT)
 				break;
-			}
 		}
 	}
-	return;
 }
 
 static int


More information about the svn-src-all mailing list