Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 5 Apr 2009 18:22:03 +0000 (UTC)
From:      Andrew Thompson <thompsa@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r190742 - head/sys/dev/usb/serial
Message-ID:  <200904051822.n35IM3ti028293@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: thompsa
Date: Sun Apr  5 18:22:03 2009
New Revision: 190742
URL: http://svn.freebsd.org/changeset/base/190742

Log:
  MFp4 //depot/projects/usb@160052
  
  Wait until line configuration is complete before starting data transfers.
  
  Submitted by:	Hans Petter Selasky

Modified:
  head/sys/dev/usb/serial/usb_serial.c
  head/sys/dev/usb/serial/usb_serial.h

Modified: head/sys/dev/usb/serial/usb_serial.c
==============================================================================
--- head/sys/dev/usb/serial/usb_serial.c	Sun Apr  5 18:21:51 2009	(r190741)
+++ head/sys/dev/usb/serial/usb_serial.c	Sun Apr  5 18:22:03 2009	(r190742)
@@ -412,6 +412,12 @@ usb2_com_queue_command(struct usb2_com_s
 	if (fn == usb2_com_cfg_close)
 		usb2_proc_mwait(&ssc->sc_tq, t0, t1);
 
+	/*
+	 * In case of multiple configure requests,
+	 * keep track of the last one!
+	 */
+	if (fn == usb2_com_cfg_start_transfers)
+		sc->sc_last_start_xfer = &task->hdr;
 }
 
 static void
@@ -458,7 +464,9 @@ usb2_com_cfg_start_transfers(struct usb2
 		/* TTY device closed */
 		return;
 	}
-	sc->sc_flag |= UCOM_FLAG_GP_DATA;
+
+	if (_task == sc->sc_last_start_xfer)
+		sc->sc_flag |= UCOM_FLAG_GP_DATA;
 
 	if (sc->sc_callback->usb2_com_start_read) {
 		(sc->sc_callback->usb2_com_start_read) (sc);

Modified: head/sys/dev/usb/serial/usb_serial.h
==============================================================================
--- head/sys/dev/usb/serial/usb_serial.h	Sun Apr  5 18:21:51 2009	(r190741)
+++ head/sys/dev/usb/serial/usb_serial.h	Sun Apr  5 18:22:03 2009	(r190742)
@@ -152,6 +152,8 @@ struct usb2_com_softc {
 	struct usb2_com_cfg_task	sc_status_task[2];
 	struct usb2_com_param_task	sc_param_task[2];
 	struct cv sc_cv;
+	/* Used to set "UCOM_FLAG_GP_DATA" flag: */
+	struct usb2_proc_msg	*sc_last_start_xfer;
 	const struct usb2_com_callback *sc_callback;
 	struct usb2_com_super_softc *sc_super;
 	struct tty *sc_tty;



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