@ -59,14 +59,6 @@
# undef BBB_COMDAT_TRACE
# undef BBB_XPORT_TRACE
# ifdef USB_STOR_DEBUG
# define USB_BLK_DEBUG 1
# else
# define USB_BLK_DEBUG 0
# endif
# define USB_STOR_PRINTF(fmt, args...) debug_cond(USB_BLK_DEBUG, fmt, ##args)
# include <scsi.h>
/* direction table -- this indicates the direction of the data
* transfer for each command code - - a 1 indicates input
@ -228,8 +220,7 @@ static unsigned int usb_get_max_lun(struct us_data *us)
0 , us - > ifnum ,
result , sizeof ( char ) ,
USB_CNTL_TIMEOUT * 5 ) ;
USB_STOR_PRINTF ( " Get Max LUN -> len = %i, result = %i \n " ,
len , ( int ) * result ) ;
debug ( " Get Max LUN -> len = %i, result = %i \n " , len , ( int ) * result ) ;
return ( len > 0 ) ? * result : 0 ;
}
@ -262,7 +253,7 @@ int usb_stor_scan(int mode)
usb_max_devs = 0 ;
for ( i = 0 ; i < USB_MAX_DEVICE ; i + + ) {
dev = usb_get_dev_index ( i ) ; /* get device */
USB_STOR_PRINTF ( " i=%d \n " , i ) ;
debug ( " i=%d \n " , i ) ;
if ( dev = = NULL )
break ; /* no more devices available */
@ -309,7 +300,7 @@ static int usb_stor_irq(struct usb_device *dev)
}
# ifdef USB_STOR_ DEBUG
# ifdef DEBUG
static void usb_show_srb ( ccb * pccb )
{
@ -361,45 +352,49 @@ static int us_one_transfer(struct us_data *us, int pipe, char *buf, int length)
/* set up the transfer loop */
do {
/* transfer the data */
USB_STOR_PRINTF ( " Bulk xfer 0x%x(%d) try #%d \n " ,
( unsigned int ) buf , this_xfer , 11 - maxtry ) ;
debug ( " Bulk xfer 0x%x(%d) try #%d \n " ,
( unsigned int ) buf , this_xfer , 11 - maxtry ) ;
result = usb_bulk_msg ( us - > pusb_dev , pipe , buf ,
this_xfer , & partial ,
USB_CNTL_TIMEOUT * 5 ) ;
USB_STOR_PRINTF ( " bulk_msg returned %d xferred %d/%d \n " ,
result , partial , this_xfer ) ;
debug ( " bulk_msg returned %d xferred %d/%d \n " ,
result , partial , this_xfer ) ;
if ( us - > pusb_dev - > status ! = 0 ) {
/* if we stall, we need to clear it before
* we go on
*/
# ifdef USB_STOR_ DEBUG
# ifdef DEBUG
display_int_status ( us - > pusb_dev - > status ) ;
# endif
if ( us - > pusb_dev - > status & USB_ST_STALLED ) {
USB_STOR_PRINTF ( " stalled ->clearing endpoint halt for pipe 0x%x \n " , pipe ) ;
debug ( " stalled ->clearing endpoint " \
" halt for pipe 0x%x \n " , pipe ) ;
stat = us - > pusb_dev - > status ;
usb_clear_halt ( us - > pusb_dev , pipe ) ;
us - > pusb_dev - > status = stat ;
if ( this_xfer = = partial ) {
USB_STOR_PRINTF ( " bulk transferred with error %lX, but data ok \n " , us - > pusb_dev - > status ) ;
debug ( " bulk transferred " \
" with error %lX, " \
" but data ok \n " ,
us - > pusb_dev - > status ) ;
return 0 ;
}
else
return result ;
}
if ( us - > pusb_dev - > status & USB_ST_NAK_REC ) {
USB_STOR_PRINTF ( " Device NAKed bulk_msg \n " ) ;
debug ( " Device NAKed bulk_msg \n " ) ;
return result ;
}
USB_STOR_PRINTF ( " bulk transferred with error " ) ;
debug ( " bulk transferred with error " ) ;
if ( this_xfer = = partial ) {
USB_STOR_PRINTF ( " %ld, but data ok \n " ,
us - > pusb_dev - > status ) ;
debug ( " %ld, but data ok \n " ,
us - > pusb_dev - > status ) ;
return 0 ;
}
/* if our try counter reaches 0, bail out */
USB_STOR_PRINTF ( " %ld, data %d \n " ,
us - > pusb_dev - > status , partial ) ;
debug ( " %ld, data %d \n " ,
us - > pusb_dev - > status , partial ) ;
if ( ! maxtry - - )
return result ;
}
@ -433,35 +428,34 @@ static int usb_stor_BBB_reset(struct us_data *us)
*
* This comment stolen from FreeBSD ' s / sys / dev / usb / umass . c .
*/
USB_STOR_PRINTF ( " BBB_reset \n " ) ;
debug ( " BBB_reset \n " ) ;
result = usb_control_msg ( us - > pusb_dev , usb_sndctrlpipe ( us - > pusb_dev , 0 ) ,
US_BBB_RESET ,
USB_TYPE_CLASS | USB_RECIP_INTERFACE ,
0 , us - > ifnum , NULL , 0 , USB_CNTL_TIMEOUT * 5 ) ;
if ( ( result < 0 ) & & ( us - > pusb_dev - > status & USB_ST_STALLED ) ) {
USB_STOR_PRINTF ( " RESET:stall \n " ) ;
debug ( " RESET:stall \n " ) ;
return - 1 ;
}
/* long wait for reset */
mdelay ( 150 ) ;
USB_STOR_PRINTF ( " BBB_reset result %d: status %lX reset \n " , result ,
us - > pusb_dev - > status ) ;
debug ( " BBB_reset result %d: status %lX reset \n " ,
result , us - > pusb_dev - > status ) ;
pipe = usb_rcvbulkpipe ( us - > pusb_dev , us - > ep_in ) ;
result = usb_clear_halt ( us - > pusb_dev , pipe ) ;
/* long wait for reset */
mdelay ( 150 ) ;
USB_STOR_PRINTF ( " BBB_reset result %d: status %lX clearing IN endpoint \n " ,
result , us - > pusb_dev - > status ) ;
debug ( " BBB_reset result %d: status %lX clearing IN endpoint \n " ,
result , us - > pusb_dev - > status ) ;
/* long wait for reset */
pipe = usb_sndbulkpipe ( us - > pusb_dev , us - > ep_out ) ;
result = usb_clear_halt ( us - > pusb_dev , pipe ) ;
mdelay ( 150 ) ;
USB_STOR_PRINTF ( " BBB_reset result %d: status %lX "
" clearing OUT endpoint \n " , result ,
us - > pusb_dev - > status ) ;
USB_STOR_PRINTF ( " BBB_reset done \n " ) ;
debug ( " BBB_reset result %d: status %lX clearing OUT endpoint \n " ,
result , us - > pusb_dev - > status ) ;
debug ( " BBB_reset done \n " ) ;
return 0 ;
}
@ -474,7 +468,7 @@ static int usb_stor_CB_reset(struct us_data *us)
unsigned char cmd [ 12 ] ;
int result ;
USB_STOR_PRINTF ( " CB_reset \n " ) ;
debug ( " CB_reset \n " ) ;
memset ( cmd , 0xff , sizeof ( cmd ) ) ;
cmd [ 0 ] = SCSI_SEND_DIAG ;
cmd [ 1 ] = 4 ;
@ -486,13 +480,12 @@ static int usb_stor_CB_reset(struct us_data *us)
/* long wait for reset */
mdelay ( 1500 ) ;
USB_STOR_PRINTF ( " CB_reset result %d: status %lX "
" clearing endpoint halt \n " , result ,
us - > pusb_dev - > status ) ;
debug ( " CB_reset result %d: status %lX clearing endpoint halt \n " ,
result , us - > pusb_dev - > status ) ;
usb_clear_halt ( us - > pusb_dev , usb_rcvbulkpipe ( us - > pusb_dev , us - > ep_in ) ) ;
usb_clear_halt ( us - > pusb_dev , usb_rcvbulkpipe ( us - > pusb_dev , us - > ep_out ) ) ;
USB_STOR_PRINTF ( " CB_reset done \n " ) ;
debug ( " CB_reset done \n " ) ;
return 0 ;
}
@ -522,7 +515,7 @@ static int usb_stor_BBB_comdat(ccb *srb, struct us_data *us)
# endif
/* sanity checks */
if ( ! ( srb - > cmdlen < = CBWCDBLENGTH ) ) {
USB_STOR_PRINTF ( " usb_stor_BBB_comdat:cmdlen too large \n " ) ;
debug ( " usb_stor_BBB_comdat:cmdlen too large \n " ) ;
return - 1 ;
}
@ -541,7 +534,7 @@ static int usb_stor_BBB_comdat(ccb *srb, struct us_data *us)
result = usb_bulk_msg ( us - > pusb_dev , pipe , cbw , UMASS_BBB_CBW_SIZE ,
& actlen , USB_CNTL_TIMEOUT * 5 ) ;
if ( result < 0 )
USB_STOR_PRINTF ( " usb_stor_BBB_comdat:usb_bulk_msg error \n " ) ;
debug ( " usb_stor_BBB_comdat:usb_bulk_msg error \n " ) ;
return result ;
}
@ -564,8 +557,8 @@ static int usb_stor_CB_comdat(ccb *srb, struct us_data *us)
pipe = usb_sndbulkpipe ( us - > pusb_dev , us - > ep_out ) ;
while ( retry - - ) {
USB_STOR_PRINTF ( " CBI gets a command: Try %d \n " , 5 - retry ) ;
# ifdef USB_STOR_ DEBUG
debug ( " CBI gets a command: Try %d \n " , 5 - retry ) ;
# ifdef DEBUG
usb_show_srb ( srb ) ;
# endif
/* let's send the command via the control pipe */
@ -576,35 +569,35 @@ static int usb_stor_CB_comdat(ccb *srb, struct us_data *us)
0 , us - > ifnum ,
srb - > cmd , srb - > cmdlen ,
USB_CNTL_TIMEOUT * 5 ) ;
USB_STOR_PRINTF ( " CB_transport: control msg returned %d, "
" status %lX \n " , result , us - > pusb_dev - > status ) ;
debug ( " CB_transport: control msg returned %d, status %lX \n " ,
result , us - > pusb_dev - > status ) ;
/* check the return code for the command */
if ( result < 0 ) {
if ( us - > pusb_dev - > status & USB_ST_STALLED ) {
status = us - > pusb_dev - > status ;
USB_STOR_PRINTF ( " stall during command found, "
" clear pipe \n " ) ;
debug ( " stall during command found, " \
" clear pipe \n " ) ;
usb_clear_halt ( us - > pusb_dev ,
usb_sndctrlpipe ( us - > pusb_dev , 0 ) ) ;
us - > pusb_dev - > status = status ;
}
USB_STOR_PRINTF ( " error during command %02X "
" Stat = %lX \n " , srb - > cmd [ 0 ] ,
us - > pusb_dev - > status ) ;
debug ( " error during command %02X " \
" Stat = %lX \n " , srb - > cmd [ 0 ] ,
us - > pusb_dev - > status ) ;
return result ;
}
/* transfer the data payload for this command, if one exists*/
USB_STOR_PRINTF ( " CB_transport: control msg returned %d, "
" direction is %s to go 0x%lx \n " , result ,
dir_in ? " IN " : " OUT " , srb - > datalen ) ;
debug ( " CB_transport: control msg returned %d, " \
" direction is %s to go 0x%lx \n " , result ,
dir_in ? " IN " : " OUT " , srb - > datalen ) ;
if ( srb - > datalen ) {
result = us_one_transfer ( us , pipe , ( char * ) srb - > pdata ,
srb - > datalen ) ;
USB_STOR_PRINTF ( " CBI attempted to transfer data, "
" result is %d status %lX, len %d \n " ,
result , us - > pusb_dev - > status ,
us - > pusb_dev - > act_len ) ;
debug ( " CBI attempted to transfer data, " \
" result is %d status %lX, len %d \n " ,
result , us - > pusb_dev - > status ,
us - > pusb_dev - > act_len ) ;
if ( ! ( us - > pusb_dev - > status & USB_ST_NAK_REC ) )
break ;
} /* if (srb->datalen) */
@ -635,10 +628,9 @@ static int usb_stor_CBI_get_status(ccb *srb, struct us_data *us)
us - > ip_wanted = 0 ;
return USB_STOR_TRANSPORT_ERROR ;
}
USB_STOR_PRINTF
( " Got interrupt data 0x%x, transfered %d status 0x%lX \n " ,
us - > ip_data , us - > pusb_dev - > irq_act_len ,
us - > pusb_dev - > irq_status ) ;
debug ( " Got interrupt data 0x%x, transfered %d status 0x%lX \n " ,
us - > ip_data , us - > pusb_dev - > irq_act_len ,
us - > pusb_dev - > irq_status ) ;
/* UFI gives us ASC and ASCQ, like a request sense */
if ( us - > subclass = = US_SC_UFI ) {
if ( srb - > cmd [ 0 ] = = SCSI_REQ_SENSE | |
@ -691,11 +683,11 @@ static int usb_stor_BBB_transport(ccb *srb, struct us_data *us)
dir_in = US_DIRECTION ( srb - > cmd [ 0 ] ) ;
/* COMMAND phase */
USB_STOR_PRINTF ( " COMMAND phase \n " ) ;
debug ( " COMMAND phase \n " ) ;
result = usb_stor_BBB_comdat ( srb , us ) ;
if ( result < 0 ) {
USB_STOR_PRINTF ( " failed to send CBW status %ld \n " ,
us - > pusb_dev - > status ) ;
debug ( " failed to send CBW status %ld \n " ,
us - > pusb_dev - > status ) ;
usb_stor_BBB_reset ( us ) ;
return USB_STOR_TRANSPORT_FAILED ;
}
@ -708,7 +700,7 @@ static int usb_stor_BBB_transport(ccb *srb, struct us_data *us)
/* no data, go immediately to the STATUS phase */
if ( srb - > datalen = = 0 )
goto st ;
USB_STOR_PRINTF ( " DATA phase \n " ) ;
debug ( " DATA phase \n " ) ;
if ( dir_in )
pipe = pipein ;
else
@ -717,7 +709,7 @@ static int usb_stor_BBB_transport(ccb *srb, struct us_data *us)
& data_actlen , USB_CNTL_TIMEOUT * 5 ) ;
/* special handling of STALL in DATA phase */
if ( ( result < 0 ) & & ( us - > pusb_dev - > status & USB_ST_STALLED ) ) {
USB_STOR_PRINTF ( " DATA:stall \n " ) ;
debug ( " DATA:stall \n " ) ;
/* clear the STALL on the endpoint */
result = usb_stor_BBB_clear_endpt_stall ( us ,
dir_in ? us - > ep_in : us - > ep_out ) ;
@ -726,8 +718,8 @@ static int usb_stor_BBB_transport(ccb *srb, struct us_data *us)
goto st ;
}
if ( result < 0 ) {
USB_STOR_PRINTF ( " usb_bulk_msg error status %ld \n " ,
us - > pusb_dev - > status ) ;
debug ( " usb_bulk_msg error status %ld \n " ,
us - > pusb_dev - > status ) ;
usb_stor_BBB_reset ( us ) ;
return USB_STOR_TRANSPORT_FAILED ;
}
@ -740,14 +732,14 @@ static int usb_stor_BBB_transport(ccb *srb, struct us_data *us)
st :
retry = 0 ;
again :
USB_STOR_PRINTF ( " STATUS phase \n " ) ;
debug ( " STATUS phase \n " ) ;
result = usb_bulk_msg ( us - > pusb_dev , pipein , csw , UMASS_BBB_CSW_SIZE ,
& actlen , USB_CNTL_TIMEOUT * 5 ) ;
/* special handling of STALL in STATUS phase */
if ( ( result < 0 ) & & ( retry < 1 ) & &
( us - > pusb_dev - > status & USB_ST_STALLED ) ) {
USB_STOR_PRINTF ( " STATUS:stall \n " ) ;
debug ( " STATUS:stall \n " ) ;
/* clear the STALL on the endpoint */
result = usb_stor_BBB_clear_endpt_stall ( us , us - > ep_in ) ;
if ( result > = 0 & & ( retry + + < 1 ) )
@ -755,8 +747,8 @@ again:
goto again ;
}
if ( result < 0 ) {
USB_STOR_PRINTF ( " usb_bulk_msg error status %ld \n " ,
us - > pusb_dev - > status ) ;
debug ( " usb_bulk_msg error status %ld \n " ,
us - > pusb_dev - > status ) ;
usb_stor_BBB_reset ( us ) ;
return USB_STOR_TRANSPORT_FAILED ;
}
@ -771,27 +763,27 @@ again:
if ( pipe = = 0 & & srb - > datalen ! = 0 & & srb - > datalen - data_actlen ! = 0 )
pipe = srb - > datalen - data_actlen ;
if ( CSWSIGNATURE ! = le32_to_cpu ( csw - > dCSWSignature ) ) {
USB_STOR_PRINTF ( " !CSWSIGNATURE \n " ) ;
debug ( " !CSWSIGNATURE \n " ) ;
usb_stor_BBB_reset ( us ) ;
return USB_STOR_TRANSPORT_FAILED ;
} else if ( ( CBWTag - 1 ) ! = le32_to_cpu ( csw - > dCSWTag ) ) {
USB_STOR_PRINTF ( " !Tag \n " ) ;
debug ( " !Tag \n " ) ;
usb_stor_BBB_reset ( us ) ;
return USB_STOR_TRANSPORT_FAILED ;
} else if ( csw - > bCSWStatus > CSWSTATUS_PHASE ) {
USB_STOR_PRINTF ( " >PHASE \n " ) ;
debug ( " >PHASE \n " ) ;
usb_stor_BBB_reset ( us ) ;
return USB_STOR_TRANSPORT_FAILED ;
} else if ( csw - > bCSWStatus = = CSWSTATUS_PHASE ) {
USB_STOR_PRINTF ( " =PHASE \n " ) ;
debug ( " =PHASE \n " ) ;
usb_stor_BBB_reset ( us ) ;
return USB_STOR_TRANSPORT_FAILED ;
} else if ( data_actlen > srb - > datalen ) {
USB_STOR_PRINTF ( " transferred %dB instead of %ldB \n " ,
data_actlen , srb - > datalen ) ;
debug ( " transferred %dB instead of %ldB \n " ,
data_actlen , srb - > datalen ) ;
return USB_STOR_TRANSPORT_FAILED ;
} else if ( csw - > bCSWStatus = = CSWSTATUS_FAILED ) {
USB_STOR_PRINTF ( " FAILED \n " ) ;
debug ( " FAILED \n " ) ;
return USB_STOR_TRANSPORT_FAILED ;
}
@ -812,14 +804,14 @@ static int usb_stor_CB_transport(ccb *srb, struct us_data *us)
/* issue the command */
do_retry :
result = usb_stor_CB_comdat ( srb , us ) ;
USB_STOR_PRINTF ( " command / Data returned %d, status %lX \n " ,
result , us - > pusb_dev - > status ) ;
debug ( " command / Data returned %d, status %lX \n " ,
result , us - > pusb_dev - > status ) ;
/* if this is an CBI Protocol, get IRQ */
if ( us - > protocol = = US_PR_CBI ) {
status = usb_stor_CBI_get_status ( srb , us ) ;
/* if the status is error, report it */
if ( status = = USB_STOR_TRANSPORT_ERROR ) {
USB_STOR_PRINTF ( " USB CBI Command Error \n " ) ;
debug ( " USB CBI Command Error \n " ) ;
return status ;
}
srb - > sense_buf [ 12 ] = ( unsigned char ) ( us - > ip_data > > 8 ) ;
@ -827,7 +819,7 @@ do_retry:
if ( ! us - > ip_data ) {
/* if the status is good, report it */
if ( status = = USB_STOR_TRANSPORT_GOOD ) {
USB_STOR_PRINTF ( " USB CBI Command Good \n " ) ;
debug ( " USB CBI Command Good \n " ) ;
return status ;
}
}
@ -835,7 +827,7 @@ do_retry:
/* do we have to issue an auto request? */
/* HERE we have to check the result */
if ( ( result < 0 ) & & ! ( us - > pusb_dev - > status & USB_ST_STALLED ) ) {
USB_STOR_PRINTF ( " ERROR %lX \n " , us - > pusb_dev - > status ) ;
debug ( " ERROR %lX \n " , us - > pusb_dev - > status ) ;
us - > transport_reset ( us ) ;
return USB_STOR_TRANSPORT_ERROR ;
}
@ -843,7 +835,7 @@ do_retry:
( ( srb - > cmd [ 0 ] = = SCSI_REQ_SENSE ) | |
( srb - > cmd [ 0 ] = = SCSI_INQUIRY ) ) ) {
/* do not issue an autorequest after request sense */
USB_STOR_PRINTF ( " No auto request and good \n " ) ;
debug ( " No auto request and good \n " ) ;
return USB_STOR_TRANSPORT_GOOD ;
}
/* issue an request_sense */
@ -856,19 +848,19 @@ do_retry:
psrb - > cmdlen = 12 ;
/* issue the command */
result = usb_stor_CB_comdat ( psrb , us ) ;
USB_STOR_PRINTF ( " auto request returned %d \n " , result ) ;
debug ( " auto request returned %d \n " , result ) ;
/* if this is an CBI Protocol, get IRQ */
if ( us - > protocol = = US_PR_CBI )
status = usb_stor_CBI_get_status ( psrb , us ) ;
if ( ( result < 0 ) & & ! ( us - > pusb_dev - > status & USB_ST_STALLED ) ) {
USB_STOR_PRINTF ( " AUTO REQUEST ERROR %ld \n " ,
us - > pusb_dev - > status ) ;
debug ( " AUTO REQUEST ERROR %ld \n " ,
us - > pusb_dev - > status ) ;
return USB_STOR_TRANSPORT_ERROR ;
}
USB_STOR_PRINTF ( " autorequest returned 0x%02X 0x%02X 0x%02X 0x%02X \n " ,
srb - > sense_buf [ 0 ] , srb - > sense_buf [ 2 ] ,
srb - > sense_buf [ 12 ] , srb - > sense_buf [ 13 ] ) ;
debug ( " autorequest returned 0x%02X 0x%02X 0x%02X 0x%02X \n " ,
srb - > sense_buf [ 0 ] , srb - > sense_buf [ 2 ] ,
srb - > sense_buf [ 12 ] , srb - > sense_buf [ 13 ] ) ;
/* Check the auto request result */
if ( ( srb - > sense_buf [ 2 ] = = 0 ) & &
( srb - > sense_buf [ 12 ] = = 0 ) & &
@ -923,7 +915,7 @@ static int usb_inquiry(ccb *srb, struct us_data *ss)
srb - > datalen = 36 ;
srb - > cmdlen = 12 ;
i = ss - > transport ( srb , ss ) ;
USB_STOR_PRINTF ( " inquiry returns %d \n " , i ) ;
debug ( " inquiry returns %d \n " , i ) ;
if ( i = = 0 )
break ;
} while ( - - retry ) ;
@ -948,9 +940,9 @@ static int usb_request_sense(ccb *srb, struct us_data *ss)
srb - > pdata = & srb - > sense_buf [ 0 ] ;
srb - > cmdlen = 12 ;
ss - > transport ( srb , ss ) ;
USB_STOR_PRINTF ( " Request Sense returned %02X %02X %02X \n " ,
srb - > sense_buf [ 2 ] , srb - > sense_buf [ 12 ] ,
srb - > sense_buf [ 13 ] ) ;
debug ( " Request Sense returned %02X %02X %02X \n " ,
srb - > sense_buf [ 2 ] , srb - > sense_buf [ 12 ] ,
srb - > sense_buf [ 13 ] ) ;
srb - > pdata = ( uchar * ) ptr ;
return 0 ;
}
@ -1017,7 +1009,7 @@ static int usb_read_10(ccb *srb, struct us_data *ss, unsigned long start,
srb - > cmd [ 7 ] = ( ( unsigned char ) ( blocks > > 8 ) ) & 0xff ;
srb - > cmd [ 8 ] = ( unsigned char ) blocks & 0xff ;
srb - > cmdlen = 12 ;
USB_STOR_PRINTF ( " read10: start %lx blocks %x \n " , start , blocks ) ;
debug ( " read10: start %lx blocks %x \n " , start , blocks ) ;
return ss - > transport ( srb , ss ) ;
}
@ -1034,7 +1026,7 @@ static int usb_write_10(ccb *srb, struct us_data *ss, unsigned long start,
srb - > cmd [ 7 ] = ( ( unsigned char ) ( blocks > > 8 ) ) & 0xff ;
srb - > cmd [ 8 ] = ( unsigned char ) blocks & 0xff ;
srb - > cmdlen = 12 ;
USB_STOR_PRINTF ( " write10: start %lx blocks %x \n " , start , blocks ) ;
debug ( " write10: start %lx blocks %x \n " , start , blocks ) ;
return ss - > transport ( srb , ss ) ;
}
@ -1078,7 +1070,7 @@ unsigned long usb_stor_read(int device, unsigned long blknr,
device & = 0xff ;
/* Setup device */
USB_STOR_PRINTF ( " \n usb_read: dev %d \n " , device ) ;
debug ( " \n usb_read: dev %d \n " , device ) ;
dev = NULL ;
for ( i = 0 ; i < USB_MAX_DEVICE ; i + + ) {
dev = usb_get_dev_index ( i ) ;
@ -1095,8 +1087,8 @@ unsigned long usb_stor_read(int device, unsigned long blknr,
start = blknr ;
blks = blkcnt ;
USB_STOR_PRINTF ( " \n usb_read: dev %d startblk " LBAF " , blccnt " LBAF
" buffer %lx \n " , device , start , blks , buf_addr ) ;
debug ( " \n usb_read: dev %d startblk " LBAF " , blccnt " LBAF
" buffer %lx \n " , device , start , blks , buf_addr ) ;
do {
/* XXX need some comment here */
@ -1112,7 +1104,7 @@ retry_it:
srb - > datalen = usb_dev_desc [ device ] . blksz * smallblks ;
srb - > pdata = ( unsigned char * ) buf_addr ;
if ( usb_read_10 ( srb , ss , start , smallblks ) ) {
USB_STOR_PRINTF ( " Read ERROR \n " ) ;
debug ( " Read ERROR \n " ) ;
usb_request_sense ( srb , ss ) ;
if ( retry - - )
goto retry_it ;
@ -1125,9 +1117,9 @@ retry_it:
} while ( blks ! = 0 ) ;
ss - > flags & = ~ USB_READY ;
USB_STOR_PRINTF ( " usb_read: end startblk " LBAF
" , blccnt %x buffer %lx \n " ,
start , smallblks , buf_addr ) ;
debug ( " usb_read: end startblk " LBAF
" , blccnt %x buffer %lx \n " ,
start , smallblks , buf_addr ) ;
usb_disable_asynch ( 0 ) ; /* asynch transfer allowed */
if ( blkcnt > = USB_MAX_XFER_BLK )
@ -1151,7 +1143,7 @@ unsigned long usb_stor_write(int device, unsigned long blknr,
device & = 0xff ;
/* Setup device */
USB_STOR_PRINTF ( " \n usb_write: dev %d \n " , device ) ;
debug ( " \n usb_write: dev %d \n " , device ) ;
dev = NULL ;
for ( i = 0 ; i < USB_MAX_DEVICE ; i + + ) {
dev = usb_get_dev_index ( i ) ;
@ -1169,8 +1161,8 @@ unsigned long usb_stor_write(int device, unsigned long blknr,
start = blknr ;
blks = blkcnt ;
USB_STOR_PRINTF ( " \n usb_write: dev %d startblk " LBAF " , blccnt " LBAF
" buffer %lx \n " , device , start , blks , buf_addr ) ;
debug ( " \n usb_write: dev %d startblk " LBAF " , blccnt " LBAF
" buffer %lx \n " , device , start , blks , buf_addr ) ;
do {
/* If write fails retry for max retry count else
@ -1188,7 +1180,7 @@ retry_it:
srb - > datalen = usb_dev_desc [ device ] . blksz * smallblks ;
srb - > pdata = ( unsigned char * ) buf_addr ;
if ( usb_write_10 ( srb , ss , start , smallblks ) ) {
USB_STOR_PRINTF ( " Write ERROR \n " ) ;
debug ( " Write ERROR \n " ) ;
usb_request_sense ( srb , ss ) ;
if ( retry - - )
goto retry_it ;
@ -1201,9 +1193,8 @@ retry_it:
} while ( blks ! = 0 ) ;
ss - > flags & = ~ USB_READY ;
USB_STOR_PRINTF ( " usb_write: end startblk " LBAF
" , blccnt %x buffer %lx \n " ,
start , smallblks , buf_addr ) ;
debug ( " usb_write: end startblk " LBAF " , blccnt %x buffer %lx \n " ,
start , smallblks , buf_addr ) ;
usb_disable_asynch ( 0 ) ; /* asynch transfer allowed */
if ( blkcnt > = USB_MAX_XFER_BLK )
@ -1228,12 +1219,12 @@ int usb_storage_probe(struct usb_device *dev, unsigned int ifnum,
#if 0
/* this is the place to patch some storage devices */
USB_STOR_PRINTF ( " iVendor %X iProduct %X \n " , dev - > descriptor . idVendor ,
debug ( " iVendor %X iProduct %X \n " , dev - > descriptor . idVendor ,
dev - > descriptor . idProduct ) ;
if ( ( dev - > descriptor . idVendor ) = = 0x066b & &
( dev - > descriptor . idProduct ) = = 0x0103 ) {
USB_STOR_PRINTF ( " patched for E-USB \n " ) ;
debug ( " patched for E-USB \n " ) ;
protocol = US_PR_CB ;
subclass = US_SC_UFI ; /* an assumption */
}
@ -1250,7 +1241,7 @@ int usb_storage_probe(struct usb_device *dev, unsigned int ifnum,
memset ( ss , 0 , sizeof ( struct us_data ) ) ;
/* At this point, we know we've got a live one */
USB_STOR_PRINTF ( " \n \n USB Mass Storage device detected \n " ) ;
debug ( " \n \n USB Mass Storage device detected \n " ) ;
/* Initialize the us_data structure with some useful info */
ss - > flags = flags ;
@ -1270,21 +1261,21 @@ int usb_storage_probe(struct usb_device *dev, unsigned int ifnum,
}
/* set the handler pointers based on the protocol */
USB_STOR_PRINTF ( " Transport: " ) ;
debug ( " Transport: " ) ;
switch ( ss - > protocol ) {
case US_PR_CB :
USB_STOR_PRINTF ( " Control/Bulk \n " ) ;
debug ( " Control/Bulk \n " ) ;
ss - > transport = usb_stor_CB_transport ;
ss - > transport_reset = usb_stor_CB_reset ;
break ;
case US_PR_CBI :
USB_STOR_PRINTF ( " Control/Bulk/Interrupt \n " ) ;
debug ( " Control/Bulk/Interrupt \n " ) ;
ss - > transport = usb_stor_CB_transport ;
ss - > transport_reset = usb_stor_CB_reset ;
break ;
case US_PR_BULK :
USB_STOR_PRINTF ( " Bulk/Bulk/Bulk \n " ) ;
debug ( " Bulk/Bulk/Bulk \n " ) ;
ss - > transport = usb_stor_BBB_transport ;
ss - > transport_reset = usb_stor_BBB_reset ;
break ;
@ -1320,14 +1311,14 @@ int usb_storage_probe(struct usb_device *dev, unsigned int ifnum,
ss - > irqinterval = iface - > ep_desc [ i ] . bInterval ;
}
}
USB_STOR_PRINTF ( " Endpoints In %d Out %d Int %d \n " ,
ss - > ep_in , ss - > ep_out , ss - > ep_int ) ;
debug ( " Endpoints In %d Out %d Int %d \n " ,
ss - > ep_in , ss - > ep_out , ss - > ep_int ) ;
/* Do some basic sanity checks, and bail if we find a problem */
if ( usb_set_interface ( dev , iface - > desc . bInterfaceNumber , 0 ) | |
! ss - > ep_in | | ! ss - > ep_out | |
( ss - > protocol = = US_PR_CBI & & ss - > ep_int = = 0 ) ) {
USB_STOR_PRINTF ( " Problems with device \n " ) ;
debug ( " Problems with device \n " ) ;
return 0 ;
}
/* set class specific stuff */
@ -1366,7 +1357,7 @@ int usb_stor_get_info(struct usb_device *dev, struct us_data *ss,
dev_desc - > target = dev - > devnum ;
pccb - > lun = dev_desc - > lun ;
USB_STOR_PRINTF ( " address %d \n " , dev_desc - > target ) ;
debug ( " address %d \n " , dev_desc - > target ) ;
if ( usb_inquiry ( pccb , ss ) )
return - 1 ;
@ -1392,8 +1383,8 @@ int usb_stor_get_info(struct usb_device *dev, struct us_data *ss,
usb_bin_fixup ( dev - > descriptor , ( uchar * ) dev_desc - > vendor ,
( uchar * ) dev_desc - > product ) ;
# endif /* CONFIG_USB_BIN_FIXUP */
USB_STOR_PRINTF ( " ISO Vers %X, Response Data %X \n " , usb_stor_buf [ 2 ] ,
usb_stor_buf [ 3 ] ) ;
debug ( " ISO Vers %X, Response Data %X \n " , usb_stor_buf [ 2 ] ,
usb_stor_buf [ 3 ] ) ;
if ( usb_test_unit_ready ( pccb , ss ) ) {
printf ( " Device NOT ready \n "
" Request Sense returned %02X %02X %02X \n " ,
@ -1413,8 +1404,7 @@ int usb_stor_get_info(struct usb_device *dev, struct us_data *ss,
cap [ 1 ] = 0x200 ;
}
ss - > flags & = ~ USB_READY ;
USB_STOR_PRINTF ( " Read Capacity returns: 0x%lx, 0x%lx \n " , cap [ 0 ] ,
cap [ 1 ] ) ;
debug ( " Read Capacity returns: 0x%lx, 0x%lx \n " , cap [ 0 ] , cap [ 1 ] ) ;
#if 0
if ( cap [ 0 ] > ( 0x200000 * 10 ) ) /* greater than 10 GByte */
cap [ 0 ] > > = 16 ;
@ -1426,17 +1416,16 @@ int usb_stor_get_info(struct usb_device *dev, struct us_data *ss,
cap [ 0 ] + = 1 ;
capacity = & cap [ 0 ] ;
blksz = & cap [ 1 ] ;
USB_STOR_PRINTF ( " Capacity = 0x%lx, blocksz = 0x%lx \n " ,
* capacity , * blksz ) ;
debug ( " Capacity = 0x%lx, blocksz = 0x%lx \n " , * capacity , * blksz ) ;
dev_desc - > lba = * capacity ;
dev_desc - > blksz = * blksz ;
dev_desc - > log2blksz = LOG2 ( dev_desc - > blksz ) ;
dev_desc - > type = perq ;
USB_STOR_PRINTF ( " address %d \n " , dev_desc - > target ) ;
USB_STOR_PRINTF ( " partype: %d \n " , dev_desc - > part_type ) ;
debug ( " address %d \n " , dev_desc - > target ) ;
debug ( " partype: %d \n " , dev_desc - > part_type ) ;
init_part ( dev_desc ) ;
USB_STOR_PRINTF ( " partype: %d \n " , dev_desc - > part_type ) ;
debug ( " partype: %d \n " , dev_desc - > part_type ) ;
return 1 ;
}