@ -79,8 +79,7 @@ static const unsigned char us_direction[256/8] = {
} ;
# define US_DIRECTION(x) ((us_direction[x>>3] >> (x & 7)) & 1)
static unsigned char usb_stor_buf [ 512 ] ;
static ccb usb_ccb ;
static ccb usb_ccb __attribute__ ( ( aligned ( ARCH_DMA_MINALIGN ) ) ) ;
/*
* CBI style
@ -210,17 +209,17 @@ int usb_stor_info(void)
static unsigned int usb_get_max_lun ( struct us_data * us )
{
int len ;
unsigned char result ;
ALLOC_CACHE_ALIGN_BUFFER ( unsigned char , result , 1 ) ;
len = usb_control_msg ( us - > pusb_dev ,
usb_rcvctrlpipe ( us - > pusb_dev , 0 ) ,
US_BBB_GET_MAX_LUN ,
USB_TYPE_CLASS | USB_RECIP_INTERFACE | USB_DIR_IN ,
0 , us - > ifnum ,
& result , sizeof ( result ) ,
result , sizeof ( char ) ,
USB_CNTL_TIMEOUT * 5 ) ;
USB_STOR_PRINTF ( " Get Max LUN -> len = %i, result = %i \n " ,
len , ( int ) result ) ;
return ( len > 0 ) ? result : 0 ;
len , ( int ) * result ) ;
return ( len > 0 ) ? * result : 0 ;
}
/*******************************************************************************
@ -233,9 +232,6 @@ int usb_stor_scan(int mode)
unsigned char i ;
struct usb_device * dev ;
/* GJ */
memset ( usb_stor_buf , 0 , sizeof ( usb_stor_buf ) ) ;
if ( mode = = 1 )
printf ( " scanning bus for storage devices... " ) ;
@ -499,7 +495,7 @@ int usb_stor_BBB_comdat(ccb *srb, struct us_data *us)
int actlen ;
int dir_in ;
unsigned int pipe ;
umass_bbb_cbw_t cbw ;
ALLOC_CACHE_ALIGN_BUFFER ( umass_bbb_cbw_t , cbw , 1 ) ;
dir_in = US_DIRECTION ( srb - > cmd [ 0 ] ) ;
@ -522,16 +518,16 @@ int usb_stor_BBB_comdat(ccb *srb, struct us_data *us)
/* always OUT to the ep */
pipe = usb_sndbulkpipe ( us - > pusb_dev , us - > ep_out ) ;
cbw . dCBWSignature = cpu_to_le32 ( CBWSIGNATURE ) ;
cbw . dCBWTag = cpu_to_le32 ( CBWTag + + ) ;
cbw . dCBWDataTransferLength = cpu_to_le32 ( srb - > datalen ) ;
cbw . bCBWFlags = ( dir_in ? CBWFLAGS_IN : CBWFLAGS_OUT ) ;
cbw . bCBWLUN = srb - > lun ;
cbw . bCDBLength = srb - > cmdlen ;
cbw - > dCBWSignature = cpu_to_le32 ( CBWSIGNATURE ) ;
cbw - > dCBWTag = cpu_to_le32 ( CBWTag + + ) ;
cbw - > dCBWDataTransferLength = cpu_to_le32 ( srb - > datalen ) ;
cbw - > bCBWFlags = ( dir_in ? CBWFLAGS_IN : CBWFLAGS_OUT ) ;
cbw - > bCBWLUN = srb - > lun ;
cbw - > bCDBLength = srb - > cmdlen ;
/* copy the command data into the CBW command data buffer */
/* DST SRC LEN!!! */
memcpy ( cbw . CBWCDB , srb - > cmd , srb - > cmdlen ) ;
result = usb_bulk_msg ( us - > pusb_dev , pipe , & cbw , UMASS_BBB_CBW_SIZE ,
memcpy ( cbw - > CBWCDB , srb - > cmd , srb - > cmdlen ) ;
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 " ) ;
@ -675,7 +671,7 @@ int usb_stor_BBB_transport(ccb *srb, struct us_data *us)
int dir_in ;
int actlen , data_actlen ;
unsigned int pipe , pipein , pipeout ;
umass_bbb_csw_t csw ;
ALLOC_CACHE_ALIGN_BUFFER ( umass_bbb_csw_t , csw , 1 ) ;
# ifdef BBB_XPORT_TRACE
unsigned char * ptr ;
int index ;
@ -733,7 +729,7 @@ st:
retry = 0 ;
again :
USB_STOR_PRINTF ( " STATUS phase \n " ) ;
result = usb_bulk_msg ( us - > pusb_dev , pipein , & csw , UMASS_BBB_CSW_SIZE ,
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 */
@ -753,28 +749,28 @@ again:
return USB_STOR_TRANSPORT_FAILED ;
}
# ifdef BBB_XPORT_TRACE
ptr = ( unsigned char * ) & csw ;
ptr = ( unsigned char * ) csw ;
for ( index = 0 ; index < UMASS_BBB_CSW_SIZE ; index + + )
printf ( " ptr[%d] %#x " , index , ptr [ index ] ) ;
printf ( " \n " ) ;
# endif
/* misuse pipe to get the residue */
pipe = le32_to_cpu ( csw . dCSWDataResidue ) ;
pipe = le32_to_cpu ( csw - > dCSWDataResidue ) ;
if ( pipe = = 0 & & srb - > datalen ! = 0 & & srb - > datalen - data_actlen ! = 0 )
pipe = srb - > datalen - data_actlen ;
if ( CSWSIGNATURE ! = le32_to_cpu ( csw . dCSWSignature ) ) {
if ( CSWSIGNATURE ! = le32_to_cpu ( csw - > dCSWSignature ) ) {
USB_STOR_PRINTF ( " !CSWSIGNATURE \n " ) ;
usb_stor_BBB_reset ( us ) ;
return USB_STOR_TRANSPORT_FAILED ;
} else if ( ( CBWTag - 1 ) ! = le32_to_cpu ( csw . dCSWTag ) ) {
} else if ( ( CBWTag - 1 ) ! = le32_to_cpu ( csw - > dCSWTag ) ) {
USB_STOR_PRINTF ( " !Tag \n " ) ;
usb_stor_BBB_reset ( us ) ;
return USB_STOR_TRANSPORT_FAILED ;
} else if ( csw . bCSWStatus > CSWSTATUS_PHASE ) {
} else if ( csw - > bCSWStatus > CSWSTATUS_PHASE ) {
USB_STOR_PRINTF ( " >PHASE \n " ) ;
usb_stor_BBB_reset ( us ) ;
return USB_STOR_TRANSPORT_FAILED ;
} else if ( csw . bCSWStatus = = CSWSTATUS_PHASE ) {
} else if ( csw - > bCSWStatus = = CSWSTATUS_PHASE ) {
USB_STOR_PRINTF ( " =PHASE \n " ) ;
usb_stor_BBB_reset ( us ) ;
return USB_STOR_TRANSPORT_FAILED ;
@ -782,7 +778,7 @@ again:
USB_STOR_PRINTF ( " transferred %dB instead of %ldB \n " ,
data_actlen , srb - > datalen ) ;
return USB_STOR_TRANSPORT_FAILED ;
} else if ( csw . bCSWStatus = = CSWSTATUS_FAILED ) {
} else if ( csw - > bCSWStatus = = CSWSTATUS_FAILED ) {
USB_STOR_PRINTF ( " FAILED \n " ) ;
return USB_STOR_TRANSPORT_FAILED ;
}
@ -1343,7 +1339,8 @@ int usb_stor_get_info(struct usb_device *dev, struct us_data *ss,
block_dev_desc_t * dev_desc )
{
unsigned char perq , modi ;
unsigned long cap [ 2 ] ;
ALLOC_CACHE_ALIGN_BUFFER ( unsigned long , cap , 2 ) ;
ALLOC_CACHE_ALIGN_BUFFER ( unsigned char , usb_stor_buf , 36 ) ;
unsigned long * capacity , * blksz ;
ccb * pccb = & usb_ccb ;
@ -1367,9 +1364,9 @@ int usb_stor_get_info(struct usb_device *dev, struct us_data *ss,
/* drive is removable */
dev_desc - > removable = 1 ;
}
memcpy ( & dev_desc - > vendor [ 0 ] , & usb_stor_buf [ 8 ] , 8 ) ;
memcpy ( & dev_desc - > product [ 0 ] , & usb_stor_buf [ 16 ] , 16 ) ;
memcpy ( & dev_desc - > revision [ 0 ] , & usb_stor_buf [ 32 ] , 4 ) ;
memcpy ( & dev_desc - > vendor [ 0 ] , ( const void * ) & usb_stor_buf [ 8 ] , 8 ) ;
memcpy ( & dev_desc - > product [ 0 ] , ( const void * ) & usb_stor_buf [ 16 ] , 16 ) ;
memcpy ( & dev_desc - > revision [ 0 ] , ( const void * ) & usb_stor_buf [ 32 ] , 4 ) ;
dev_desc - > vendor [ 8 ] = 0 ;
dev_desc - > product [ 16 ] = 0 ;
dev_desc - > revision [ 4 ] = 0 ;