Module Name:    src
Committed By:   mrg
Date:           Sun Mar  4 00:21:20 UTC 2012

Modified Files:
        src/sys/dev/usb: umass.c umass_isdata.c umass_scsipi.c umassvar.h

Log Message:
replace the hack to pass USBD_SYNCHRONOUS down when called with
XS_CTL_POLL with one that doesn't modify global-to-softc state.


To generate a diff of this commit:
cvs rdiff -u -r1.142 -r1.143 src/sys/dev/usb/umass.c
cvs rdiff -u -r1.21 -r1.22 src/sys/dev/usb/umass_isdata.c
cvs rdiff -u -r1.40 -r1.41 src/sys/dev/usb/umass_scsipi.c
cvs rdiff -u -r1.31 -r1.32 src/sys/dev/usb/umassvar.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/usb/umass.c
diff -u src/sys/dev/usb/umass.c:1.142 src/sys/dev/usb/umass.c:1.143
--- src/sys/dev/usb/umass.c:1.142	Fri Feb 24 06:48:26 2012
+++ src/sys/dev/usb/umass.c	Sun Mar  4 00:21:20 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: umass.c,v 1.142 2012/02/24 06:48:26 mrg Exp $	*/
+/*	$NetBSD: umass.c,v 1.143 2012/03/04 00:21:20 mrg Exp $	*/
 
 /*
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -124,7 +124,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: umass.c,v 1.142 2012/02/24 06:48:26 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: umass.c,v 1.143 2012/03/04 00:21:20 mrg Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_umass.h"
@@ -212,7 +212,7 @@ Static void umass_reset(struct umass_sof
 
 /* Bulk-Only related functions */
 Static void umass_bbb_transfer(struct umass_softc *, int, void *, int, void *,
-			       int, int, u_int, umass_callback, void *);
+			       int, int, u_int, int, umass_callback, void *);
 Static void umass_bbb_reset(struct umass_softc *, int);
 Static void umass_bbb_state(usbd_xfer_handle, usbd_private_handle, usbd_status);
 
@@ -220,11 +220,11 @@ usbd_status umass_bbb_get_max_lun(struct
 
 /* CBI related functions */
 Static void umass_cbi_transfer(struct umass_softc *, int, void *, int, void *,
-			       int, int, u_int, umass_callback, void *);
+			       int, int, u_int, int, umass_callback, void *);
 Static void umass_cbi_reset(struct umass_softc *, int);
 Static void umass_cbi_state(usbd_xfer_handle, usbd_private_handle, usbd_status);
 
