svn commit: r278516 - stable/9/sys/dev/usb

Hans Petter Selasky hselasky at FreeBSD.org
Tue Feb 10 13:47:30 UTC 2015


Author: hselasky
Date: Tue Feb 10 13:47:29 2015
New Revision: 278516
URL: https://svnweb.freebsd.org/changeset/base/278516

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

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

Modified: stable/9/sys/dev/usb/usb_msctest.c
==============================================================================
--- stable/9/sys/dev/usb/usb_msctest.c	Tue Feb 10 13:45:55 2015	(r278515)
+++ stable/9/sys/dev/usb/usb_msctest.c	Tue Feb 10 13:47:29 2015	(r278516)
@@ -108,6 +108,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
@@ -691,10 +693,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:
@@ -707,11 +727,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 {
 
 		/*
@@ -738,13 +756,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;


More information about the svn-src-all mailing list