diff options
author | hselasky <hselasky@FreeBSD.org> | 2015-02-10 13:45:55 +0000 |
---|---|---|
committer | hselasky <hselasky@FreeBSD.org> | 2015-02-10 13:45:55 +0000 |
commit | cae60585e2fc7c63d7d94c5ab3c69e795bb3b647 (patch) | |
tree | f8624eb9671c6a88e04c1f6753e5f51c2e43ea18 /sys | |
parent | eaff30fc5d94656eaca0c228a1703df3326e951b (diff) | |
download | FreeBSD-src-cae60585e2fc7c63d7d94c5ab3c69e795bb3b647.zip FreeBSD-src-cae60585e2fc7c63d7d94c5ab3c69e795bb3b647.tar.gz |
MFC r278105:
Separate out detection of prevent and allow medium removal quirk.
PR: 185747
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/usb/usb_msctest.c | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/sys/dev/usb/usb_msctest.c b/sys/dev/usb/usb_msctest.c index d09ab72..13d7330 100644 --- a/sys/dev/usb/usb_msctest.c +++ b/sys/dev/usb/usb_msctest.c @@ -112,6 +112,8 @@ static uint8_t scsi_request_sense[] = { 0x03, 0x00, 0x00, 0x00, 0x12, 0x00, 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 @@ -695,10 +697,28 @@ usb_msc_auto_quirk(struct usb_device *udev, uint8_t iface_index) 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: @@ -711,11 +731,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 { /* @@ -742,13 +760,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; |