Commit f0183a33 authored by Felipe Balbi's avatar Felipe Balbi Committed by Greg Kroah-Hartman

usb: storage: fix multi-line comment style

No functional changes here, just making sure our
storage driver uses a consistent multi-line comment
style.
Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 5b91dfe1
...@@ -829,8 +829,10 @@ static int alauda_write_lba(struct us_data *us, u16 lba, ...@@ -829,8 +829,10 @@ static int alauda_write_lba(struct us_data *us, u16 lba,
pba = MEDIA_INFO(us).lba_to_pba[zone][lba_offset]; pba = MEDIA_INFO(us).lba_to_pba[zone][lba_offset];
if (pba == 1) { if (pba == 1) {
/* Maybe it is impossible to write to PBA 1. /*
Fake success, but don't do anything. */ * Maybe it is impossible to write to PBA 1.
* Fake success, but don't do anything.
*/
printk(KERN_WARNING printk(KERN_WARNING
"alauda_write_lba: avoid writing to pba 1\n"); "alauda_write_lba: avoid writing to pba 1\n");
return USB_STOR_TRANSPORT_GOOD; return USB_STOR_TRANSPORT_GOOD;
...@@ -977,10 +979,12 @@ static int alauda_read_data(struct us_data *us, unsigned long address, ...@@ -977,10 +979,12 @@ static int alauda_read_data(struct us_data *us, unsigned long address,
usb_stor_dbg(us, "Read %d zero pages (LBA %d) page %d\n", usb_stor_dbg(us, "Read %d zero pages (LBA %d) page %d\n",
pages, lba, page); pages, lba, page);
/* This is not really an error. It just means /*
that the block has never been written. * This is not really an error. It just means
Instead of returning USB_STOR_TRANSPORT_ERROR * that the block has never been written.
it is better to return all zero data. */ * Instead of returning USB_STOR_TRANSPORT_ERROR
* it is better to return all zero data.
*/
memset(buffer, 0, len); memset(buffer, 0, len);
} else { } else {
...@@ -1222,8 +1226,10 @@ static int alauda_transport(struct scsi_cmnd *srb, struct us_data *us) ...@@ -1222,8 +1226,10 @@ static int alauda_transport(struct scsi_cmnd *srb, struct us_data *us)
} }
if (srb->cmnd[0] == ALLOW_MEDIUM_REMOVAL) { if (srb->cmnd[0] == ALLOW_MEDIUM_REMOVAL) {
/* sure. whatever. not like we can stop the user from popping /*
the media out of the device (no locking doors, etc) */ * sure. whatever. not like we can stop the user from popping
* the media out of the device (no locking doors, etc)
*/
return USB_STOR_TRANSPORT_GOOD; return USB_STOR_TRANSPORT_GOOD;
} }
......
...@@ -110,13 +110,17 @@ static void cypress_atacb_passthrough(struct scsi_cmnd *srb, struct us_data *us) ...@@ -110,13 +110,17 @@ static void cypress_atacb_passthrough(struct scsi_cmnd *srb, struct us_data *us)
/* first build the ATACB command */ /* first build the ATACB command */
srb->cmd_len = 16; srb->cmd_len = 16;
srb->cmnd[0] = 0x24; /* bVSCBSignature : vendor-specific command srb->cmnd[0] = 0x24; /*
this value can change, but most(all ?) manufacturers * bVSCBSignature : vendor-specific command
keep the cypress default : 0x24 */ * this value can change, but most(all ?) manufacturers
* keep the cypress default : 0x24
*/
srb->cmnd[1] = 0x24; /* bVSCBSubCommand : 0x24 for ATACB */ srb->cmnd[1] = 0x24; /* bVSCBSubCommand : 0x24 for ATACB */
srb->cmnd[3] = 0xff - 1; /* features, sector count, lba low, lba med srb->cmnd[3] = 0xff - 1; /*
lba high, device, command are valid */ * features, sector count, lba low, lba med
* lba high, device, command are valid
*/
srb->cmnd[4] = 1; /* TransferBlockCount : 512 */ srb->cmnd[4] = 1; /* TransferBlockCount : 512 */
if (save_cmnd[0] == ATA_16) { if (save_cmnd[0] == ATA_16) {
...@@ -155,8 +159,7 @@ static void cypress_atacb_passthrough(struct scsi_cmnd *srb, struct us_data *us) ...@@ -155,8 +159,7 @@ static void cypress_atacb_passthrough(struct scsi_cmnd *srb, struct us_data *us)
usb_stor_transparent_scsi_command(srb, us); usb_stor_transparent_scsi_command(srb, us);
/* if the device doesn't support ATACB /* if the device doesn't support ATACB */
*/
if (srb->result == SAM_STAT_CHECK_CONDITION && if (srb->result == SAM_STAT_CHECK_CONDITION &&
memcmp(srb->sense_buffer, usb_stor_sense_invalidCDB, memcmp(srb->sense_buffer, usb_stor_sense_invalidCDB,
sizeof(usb_stor_sense_invalidCDB)) == 0) { sizeof(usb_stor_sense_invalidCDB)) == 0) {
...@@ -164,7 +167,8 @@ static void cypress_atacb_passthrough(struct scsi_cmnd *srb, struct us_data *us) ...@@ -164,7 +167,8 @@ static void cypress_atacb_passthrough(struct scsi_cmnd *srb, struct us_data *us)
goto end; goto end;
} }
/* if ck_cond flags is set, and there wasn't critical error, /*
* if ck_cond flags is set, and there wasn't critical error,
* build the special sense * build the special sense
*/ */
if ((srb->result != (DID_ERROR << 16) && if ((srb->result != (DID_ERROR << 16) &&
...@@ -176,11 +180,11 @@ static void cypress_atacb_passthrough(struct scsi_cmnd *srb, struct us_data *us) ...@@ -176,11 +180,11 @@ static void cypress_atacb_passthrough(struct scsi_cmnd *srb, struct us_data *us)
unsigned char *desc = sb + 8; unsigned char *desc = sb + 8;
int tmp_result; int tmp_result;
/* build the command for /* build the command for reading the ATA registers */
* reading the ATA registers */
scsi_eh_prep_cmnd(srb, &ses, NULL, 0, sizeof(regs)); scsi_eh_prep_cmnd(srb, &ses, NULL, 0, sizeof(regs));
/* we use the same command as before, but we set /*
* we use the same command as before, but we set
* the read taskfile bit, for not executing atacb command, * the read taskfile bit, for not executing atacb command,
* but reading register selected in srb->cmnd[4] * but reading register selected in srb->cmnd[4]
*/ */
...@@ -204,10 +208,11 @@ static void cypress_atacb_passthrough(struct scsi_cmnd *srb, struct us_data *us) ...@@ -204,10 +208,11 @@ static void cypress_atacb_passthrough(struct scsi_cmnd *srb, struct us_data *us)
sb[2] = 0; /* ATA PASS THROUGH INFORMATION AVAILABLE */ sb[2] = 0; /* ATA PASS THROUGH INFORMATION AVAILABLE */
sb[3] = 0x1D; sb[3] = 0x1D;
/* XXX we should generate sk, asc, ascq from status and error /*
* XXX we should generate sk, asc, ascq from status and error
* regs * regs
* (see 11.1 Error translation ATA device error to SCSI error * (see 11.1 Error translation ATA device error to SCSI error
* map, and ata_to_sense_error from libata.) * map, and ata_to_sense_error from libata.)
*/ */
/* Sense data is current and format is descriptor. */ /* Sense data is current and format is descriptor. */
...@@ -258,7 +263,8 @@ static int cypress_probe(struct usb_interface *intf, ...@@ -258,7 +263,8 @@ static int cypress_probe(struct usb_interface *intf,
if (result) if (result)
return result; return result;
/* Among CY7C68300 chips, the A revision does not support Cypress ATACB /*
* Among CY7C68300 chips, the A revision does not support Cypress ATACB
* Filter out this revision from EEPROM default descriptor values * Filter out this revision from EEPROM default descriptor values
*/ */
device = interface_to_usbdev(intf); device = interface_to_usbdev(intf);
......
/* Driver for Datafab USB Compact Flash reader /*
* Driver for Datafab USB Compact Flash reader
* *
* datafab driver v0.1: * datafab driver v0.1:
* *
...@@ -693,18 +694,23 @@ static int datafab_transport(struct scsi_cmnd *srb, struct us_data *us) ...@@ -693,18 +694,23 @@ static int datafab_transport(struct scsi_cmnd *srb, struct us_data *us)
} }
if (srb->cmnd[0] == ALLOW_MEDIUM_REMOVAL) { if (srb->cmnd[0] == ALLOW_MEDIUM_REMOVAL) {
// sure. whatever. not like we can stop the user from /*
// popping the media out of the device (no locking doors, etc) * sure. whatever. not like we can stop the user from
// * popping the media out of the device (no locking doors, etc)
*/
return USB_STOR_TRANSPORT_GOOD; return USB_STOR_TRANSPORT_GOOD;
} }
if (srb->cmnd[0] == START_STOP) { if (srb->cmnd[0] == START_STOP) {
/* this is used by sd.c'check_scsidisk_media_change to detect /*
media change */ * this is used by sd.c'check_scsidisk_media_change to detect
* media change
*/
usb_stor_dbg(us, "START_STOP\n"); usb_stor_dbg(us, "START_STOP\n");
/* the first datafab_id_device after a media change returns /*
an error (determined experimentally) */ * the first datafab_id_device after a media change returns
* an error (determined experimentally)
*/
rc = datafab_id_device(us, info); rc = datafab_id_device(us, info);
if (rc == USB_STOR_TRANSPORT_GOOD) { if (rc == USB_STOR_TRANSPORT_GOOD) {
info->sense_key = NO_SENSE; info->sense_key = NO_SENSE;
......
/* Driver for USB Mass Storage compliant devices /*
* Driver for USB Mass Storage compliant devices
* Debugging Functions Source Code File * Debugging Functions Source Code File
* *
* Current development and maintenance by: * Current development and maintenance by:
......
/* Driver for USB Mass Storage compliant devices /*
* Driver for USB Mass Storage compliant devices
* Debugging Functions Header File * Debugging Functions Header File
* *
* Current development and maintenance by: * Current development and maintenance by:
......
...@@ -560,8 +560,10 @@ static int ene_send_scsi_cmd(struct us_data *us, u8 fDir, void *buf, int use_sg) ...@@ -560,8 +560,10 @@ static int ene_send_scsi_cmd(struct us_data *us, u8 fDir, void *buf, int use_sg)
/* check bulk status */ /* check bulk status */
residue = le32_to_cpu(bcs->Residue); residue = le32_to_cpu(bcs->Residue);
/* try to compute the actual residue, based on how much data /*
* was really transferred and what the device tells us */ * try to compute the actual residue, based on how much data
* was really transferred and what the device tells us
*/
if (residue && !(us->fflags & US_FL_IGNORE_RESIDUE)) { if (residue && !(us->fflags & US_FL_IGNORE_RESIDUE)) {
residue = min(residue, transfer_length); residue = min(residue, transfer_length);
if (us->srb != NULL) if (us->srb != NULL)
...@@ -862,9 +864,6 @@ static int ms_read_readpage(struct us_data *us, u32 PhyBlockAddr, ...@@ -862,9 +864,6 @@ static int ms_read_readpage(struct us_data *us, u32 PhyBlockAddr,
u8 ExtBuf[4]; u8 ExtBuf[4];
u32 bn = PhyBlockAddr * 0x20 + PageNum; u32 bn = PhyBlockAddr * 0x20 + PageNum;
/* printk(KERN_INFO "MS --- MS_ReaderReadPage,
PhyBlockAddr = %x, PageNum = %x\n", PhyBlockAddr, PageNum); */
result = ene_load_bincode(us, MS_RW_PATTERN); result = ene_load_bincode(us, MS_RW_PATTERN);
if (result != USB_STOR_XFER_GOOD) if (result != USB_STOR_XFER_GOOD)
return USB_STOR_TRANSPORT_ERROR; return USB_STOR_TRANSPORT_ERROR;
...@@ -1141,8 +1140,6 @@ static int ms_read_copyblock(struct us_data *us, u16 oldphy, u16 newphy, ...@@ -1141,8 +1140,6 @@ static int ms_read_copyblock(struct us_data *us, u16 oldphy, u16 newphy,
struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf;
int result; int result;
/* printk(KERN_INFO "MS_ReaderCopyBlock --- PhyBlockAddr = %x,
PageNum = %x\n", PhyBlockAddr, PageNum); */
result = ene_load_bincode(us, MS_RW_PATTERN); result = ene_load_bincode(us, MS_RW_PATTERN);
if (result != USB_STOR_XFER_GOOD) if (result != USB_STOR_XFER_GOOD)
return USB_STOR_TRANSPORT_ERROR; return USB_STOR_TRANSPORT_ERROR;
...@@ -1176,8 +1173,6 @@ static int ms_read_eraseblock(struct us_data *us, u32 PhyBlockAddr) ...@@ -1176,8 +1173,6 @@ static int ms_read_eraseblock(struct us_data *us, u32 PhyBlockAddr)
int result; int result;
u32 bn = PhyBlockAddr; u32 bn = PhyBlockAddr;
/* printk(KERN_INFO "MS --- ms_read_eraseblock,
PhyBlockAddr = %x\n", PhyBlockAddr); */
result = ene_load_bincode(us, MS_RW_PATTERN); result = ene_load_bincode(us, MS_RW_PATTERN);
if (result != USB_STOR_XFER_GOOD) if (result != USB_STOR_XFER_GOOD)
return USB_STOR_TRANSPORT_ERROR; return USB_STOR_TRANSPORT_ERROR;
...@@ -1255,8 +1250,6 @@ static int ms_lib_overwrite_extra(struct us_data *us, u32 PhyBlockAddr, ...@@ -1255,8 +1250,6 @@ static int ms_lib_overwrite_extra(struct us_data *us, u32 PhyBlockAddr,
struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf;
int result; int result;
/* printk("MS --- MS_LibOverwriteExtra,
PhyBlockAddr = %x, PageNum = %x\n", PhyBlockAddr, PageNum); */
result = ene_load_bincode(us, MS_RW_PATTERN); result = ene_load_bincode(us, MS_RW_PATTERN);
if (result != USB_STOR_XFER_GOOD) if (result != USB_STOR_XFER_GOOD)
return USB_STOR_TRANSPORT_ERROR; return USB_STOR_TRANSPORT_ERROR;
...@@ -1342,7 +1335,6 @@ static int ms_lib_read_extra(struct us_data *us, u32 PhyBlock, ...@@ -1342,7 +1335,6 @@ static int ms_lib_read_extra(struct us_data *us, u32 PhyBlock,
int result; int result;
u8 ExtBuf[4]; u8 ExtBuf[4];
/* printk("MS_LibReadExtra --- PhyBlock = %x, PageNum = %x\n", PhyBlock, PageNum); */
memset(bcb, 0, sizeof(struct bulk_cb_wrap)); memset(bcb, 0, sizeof(struct bulk_cb_wrap));
bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN);
bcb->DataTransferLength = 0x4; bcb->DataTransferLength = 0x4;
...@@ -1541,9 +1533,6 @@ static int ms_lib_read_extrablock(struct us_data *us, u32 PhyBlock, ...@@ -1541,9 +1533,6 @@ static int ms_lib_read_extrablock(struct us_data *us, u32 PhyBlock,
struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf;
int result; int result;
/* printk("MS_LibReadExtraBlock --- PhyBlock = %x,
PageNum = %x, blen = %x\n", PhyBlock, PageNum, blen); */
/* Read Extra Data */ /* Read Extra Data */
memset(bcb, 0, sizeof(struct bulk_cb_wrap)); memset(bcb, 0, sizeof(struct bulk_cb_wrap));
bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN);
...@@ -2390,8 +2379,10 @@ static int ene_ub6250_reset_resume(struct usb_interface *iface) ...@@ -2390,8 +2379,10 @@ static int ene_ub6250_reset_resume(struct usb_interface *iface)
/* Report the reset to the SCSI core */ /* Report the reset to the SCSI core */
usb_stor_reset_resume(iface); usb_stor_reset_resume(iface);
/* FIXME: Notify the subdrivers that they need to reinitialize /*
* the device */ * FIXME: Notify the subdrivers that they need to reinitialize
* the device
*/
info->Power_IsResum = true; info->Power_IsResum = true;
/*info->SD_Status.Ready = 0; */ /*info->SD_Status.Ready = 0; */
info->SD_Status = *(struct SD_STATUS *)&tmp; info->SD_Status = *(struct SD_STATUS *)&tmp;
......
/* Driver for Freecom USB/IDE adaptor /*
* Driver for Freecom USB/IDE adaptor
* *
* Freecom v0.1: * Freecom v0.1:
* *
...@@ -84,25 +85,33 @@ struct freecom_status { ...@@ -84,25 +85,33 @@ struct freecom_status {
u8 Pad[60]; u8 Pad[60];
}; };
/* Freecom stuffs the interrupt status in the INDEX_STAT bit of the ide /*
* register. */ * Freecom stuffs the interrupt status in the INDEX_STAT bit of the ide
* register.
*/
#define FCM_INT_STATUS 0x02 /* INDEX_STAT */ #define FCM_INT_STATUS 0x02 /* INDEX_STAT */
#define FCM_STATUS_BUSY 0x80 #define FCM_STATUS_BUSY 0x80
/* These are the packet types. The low bit indicates that this command /*
* should wait for an interrupt. */ * These are the packet types. The low bit indicates that this command
* should wait for an interrupt.
*/
#define FCM_PACKET_ATAPI 0x21 #define FCM_PACKET_ATAPI 0x21
#define FCM_PACKET_STATUS 0x20 #define FCM_PACKET_STATUS 0x20
/* Receive data from the IDE interface. The ATAPI packet has already /*
* waited, so the data should be immediately available. */ * Receive data from the IDE interface. The ATAPI packet has already
* waited, so the data should be immediately available.
*/
#define FCM_PACKET_INPUT 0x81 #define FCM_PACKET_INPUT 0x81
/* Send data to the IDE interface. */ /* Send data to the IDE interface. */
#define FCM_PACKET_OUTPUT 0x01 #define FCM_PACKET_OUTPUT 0x01
/* Write a value to an ide register. Or the ide register to write after /*
* munging the address a bit. */ * Write a value to an ide register. Or the ide register to write after
* munging the address a bit.
*/
#define FCM_PACKET_IDE_WRITE 0x40 #define FCM_PACKET_IDE_WRITE 0x40
#define FCM_PACKET_IDE_READ 0xC0 #define FCM_PACKET_IDE_READ 0xC0
...@@ -251,16 +260,20 @@ static int freecom_transport(struct scsi_cmnd *srb, struct us_data *us) ...@@ -251,16 +260,20 @@ static int freecom_transport(struct scsi_cmnd *srb, struct us_data *us)
result = usb_stor_bulk_transfer_buf (us, opipe, fcb, result = usb_stor_bulk_transfer_buf (us, opipe, fcb,
FCM_PACKET_LENGTH, NULL); FCM_PACKET_LENGTH, NULL);
/* The Freecom device will only fail if there is something wrong in /*
* The Freecom device will only fail if there is something wrong in
* USB land. It returns the status in its own registers, which * USB land. It returns the status in its own registers, which
* come back in the bulk pipe. */ * come back in the bulk pipe.
*/
if (result != USB_STOR_XFER_GOOD) { if (result != USB_STOR_XFER_GOOD) {
usb_stor_dbg(us, "freecom transport error\n"); usb_stor_dbg(us, "freecom transport error\n");
return USB_STOR_TRANSPORT_ERROR; return USB_STOR_TRANSPORT_ERROR;
} }
/* There are times we can optimize out this status read, but it /*
* doesn't hurt us to always do it now. */ * There are times we can optimize out this status read, but it
* doesn't hurt us to always do it now.
*/
result = usb_stor_bulk_transfer_buf (us, ipipe, fst, result = usb_stor_bulk_transfer_buf (us, ipipe, fst,
FCM_STATUS_PACKET_LENGTH, &partial); FCM_STATUS_PACKET_LENGTH, &partial);
usb_stor_dbg(us, "foo Status result %d %u\n", result, partial); usb_stor_dbg(us, "foo Status result %d %u\n", result, partial);
...@@ -269,7 +282,8 @@ static int freecom_transport(struct scsi_cmnd *srb, struct us_data *us) ...@@ -269,7 +282,8 @@ static int freecom_transport(struct scsi_cmnd *srb, struct us_data *us)
US_DEBUG(pdump(us, (void *)fst, partial)); US_DEBUG(pdump(us, (void *)fst, partial));
/* The firmware will time-out commands after 20 seconds. Some commands /*
* The firmware will time-out commands after 20 seconds. Some commands
* can legitimately take longer than this, so we use a different * can legitimately take longer than this, so we use a different
* command that only waits for the interrupt and then sends status, * command that only waits for the interrupt and then sends status,
* without having to send a new ATAPI command to the device. * without having to send a new ATAPI command to the device.
...@@ -291,7 +305,8 @@ static int freecom_transport(struct scsi_cmnd *srb, struct us_data *us) ...@@ -291,7 +305,8 @@ static int freecom_transport(struct scsi_cmnd *srb, struct us_data *us)
result = usb_stor_bulk_transfer_buf (us, opipe, fcb, result = usb_stor_bulk_transfer_buf (us, opipe, fcb,
FCM_PACKET_LENGTH, NULL); FCM_PACKET_LENGTH, NULL);
/* The Freecom device will only fail if there is something /*
* The Freecom device will only fail if there is something
* wrong in USB land. It returns the status in its own * wrong in USB land. It returns the status in its own
* registers, which come back in the bulk pipe. * registers, which come back in the bulk pipe.
*/ */
...@@ -318,9 +333,11 @@ static int freecom_transport(struct scsi_cmnd *srb, struct us_data *us) ...@@ -318,9 +333,11 @@ static int freecom_transport(struct scsi_cmnd *srb, struct us_data *us)
return USB_STOR_TRANSPORT_FAILED; return USB_STOR_TRANSPORT_FAILED;
} }
/* The device might not have as much data available as we /*
* The device might not have as much data available as we
* requested. If you ask for more than the device has, this reads * requested. If you ask for more than the device has, this reads
* and such will hang. */ * and such will hang.
*/
usb_stor_dbg(us, "Device indicates that it has %d bytes available\n", usb_stor_dbg(us, "Device indicates that it has %d bytes available\n",
le16_to_cpu(fst->Count)); le16_to_cpu(fst->Count));
usb_stor_dbg(us, "SCSI requested %d\n", scsi_bufflen(srb)); usb_stor_dbg(us, "SCSI requested %d\n", scsi_bufflen(srb));
...@@ -344,16 +361,20 @@ static int freecom_transport(struct scsi_cmnd *srb, struct us_data *us) ...@@ -344,16 +361,20 @@ static int freecom_transport(struct scsi_cmnd *srb, struct us_data *us)
length); length);
} }
/* What we do now depends on what direction the data is supposed to /*
* move in. */ * What we do now depends on what direction the data is supposed to
* move in.
*/
switch (us->srb->sc_data_direction) { switch (us->srb->sc_data_direction) {
case DMA_FROM_DEVICE: case DMA_FROM_DEVICE:
/* catch bogus "read 0 length" case */ /* catch bogus "read 0 length" case */
if (!length) if (!length)
break; break;
/* Make sure that the status indicates that the device /*
* wants data as well. */ * Make sure that the status indicates that the device
* wants data as well.
*/
if ((fst->Status & DRQ_STAT) == 0 || (fst->Reason & 3) != 2) { if ((fst->Status & DRQ_STAT) == 0 || (fst->Reason & 3) != 2) {
usb_stor_dbg(us, "SCSI wants data, drive doesn't have any\n"); usb_stor_dbg(us, "SCSI wants data, drive doesn't have any\n");
return USB_STOR_TRANSPORT_FAILED; return USB_STOR_TRANSPORT_FAILED;
...@@ -384,8 +405,10 @@ static int freecom_transport(struct scsi_cmnd *srb, struct us_data *us) ...@@ -384,8 +405,10 @@ static int freecom_transport(struct scsi_cmnd *srb, struct us_data *us)
/* catch bogus "write 0 length" case */ /* catch bogus "write 0 length" case */
if (!length) if (!length)
break; break;
/* Make sure the status indicates that the device wants to /*
* send us data. */ * Make sure the status indicates that the device wants to
* send us data.
*/
/* !!IMPLEMENT!! */ /* !!IMPLEMENT!! */
result = freecom_writedata (srb, us, ipipe, opipe, length); result = freecom_writedata (srb, us, ipipe, opipe, length);
if (result != USB_STOR_TRANSPORT_GOOD) if (result != USB_STOR_TRANSPORT_GOOD)
...@@ -431,7 +454,8 @@ static int init_freecom(struct us_data *us) ...@@ -431,7 +454,8 @@ static int init_freecom(struct us_data *us)
int result; int result;
char *buffer = us->iobuf; char *buffer = us->iobuf;
/* The DMA-mapped I/O buffer is 64 bytes long, just right for /*
* The DMA-mapped I/O buffer is 64 bytes long, just right for
* all our packets. No need to allocate any extra buffer space. * all our packets. No need to allocate any extra buffer space.
*/ */
...@@ -440,7 +464,8 @@ static int init_freecom(struct us_data *us) ...@@ -440,7 +464,8 @@ static int init_freecom(struct us_data *us)
buffer[32] = '\0'; buffer[32] = '\0';
usb_stor_dbg(us, "String returned from FC init is: %s\n", buffer); usb_stor_dbg(us, "String returned from FC init is: %s\n", buffer);
/* Special thanks to the people at Freecom for providing me with /*
* Special thanks to the people at Freecom for providing me with
* this "magic sequence", which they use in their Windows and MacOS * this "magic sequence", which they use in their Windows and MacOS
* drivers to make sure that all the attached perhiperals are * drivers to make sure that all the attached perhiperals are
* properly reset. * properly reset.
......
/* Special Initializers for certain USB Mass Storage devices /*
* Special Initializers for certain USB Mass Storage devices
* *
* Current development and maintenance by: * Current development and maintenance by:
* (c) 1999, 2000 Matthew Dharm (mdharm-usb@one-eyed-alien.net) * (c) 1999, 2000 Matthew Dharm (mdharm-usb@one-eyed-alien.net)
...@@ -42,8 +43,10 @@ ...@@ -42,8 +43,10 @@
#include "debug.h" #include "debug.h"
#include "transport.h" #include "transport.h"
/* This places the Shuttle/SCM USB<->SCSI bridge devices in multi-target /*
* mode */ * This places the Shuttle/SCM USB<->SCSI bridge devices in multi-target
* mode
*/
int usb_stor_euscsi_init(struct us_data *us) int usb_stor_euscsi_init(struct us_data *us)
{ {
int result; int result;
...@@ -57,8 +60,10 @@ int usb_stor_euscsi_init(struct us_data *us) ...@@ -57,8 +60,10 @@ int usb_stor_euscsi_init(struct us_data *us)
return 0; return 0;
} }
/* This function is required to activate all four slots on the UCR-61S2B /*
* flash reader */ * This function is required to activate all four slots on the UCR-61S2B
* flash reader
*/
int usb_stor_ucr61s2b_init(struct us_data *us) int usb_stor_ucr61s2b_init(struct us_data *us)
{ {
struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap*) us->iobuf; struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap*) us->iobuf;
......
/* Header file for Special Initializers for certain USB Mass Storage devices /*
* Header file for Special Initializers for certain USB Mass Storage devices
* *
* Current development and maintenance by: * Current development and maintenance by:
* (c) 1999, 2000 Matthew Dharm (mdharm-usb@one-eyed-alien.net) * (c) 1999, 2000 Matthew Dharm (mdharm-usb@one-eyed-alien.net)
...@@ -38,12 +39,16 @@ ...@@ -38,12 +39,16 @@
#include "usb.h" #include "usb.h"
#include "transport.h" #include "transport.h"
/* This places the Shuttle/SCM USB<->SCSI bridge devices in multi-target /*
* mode */ * This places the Shuttle/SCM USB<->SCSI bridge devices in multi-target
* mode
*/
int usb_stor_euscsi_init(struct us_data *us); int usb_stor_euscsi_init(struct us_data *us);
/* This function is required to activate all four slots on the UCR-61S2B /*
* flash reader */ * This function is required to activate all four slots on the UCR-61S2B
* flash reader
*/
int usb_stor_ucr61s2b_init(struct us_data *us); int usb_stor_ucr61s2b_init(struct us_data *us);
/* This places the HUAWEI E220 devices in multi-port mode */ /* This places the HUAWEI E220 devices in multi-port mode */
......
/* Transport & Protocol Driver for In-System Design, Inc. ISD200 ASIC /*
* Transport & Protocol Driver for In-System Design, Inc. ISD200 ASIC
* *
* Current development and maintenance: * Current development and maintenance:
* (C) 2001-2002 Björn Stenberg (bjorn@haxx.se) * (C) 2001-2002 Björn Stenberg (bjorn@haxx.se)
...@@ -628,7 +629,8 @@ static void isd200_invoke_transport( struct us_data *us, ...@@ -628,7 +629,8 @@ static void isd200_invoke_transport( struct us_data *us,
srb->cmd_len = sizeof(ataCdb->generic); srb->cmd_len = sizeof(ataCdb->generic);
transferStatus = usb_stor_Bulk_transport(srb, us); transferStatus = usb_stor_Bulk_transport(srb, us);
/* if the command gets aborted by the higher layers, we need to /*
* if the command gets aborted by the higher layers, we need to
* short-circuit all other processing * short-circuit all other processing
*/ */
if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) { if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) {
...@@ -695,15 +697,18 @@ static void isd200_invoke_transport( struct us_data *us, ...@@ -695,15 +697,18 @@ static void isd200_invoke_transport( struct us_data *us,
} }
} }
/* Regardless of auto-sense, if we _know_ we have an error /*
* Regardless of auto-sense, if we _know_ we have an error
* condition, show that in the result code * condition, show that in the result code
*/ */
if (transferStatus == USB_STOR_TRANSPORT_FAILED) if (transferStatus == USB_STOR_TRANSPORT_FAILED)
srb->result = SAM_STAT_CHECK_CONDITION; srb->result = SAM_STAT_CHECK_CONDITION;
return; return;
/* abort processing: the bulk-only transport requires a reset /*
* following an abort */ * abort processing: the bulk-only transport requires a reset
* following an abort
*/
Handle_Abort: Handle_Abort:
srb->result = DID_ABORT << 16; srb->result = DID_ABORT << 16;
...@@ -965,20 +970,22 @@ static int isd200_try_enum(struct us_data *us, unsigned char master_slave, ...@@ -965,20 +970,22 @@ static int isd200_try_enum(struct us_data *us, unsigned char master_slave,
info->DeviceHead = master_slave; info->DeviceHead = master_slave;
break; break;
} }
/* check Cylinder High/Low to /*
determine if it is an ATAPI device * check Cylinder High/Low to
*/ * determine if it is an ATAPI device
*/
else if (regs[ATA_REG_HCYL_OFFSET] == 0xEB && else if (regs[ATA_REG_HCYL_OFFSET] == 0xEB &&
regs[ATA_REG_LCYL_OFFSET] == 0x14) { regs[ATA_REG_LCYL_OFFSET] == 0x14) {
/* It seems that the RICOH /*
MP6200A CD/RW drive will * It seems that the RICOH
report itself okay as a * MP6200A CD/RW drive will
slave when it is really a * report itself okay as a
master. So this check again * slave when it is really a
as a master device just to * master. So this check again
make sure it doesn't report * as a master device just to
itself okay as a master also * make sure it doesn't report
*/ * itself okay as a master also
*/
if ((master_slave & ATA_ADDRESS_DEVHEAD_SLAVE) && if ((master_slave & ATA_ADDRESS_DEVHEAD_SLAVE) &&
!recheckAsMaster) { !recheckAsMaster) {
usb_stor_dbg(us, " Identified ATAPI device as slave. Rechecking again as master\n"); usb_stor_dbg(us, " Identified ATAPI device as slave. Rechecking again as master\n");
...@@ -1176,9 +1183,11 @@ static int isd200_get_inquiry_data( struct us_data *us ) ...@@ -1176,9 +1183,11 @@ static int isd200_get_inquiry_data( struct us_data *us )
if (id[ATA_ID_COMMAND_SET_2] & COMMANDSET_MEDIA_STATUS) { if (id[ATA_ID_COMMAND_SET_2] & COMMANDSET_MEDIA_STATUS) {
usb_stor_dbg(us, " Device supports Media Status Notification\n"); usb_stor_dbg(us, " Device supports Media Status Notification\n");
/* Indicate that it is enabled, even though it is not /*
* This allows the lock/unlock of the media to work * Indicate that it is enabled, even
* correctly. * though it is not.
* This allows the lock/unlock of the
* media to work correctly.
*/ */
info->DeviceFlags |= DF_MEDIA_STATUS_ENABLED; info->DeviceFlags |= DF_MEDIA_STATUS_ENABLED;
} }
...@@ -1197,7 +1206,7 @@ static int isd200_get_inquiry_data( struct us_data *us ) ...@@ -1197,7 +1206,7 @@ static int isd200_get_inquiry_data( struct us_data *us )
usb_stor_dbg(us, "Protocol changed to: %s\n", usb_stor_dbg(us, "Protocol changed to: %s\n",
us->protocol_name); us->protocol_name);
/* Free driver structure */ /* Free driver structure */
us->extra_destructor(info); us->extra_destructor(info);
kfree(info); kfree(info);
us->extra = NULL; us->extra = NULL;
......
/* Driver for Lexar "Jumpshot" Compact Flash reader /*
* Driver for Lexar "Jumpshot" Compact Flash reader
* *
* jumpshot driver v0.1: * jumpshot driver v0.1:
* *
...@@ -618,18 +619,23 @@ static int jumpshot_transport(struct scsi_cmnd *srb, struct us_data *us) ...@@ -618,18 +619,23 @@ static int jumpshot_transport(struct scsi_cmnd *srb, struct us_data *us)
} }
if (srb->cmnd[0] == ALLOW_MEDIUM_REMOVAL) { if (srb->cmnd[0] == ALLOW_MEDIUM_REMOVAL) {
// sure. whatever. not like we can stop the user from popping /*
// the media out of the device (no locking doors, etc) * sure. whatever. not like we can stop the user from popping
// * the media out of the device (no locking doors, etc)
*/
return USB_STOR_TRANSPORT_GOOD; return USB_STOR_TRANSPORT_GOOD;
} }
if (srb->cmnd[0] == START_STOP) { if (srb->cmnd[0] == START_STOP) {
/* this is used by sd.c'check_scsidisk_media_change to detect /*
media change */ * this is used by sd.c'check_scsidisk_media_change to detect
* media change
*/
usb_stor_dbg(us, "START_STOP\n"); usb_stor_dbg(us, "START_STOP\n");
/* the first jumpshot_id_device after a media change returns /*
an error (determined experimentally) */ * the first jumpshot_id_device after a media change returns
* an error (determined experimentally)
*/
rc = jumpshot_id_device(us, info); rc = jumpshot_id_device(us, info);
if (rc == USB_STOR_TRANSPORT_GOOD) { if (rc == USB_STOR_TRANSPORT_GOOD) {
info->sense_key = NO_SENSE; info->sense_key = NO_SENSE;
......
/* Driver for Rio Karma /*
* Driver for Rio Karma
* *
* (c) 2006 Bob Copeland <me@bobcopeland.com> * (c) 2006 Bob Copeland <me@bobcopeland.com>
* (c) 2006 Keith Bennett <keith@mcs.st-and.ac.uk> * (c) 2006 Keith Bennett <keith@mcs.st-and.ac.uk>
......
...@@ -65,7 +65,8 @@ static int option_rezero(struct us_data *us) ...@@ -65,7 +65,8 @@ static int option_rezero(struct us_data *us)
goto out; goto out;
} }
/* Some of the devices need to be asked for a response, but we don't /*
* Some of the devices need to be asked for a response, but we don't
* care what that response is. * care what that response is.
*/ */
usb_stor_bulk_transfer_buf(us, usb_stor_bulk_transfer_buf(us,
...@@ -140,7 +141,8 @@ int option_ms_init(struct us_data *us) ...@@ -140,7 +141,8 @@ int option_ms_init(struct us_data *us)
usb_stor_dbg(us, "Option MS: %s\n", "option_ms_init called"); usb_stor_dbg(us, "Option MS: %s\n", "option_ms_init called");
/* Additional test for vendor information via INQUIRY, /*
* Additional test for vendor information via INQUIRY,
* because some vendor/product IDs are ambiguous * because some vendor/product IDs are ambiguous
*/ */
result = option_inquiry(us); result = option_inquiry(us);
......
/* Driver for USB Mass Storage compliant devices /*
* Driver for USB Mass Storage compliant devices
* *
* Current development and maintenance by: * Current development and maintenance by:
* (c) 1999-2002 Matthew Dharm (mdharm-usb@one-eyed-alien.net) * (c) 1999-2002 Matthew Dharm (mdharm-usb@one-eyed-alien.net)
...@@ -75,7 +76,8 @@ void usb_stor_pad12_command(struct scsi_cmnd *srb, struct us_data *us) ...@@ -75,7 +76,8 @@ void usb_stor_pad12_command(struct scsi_cmnd *srb, struct us_data *us)
void usb_stor_ufi_command(struct scsi_cmnd *srb, struct us_data *us) void usb_stor_ufi_command(struct scsi_cmnd *srb, struct us_data *us)
{ {
/* fix some commands -- this is a form of mode translation /*
* fix some commands -- this is a form of mode translation
* UFI devices only accept 12 byte long commands * UFI devices only accept 12 byte long commands
* *
* NOTE: This only works because a scsi_cmnd struct field contains * NOTE: This only works because a scsi_cmnd struct field contains
...@@ -127,7 +129,8 @@ EXPORT_SYMBOL_GPL(usb_stor_transparent_scsi_command); ...@@ -127,7 +129,8 @@ EXPORT_SYMBOL_GPL(usb_stor_transparent_scsi_command);
* Scatter-gather transfer buffer access routines * Scatter-gather transfer buffer access routines
***********************************************************************/ ***********************************************************************/
/* Copy a buffer of length buflen to/from the srb's transfer buffer. /*
* Copy a buffer of length buflen to/from the srb's transfer buffer.
* Update the **sgptr and *offset variables so that the next copy will * Update the **sgptr and *offset variables so that the next copy will
* pick up from where this one left off. * pick up from where this one left off.
*/ */
...@@ -175,7 +178,8 @@ unsigned int usb_stor_access_xfer_buf(unsigned char *buffer, ...@@ -175,7 +178,8 @@ unsigned int usb_stor_access_xfer_buf(unsigned char *buffer,
} }
EXPORT_SYMBOL_GPL(usb_stor_access_xfer_buf); EXPORT_SYMBOL_GPL(usb_stor_access_xfer_buf);
/* Store the contents of buffer into srb's transfer buffer and set the /*
* Store the contents of buffer into srb's transfer buffer and set the
* SCSI residue. * SCSI residue.
*/ */
void usb_stor_set_xfer_buf(unsigned char *buffer, void usb_stor_set_xfer_buf(unsigned char *buffer,
......
/* Driver for USB Mass Storage compliant devices /*
* Driver for USB Mass Storage compliant devices
* Protocol Functions Header File * Protocol Functions Header File
* *
* Current development and maintenance by: * Current development and maintenance by:
......
/* Driver for Realtek RTS51xx USB card reader /*
* Driver for Realtek RTS51xx USB card reader
* *
* Copyright(c) 2009 Realtek Semiconductor Corp. All rights reserved. * Copyright(c) 2009 Realtek Semiconductor Corp. All rights reserved.
* *
...@@ -267,8 +268,10 @@ static int rts51x_bulk_transport(struct us_data *us, u8 lun, ...@@ -267,8 +268,10 @@ static int rts51x_bulk_transport(struct us_data *us, u8 lun,
if (bcs->Tag != us->tag) if (bcs->Tag != us->tag)
return USB_STOR_TRANSPORT_ERROR; return USB_STOR_TRANSPORT_ERROR;
/* try to compute the actual residue, based on how much data /*
* was really transferred and what the device tells us */ * try to compute the actual residue, based on how much data
* was really transferred and what the device tells us
*/
if (residue) if (residue)
residue = residue < buf_len ? residue : buf_len; residue = residue < buf_len ? residue : buf_len;
...@@ -286,7 +289,8 @@ static int rts51x_bulk_transport(struct us_data *us, u8 lun, ...@@ -286,7 +289,8 @@ static int rts51x_bulk_transport(struct us_data *us, u8 lun,
return USB_STOR_TRANSPORT_FAILED; return USB_STOR_TRANSPORT_FAILED;
case US_BULK_STAT_PHASE: case US_BULK_STAT_PHASE:
/* phase error -- note that a transport reset will be /*
* phase error -- note that a transport reset will be
* invoked by the invoke_transport() function * invoked by the invoke_transport() function
*/ */
return USB_STOR_TRANSPORT_ERROR; return USB_STOR_TRANSPORT_ERROR;
......
This diff is collapsed.
/* Driver for USB Mass Storage compliant devices /*
* Driver for USB Mass Storage compliant devices
* SCSI Connecting Glue Header File * SCSI Connecting Glue Header File
* *
* Current development and maintenance by: * Current development and maintenance by:
......
/* Driver for SanDisk SDDR-09 SmartMedia reader /*
* Driver for SanDisk SDDR-09 SmartMedia reader
* *
* (c) 2000, 2001 Robert Baruch (autophile@starband.net) * (c) 2000, 2001 Robert Baruch (autophile@starband.net)
* (c) 2002 Andries Brouwer (aeb@cwi.nl) * (c) 2002 Andries Brouwer (aeb@cwi.nl)
...@@ -799,10 +800,12 @@ sddr09_read_data(struct us_data *us, ...@@ -799,10 +800,12 @@ sddr09_read_data(struct us_data *us,
usb_stor_dbg(us, "Read %d zero pages (LBA %d) page %d\n", usb_stor_dbg(us, "Read %d zero pages (LBA %d) page %d\n",
pages, lba, page); pages, lba, page);
/* This is not really an error. It just means /*
that the block has never been written. * This is not really an error. It just means
Instead of returning an error * that the block has never been written.
it is better to return all zero data. */ * Instead of returning an error
* it is better to return all zero data.
*/
memset(buffer, 0, len); memset(buffer, 0, len);
...@@ -890,8 +893,10 @@ sddr09_write_lba(struct us_data *us, unsigned int lba, ...@@ -890,8 +893,10 @@ sddr09_write_lba(struct us_data *us, unsigned int lba,
} }
if (pba == 1) { if (pba == 1) {
/* Maybe it is impossible to write to PBA 1. /*
Fake success, but don't do anything. */ * Maybe it is impossible to write to PBA 1.
* Fake success, but don't do anything.
*/
printk(KERN_WARNING "sddr09: avoid writing to pba 1\n"); printk(KERN_WARNING "sddr09: avoid writing to pba 1\n");
return 0; return 0;
} }
...@@ -979,18 +984,22 @@ sddr09_write_data(struct us_data *us, ...@@ -979,18 +984,22 @@ sddr09_write_data(struct us_data *us,
struct scatterlist *sg; struct scatterlist *sg;
int result; int result;
// Figure out the initial LBA and page /* Figure out the initial LBA and page */
lba = address >> info->blockshift; lba = address >> info->blockshift;
page = (address & info->blockmask); page = (address & info->blockmask);
maxlba = info->capacity >> (info->pageshift + info->blockshift); maxlba = info->capacity >> (info->pageshift + info->blockshift);
if (lba >= maxlba) if (lba >= maxlba)
return -EIO; return -EIO;
// blockbuffer is used for reading in the old data, overwriting /*
// with the new data, and performing ECC calculations * blockbuffer is used for reading in the old data, overwriting
* with the new data, and performing ECC calculations
*/
/* TODO: instead of doing kmalloc/kfree for each write, /*
add a bufferpointer to the info structure */ * TODO: instead of doing kmalloc/kfree for each write,
* add a bufferpointer to the info structure
*/
pagelen = (1 << info->pageshift) + (1 << CONTROL_SHIFT); pagelen = (1 << info->pageshift) + (1 << CONTROL_SHIFT);
blocklen = (pagelen << info->blockshift); blocklen = (pagelen << info->blockshift);
...@@ -1000,9 +1009,11 @@ sddr09_write_data(struct us_data *us, ...@@ -1000,9 +1009,11 @@ sddr09_write_data(struct us_data *us,
return -ENOMEM; return -ENOMEM;
} }
// Since we don't write the user data directly to the device, /*
// we have to create a bounce buffer and move the data a piece * Since we don't write the user data directly to the device,
// at a time between the bounce buffer and the actual transfer buffer. * we have to create a bounce buffer and move the data a piece
* at a time between the bounce buffer and the actual transfer buffer.
*/
len = min(sectors, (unsigned int) info->blocksize) * info->pagesize; len = min(sectors, (unsigned int) info->blocksize) * info->pagesize;
buffer = kmalloc(len, GFP_NOIO); buffer = kmalloc(len, GFP_NOIO);
...@@ -1018,7 +1029,7 @@ sddr09_write_data(struct us_data *us, ...@@ -1018,7 +1029,7 @@ sddr09_write_data(struct us_data *us,
while (sectors > 0) { while (sectors > 0) {
// Write as many sectors as possible in this block /* Write as many sectors as possible in this block */
pages = min(sectors, info->blocksize - page); pages = min(sectors, info->blocksize - page);
len = (pages << info->pageshift); len = (pages << info->pageshift);
...@@ -1031,7 +1042,7 @@ sddr09_write_data(struct us_data *us, ...@@ -1031,7 +1042,7 @@ sddr09_write_data(struct us_data *us,
break; break;
} }
// Get the data from the transfer buffer /* Get the data from the transfer buffer */
usb_stor_access_xfer_buf(buffer, len, us->srb, usb_stor_access_xfer_buf(buffer, len, us->srb,
&sg, &offset, FROM_XFER_BUF); &sg, &offset, FROM_XFER_BUF);
...@@ -1168,9 +1179,11 @@ sddr09_get_cardinfo(struct us_data *us, unsigned char flags) { ...@@ -1168,9 +1179,11 @@ sddr09_get_cardinfo(struct us_data *us, unsigned char flags) {
/* Byte 1 is the device type */ /* Byte 1 is the device type */
cardinfo = nand_find_id(deviceID[1]); cardinfo = nand_find_id(deviceID[1]);
if (cardinfo) { if (cardinfo) {
/* MB or MiB? It is neither. A 16 MB card has /*
17301504 raw bytes, of which 16384000 are * MB or MiB? It is neither. A 16 MB card has
usable for user data. */ * 17301504 raw bytes, of which 16384000 are
* usable for user data.
*/
sprintf(blurbtxt + strlen(blurbtxt), sprintf(blurbtxt + strlen(blurbtxt),
", %d MB", 1<<(cardinfo->chipshift - 20)); ", %d MB", 1<<(cardinfo->chipshift - 20));
} else { } else {
...@@ -1211,14 +1224,18 @@ sddr09_read_map(struct us_data *us) { ...@@ -1211,14 +1224,18 @@ sddr09_read_map(struct us_data *us) {
if (!info->capacity) if (!info->capacity)
return -1; return -1;
// size of a block is 1 << (blockshift + pageshift) bytes /*
// divide into the total capacity to get the number of blocks * size of a block is 1 << (blockshift + pageshift) bytes
* divide into the total capacity to get the number of blocks
*/
numblocks = info->capacity >> (info->blockshift + info->pageshift); numblocks = info->capacity >> (info->blockshift + info->pageshift);
// read 64 bytes for every block (actually 1 << CONTROL_SHIFT) /*
// but only use a 64 KB buffer * read 64 bytes for every block (actually 1 << CONTROL_SHIFT)
// buffer size used must be a multiple of (1 << CONTROL_SHIFT) * but only use a 64 KB buffer
* buffer size used must be a multiple of (1 << CONTROL_SHIFT)
*/
#define SDDR09_READ_MAP_BUFSZ 65536 #define SDDR09_READ_MAP_BUFSZ 65536
alloc_blocks = min(numblocks, SDDR09_READ_MAP_BUFSZ >> CONTROL_SHIFT); alloc_blocks = min(numblocks, SDDR09_READ_MAP_BUFSZ >> CONTROL_SHIFT);
...@@ -1575,8 +1592,10 @@ static int sddr09_transport(struct scsi_cmnd *srb, struct us_data *us) ...@@ -1575,8 +1592,10 @@ static int sddr09_transport(struct scsi_cmnd *srb, struct us_data *us)
havefakesense = 1; havefakesense = 1;
/* Dummy up a response for INQUIRY since SDDR09 doesn't /*
respond to INQUIRY commands */ * Dummy up a response for INQUIRY since SDDR09 doesn't
* respond to INQUIRY commands
*/
if (srb->cmnd[0] == INQUIRY) { if (srb->cmnd[0] == INQUIRY) {
memcpy(ptr, inquiry_response, 8); memcpy(ptr, inquiry_response, 8);
...@@ -1628,8 +1647,10 @@ static int sddr09_transport(struct scsi_cmnd *srb, struct us_data *us) ...@@ -1628,8 +1647,10 @@ static int sddr09_transport(struct scsi_cmnd *srb, struct us_data *us)
if (srb->cmnd[0] == MODE_SENSE_10) { if (srb->cmnd[0] == MODE_SENSE_10) {
int modepage = (srb->cmnd[2] & 0x3F); int modepage = (srb->cmnd[2] & 0x3F);
/* They ask for the Read/Write error recovery page, /*
or for all pages. */ * They ask for the Read/Write error recovery page,
* or for all pages.
*/
/* %% We should check DBD %% */ /* %% We should check DBD %% */
if (modepage == 0x01 || modepage == 0x3F) { if (modepage == 0x01 || modepage == 0x3F) {
usb_stor_dbg(us, "Dummy up request for mode page 0x%x\n", usb_stor_dbg(us, "Dummy up request for mode page 0x%x\n",
...@@ -1682,7 +1703,8 @@ static int sddr09_transport(struct scsi_cmnd *srb, struct us_data *us) ...@@ -1682,7 +1703,8 @@ static int sddr09_transport(struct scsi_cmnd *srb, struct us_data *us)
USB_STOR_TRANSPORT_ERROR); USB_STOR_TRANSPORT_ERROR);
} }
/* catch-all for all other commands, except /*
* catch-all for all other commands, except
* pass TEST_UNIT_READY and REQUEST_SENSE through * pass TEST_UNIT_READY and REQUEST_SENSE through
*/ */
if (srb->cmnd[0] != TEST_UNIT_READY && if (srb->cmnd[0] != TEST_UNIT_READY &&
......
/* Driver for SanDisk SDDR-55 SmartMedia reader /*
* Driver for SanDisk SDDR-55 SmartMedia reader
* *
* SDDR55 driver v0.1: * SDDR55 driver v0.1:
* *
...@@ -130,7 +131,8 @@ sddr55_bulk_transport(struct us_data *us, int direction, ...@@ -130,7 +131,8 @@ sddr55_bulk_transport(struct us_data *us, int direction,
return usb_stor_bulk_transfer_buf(us, pipe, data, len, NULL); return usb_stor_bulk_transfer_buf(us, pipe, data, len, NULL);
} }
/* check if card inserted, if there is, update read_only status /*
* check if card inserted, if there is, update read_only status
* return non zero if no card * return non zero if no card
*/ */
...@@ -714,15 +716,18 @@ static int sddr55_read_map(struct us_data *us) { ...@@ -714,15 +716,18 @@ static int sddr55_read_map(struct us_data *us) {
if (max_lba > 1000) if (max_lba > 1000)
max_lba = 1000; max_lba = 1000;
// Each block is 64 bytes of control data, so block i is located in /*
// scatterlist block i*64/128k = i*(2^6)*(2^-17) = i*(2^-11) * Each block is 64 bytes of control data, so block i is located in
* scatterlist block i*64/128k = i*(2^6)*(2^-17) = i*(2^-11)
*/
for (i=0; i<numblocks; i++) { for (i=0; i<numblocks; i++) {
int zone = i / 1024; int zone = i / 1024;
lba = short_pack(buffer[i * 2], buffer[i * 2 + 1]); lba = short_pack(buffer[i * 2], buffer[i * 2 + 1]);
/* Every 1024 physical blocks ("zone"), the LBA numbers /*
* Every 1024 physical blocks ("zone"), the LBA numbers
* go back to zero, but are within a higher * go back to zero, but are within a higher
* block of LBA's. Also, there is a maximum of * block of LBA's. Also, there is a maximum of
* 1000 LBA's per zone. In other words, in PBA * 1000 LBA's per zone. In other words, in PBA
...@@ -733,7 +738,8 @@ static int sddr55_read_map(struct us_data *us) { ...@@ -733,7 +738,8 @@ static int sddr55_read_map(struct us_data *us) {
* are 24 spare blocks to use when blocks do go bad. * are 24 spare blocks to use when blocks do go bad.
*/ */
/* SDDR55 returns 0xffff for a bad block, and 0x400 for the /*
* SDDR55 returns 0xffff for a bad block, and 0x400 for the
* CIS block. (Is this true for cards 8MB or less??) * CIS block. (Is this true for cards 8MB or less??)
* Record these in the physical to logical map * Record these in the physical to logical map
*/ */
...@@ -824,8 +830,10 @@ static int sddr55_transport(struct scsi_cmnd *srb, struct us_data *us) ...@@ -824,8 +830,10 @@ static int sddr55_transport(struct scsi_cmnd *srb, struct us_data *us)
memset (info->sense_data, 0, sizeof info->sense_data); memset (info->sense_data, 0, sizeof info->sense_data);
/* Dummy up a response for INQUIRY since SDDR55 doesn't /*
respond to INQUIRY commands */ * Dummy up a response for INQUIRY since SDDR55 doesn't
* respond to INQUIRY commands
*/
if (srb->cmnd[0] == INQUIRY) { if (srb->cmnd[0] == INQUIRY) {
memcpy(ptr, inquiry_response, 8); memcpy(ptr, inquiry_response, 8);
...@@ -833,7 +841,8 @@ static int sddr55_transport(struct scsi_cmnd *srb, struct us_data *us) ...@@ -833,7 +841,8 @@ static int sddr55_transport(struct scsi_cmnd *srb, struct us_data *us)
return USB_STOR_TRANSPORT_GOOD; return USB_STOR_TRANSPORT_GOOD;
} }
/* only check card status if the map isn't allocated, ie no card seen yet /*
* only check card status if the map isn't allocated, ie no card seen yet
* or if it's been over half a second since we last accessed it * or if it's been over half a second since we last accessed it
*/ */
if (info->lba_to_pba == NULL || time_after(jiffies, info->last_access + HZ/2)) { if (info->lba_to_pba == NULL || time_after(jiffies, info->last_access + HZ/2)) {
...@@ -849,8 +858,10 @@ static int sddr55_transport(struct scsi_cmnd *srb, struct us_data *us) ...@@ -849,8 +858,10 @@ static int sddr55_transport(struct scsi_cmnd *srb, struct us_data *us)
} }
} }
/* if we detected a problem with the map when writing, /*
don't allow any more access */ * if we detected a problem with the map when writing,
* don't allow any more access
*/
if (info->fatal_error) { if (info->fatal_error) {
set_sense_info (3, 0x31, 0); set_sense_info (3, 0x31, 0);
...@@ -868,12 +879,16 @@ static int sddr55_transport(struct scsi_cmnd *srb, struct us_data *us) ...@@ -868,12 +879,16 @@ static int sddr55_transport(struct scsi_cmnd *srb, struct us_data *us)
info->capacity = capacity; info->capacity = capacity;
/* figure out the maximum logical block number, allowing for /*
* the fact that only 250 out of every 256 are used */ * figure out the maximum logical block number, allowing for
* the fact that only 250 out of every 256 are used
*/
info->max_log_blks = ((info->capacity >> (info->pageshift + info->blockshift)) / 256) * 250; info->max_log_blks = ((info->capacity >> (info->pageshift + info->blockshift)) / 256) * 250;
/* Last page in the card, adjust as we only use 250 out of /*
* every 256 pages */ * Last page in the card, adjust as we only use 250 out of
* every 256 pages
*/
capacity = (capacity / 256) * 250; capacity = (capacity / 256) * 250;
capacity /= PAGESIZE; capacity /= PAGESIZE;
......
/* Driver for SCM Microsystems (a.k.a. Shuttle) USB-ATAPI cable /*
* Driver for SCM Microsystems (a.k.a. Shuttle) USB-ATAPI cable
* *
* Current development and maintenance by: * Current development and maintenance by:
* (c) 2000, 2001 Robert Baruch (autophile@starband.net) * (c) 2000, 2001 Robert Baruch (autophile@starband.net)
...@@ -408,7 +409,8 @@ static int usbat_wait_not_busy(struct us_data *us, int minutes) ...@@ -408,7 +409,8 @@ static int usbat_wait_not_busy(struct us_data *us, int minutes)
int result; int result;
unsigned char *status = us->iobuf; unsigned char *status = us->iobuf;
/* Synchronizing cache on a CDR could take a heck of a long time, /*
* Synchronizing cache on a CDR could take a heck of a long time,
* but probably not more than 10 minutes or so. On the other hand, * but probably not more than 10 minutes or so. On the other hand,
* doing a full blank on a CDRW at speed 1 will take about 75 * doing a full blank on a CDRW at speed 1 will take about 75
* minutes! * minutes!
...@@ -1570,9 +1572,10 @@ static int usbat_hp8200e_transport(struct scsi_cmnd *srb, struct us_data *us) ...@@ -1570,9 +1572,10 @@ static int usbat_hp8200e_transport(struct scsi_cmnd *srb, struct us_data *us)
len = scsi_bufflen(srb); len = scsi_bufflen(srb);
/* Send A0 (ATA PACKET COMMAND). /*
Note: I guess we're never going to get any of the ATA * Send A0 (ATA PACKET COMMAND).
commands... just ATA Packet Commands. * Note: I guess we're never going to get any of the ATA
* commands... just ATA Packet Commands.
*/ */
registers[0] = USBAT_ATA_FEATURES; registers[0] = USBAT_ATA_FEATURES;
...@@ -1851,7 +1854,8 @@ static int usbat_probe(struct usb_interface *intf, ...@@ -1851,7 +1854,8 @@ static int usbat_probe(struct usb_interface *intf,
if (result) if (result)
return result; return result;
/* The actual transport will be determined later by the /*
* The actual transport will be determined later by the
* initialization routine; this is just a placeholder. * initialization routine; this is just a placeholder.
*/ */
us->transport_name = "Shuttle USBAT"; us->transport_name = "Shuttle USBAT";
......
...@@ -177,7 +177,8 @@ int sierra_ms_init(struct us_data *us) ...@@ -177,7 +177,8 @@ int sierra_ms_init(struct us_data *us)
debug_swoc(&us->pusb_dev->dev, swocInfo); debug_swoc(&us->pusb_dev->dev, swocInfo);
/* If there is not Linux software on the TRU-Install device /*
* If there is not Linux software on the TRU-Install device
* then switch to modem mode * then switch to modem mode
*/ */
if (!containsFullLinuxPackage(swocInfo)) { if (!containsFullLinuxPackage(swocInfo)) {
......
This diff is collapsed.
/* Driver for USB Mass Storage compliant devices /*
* Driver for USB Mass Storage compliant devices
* Transport Functions Header File * Transport Functions Header File
* *
* Current development and maintenance by: * Current development and maintenance by:
......
...@@ -799,7 +799,8 @@ static int uas_slave_alloc(struct scsi_device *sdev) ...@@ -799,7 +799,8 @@ static int uas_slave_alloc(struct scsi_device *sdev)
sdev->hostdata = devinfo; sdev->hostdata = devinfo;
/* USB has unusual DMA-alignment requirements: Although the /*
* USB has unusual DMA-alignment requirements: Although the
* starting address of each scatter-gather element doesn't matter, * starting address of each scatter-gather element doesn't matter,
* the length of each element except the last must be divisible * the length of each element except the last must be divisible
* by the Bulk maxpacket value. There's currently no way to * by the Bulk maxpacket value. There's currently no way to
......
/* Unusual Devices File for the Alauda-based card readers /*
* Unusual Devices File for the Alauda-based card readers
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the * under the terms of the GNU General Public License as published by the
......
/* Unusual Devices File for devices based on the Cypress USB/ATA bridge /*
* Unusual Devices File for devices based on the Cypress USB/ATA bridge
* with support for ATACB * with support for ATACB
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
......
/* Unusual Devices File for the Datafab USB Compact Flash reader /*
* Unusual Devices File for the Datafab USB Compact Flash reader
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the * under the terms of the GNU General Public License as published by the
...@@ -79,7 +80,8 @@ UNUSUAL_DEV( 0x07c4, 0xa109, 0x0000, 0xffff, ...@@ -79,7 +80,8 @@ UNUSUAL_DEV( 0x07c4, 0xa109, 0x0000, 0xffff,
USB_SC_SCSI, USB_PR_DATAFAB, NULL, USB_SC_SCSI, USB_PR_DATAFAB, NULL,
0), 0),
/* Reported by Felix Moeller <felix@derklecks.de> /*
* Reported by Felix Moeller <felix@derklecks.de>
* in Germany this is sold by Hama with the productnumber 46952 * in Germany this is sold by Hama with the productnumber 46952
* as "DualSlot CompactFlash(TM) & MStick Drive USB" * as "DualSlot CompactFlash(TM) & MStick Drive USB"
*/ */
......
This diff is collapsed.
/* Unusual Devices File for the Freecom USB/IDE adaptor /*
* Unusual Devices File for the Freecom USB/IDE adaptor
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the * under the terms of the GNU General Public License as published by the
......
/* Unusual Devices File for In-System Design, Inc. ISD200 ASIC /*
* Unusual Devices File for In-System Design, Inc. ISD200 ASIC
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the * under the terms of the GNU General Public License as published by the
......
/* Unusual Devices File for the Lexar "Jumpshot" Compact Flash reader /*
* Unusual Devices File for the Lexar "Jumpshot" Compact Flash reader
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the * under the terms of the GNU General Public License as published by the
......
/* Unusual Devices File for the Rio Karma /*
* Unusual Devices File for the Rio Karma
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the * under the terms of the GNU General Public License as published by the
......
/* Unusual Devices File for the Maxtor OneTouch USB hard drive's button /*
* Unusual Devices File for the Maxtor OneTouch USB hard drive's button
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the * under the terms of the GNU General Public License as published by the
...@@ -18,7 +19,8 @@ ...@@ -18,7 +19,8 @@
#if defined(CONFIG_USB_STORAGE_ONETOUCH) || \ #if defined(CONFIG_USB_STORAGE_ONETOUCH) || \
defined(CONFIG_USB_STORAGE_ONETOUCH_MODULE) defined(CONFIG_USB_STORAGE_ONETOUCH_MODULE)
/* Submitted by: Nick Sillik <n.sillik@temple.edu> /*
* Submitted by: Nick Sillik <n.sillik@temple.edu>
* Needed for OneTouch extension to usb-storage * Needed for OneTouch extension to usb-storage
*/ */
UNUSUAL_DEV( 0x0d49, 0x7000, 0x0000, 0x9999, UNUSUAL_DEV( 0x0d49, 0x7000, 0x0000, 0x9999,
......
/* Driver for Realtek RTS51xx USB card reader /*
* Driver for Realtek RTS51xx USB card reader
* *
* Copyright(c) 2009 Realtek Semiconductor Corp. All rights reserved. * Copyright(c) 2009 Realtek Semiconductor Corp. All rights reserved.
* *
......
/* Unusual Devices File for SanDisk SDDR-09 SmartMedia reader /*
* Unusual Devices File for SanDisk SDDR-09 SmartMedia reader
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the * under the terms of the GNU General Public License as published by the
......
/* Unusual Devices File for SanDisk SDDR-55 SmartMedia reader /*
* Unusual Devices File for SanDisk SDDR-55 SmartMedia reader
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the * under the terms of the GNU General Public License as published by the
......
/* Driver for USB Attached SCSI devices - Unusual Devices File /*
* Driver for USB Attached SCSI devices - Unusual Devices File
* *
* (c) 2013 Hans de Goede <hdegoede@redhat.com> * (c) 2013 Hans de Goede <hdegoede@redhat.com>
* *
......
/* Unusual Devices File for SCM Microsystems (a.k.a. Shuttle) USB-ATAPI cable /*
* Unusual Devices File for SCM Microsystems (a.k.a. Shuttle) USB-ATAPI cable
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the * under the terms of the GNU General Public License as published by the
......
/* Driver for USB Mass Storage compliant devices /*
* Driver for USB Mass Storage compliant devices
* *
* Current development and maintenance by: * Current development and maintenance by:
* (c) 1999-2003 Matthew Dharm (mdharm-usb@one-eyed-alien.net) * (c) 1999-2003 Matthew Dharm (mdharm-usb@one-eyed-alien.net)
...@@ -97,7 +98,8 @@ MODULE_PARM_DESC(quirks, "supplemental list of device IDs and their quirks"); ...@@ -97,7 +98,8 @@ MODULE_PARM_DESC(quirks, "supplemental list of device IDs and their quirks");
* with the entries in usb_storage_usb_ids[], defined in usual-tables.c. * with the entries in usb_storage_usb_ids[], defined in usual-tables.c.
*/ */
/* The vendor name should be kept at eight characters or less, and /*
*The vendor name should be kept at eight characters or less, and
* the product name should be kept at 16 characters or less. If a device * the product name should be kept at 16 characters or less. If a device
* has the US_FL_FIX_INQUIRY flag, then the vendor and product names * has the US_FL_FIX_INQUIRY flag, then the vendor and product names
* normally generated by a device through the INQUIRY response will be * normally generated by a device through the INQUIRY response will be
...@@ -191,8 +193,10 @@ int usb_stor_suspend(struct usb_interface *iface, pm_message_t message) ...@@ -191,8 +193,10 @@ int usb_stor_suspend(struct usb_interface *iface, pm_message_t message)
if (us->suspend_resume_hook) if (us->suspend_resume_hook)
(us->suspend_resume_hook)(us, US_SUSPEND); (us->suspend_resume_hook)(us, US_SUSPEND);
/* When runtime PM is working, we'll set a flag to indicate /*
* whether we should autoresume when a SCSI request arrives. */ * When runtime PM is working, we'll set a flag to indicate
* whether we should autoresume when a SCSI request arrives.
*/
mutex_unlock(&us->dev_mutex); mutex_unlock(&us->dev_mutex);
return 0; return 0;
...@@ -220,8 +224,10 @@ int usb_stor_reset_resume(struct usb_interface *iface) ...@@ -220,8 +224,10 @@ int usb_stor_reset_resume(struct usb_interface *iface)
/* Report the reset to the SCSI core */ /* Report the reset to the SCSI core */
usb_stor_report_bus_reset(us); usb_stor_report_bus_reset(us);
/* FIXME: Notify the subdrivers that they need to reinitialize /*
* the device */ * FIXME: Notify the subdrivers that they need to reinitialize
* the device
*/
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(usb_stor_reset_resume); EXPORT_SYMBOL_GPL(usb_stor_reset_resume);
...@@ -250,8 +256,10 @@ int usb_stor_post_reset(struct usb_interface *iface) ...@@ -250,8 +256,10 @@ int usb_stor_post_reset(struct usb_interface *iface)
/* Report the reset to the SCSI core */ /* Report the reset to the SCSI core */
usb_stor_report_bus_reset(us); usb_stor_report_bus_reset(us);
/* FIXME: Notify the subdrivers that they need to reinitialize /*
* the device */ * FIXME: Notify the subdrivers that they need to reinitialize
* the device
*/
mutex_unlock(&us->dev_mutex); mutex_unlock(&us->dev_mutex);
return 0; return 0;
...@@ -274,15 +282,17 @@ void fill_inquiry_response(struct us_data *us, unsigned char *data, ...@@ -274,15 +282,17 @@ void fill_inquiry_response(struct us_data *us, unsigned char *data,
return; return;
memset(data+8, ' ', 28); memset(data+8, ' ', 28);
if (data[0]&0x20) { /* USB device currently not connected. Return if (data[0]&0x20) { /*
peripheral qualifier 001b ("...however, the * USB device currently not connected. Return
physical device is not currently connected * peripheral qualifier 001b ("...however, the
to this logical unit") and leave vendor and * physical device is not currently connected
product identification empty. ("If the target * to this logical unit") and leave vendor and
does store some of the INQUIRY data on the * product identification empty. ("If the target
device, it may return zeros or ASCII spaces * does store some of the INQUIRY data on the
(20h) in those fields until the data is * device, it may return zeros or ASCII spaces
available from the device."). */ * (20h) in those fields until the data is
* available from the device.").
*/
} else { } else {
u16 bcdDevice = le16_to_cpu(us->pusb_dev->descriptor.bcdDevice); u16 bcdDevice = le16_to_cpu(us->pusb_dev->descriptor.bcdDevice);
int n; int n;
...@@ -336,7 +346,8 @@ static int usb_stor_control_thread(void * __us) ...@@ -336,7 +346,8 @@ static int usb_stor_control_thread(void * __us)
scsi_unlock(host); scsi_unlock(host);
/* reject the command if the direction indicator /*
* reject the command if the direction indicator
* is UNKNOWN * is UNKNOWN
*/ */
if (us->srb->sc_data_direction == DMA_BIDIRECTIONAL) { if (us->srb->sc_data_direction == DMA_BIDIRECTIONAL) {
...@@ -344,7 +355,8 @@ static int usb_stor_control_thread(void * __us) ...@@ -344,7 +355,8 @@ static int usb_stor_control_thread(void * __us)
us->srb->result = DID_ERROR << 16; us->srb->result = DID_ERROR << 16;
} }
/* reject if target != 0 or if LUN is higher than /*
* reject if target != 0 or if LUN is higher than
* the maximum known LUN * the maximum known LUN
*/ */
else if (us->srb->device->id && else if (us->srb->device->id &&
...@@ -362,8 +374,10 @@ static int usb_stor_control_thread(void * __us) ...@@ -362,8 +374,10 @@ static int usb_stor_control_thread(void * __us)
us->srb->result = DID_BAD_TARGET << 16; us->srb->result = DID_BAD_TARGET << 16;
} }
/* Handle those devices which need us to fake /*
* their inquiry data */ * Handle those devices which need us to fake
* their inquiry data
*/
else if ((us->srb->cmnd[0] == INQUIRY) && else if ((us->srb->cmnd[0] == INQUIRY) &&
(us->fflags & US_FL_FIX_INQUIRY)) { (us->fflags & US_FL_FIX_INQUIRY)) {
unsigned char data_ptr[36] = { unsigned char data_ptr[36] = {
...@@ -395,11 +409,13 @@ static int usb_stor_control_thread(void * __us) ...@@ -395,11 +409,13 @@ static int usb_stor_control_thread(void * __us)
usb_stor_dbg(us, "scsi command aborted\n"); usb_stor_dbg(us, "scsi command aborted\n");
} }
/* If an abort request was received we need to signal that /*
* If an abort request was received we need to signal that
* the abort has finished. The proper test for this is * the abort has finished. The proper test for this is
* the TIMED_OUT flag, not srb->result == DID_ABORT, because * the TIMED_OUT flag, not srb->result == DID_ABORT, because
* the timeout might have occurred after the command had * the timeout might have occurred after the command had
* already completed with a different result code. */ * already completed with a different result code.
*/
if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) { if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) {
complete(&(us->notify)); complete(&(us->notify));
...@@ -610,7 +626,8 @@ static int get_device_info(struct us_data *us, const struct usb_device_id *id, ...@@ -610,7 +626,8 @@ static int get_device_info(struct us_data *us, const struct usb_device_id *id,
le16_to_cpu(dev->descriptor.idProduct), le16_to_cpu(dev->descriptor.idProduct),
us->fflags); us->fflags);
/* Log a message if a non-generic unusual_dev entry contains an /*
* Log a message if a non-generic unusual_dev entry contains an
* unnecessary subclass or protocol override. This may stimulate * unnecessary subclass or protocol override. This may stimulate
* reports from users that will help us remove unneeded entries * reports from users that will help us remove unneeded entries
* from the unusual_devs.h table. * from the unusual_devs.h table.
...@@ -782,8 +799,10 @@ static int usb_stor_acquire_resources(struct us_data *us) ...@@ -782,8 +799,10 @@ static int usb_stor_acquire_resources(struct us_data *us)
return -ENOMEM; return -ENOMEM;
} }
/* Just before we start our control thread, initialize /*
* the device if it needs initialization */ * Just before we start our control thread, initialize
* the device if it needs initialization
*/
if (us->unusual_dev->initFunction) { if (us->unusual_dev->initFunction) {
p = us->unusual_dev->initFunction(us); p = us->unusual_dev->initFunction(us);
if (p) if (p)
...@@ -805,7 +824,8 @@ static int usb_stor_acquire_resources(struct us_data *us) ...@@ -805,7 +824,8 @@ static int usb_stor_acquire_resources(struct us_data *us)
/* Release all our dynamic resources */ /* Release all our dynamic resources */
static void usb_stor_release_resources(struct us_data *us) static void usb_stor_release_resources(struct us_data *us)
{ {
/* Tell the control thread to exit. The SCSI host must /*
* Tell the control thread to exit. The SCSI host must
* already have been removed and the DISCONNECTING flag set * already have been removed and the DISCONNECTING flag set
* so that we won't accept any more commands. * so that we won't accept any more commands.
*/ */
...@@ -836,7 +856,8 @@ static void dissociate_dev(struct us_data *us) ...@@ -836,7 +856,8 @@ static void dissociate_dev(struct us_data *us)
usb_set_intfdata(us->pusb_intf, NULL); usb_set_intfdata(us->pusb_intf, NULL);
} }
/* First stage of disconnect processing: stop SCSI scanning, /*
* First stage of disconnect processing: stop SCSI scanning,
* remove the host, and stop accepting new commands * remove the host, and stop accepting new commands
*/ */
static void quiesce_and_remove_host(struct us_data *us) static void quiesce_and_remove_host(struct us_data *us)
...@@ -849,7 +870,8 @@ static void quiesce_and_remove_host(struct us_data *us) ...@@ -849,7 +870,8 @@ static void quiesce_and_remove_host(struct us_data *us)
wake_up(&us->delay_wait); wake_up(&us->delay_wait);
} }
/* Prevent SCSI scanning (if it hasn't started yet) /*
* Prevent SCSI scanning (if it hasn't started yet)
* or wait for the SCSI-scanning routine to stop. * or wait for the SCSI-scanning routine to stop.
*/ */
cancel_delayed_work_sync(&us->scan_dwork); cancel_delayed_work_sync(&us->scan_dwork);
...@@ -858,12 +880,14 @@ static void quiesce_and_remove_host(struct us_data *us) ...@@ -858,12 +880,14 @@ static void quiesce_and_remove_host(struct us_data *us)
if (test_bit(US_FLIDX_SCAN_PENDING, &us->dflags)) if (test_bit(US_FLIDX_SCAN_PENDING, &us->dflags))
usb_autopm_put_interface_no_suspend(us->pusb_intf); usb_autopm_put_interface_no_suspend(us->pusb_intf);
/* Removing the host will perform an orderly shutdown: caches /*
* Removing the host will perform an orderly shutdown: caches
* synchronized, disks spun down, etc. * synchronized, disks spun down, etc.
*/ */
scsi_remove_host(host); scsi_remove_host(host);
/* Prevent any new commands from being accepted and cut short /*
* Prevent any new commands from being accepted and cut short
* reset delays. * reset delays.
*/ */
scsi_lock(host); scsi_lock(host);
...@@ -878,8 +902,10 @@ static void release_everything(struct us_data *us) ...@@ -878,8 +902,10 @@ static void release_everything(struct us_data *us)
usb_stor_release_resources(us); usb_stor_release_resources(us);
dissociate_dev(us); dissociate_dev(us);
/* Drop our reference to the host; the SCSI core will free it /*
* (and "us" along with it) when the refcount becomes 0. */ * Drop our reference to the host; the SCSI core will free it
* (and "us" along with it) when the refcount becomes 0.
*/
scsi_host_put(us_to_host(us)); scsi_host_put(us_to_host(us));
} }
...@@ -900,7 +926,8 @@ static void usb_stor_scan_dwork(struct work_struct *work) ...@@ -900,7 +926,8 @@ static void usb_stor_scan_dwork(struct work_struct *work)
us->max_lun = usb_stor_Bulk_max_lun(us); us->max_lun = usb_stor_Bulk_max_lun(us);
/* /*
* Allow proper scanning of devices that present more than 8 LUNs * Allow proper scanning of devices that present more than 8 LUNs
* While not affecting other devices that may need the previous behavior * While not affecting other devices that may need the previous
* behavior
*/ */
if (us->max_lun >= 8) if (us->max_lun >= 8)
us_to_host(us)->max_lun = us->max_lun+1; us_to_host(us)->max_lun = us->max_lun+1;
...@@ -975,7 +1002,8 @@ int usb_stor_probe1(struct us_data **pus, ...@@ -975,7 +1002,8 @@ int usb_stor_probe1(struct us_data **pus,
get_transport(us); get_transport(us);
get_protocol(us); get_protocol(us);
/* Give the caller a chance to fill in specialized transport /*
* Give the caller a chance to fill in specialized transport
* or protocol settings. * or protocol settings.
*/ */
return 0; return 0;
......
/* Driver for USB Mass Storage compliant devices /*
* Driver for USB Mass Storage compliant devices
* Main Header File * Main Header File
* *
* Current development and maintenance by: * Current development and maintenance by:
...@@ -100,7 +101,8 @@ typedef void (*pm_hook)(struct us_data *, int); /* power management hook */ ...@@ -100,7 +101,8 @@ typedef void (*pm_hook)(struct us_data *, int); /* power management hook */
/* we allocate one of these for every device that we remember */ /* we allocate one of these for every device that we remember */
struct us_data { struct us_data {
/* The device we're working with /*
* The device we're working with
* It's important to note: * It's important to note:
* (o) you must hold dev_mutex to change pusb_dev * (o) you must hold dev_mutex to change pusb_dev
*/ */
...@@ -125,7 +127,7 @@ struct us_data { ...@@ -125,7 +127,7 @@ struct us_data {
u8 max_lun; u8 max_lun;
u8 ifnum; /* interface number */ u8 ifnum; /* interface number */
u8 ep_bInterval; /* interrupt interval */ u8 ep_bInterval; /* interrupt interval */
/* function pointers for this device */ /* function pointers for this device */
trans_cmnd transport; /* transport function */ trans_cmnd transport; /* transport function */
...@@ -175,8 +177,10 @@ static inline struct us_data *host_to_us(struct Scsi_Host *host) { ...@@ -175,8 +177,10 @@ static inline struct us_data *host_to_us(struct Scsi_Host *host) {
extern void fill_inquiry_response(struct us_data *us, extern void fill_inquiry_response(struct us_data *us,
unsigned char *data, unsigned int data_len); unsigned char *data, unsigned int data_len);
/* The scsi_lock() and scsi_unlock() macros protect the sm_state and the /*
* single queue element srb for write access */ * The scsi_lock() and scsi_unlock() macros protect the sm_state and the
* single queue element srb for write access
*/
#define scsi_unlock(host) spin_unlock_irq(host->host_lock) #define scsi_unlock(host) spin_unlock_irq(host->host_lock)
#define scsi_lock(host) spin_lock_irq(host->host_lock) #define scsi_lock(host) spin_lock_irq(host->host_lock)
......
/* Driver for USB Mass Storage devices /*
* Driver for USB Mass Storage devices
* Usual Tables File for usb-storage and libusual * Usual Tables File for usb-storage and libusual
* *
* Copyright (C) 2009 Alan Stern (stern@rowland.harvard.edu) * Copyright (C) 2009 Alan Stern (stern@rowland.harvard.edu)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment