Author: hselasky
Date: Sun Aug 25 08:42:50 2013
New Revision: 254828
URL: http://svnweb.freebsd.org/changeset/base/254828

Log:
  Bugfix: The endpoint profile should only be checked in device mode when
  allocating USB transfers and not in host mode.
  
  Reported by:  George Mitchell <george+free...@m5p.com>

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

Modified: head/sys/dev/usb/controller/dwc_otg.c
==============================================================================
--- head/sys/dev/usb/controller/dwc_otg.c       Sun Aug 25 07:46:18 2013        
(r254827)
+++ head/sys/dev/usb/controller/dwc_otg.c       Sun Aug 25 08:42:50 2013        
(r254828)
@@ -3968,7 +3968,6 @@ done:
 static void
 dwc_otg_xfer_setup(struct usb_setup_params *parm)
 {
-       const struct usb_hw_ep_profile *pf;
        struct usb_xfer *xfer;
        void *last_obj;
        uint32_t ntd;
@@ -4011,16 +4010,21 @@ dwc_otg_xfer_setup(struct usb_setup_para
         */
        last_obj = NULL;
 
+       ep_no = xfer->endpointno & UE_ADDR;
+
        /*
-        * get profile stuff
+        * Check for a valid endpoint profile in USB device mode:
         */
-       ep_no = xfer->endpointno & UE_ADDR;
-       dwc_otg_get_hw_ep_profile(parm->udev, &pf, ep_no);
+       if (xfer->flags_int.usb_mode == USB_MODE_DEVICE) {
+               const struct usb_hw_ep_profile *pf;
 
-       if (pf == NULL) {
-               /* should not happen */
-               parm->err = USB_ERR_INVAL;
-               return;
+               dwc_otg_get_hw_ep_profile(parm->udev, &pf, ep_no);
+
+               if (pf == NULL) {
+                       /* should not happen */
+                       parm->err = USB_ERR_INVAL;
+                       return;
+               }
        }
 
        /* align data */

Modified: head/sys/dev/usb/controller/musb_otg.c
==============================================================================
--- head/sys/dev/usb/controller/musb_otg.c      Sun Aug 25 07:46:18 2013        
(r254827)
+++ head/sys/dev/usb/controller/musb_otg.c      Sun Aug 25 08:42:50 2013        
(r254828)
@@ -4026,7 +4026,6 @@ done:
 static void
 musbotg_xfer_setup(struct usb_setup_params *parm)
 {
-       const struct usb_hw_ep_profile *pf;
        struct musbotg_softc *sc;
        struct usb_xfer *xfer;
        void *last_obj;
@@ -4088,12 +4087,14 @@ musbotg_xfer_setup(struct usb_setup_para
         */
        last_obj = NULL;
 
+       ep_no = xfer->endpointno & UE_ADDR;
+
        /*
-        * get profile stuff
+        * Check for a valid endpoint profile in USB device mode:
         */
-       if (ntd) {
+       if (xfer->flags_int.usb_mode == USB_MODE_DEVICE) {
+               const struct usb_hw_ep_profile *pf;
 
-               ep_no = xfer->endpointno & UE_ADDR;
                musbotg_get_hw_ep_profile(parm->udev, &pf, ep_no);
 
                if (pf == NULL) {
@@ -4101,9 +4102,6 @@ musbotg_xfer_setup(struct usb_setup_para
                        parm->err = USB_ERR_INVAL;
                        return;
                }
-       } else {
-               ep_no = 0;
-               pf = NULL;
        }
 
        /* align data */
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to