PERFORCE change 131459 for review

Hans Petter Selasky hselasky at FreeBSD.org
Sun Dec 23 01:07:17 PST 2007


http://perforce.freebsd.org/chv.cgi?CH=131459

Change 131459 by hselasky at hselasky_laptop001 on 2007/12/23 09:06:44

	
	Bugfixes and improvements for "usb_template.c".

Affected files ...

.. //depot/projects/usb/src/sys/dev/usb/usb_template.c#6 edit

Differences ...

==== //depot/projects/usb/src/sys/dev/usb/usb_template.c#6 (text+ko) ====

@@ -672,7 +672,7 @@
 		dd = (void *)desc;
 
 		/* get HW control endpoint 0 profile */
-		(methods->get_hw_ep_profile) (ues->udev, &pf, 0);
+		(methods->get_hw_ep_profile) (udev, &pf, 0);
 		if (pf == NULL) {
 			return (USBD_INVAL);
 		}
@@ -713,6 +713,7 @@
 				return (USBD_INVAL);
 			}
 		}
+		return (0); /* success */
 	}
 	if (desc->bDescriptorType != UDESC_CONFIG) {
 		return (USBD_INVAL);
@@ -735,6 +736,7 @@
 	    usbd_hw_ep_get_needs(ues, UE_INTERRUPT, 0) ||
 	    usbd_hw_ep_get_needs(ues, UE_CONTROL, 0) ||
 	    usbd_hw_ep_get_needs(ues, UE_BULK, 0)) {
+		PRINTFN(-1, ("Could not get needs\n"));
 		return (USBD_INVAL);
 	}
 	for (ep = ues->ep; ep != ues->ep_max; ep++) {
@@ -747,6 +749,7 @@
 		         */
 			if (usbd_hw_ep_find_match(ues, ep, 1) &&
 			    usbd_hw_ep_find_match(ues, ep, 0)) {
+				PRINTFN(-1, ("Could not find match\n"));
 				return (USBD_INVAL);
 			}
 		}
@@ -760,6 +763,7 @@
 	    usbd_hw_ep_get_needs(ues, UE_INTERRUPT, 1) ||
 	    usbd_hw_ep_get_needs(ues, UE_CONTROL, 1) ||
 	    usbd_hw_ep_get_needs(ues, UE_BULK, 1)) {
+	  PRINTFN(-1, ("Could not update endpoint address\n"));
 		return (USBD_INVAL);
 	}
 	return (0);			/* success */
@@ -1002,14 +1006,16 @@
 		/* some error happened */
 		return (uts->err);
 	}
+	/* sanity check */
+	if (uts->size == 0) {
+		return (USBD_INVAL);
+	}
 	/* allocate zeroed memory */
-	if (uts->size > 0) {
 		uts->buf = malloc(uts->size, M_USB, M_WAITOK | M_ZERO);
 		if (uts->buf == NULL) {
 			/* could not allocate memory */
 			return (USBD_NOMEM);
 		}
-	}
 	/* second pass */
 
 	uts->size = 0;
@@ -1025,6 +1031,7 @@
 		/* some error happened during second pass */
 		goto error;
 	}
+
 	/*
 	 * Resolve all endpoint addresses !
 	 */
@@ -1032,19 +1039,22 @@
 	uts->err = usbd_hw_ep_resolve(udev, buf);
 	if (uts->err) {
 		PRINTFN(-1, ("Could not resolve endpoints for "
-		    "Device Descriptor\n"));
+		     "Device Descriptor, error = %s\n",
+		     usbd_errstr(uts->err)));
 		goto error;
 	}
+
 	for (n = 0;; n++) {
 
 		buf = usbd_temp_get_config_desc(udev, NULL, n);
+		if (buf == NULL) {
+			break;
+		}
 		uts->err = usbd_hw_ep_resolve(udev, buf);
 		if (uts->err) {
-			if (buf == NULL) {
-				break;
-			}
 			PRINTFN(-1, ("Could not resolve endpoints for "
-			    "Config Descriptor %u\n", n));
+			     "Config Descriptor %u, error = %s\n", n, 
+			     usbd_errstr(uts->err)));
 			goto error;
 		}
 	}


More information about the p4-projects mailing list