Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 10 Feb 2015 13:48:49 +0000 (UTC)
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r278517 - stable/8/sys/dev/usb
Message-ID:  <201502101348.t1ADmnCg010806@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: hselasky
Date: Tue Feb 10 13:48:49 2015
New Revision: 278517
URL: https://svnweb.freebsd.org/changeset/base/278517

Log:
  MFC r278105:
  Separate out detection of prevent and allow medium removal quirk.
  
  PR:		185747

Modified:
  stable/8/sys/dev/usb/usb_msctest.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/dev/   (props changed)
  stable/8/sys/dev/usb/   (props changed)

Modified: stable/8/sys/dev/usb/usb_msctest.c
==============================================================================
--- stable/8/sys/dev/usb/usb_msctest.c	Tue Feb 10 13:47:29 2015	(r278516)
+++ stable/8/sys/dev/usb/usb_msctest.c	Tue Feb 10 13:48:49 2015	(r278517)
@@ -106,6 +106,8 @@ static uint8_t scsi_request_sense[] =	{ 
 					  0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
 static uint8_t scsi_read_capacity[] =	{ 0x25, 0x00, 0x00, 0x00, 0x00, 0x00,
 					  0x00, 0x00, 0x00, 0x00 };
+static uint8_t scsi_prevent_removal[] =	{ 0x1e, 0, 0, 0, 1, 0 };
+static uint8_t scsi_allow_removal[] =	{ 0x1e, 0, 0, 0, 0, 0 };
 
 #define	BULK_SIZE		64	/* dummy */
 #define	ERR_CSW_FAILED		-1
@@ -675,10 +677,28 @@ usb_msc_auto_quirk(struct usb_device *ud
 	    USB_MS_HZ);
 
 	if (err != 0) {
+		if (err != ERR_CSW_FAILED)
+			goto error;
+		DPRINTF("Test unit ready failed\n");
+	}
 
+	err = bbb_command_start(sc, DIR_OUT, 0, NULL, 0,
+	    &scsi_prevent_removal, sizeof(scsi_prevent_removal),
+	    USB_MS_HZ);
+
+	if (err == 0) {
+		err = bbb_command_start(sc, DIR_OUT, 0, NULL, 0,
+		    &scsi_allow_removal, sizeof(scsi_allow_removal),
+		    USB_MS_HZ);
+	}
+
+	if (err != 0) {
 		if (err != ERR_CSW_FAILED)
 			goto error;
+		DPRINTF("Device doesn't handle prevent and allow removal\n");
+		usbd_add_dynamic_quirk(udev, UQ_MSC_NO_PREVENT_ALLOW);
 	}
+
 	timeout = 1;
 
 retry_sync_cache:
@@ -691,11 +711,9 @@ retry_sync_cache:
 		if (err != ERR_CSW_FAILED)
 			goto error;
 
-		DPRINTF("Device doesn't handle synchronize cache "
-		    "and prevent allow medium removal\n");
+		DPRINTF("Device doesn't handle synchronize cache\n");
 
 		usbd_add_dynamic_quirk(udev, UQ_MSC_NO_SYNC_CACHE);
-		usbd_add_dynamic_quirk(udev, UQ_MSC_NO_PREVENT_ALLOW);
 	} else {
 
 		/*
@@ -722,13 +740,10 @@ retry_sync_cache:
 					goto retry_sync_cache;
 
 				DPRINTF("Device most likely doesn't "
-				    "handle synchronize cache nor"
-				    "prevent allow medium removal\n");
+				    "handle synchronize cache\n");
 
 				usbd_add_dynamic_quirk(udev,
 				    UQ_MSC_NO_SYNC_CACHE);
-				usbd_add_dynamic_quirk(udev,
-				    UQ_MSC_NO_PREVENT_ALLOW);
 			} else {
 				if (err != ERR_CSW_FAILED)
 					goto error;



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