-Static int umass_cbi_adsc(struct umass_softc *, char *, int, usbd_xfer_handle);
+Static int umass_cbi_adsc(struct umass_softc *, char *, int, int, usbd_xfer_handle);
 
 const struct umass_wire_methods umass_bbb_methods = {
 	umass_bbb_transfer,
@@ -761,12 +761,12 @@ umass_setup_transfer(struct umass_softc 
 	/* Initialiase a USB transfer and then schedule it */
 
 	usbd_setup_xfer(xfer, pipe, (void *)sc, buffer, buflen,
-	    flags | sc->sc_xfer_flags, sc->timeout, sc->sc_methods->wire_state);
+	    flags, sc->timeout, sc->sc_methods->wire_state);
 
 	err = usbd_transfer(xfer);
 	DPRINTF(UDMASS_XFER,("%s: start xfer buffer=%p buflen=%d flags=0x%x "
 	    "timeout=%d\n", device_xname(sc->sc_dev),
-	    buffer, buflen, flags | sc->sc_xfer_flags, sc->timeout));
+	    buffer, buflen, flags, sc->timeout));
 	if (err && err != USBD_IN_PROGRESS) {
 		DPRINTF(UDMASS_BBB, ("%s: failed to setup transfer, %s\n",
 			device_xname(sc->sc_dev), usbd_errstr(err)));
@@ -884,7 +884,7 @@ umass_bbb_reset(struct umass_softc *sc, 
 Static void
 umass_bbb_transfer(struct umass_softc *sc, int lun, void *cmd, int cmdlen,
 		   void *data, int datalen, int dir, u_int timeout,
-		   umass_callback cb, void *priv)
+		   int flags, umass_callback cb, void *priv)
 {
 	static int dCBWtag = 42;	/* unique for CBW of transfer */
 
@@ -991,7 +991,7 @@ umass_bbb_transfer(struct umass_softc *s
 
 	/* Send the CBW from host to device via bulk-out endpoint. */
 	if (umass_setup_transfer(sc, sc->sc_pipe[UMASS_BULKOUT],
-			&sc->cbw, UMASS_BBB_CBW_SIZE, 0,
+			&sc->cbw, UMASS_BBB_CBW_SIZE, flags,
 			sc->transfer_xfer[XFER_BBB_CBW])) {
 		umass_bbb_reset(sc, STATUS_WIRE_FAILED);
 	}
@@ -1314,7 +1314,7 @@ umass_bbb_state(usbd_xfer_handle xfer, u
  */
 
 Static int
-umass_cbi_adsc(struct umass_softc *sc, char *buffer, int buflen,
+umass_cbi_adsc(struct umass_softc *sc, char *buffer, int buflen, int flags,
 	       usbd_xfer_handle xfer)
 {
 	KASSERTMSG(sc->sc_wire & (UMASS_WPROTO_CBI|UMASS_WPROTO_CBI_I),
@@ -1333,7 +1333,7 @@ umass_cbi_adsc(struct umass_softc *sc, c
 	USETW(sc->sc_req.wIndex, sc->sc_ifaceno);
 	USETW(sc->sc_req.wLength, buflen);
 	return umass_setup_ctrl_transfer(sc, &sc->sc_req, buffer,
-					 buflen, 0, xfer);
+					 buflen, flags, xfer);
 }
 
 
@@ -1385,7 +1385,7 @@ umass_cbi_reset(struct umass_softc *sc, 
 	for (i = 2; i < SEND_DIAGNOSTIC_CMDLEN; i++)
 		sc->cbl[i] = 0xff;
 
-	umass_cbi_adsc(sc, sc->cbl, SEND_DIAGNOSTIC_CMDLEN,
+	umass_cbi_adsc(sc, sc->cbl, SEND_DIAGNOSTIC_CMDLEN, 0,
 		       sc->transfer_xfer[XFER_CBI_RESET1]);
 	/* XXX if the command fails we should reset the port on the bub */
 }
@@ -1393,7 +1393,7 @@ umass_cbi_reset(struct umass_softc *sc, 
 Static void
 umass_cbi_transfer(struct umass_softc *sc, int lun,
 		   void *cmd, int cmdlen, void *data, int datalen, int dir,
-		   u_int timeout, umass_callback cb, void *priv)
+		   u_int timeout, int flags, umass_callback cb, void *priv)
 {
 	DPRINTF(UDMASS_CBI,("%s: umass_cbi_transfer cmd=0x%02x, len=%d\n",
 		device_xname(sc->sc_dev), *(u_char *)cmd, datalen));
@@ -1445,7 +1445,7 @@ umass_cbi_transfer(struct umass_softc *s
 	sc->transfer_state = TSTATE_CBI_COMMAND;
 
 	/* Send the Command Block from host to device via control endpoint. */
-	if (umass_cbi_adsc(sc, cmd, cmdlen, sc->transfer_xfer[XFER_CBI_CB]))
+	if (umass_cbi_adsc(sc, cmd, cmdlen, flags, sc->transfer_xfer[XFER_CBI_CB]))
 		umass_cbi_reset(sc, STATUS_WIRE_FAILED);
 }
 

Index: src/sys/dev/usb/umass_isdata.c
diff -u src/sys/dev/usb/umass_isdata.c:1.21 src/sys/dev/usb/umass_isdata.c:1.22
--- src/sys/dev/usb/umass_isdata.c:1.21	Wed Aug 24 11:28:50 2011
+++ src/sys/dev/usb/umass_isdata.c	Sun Mar  4 00:21:20 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: umass_isdata.c,v 1.21 2011/08/24 11:28:50 mbalmer Exp $	*/
+/*	$NetBSD: umass_isdata.c,v 1.22 2012/03/04 00:21:20 mrg Exp $	*/
 
 /*
  * TODO:
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: umass_isdata.c,v 1.21 2011/08/24 11:28:50 mbalmer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: umass_isdata.c,v 1.22 2012/03/04 00:21:20 mrg Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_umass.h"
@@ -361,7 +361,7 @@ uisdata_bio1(struct ata_drive_datas *drv
 		 ata_bio->bcount, drv->drive));
 	sc->sc_methods->wire_xfer(sc, drv->drive, &ata, sizeof ata,
 				  ata_bio->databuf + scbus->sc_skip, nbytes,
-				  dir, ATA_DELAY, uisdata_bio_cb, ata_bio);
+				  dir, ATA_DELAY, 0, uisdata_bio_cb, ata_bio);
 
 	while (ata_bio->flags & ATA_POLL) {
 		DPRINTF(("%s: tsleep %p\n", __func__, ata_bio));
@@ -455,7 +455,7 @@ uisdata_exec_command(struct ata_drive_da
 		 ata.ac_command, drv->drive));
 	sc->sc_methods->wire_xfer(sc, drv->drive, &ata,
 				  sizeof ata, cmd->data, cmd->bcount, dir,
-				  cmd->timeout, uisdata_exec_cb, cmd);
+				  cmd->timeout, 0, uisdata_exec_cb, cmd);
 	if (cmd->flags & (AT_POLL | AT_WAIT)) {
 #if 0
 		if (cmd->flags & AT_POLL)

Index: src/sys/dev/usb/umass_scsipi.c
diff -u src/sys/dev/usb/umass_scsipi.c:1.40 src/sys/dev/usb/umass_scsipi.c:1.41
--- src/sys/dev/usb/umass_scsipi.c:1.40	Thu Feb 23 13:31:13 2012
+++ src/sys/dev/usb/umass_scsipi.c	Sun Mar  4 00:21:20 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: umass_scsipi.c,v 1.40 2012/02/23 13:31:13 he Exp $	*/
+/*	$NetBSD: umass_scsipi.c,v 1.41 2012/03/04 00:21:20 mrg Exp $	*/
 
 /*
  * Copyright (c) 2001, 2003 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: umass_scsipi.c,v 1.40 2012/02/23 13:31:13 he Exp $");
+__KERNEL_RCSID(0, "$NetBSD: umass_scsipi.c,v 1.41 2012/03/04 00:21:20 mrg Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_umass.h"
@@ -282,13 +282,12 @@ umass_scsipi_request(struct scsipi_chann
 			/* Use sync transfer. XXX Broken! */
 			DPRINTF(UDMASS_SCSI,
 			    ("umass_scsi_cmd: sync dir=%d\n", dir));
-			sc->sc_xfer_flags = USBD_SYNCHRONOUS;
 			scbus->sc_sync_status = USBD_INVAL;
 			sc->sc_methods->wire_xfer(sc, periph->periph_lun, cmd,
 						  cmdlen, xs->data,
 						  xs->datalen, dir,
-						  xs->timeout, 0, xs);
-			sc->sc_xfer_flags = 0;
+						  xs->timeout, USBD_SYNCHRONOUS,
+						  0, xs);
 			DPRINTF(UDMASS_SCSI, ("umass_scsi_cmd: done err=%d\n",
 					      scbus->sc_sync_status));
 			switch (scbus->sc_sync_status) {
@@ -311,7 +310,7 @@ umass_scsipi_request(struct scsipi_chann
 			sc->sc_methods->wire_xfer(sc, periph->periph_lun, cmd,
 						  cmdlen, xs->data,
 						  xs->datalen, dir,
-						  xs->timeout,
+						  xs->timeout, 0,
 						  umass_scsipi_cb, xs);
 			return;
 		}
@@ -435,7 +434,7 @@ umass_scsipi_cb(struct umass_softc *sc, 
 		sc->sc_methods->wire_xfer(sc, periph->periph_lun,
 					  &scbus->sc_sense_cmd, cmdlen,
 					  &xs->sense, sizeof(xs->sense),
-					  DIR_IN, xs->timeout,
+					  DIR_IN, xs->timeout, 0,
 					  umass_scsipi_sense_cb, xs);
 		return;
 

Index: src/sys/dev/usb/umassvar.h
diff -u src/sys/dev/usb/umassvar.h:1.31 src/sys/dev/usb/umassvar.h:1.32
--- src/sys/dev/usb/umassvar.h:1.31	Sun Jul 31 16:32:02 2011
+++ src/sys/dev/usb/umassvar.h	Sun Mar  4 00:21:20 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: umassvar.h,v 1.31 2011/07/31 16:32:02 jakllsch Exp $	*/
+/*	$NetBSD: umassvar.h,v 1.32 2012/03/04 00:21:20 mrg Exp $	*/
 /*-
  * Copyright (c) 1999 MAEKAWA Masahide <bis...@rr.iij4u.or.jp>,
  *		      Nick Hibma <n_hi...@freebsd.org>
@@ -133,7 +133,7 @@ typedef void (*umass_callback)(struct um
 #define STATUS_WIRE_FAILED	3	/* couldn't even get command across */
 
 typedef void (*umass_wire_xfer)(struct umass_softc *, int, void *, int, void *,
-				int, int, u_int, umass_callback, void *);
+				int, int, u_int, int, umass_callback, void *);
 typedef void (*umass_wire_reset)(struct umass_softc *, int);
 typedef void (*umass_wire_state)(usbd_xfer_handle, usbd_private_handle,
 				 usbd_status);
@@ -262,7 +262,6 @@ struct umass_softc {
 	struct timeval tv;
 #endif
 
-	int			sc_xfer_flags;
 	char			sc_dying;
 	int			sc_refcnt;
 	int			sc_sense;

Reply via email to