Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 25 Aug 2013 08:42:51 +0000 (UTC)
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r254828 - head/sys/dev/usb/controller
Message-ID:  <201308250842.r7P8gpCl047694@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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+freebsd@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 */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201308250842.r7P8gpCl047694>