diff options
| author | Andries E. Brouwer <andries.brouwer@cwi.nl> | 2002-09-03 05:41:31 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2002-09-03 05:41:31 -0700 |
| commit | 618cb2b643bc4dcb43ada89804f102f3ceabe0f9 (patch) | |
| tree | 6267bdf579ca2f345bc2b2a1e02a303a37858ae6 /drivers | |
| parent | e91004e8307c60647c4598e2bdc15ea1c7a94ea7 (diff) | |
[PATCH] sddr09.c MODE SENSE fixes
Teach usb/storage/sddr09.c how to return less than a full page of sense
data.
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/usb/storage/sddr09.c | 35 |
1 files changed, 13 insertions, 22 deletions
diff --git a/drivers/usb/storage/sddr09.c b/drivers/usb/storage/sddr09.c index 74acfb08d9ed..ee1da8029fd1 100644 --- a/drivers/usb/storage/sddr09.c +++ b/drivers/usb/storage/sddr09.c @@ -1443,36 +1443,27 @@ int sddr09_transport(Scsi_Cmnd *srb, struct us_data *us) } if (srb->cmnd[0] == MODE_SENSE) { + int modepage = (srb->cmnd[2] & 0x3F); + int len; - // Read-write error recovery page: there needs to - // be a check for write-protect here + /* They ask for the Read/Write error recovery page, + or for all pages. Give as much as they have room for. */ + if (modepage == 0x01 || modepage == 0x3F) { - if ( (srb->cmnd[2] & 0x3F) == 0x01 ) { - - US_DEBUGP( - "SDDR09: Dummy up request for mode page 1\n"); + US_DEBUGP("SDDR09: Dummy up request for " + "mode page 0x%x\n", modepage); - if (ptr == NULL || - srb->request_bufflen<sizeof(mode_page_01)) + if (ptr == NULL) return USB_STOR_TRANSPORT_ERROR; + len = srb->request_bufflen; + if (len > sizeof(mode_page_01)) + len = sizeof(mode_page_01); + mode_page_01[0] = sizeof(mode_page_01) - 1; mode_page_01[2] = (info->flags & SDDR09_WP) ? 0x80 : 0; - memcpy(ptr, mode_page_01, sizeof(mode_page_01)); + memcpy(ptr, mode_page_01, len); return USB_STOR_TRANSPORT_GOOD; - - } else if ( (srb->cmnd[2] & 0x3F) == 0x3F ) { - - US_DEBUGP("SDDR09: Dummy up request for " - "all mode pages\n"); - - if (ptr == NULL || - srb->request_bufflen<sizeof(mode_page_01)) - return USB_STOR_TRANSPORT_ERROR; - - memcpy(ptr, mode_page_01, sizeof(mode_page_01)); - return USB_STOR_TRANSPORT_GOOD; - } return USB_STOR_TRANSPORT_ERROR; |
