Author: hselasky
Date: Thu Sep 27 15:45:24 2012
New Revision: 240999
URL: http://svn.freebsd.org/changeset/base/240999

Log:
  Make sure the "wMaxPacketSize" limitations are respected.

Modified:
  head/sys/dev/usb/controller/dwc_otg.c

Modified: head/sys/dev/usb/controller/dwc_otg.c
==============================================================================
--- head/sys/dev/usb/controller/dwc_otg.c       Thu Sep 27 15:23:38 2012        
(r240998)
+++ head/sys/dev/usb/controller/dwc_otg.c       Thu Sep 27 15:45:24 2012        
(r240999)
@@ -3974,9 +3974,34 @@ dwc_otg_ep_init(struct usb_device *udev,
                                return;
                        }
                } else {
-                       if (udev->speed != USB_SPEED_LOW &&
-                           udev->speed != USB_SPEED_FULL &&
-                           udev->speed != USB_SPEED_HIGH) {
+                       uint16_t mps;
+
+                       mps = UGETW(edesc->wMaxPacketSize);
+
+                       /* Apply limitations of our USB host driver */
+
+                       switch (udev->speed) {
+                       case USB_SPEED_HIGH:
+                               if (mps > 512) {
+                                       DPRINTF("wMaxPacketSize=0x%04x"
+                                           "is not supported\n", (int)mps);
+                                       /* not supported */
+                                       return;
+                               }
+                               break;
+
+                       case USB_SPEED_FULL:
+                       case USB_SPEED_LOW:
+                               if (mps > 188) {
+                                       DPRINTF("wMaxPacketSize=0x%04x"
+                                           "is not supported\n", (int)mps);
+                                       /* not supported */
+                                       return;
+                               }
+                               break;
+
+                       default:
+                               DPRINTF("Invalid device speed\n");
                                /* not supported */
                                return;
                        }
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to