diff options
Diffstat (limited to 'common/usb_storage.c')
| -rw-r--r-- | common/usb_storage.c | 710 | 
1 files changed, 394 insertions, 316 deletions
| diff --git a/common/usb_storage.c b/common/usb_storage.c index 94f659fd3..973d82f7d 100644 --- a/common/usb_storage.c +++ b/common/usb_storage.c @@ -63,9 +63,9 @@  #undef BBB_XPORT_TRACE  #ifdef	USB_STOR_DEBUG -#define USB_STOR_PRINTF(fmt,args...)	printf (fmt ,##args) +#define USB_STOR_PRINTF(fmt, args...)	printf(fmt , ##args)  #else -#define USB_STOR_PRINTF(fmt,args...) +#define USB_STOR_PRINTF(fmt, args...)  #endif  #include <scsi.h> @@ -110,7 +110,7 @@ typedef struct {  	__u8		CBWCDB[CBWCDBLENGTH];  } umass_bbb_cbw_t;  #define UMASS_BBB_CBW_SIZE	31 -static __u32 CBWTag = 0; +static __u32 CBWTag;  /* Command Status Wrapper */  typedef struct { @@ -126,34 +126,35 @@ typedef struct {  #define UMASS_BBB_CSW_SIZE	13  #define USB_MAX_STOR_DEV 5 -static int usb_max_devs = 0; /* number of highest available usb device */ +static int usb_max_devs; /* number of highest available usb device */  static block_dev_desc_t usb_dev_desc[USB_MAX_STOR_DEV];  struct us_data; -typedef int (*trans_cmnd)(ccb*, struct us_data*); -typedef int (*trans_reset)(struct us_data*); +typedef int (*trans_cmnd)(ccb *cb, struct us_data *data); +typedef int (*trans_reset)(struct us_data *data);  struct us_data { -	struct usb_device	*pusb_dev;	 /* this usb_device */ -	unsigned int		flags;		 /* from filter initially */ -	unsigned char		ifnum;		 /* interface number */ -	unsigned char		ep_in;		 /* in endpoint */ -	unsigned char		ep_out;		 /* out ....... */ -	unsigned char		ep_int;		 /* interrupt . */ -	unsigned char		subclass;	 /* as in overview */ -	unsigned char		protocol;	 /* .............. */ -	unsigned char		attention_done;	 /* force attn on first cmd */ -	unsigned short	ip_data;	 /* interrupt data */ -	int							action;		 /* what to do */ -	int							ip_wanted; /* needed */ -	int							*irq_handle;	 /* for USB int requests */ -	unsigned int		irqpipe;	 /* pipe for release_irq */ -	unsigned char		irqmaxp;	/* max packed for irq Pipe */ -	unsigned char	irqinterval; /* Intervall for IRQ Pipe */ -	ccb							*srb;		 /* current srb */ -	trans_reset			transport_reset; /* reset routine */ -	trans_cmnd			transport; /* transport routine */ +	struct usb_device *pusb_dev;	 /* this usb_device */ + +	unsigned int	flags;			/* from filter initially */ +	unsigned char	ifnum;			/* interface number */ +	unsigned char	ep_in;			/* in endpoint */ +	unsigned char	ep_out;			/* out ....... */ +	unsigned char	ep_int;			/* interrupt . */ +	unsigned char	subclass;		/* as in overview */ +	unsigned char	protocol;		/* .............. */ +	unsigned char	attention_done;		/* force attn on first cmd */ +	unsigned short	ip_data;		/* interrupt data */ +	int		action;			/* what to do */ +	int		ip_wanted;		/* needed */ +	int		*irq_handle;		/* for USB int requests */ +	unsigned int	irqpipe;	 	/* pipe for release_irq */ +	unsigned char	irqmaxp;		/* max packed for irq Pipe */ +	unsigned char	irqinterval;		/* Intervall for IRQ Pipe */ +	ccb		*srb;			/* current srb */ +	trans_reset	transport_reset;	/* reset routine */ +	trans_cmnd	transport;		/* transport routine */  };  static struct us_data usb_stor[USB_MAX_STOR_DEV]; @@ -163,10 +164,12 @@ static struct us_data usb_stor[USB_MAX_STOR_DEV];  #define USB_STOR_TRANSPORT_FAILED -1  #define USB_STOR_TRANSPORT_ERROR  -2 - -int usb_stor_get_info(struct usb_device *dev, struct us_data *us, block_dev_desc_t *dev_desc); -int usb_storage_probe(struct usb_device *dev, unsigned int ifnum,struct us_data *ss); -unsigned long usb_stor_read(int device, unsigned long blknr, unsigned long blkcnt, void *buffer); +int usb_stor_get_info(struct usb_device *dev, struct us_data *us, +		      block_dev_desc_t *dev_desc); +int usb_storage_probe(struct usb_device *dev, unsigned int ifnum, +		      struct us_data *ss); +unsigned long usb_stor_read(int device, unsigned long blknr, +			    unsigned long blkcnt, void *buffer);  struct usb_device * usb_get_dev_index(int index);  void uhci_show_temp_int_td(void); @@ -181,7 +184,7 @@ void usb_show_progress(void)  	printf(".");  } -/********************************************************************************* +/*******************************************************************************   * show info on storage devices; 'usb start/init' must be invoked earlier   * as we only retrieve structures populated during devices initialization   */ @@ -191,7 +194,7 @@ int usb_stor_info(void)  	if (usb_max_devs > 0) {  		for (i = 0; i < usb_max_devs; i++) { -			printf ("  Device %d: ", i); +			printf("  Device %d: ", i);  			dev_print(&usb_dev_desc[i]);  		}  		return 0; @@ -201,7 +204,7 @@ int usb_stor_info(void)  	return 1;  } -/********************************************************************************* +/*******************************************************************************   * scan the usb and reports device info   * to the user if mode = 1   * returns current device or -1 if no @@ -214,67 +217,69 @@ int usb_stor_scan(int mode)  	/* GJ */  	memset(usb_stor_buf, 0, sizeof(usb_stor_buf)); -	if(mode==1) { +	if (mode == 1)  		printf("       scanning bus for storage devices... "); -	} +  	usb_disable_asynch(1); /* asynch transfer not allowed */ -	for(i=0;i<USB_MAX_STOR_DEV;i++) { -		memset(&usb_dev_desc[i],0,sizeof(block_dev_desc_t)); -		usb_dev_desc[i].target=0xff; -		usb_dev_desc[i].if_type=IF_TYPE_USB; -		usb_dev_desc[i].dev=i; -		usb_dev_desc[i].part_type=PART_TYPE_UNKNOWN; -		usb_dev_desc[i].block_read=usb_stor_read; +	for (i = 0; i < USB_MAX_STOR_DEV; i++) { +		memset(&usb_dev_desc[i], 0, sizeof(block_dev_desc_t)); +		usb_dev_desc[i].target = 0xff; +		usb_dev_desc[i].if_type = IF_TYPE_USB; +		usb_dev_desc[i].dev = i; +		usb_dev_desc[i].part_type = PART_TYPE_UNKNOWN; +		usb_dev_desc[i].block_read = usb_stor_read;  	} -	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); -		if(dev==NULL) { +	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); +		if (dev == NULL)  			break; /* no more devices avaiable */ -		} -		if(usb_storage_probe(dev,0,&usb_stor[usb_max_devs])) { /* ok, it is a storage devices */ -			/* get info and fill it in */ -			if(usb_stor_get_info(dev, &usb_stor[usb_max_devs], &usb_dev_desc[usb_max_devs])) + +		if (usb_storage_probe(dev, 0, &usb_stor[usb_max_devs])) { +			/* ok, it is a storage devices +			 * get info and fill it in +			 */ +			if (usb_stor_get_info(dev, &usb_stor[usb_max_devs], +						&usb_dev_desc[usb_max_devs]))  				usb_max_devs++; -		} /* if storage device */ -		if(usb_max_devs==USB_MAX_STOR_DEV) { -			printf("max USB Storage Device reached: %d stopping\n",usb_max_devs); +		} +		/* if storage device */ +		if (usb_max_devs == USB_MAX_STOR_DEV) { +			printf("max USB Storage Device reached: %d stopping\n", +				usb_max_devs);  			break;  		}  	} /* for */  	usb_disable_asynch(0); /* asynch transfer allowed */  	printf("%d Storage Device(s) found\n", usb_max_devs); -	if(usb_max_devs>0) +	if (usb_max_devs > 0)  		return 0; -	else -		return-1; +	return -1;  }  static int usb_stor_irq(struct usb_device *dev)  {  	struct us_data *us; -	us=(struct us_data *)dev->privptr; +	us = (struct us_data *)dev->privptr; -	if(us->ip_wanted) { -		us->ip_wanted=0; -	} +	if (us->ip_wanted) +		us->ip_wanted = 0;  	return 0;  }  #ifdef	USB_STOR_DEBUG -static void usb_show_srb(ccb * pccb) +static void usb_show_srb(ccb *pccb)  {  	int i; -	printf("SRB: len %d datalen 0x%lX\n ",pccb->cmdlen,pccb->datalen); -	for(i=0;i<12;i++) { -		printf("%02X ",pccb->cmd[i]); -	} +	printf("SRB: len %d datalen 0x%lX\n ", pccb->cmdlen, pccb->datalen); +	for (i = 0; i < 12; i++) +		printf("%02X ", pccb->cmd[i]);  	printf("\n");  } @@ -322,11 +327,14 @@ static int us_one_transfer(struct us_data *us, int pipe, char *buf, int length)  			USB_STOR_PRINTF("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); +					      this_xfer, &partial, +					      USB_CNTL_TIMEOUT * 5);  			USB_STOR_PRINTF("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 */ +			if (us->pusb_dev->status != 0) { +				/* if we stall, we need to clear it before +				 * we go on +				 */  #ifdef USB_STOR_DEBUG  				display_int_status(us->pusb_dev->status);  #endif @@ -334,9 +342,9 @@ static int us_one_transfer(struct us_data *us, int pipe, char *buf, int length)  					USB_STOR_PRINTF("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 %X, but data ok\n",us->pusb_dev->status); +					us->pusb_dev->status = stat; +					if (this_xfer == partial) { +						USB_STOR_PRINTF("bulk transferred with error %X, but data ok\n", us->pusb_dev->status);  						return 0;  					}  					else @@ -346,12 +354,15 @@ static int us_one_transfer(struct us_data *us, int pipe, char *buf, int length)  					USB_STOR_PRINTF("Device NAKed bulk_msg\n");  					return result;  				} -				if(this_xfer == partial) { -					USB_STOR_PRINTF("bulk transferred with error %d, but data ok\n",us->pusb_dev->status); +				USB_STOR_PRINTF("bulk transferred with error"); +				if (this_xfer == partial) { +					USB_STOR_PRINTF(" %d, but data ok\n", +							us->pusb_dev->status);  					return 0;  				}  				/* if our try counter reaches 0, bail out */ -				USB_STOR_PRINTF("bulk transferred with error %d, data %d\n",us->pusb_dev->status,partial); +					USB_STOR_PRINTF(" %d, data %d\n", +						us->pusb_dev->status, partial);  				if (!maxtry--)  						return result;  			} @@ -359,7 +370,7 @@ static int us_one_transfer(struct us_data *us, int pipe, char *buf, int length)  			this_xfer -= partial;  			buf += partial;  			/* continue until this transfer is done */ -		} while ( this_xfer ); +		} while (this_xfer);  	}  	/* if we get here, we're done and successful */ @@ -386,29 +397,33 @@ 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"); -	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, 0, 0, USB_CNTL_TIMEOUT*5); +	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, 0, 0, USB_CNTL_TIMEOUT * 5); -	if((result < 0) && (us->pusb_dev->status & USB_ST_STALLED)) -	{ +	if ((result < 0) && (us->pusb_dev->status & USB_ST_STALLED)) {  		USB_STOR_PRINTF("RESET:stall\n");  		return -1;  	}  	/* long wait for reset */  	wait_ms(150); -	USB_STOR_PRINTF("BBB_reset result %d: status %X reset\n",result,us->pusb_dev->status); +	USB_STOR_PRINTF("BBB_reset result %d: status %X 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 */  	wait_ms(150); -	USB_STOR_PRINTF("BBB_reset result %d: status %X clearing IN endpoint\n",result,us->pusb_dev->status); +	USB_STOR_PRINTF("BBB_reset result %d: status %X 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);  	wait_ms(150); -	USB_STOR_PRINTF("BBB_reset result %d: status %X clearing OUT endpoint\n",result,us->pusb_dev->status); +	USB_STOR_PRINTF("BBB_reset result %d: status %X" +			" clearing OUT endpoint\n", result, +			us->pusb_dev->status);  	USB_STOR_PRINTF("BBB_reset done\n");  	return 0;  } @@ -423,16 +438,20 @@ static int usb_stor_CB_reset(struct us_data *us)  	int result;  	USB_STOR_PRINTF("CB_reset\n"); -	memset(cmd, 0xFF, sizeof(cmd)); +	memset(cmd, 0xff, sizeof(cmd));  	cmd[0] = SCSI_SEND_DIAG;  	cmd[1] = 4; -	result = usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev,0), -				 US_CBI_ADSC, USB_TYPE_CLASS | USB_RECIP_INTERFACE, -				 0, us->ifnum, cmd, sizeof(cmd), USB_CNTL_TIMEOUT*5); +	result = usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev, 0), +				 US_CBI_ADSC, +				 USB_TYPE_CLASS | USB_RECIP_INTERFACE, +				 0, us->ifnum, cmd, sizeof(cmd), +				 USB_CNTL_TIMEOUT * 5);  	/* long wait for reset */  	wait_ms(1500); -	USB_STOR_PRINTF("CB_reset result %d: status %X clearing endpoint halt\n",result,us->pusb_dev->status); +	USB_STOR_PRINTF("CB_reset result %d: status %X" +			" 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)); @@ -455,9 +474,11 @@ int usb_stor_BBB_comdat(ccb *srb, struct us_data *us)  	dir_in = US_DIRECTION(srb->cmd[0]);  #ifdef BBB_COMDAT_TRACE -	printf("dir %d lun %d cmdlen %d cmd %p datalen %d pdata %p\n", dir_in, srb->lun, srb->cmdlen, srb->cmd, srb->datalen, srb->pdata); +	printf("dir %d lun %d cmdlen %d cmd %p datalen %d pdata %p\n", +		dir_in, srb->lun, srb->cmdlen, srb->cmd, srb->datalen, +		srb->pdata);  	if (srb->cmdlen) { -		for(result = 0;result < srb->cmdlen;result++) +		for (result = 0; result < srb->cmdlen; result++)  			printf("cmd[%d] %#x ", result, srb->cmd[result]);  		printf("\n");  	} @@ -474,13 +495,14 @@ int usb_stor_BBB_comdat(ccb *srb, struct us_data *us)  	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.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, &actlen, USB_CNTL_TIMEOUT*5); +	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");  	return result; @@ -492,46 +514,61 @@ int usb_stor_BBB_comdat(ccb *srb, struct us_data *us)  int usb_stor_CB_comdat(ccb *srb, struct us_data *us)  {  	int result = 0; -	int dir_in,retry; +	int dir_in, retry;  	unsigned int pipe;  	unsigned long status; -	retry=5; -		dir_in=US_DIRECTION(srb->cmd[0]); +	retry = 5; +	dir_in = US_DIRECTION(srb->cmd[0]); -		if(dir_in) -			pipe=usb_rcvbulkpipe(us->pusb_dev, us->ep_in); -		else -			pipe=usb_sndbulkpipe(us->pusb_dev, us->ep_out); -	while(retry--) { -		USB_STOR_PRINTF("CBI gets a command: Try %d\n",5-retry); +	if (dir_in) +		pipe = usb_rcvbulkpipe(us->pusb_dev, us->ep_in); +	else +		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  		usb_show_srb(srb);  #endif  		/* let's send the command via the control pipe */ -		result = usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev,0), -					 US_CBI_ADSC, USB_TYPE_CLASS | USB_RECIP_INTERFACE, +		result = usb_control_msg(us->pusb_dev, +					 usb_sndctrlpipe(us->pusb_dev , 0), +					 US_CBI_ADSC, +					 USB_TYPE_CLASS | USB_RECIP_INTERFACE,  					 0, us->ifnum, -					 srb->cmd, srb->cmdlen, USB_CNTL_TIMEOUT*5); -		USB_STOR_PRINTF("CB_transport: control msg returned %d, status %X\n",result,us->pusb_dev->status); +					 srb->cmd, srb->cmdlen, +					 USB_CNTL_TIMEOUT * 5); +		USB_STOR_PRINTF("CB_transport: control msg returned %d," +				" status %X\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"); -				usb_clear_halt(us->pusb_dev,  usb_sndctrlpipe(us->pusb_dev,0)); -				us->pusb_dev->status=status; +			if (us->pusb_dev->status & USB_ST_STALLED) { +				status = us->pusb_dev->status; +				USB_STOR_PRINTF(" 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 = %X\n",srb->cmd[0],us->pusb_dev->status); +			USB_STOR_PRINTF(" error during command %02X" +					" Stat = %X\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); +		USB_STOR_PRINTF("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); -			if(!(us->pusb_dev->status & USB_ST_NAK_REC)) +			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); +			if (!(us->pusb_dev->status & USB_ST_NAK_REC))  				break;  		} /* if (srb->datalen) */  		else @@ -543,21 +580,21 @@ int usb_stor_CB_comdat(ccb *srb, struct us_data *us)  } -int usb_stor_CBI_get_status (ccb * srb, struct us_data *us) +int usb_stor_CBI_get_status(ccb *srb, struct us_data *us)  {  	int timeout;  	us->ip_wanted = 1; -	submit_int_msg (us->pusb_dev, us->irqpipe, +	submit_int_msg(us->pusb_dev, us->irqpipe,  			(void *) &us->ip_data, us->irqmaxp, us->irqinterval);  	timeout = 1000;  	while (timeout--) {  		if ((volatile int *) us->ip_wanted == 0)  			break; -		wait_ms (10); +		wait_ms(10);  	}  	if (us->ip_wanted) { -		printf ("	Did not get interrupt on CBI\n"); +		printf("	Did not get interrupt on CBI\n");  		us->ip_wanted = 0;  		return USB_STOR_TRANSPORT_ERROR;  	} @@ -596,9 +633,9 @@ int usb_stor_BBB_clear_endpt_stall(struct us_data *us, __u8 endpt)  	int result;  	/* ENDPOINT_HALT = 0, so set value to 0 */ -	result = usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev,0), +	result = usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev, 0),  				USB_REQ_CLEAR_FEATURE, USB_RECIP_ENDPOINT, -				0, endpt, 0, 0, USB_CNTL_TIMEOUT*5); +				0, endpt, 0, 0, USB_CNTL_TIMEOUT * 5);  	return result;  } @@ -638,12 +675,14 @@ int usb_stor_BBB_transport(ccb *srb, struct us_data *us)  		pipe = pipein;  	else  		pipe = pipeout; -	result = usb_bulk_msg(us->pusb_dev, pipe, srb->pdata, srb->datalen, &data_actlen, USB_CNTL_TIMEOUT*5); +	result = usb_bulk_msg(us->pusb_dev, pipe, srb->pdata, srb->datalen, +			      &data_actlen, USB_CNTL_TIMEOUT * 5);  	/* special handling of STALL in DATA phase */ -	if((result < 0) && (us->pusb_dev->status & USB_ST_STALLED)) { +	if ((result < 0) && (us->pusb_dev->status & USB_ST_STALLED)) {  		USB_STOR_PRINTF("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); +		result = usb_stor_BBB_clear_endpt_stall(us, +					dir_in ? us->ep_in : us->ep_out);  		if (result >= 0)  			/* continue on to STATUS phase */  			goto st; @@ -660,15 +699,16 @@ int usb_stor_BBB_transport(ccb *srb, struct us_data *us)  	printf("\n");  #endif  	/* STATUS phase + error handling */ -   st: +st:  	retry = 0; -   again: +again:  	USB_STOR_PRINTF("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)) { +	if ((result < 0) && (retry < 1) && +	    (us->pusb_dev->status & USB_ST_STALLED)) {  		USB_STOR_PRINTF("STATUS:stall\n");  		/* clear the STALL on the endpoint */  		result = usb_stor_BBB_clear_endpt_stall(us, us->ep_in); @@ -722,32 +762,33 @@ int usb_stor_BBB_transport(ccb *srb, struct us_data *us)  int usb_stor_CB_transport(ccb *srb, struct us_data *us)  { -	int result,status; +	int result, status;  	ccb *psrb;  	ccb reqsrb; -	int retry,notready; +	int retry, notready;  	psrb = &reqsrb; -	status=USB_STOR_TRANSPORT_GOOD; -	retry=0; -	notready=0; +	status = USB_STOR_TRANSPORT_GOOD; +	retry = 0; +	notready = 0;  	/* issue the command */  do_retry: -	result=usb_stor_CB_comdat(srb,us); -	USB_STOR_PRINTF("command / Data returned %d, status %X\n",result,us->pusb_dev->status); +	result = usb_stor_CB_comdat(srb, us); +	USB_STOR_PRINTF("command / Data returned %d, status %X\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 (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) { +		if (status == USB_STOR_TRANSPORT_ERROR) {  			USB_STOR_PRINTF(" USB CBI Command Error\n");  			return status;  		} -		srb->sense_buf[12]=(unsigned char)(us->ip_data>>8); -		srb->sense_buf[13]=(unsigned char)(us->ip_data&0xff); -		if(!us->ip_data) { -		/* if the status is good, report it */ -			if(status==USB_STOR_TRANSPORT_GOOD) { +		srb->sense_buf[12] = (unsigned char)(us->ip_data >> 8); +		srb->sense_buf[13] = (unsigned char)(us->ip_data & 0xff); +		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");  				return status;  			} @@ -755,51 +796,62 @@ 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 %X\n",us->pusb_dev->status); +	if ((result < 0) && !(us->pusb_dev->status & USB_ST_STALLED)) { +		USB_STOR_PRINTF("ERROR %X\n", us->pusb_dev->status);  		us->transport_reset(us);  		return USB_STOR_TRANSPORT_ERROR;  	} -	if((us->protocol==US_PR_CBI) && -			((srb->cmd[0]==SCSI_REQ_SENSE) || -			(srb->cmd[0]==SCSI_INQUIRY))) { /* do not issue an autorequest after request sense */ +	if ((us->protocol == US_PR_CBI) && +	    ((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");  		return USB_STOR_TRANSPORT_GOOD;  	}  	/* issue an request_sense */ -	memset(&psrb->cmd[0],0,12); -	psrb->cmd[0]=SCSI_REQ_SENSE; -	psrb->cmd[1]=srb->lun<<5; -	psrb->cmd[4]=18; -	psrb->datalen=18; +	memset(&psrb->cmd[0], 0, 12); +	psrb->cmd[0] = SCSI_REQ_SENSE; +	psrb->cmd[1] = srb->lun << 5; +	psrb->cmd[4] = 18; +	psrb->datalen = 18;  	psrb->pdata = &srb->sense_buf[0]; -	psrb->cmdlen=12; +	psrb->cmdlen = 12;  	/* issue the command */ -	result=usb_stor_CB_comdat(psrb,us); -	USB_STOR_PRINTF("auto request returned %d\n",result); +	result = usb_stor_CB_comdat(psrb, us); +	USB_STOR_PRINTF("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 %d\n",us->pusb_dev->status); +	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 %d\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]); +	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]);  	/* Check the auto request result */ -	if((srb->sense_buf[2]==0) && -		 (srb->sense_buf[12]==0) && -		 (srb->sense_buf[13]==0)) /* ok, no sense */ +	if ((srb->sense_buf[2] == 0) && +	    (srb->sense_buf[12] == 0) && +	    (srb->sense_buf[13] == 0)) { +		/* ok, no sense */  		return USB_STOR_TRANSPORT_GOOD; +	} +  	/* Check the auto request result */ -	switch(srb->sense_buf[2]) { -	case 0x01: /* Recovered Error */ +	switch (srb->sense_buf[2]) { +	case 0x01: +		/* Recovered Error */  		return USB_STOR_TRANSPORT_GOOD;  		break; -	case 0x02: /* Not Ready */ -		if(notready++ > USB_TRANSPORT_NOT_READY_RETRY) { -			printf("cmd 0x%02X returned 0x%02X 0x%02X 0x%02X 0x%02X (NOT READY)\n", -				srb->cmd[0],srb->sense_buf[0],srb->sense_buf[2],srb->sense_buf[12],srb->sense_buf[13]); +	case 0x02: +		/* Not Ready */ +		if (notready++ > USB_TRANSPORT_NOT_READY_RETRY) { +			printf("cmd 0x%02X returned 0x%02X 0x%02X 0x%02X" +			       " 0x%02X (NOT READY)\n", srb->cmd[0], +				srb->sense_buf[0], srb->sense_buf[2], +				srb->sense_buf[12], srb->sense_buf[13]);  			return USB_STOR_TRANSPORT_FAILED;  		} else {  			wait_ms(100); @@ -807,113 +859,116 @@ do_retry:  		}  		break;  	default: -		if(retry++ > USB_TRANSPORT_UNKNOWN_RETRY) { -			printf("cmd 0x%02X returned 0x%02X 0x%02X 0x%02X 0x%02X\n", -				srb->cmd[0],srb->sense_buf[0],srb->sense_buf[2],srb->sense_buf[12],srb->sense_buf[13]); +		if (retry++ > USB_TRANSPORT_UNKNOWN_RETRY) { +			printf("cmd 0x%02X returned 0x%02X 0x%02X 0x%02X" +			       " 0x%02X\n", srb->cmd[0], srb->sense_buf[0], +				srb->sense_buf[2], srb->sense_buf[12], +				srb->sense_buf[13]);  			return USB_STOR_TRANSPORT_FAILED; -		} else { +		} else  			goto do_retry; -		}  		break;  	}  	return USB_STOR_TRANSPORT_FAILED;  } -static int usb_inquiry(ccb *srb,struct us_data *ss) +static int usb_inquiry(ccb *srb, struct us_data *ss)  { -	int retry,i; -	retry=5; +	int retry, i; +	retry = 5;  	do { -		memset(&srb->cmd[0],0,12); -		srb->cmd[0]=SCSI_INQUIRY; -		srb->cmd[1]=srb->lun<<5; -		srb->cmd[4]=36; -		srb->datalen=36; -		srb->cmdlen=12; -		i=ss->transport(srb,ss); -		USB_STOR_PRINTF("inquiry returns %d\n",i); -		if(i==0) +		memset(&srb->cmd[0], 0, 12); +		srb->cmd[0] = SCSI_INQUIRY; +		srb->cmd[1] = srb->lun<<5; +		srb->cmd[4] = 36; +		srb->datalen = 36; +		srb->cmdlen = 12; +		i = ss->transport(srb, ss); +		USB_STOR_PRINTF("inquiry returns %d\n", i); +		if (i == 0)  			break; -	} while(retry--); +	} while (retry--); -	if(!retry) { +	if (!retry) {  		printf("error in inquiry\n");  		return -1;  	}  	return 0;  } -static int usb_request_sense(ccb *srb,struct us_data *ss) +static int usb_request_sense(ccb *srb, struct us_data *ss)  {  	char *ptr; -	ptr=(char *)srb->pdata; -	memset(&srb->cmd[0],0,12); -	srb->cmd[0]=SCSI_REQ_SENSE; -	srb->cmd[1]=srb->lun<<5; -	srb->cmd[4]=18; -	srb->datalen=18; +	ptr = (char *)srb->pdata; +	memset(&srb->cmd[0], 0, 12); +	srb->cmd[0] = SCSI_REQ_SENSE; +	srb->cmd[1] = srb->lun << 5; +	srb->cmd[4] = 18; +	srb->datalen = 18;  	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]); -	srb->pdata=(uchar *)ptr; +	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]); +	srb->pdata = (uchar *)ptr;  	return 0;  } -static int usb_test_unit_ready(ccb *srb,struct us_data *ss) +static int usb_test_unit_ready(ccb *srb, struct us_data *ss)  {  	int retries = 10;  	do { -		memset(&srb->cmd[0],0,12); -		srb->cmd[0]=SCSI_TST_U_RDY; -		srb->cmd[1]=srb->lun<<5; -		srb->datalen=0; -		srb->cmdlen=12; -		if(ss->transport(srb,ss)==USB_STOR_TRANSPORT_GOOD) { +		memset(&srb->cmd[0], 0, 12); +		srb->cmd[0] = SCSI_TST_U_RDY; +		srb->cmd[1] = srb->lun << 5; +		srb->datalen = 0; +		srb->cmdlen = 12; +		if (ss->transport(srb, ss) == USB_STOR_TRANSPORT_GOOD)  			return 0; -		} -		usb_request_sense (srb, ss); -		wait_ms (100); -	} while(retries--); +		usb_request_sense(srb, ss); +		wait_ms(100); +	} while (retries--);  	return -1;  } -static int usb_read_capacity(ccb *srb,struct us_data *ss) +static int usb_read_capacity(ccb *srb, struct us_data *ss)  {  	int retry; -	retry = 3; /* retries */ +	/* XXX retries */ +	retry = 3;  	do { -		memset(&srb->cmd[0],0,12); -		srb->cmd[0]=SCSI_RD_CAPAC; -		srb->cmd[1]=srb->lun<<5; -		srb->datalen=8; -		srb->cmdlen=12; -		if(ss->transport(srb,ss)==USB_STOR_TRANSPORT_GOOD) { +		memset(&srb->cmd[0], 0, 12); +		srb->cmd[0] = SCSI_RD_CAPAC; +		srb->cmd[1] = srb->lun << 5; +		srb->datalen = 8; +		srb->cmdlen = 12; +		if (ss->transport(srb, ss) == USB_STOR_TRANSPORT_GOOD)  			return 0; -		} -	} while(retry--); +	} while (retry--);  	return -1;  } -static int usb_read_10(ccb *srb,struct us_data *ss, unsigned long start, unsigned short blocks) +static int usb_read_10(ccb *srb, struct us_data *ss, unsigned long start, +		       unsigned short blocks)  { -	memset(&srb->cmd[0],0,12); -	srb->cmd[0]=SCSI_READ10; -	srb->cmd[1]=srb->lun<<5; -	srb->cmd[2]=((unsigned char) (start>>24))&0xff; -	srb->cmd[3]=((unsigned char) (start>>16))&0xff; -	srb->cmd[4]=((unsigned char) (start>>8))&0xff; -	srb->cmd[5]=((unsigned char) (start))&0xff; -	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); -	return ss->transport(srb,ss); +	memset(&srb->cmd[0], 0, 12); +	srb->cmd[0] = SCSI_READ10; +	srb->cmd[1] = srb->lun << 5; +	srb->cmd[2] = ((unsigned char) (start >> 24)) & 0xff; +	srb->cmd[3] = ((unsigned char) (start >> 16)) & 0xff; +	srb->cmd[4] = ((unsigned char) (start >> 8)) & 0xff; +	srb->cmd[5] = ((unsigned char) (start)) & 0xff; +	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); +	return ss->transport(srb, ss);  } @@ -933,85 +988,94 @@ static void usb_bin_fixup(struct usb_device_descriptor descriptor,  	const unsigned char max_vendor_len = 40;  	const unsigned char max_product_len = 20;  	if (descriptor.idVendor == 0x0424 && descriptor.idProduct == 0x223a) { -		strncpy ((char *)vendor, "SMSC", max_vendor_len); -		strncpy ((char *)product, "Flash Media Cntrller", max_product_len); +		strncpy((char *)vendor, "SMSC", max_vendor_len); +		strncpy((char *)product, "Flash Media Cntrller", +			max_product_len);  	}  }  #endif /* CONFIG_USB_BIN_FIXUP */  #define USB_MAX_READ_BLK 20 -unsigned long usb_stor_read(int device, unsigned long blknr, unsigned long blkcnt, void *buffer) +unsigned long usb_stor_read(int device, unsigned long blknr, +			    unsigned long blkcnt, void *buffer)  { -	unsigned long start,blks, buf_addr; +	unsigned long start, blks, buf_addr;  	unsigned short smallblks;  	struct usb_device *dev; -	int retry,i; +	int retry, i;  	ccb *srb = &usb_ccb;  	if (blkcnt == 0)  		return 0;  	device &= 0xff; -	/* Setup  device -	 */ -	USB_STOR_PRINTF("\nusb_read: dev %d \n",device); -	dev=NULL; -	for(i=0;i<USB_MAX_DEVICE;i++) { -		dev=usb_get_dev_index(i); -		if(dev==NULL) { +	/* Setup  device */ +	USB_STOR_PRINTF("\nusb_read: dev %d \n", device); +	dev = NULL; +	for (i = 0; i < USB_MAX_DEVICE; i++) { +		dev = usb_get_dev_index(i); +		if (dev == NULL)  			return 0; -		} -		if(dev->devnum==usb_dev_desc[device].target) +		if (dev->devnum == usb_dev_desc[device].target)  			break;  	}  	usb_disable_asynch(1); /* asynch transfer not allowed */ -	srb->lun=usb_dev_desc[device].lun; -	buf_addr=(unsigned long)buffer; -	start=blknr; -	blks=blkcnt; -	if(usb_test_unit_ready(srb,(struct us_data *)dev->privptr)) { -		printf("Device NOT ready\n   Request Sense returned %02X %02X %02X\n", -			srb->sense_buf[2],srb->sense_buf[12],srb->sense_buf[13]); +	srb->lun = usb_dev_desc[device].lun; +	buf_addr = (unsigned long)buffer; +	start = blknr; +	blks = blkcnt; +	if (usb_test_unit_ready(srb, (struct us_data *)dev->privptr)) { +		printf("Device NOT ready\n   Request Sense returned %02X %02X" +		       " %02X\n", srb->sense_buf[2], srb->sense_buf[12], +		       srb->sense_buf[13]);  		return 0;  	} -	USB_STOR_PRINTF("\nusb_read: dev %d startblk %lx, blccnt %lx buffer %lx\n",device,start,blks, buf_addr); + +	USB_STOR_PRINTF("\nusb_read: dev %d startblk %lx, blccnt %lx" +			" buffer %lx\n", device, start, blks, buf_addr); +  	do { -		retry=2; -		srb->pdata=(unsigned char *)buf_addr; -		if(blks>USB_MAX_READ_BLK) { -			smallblks=USB_MAX_READ_BLK; -		} else { -			smallblks=(unsigned short) blks; -		} +		/* XXX need some comment here */ +		retry = 2; +		srb->pdata = (unsigned char *)buf_addr; +		if (blks > USB_MAX_READ_BLK) +			smallblks = USB_MAX_READ_BLK; +		else +			smallblks = (unsigned short) blks;  retry_it: -		if(smallblks==USB_MAX_READ_BLK) +		if (smallblks == USB_MAX_READ_BLK)  			usb_show_progress(); -		srb->datalen=usb_dev_desc[device].blksz * smallblks; -		srb->pdata=(unsigned char *)buf_addr; -		if(usb_read_10(srb,(struct us_data *)dev->privptr, start, smallblks)) { +		srb->datalen = usb_dev_desc[device].blksz * smallblks; +		srb->pdata = (unsigned char *)buf_addr; +		if (usb_read_10(srb, (struct us_data *)dev->privptr, start, +		    smallblks)) {  			USB_STOR_PRINTF("Read ERROR\n"); -			usb_request_sense(srb,(struct us_data *)dev->privptr); -			if(retry--) +			usb_request_sense(srb, (struct us_data *)dev->privptr); +			if (retry--)  				goto retry_it; -			blkcnt-=blks; +			blkcnt -= blks;  			break;  		} -		start+=smallblks; -		blks-=smallblks; -		buf_addr+=srb->datalen; -	} while(blks!=0); -	USB_STOR_PRINTF("usb_read: end startblk %lx, blccnt %x buffer %lx\n",start,smallblks,buf_addr); +		start += smallblks; +		blks -= smallblks; +		buf_addr += srb->datalen; +	} while (blks != 0); + +	USB_STOR_PRINTF("usb_read: end startblk %lx, blccnt %x buffer %lx\n", +			start, smallblks, buf_addr); +  	usb_disable_asynch(0); /* asynch transfer allowed */ -	if(blkcnt>=USB_MAX_READ_BLK) +	if (blkcnt >= USB_MAX_READ_BLK)  		printf("\n"); -	return(blkcnt); +	return blkcnt;  }  /* Probe to see if a new device is actually a Storage device */ -int usb_storage_probe(struct usb_device *dev, unsigned int ifnum,struct us_data *ss) +int usb_storage_probe(struct usb_device *dev, unsigned int ifnum, +		      struct us_data *ss)  {  	struct usb_interface_descriptor *iface;  	int i; @@ -1025,8 +1089,11 @@ int usb_storage_probe(struct usb_device *dev, unsigned int ifnum,struct us_data  #if 0  	/* this is the place to patch some storage devices */ -	USB_STOR_PRINTF("iVendor %X iProduct %X\n",dev->descriptor.idVendor,dev->descriptor.idProduct); -	if ((dev->descriptor.idVendor) == 0x066b && (dev->descriptor.idProduct) == 0x0103) { +	USB_STOR_PRINTF("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");  		protocol = US_PR_CB;  		subclass = US_SC_UFI;	    /* an assumption */ @@ -1095,19 +1162,20 @@ int usb_storage_probe(struct usb_device *dev, unsigned int ifnum,struct us_data  	 */  	for (i = 0; i < iface->bNumEndpoints; i++) {  		/* is it an BULK endpoint? */ -		if ((iface->ep_desc[i].bmAttributes &  USB_ENDPOINT_XFERTYPE_MASK) -		    == USB_ENDPOINT_XFER_BULK) { +		if ((iface->ep_desc[i].bmAttributes & +		     USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_BULK) {  			if (iface->ep_desc[i].bEndpointAddress & USB_DIR_IN)  				ss->ep_in = iface->ep_desc[i].bEndpointAddress &  					USB_ENDPOINT_NUMBER_MASK;  			else -				ss->ep_out = iface->ep_desc[i].bEndpointAddress & +				ss->ep_out = +					iface->ep_desc[i].bEndpointAddress &  					USB_ENDPOINT_NUMBER_MASK;  		}  		/* is it an interrupt endpoint? */ -		if ((iface->ep_desc[i].bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) -		    == USB_ENDPOINT_XFER_INT) { +		if ((iface->ep_desc[i].bmAttributes & +		    USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT) {  			ss->ep_int = iface->ep_desc[i].bEndpointAddress &  				USB_ENDPOINT_NUMBER_MASK;  			ss->irqinterval = iface->ep_desc[i].bInterval; @@ -1130,26 +1198,28 @@ int usb_storage_probe(struct usb_device *dev, unsigned int ifnum,struct us_data  	 */  	if (ss->subclass != US_SC_UFI && ss->subclass != US_SC_SCSI &&  	    ss->subclass != US_SC_8070) { -		printf("Sorry, protocol %d not yet supported.\n",ss->subclass); +		printf("Sorry, protocol %d not yet supported.\n", ss->subclass);  		return 0;  	} -	if(ss->ep_int) { /* we had found an interrupt endpoint, prepare irq pipe */ -		/* set up the IRQ pipe and handler */ - +	if (ss->ep_int) { +		/* we had found an interrupt endpoint, prepare irq pipe +		 * set up the IRQ pipe and handler +		 */  		ss->irqinterval = (ss->irqinterval > 0) ? ss->irqinterval : 255;  		ss->irqpipe = usb_rcvintpipe(ss->pusb_dev, ss->ep_int);  		ss->irqmaxp = usb_maxpacket(dev, ss->irqpipe); -		dev->irq_handle=usb_stor_irq; +		dev->irq_handle = usb_stor_irq;  	} -	dev->privptr=(void *)ss; +	dev->privptr = (void *)ss;  	return 1;  } -int usb_stor_get_info(struct usb_device *dev,struct us_data *ss,block_dev_desc_t *dev_desc) +int usb_stor_get_info(struct usb_device *dev, struct us_data *ss, +		      block_dev_desc_t *dev_desc)  { -	unsigned char perq,modi; +	unsigned char perq, modi;  	unsigned long cap[2]; -	unsigned long *capacity,*blksz; +	unsigned long *capacity, *blksz;  	ccb *pccb = &usb_ccb;  	/* for some reasons a couple of devices would not survive this reset */ @@ -1157,7 +1227,6 @@ int usb_stor_get_info(struct usb_device *dev,struct us_data *ss,block_dev_desc_t  	    /* Sony USM256E */  	    (dev->descriptor.idVendor == 0x054c &&  	     dev->descriptor.idProduct == 0x019e) -  	    ||  	    /* USB007 Mini-USB2 Flash Drive */  	    (dev->descriptor.idVendor == 0x066f && @@ -1175,17 +1244,20 @@ int usb_stor_get_info(struct usb_device *dev,struct us_data *ss,block_dev_desc_t  	dev_desc->target = dev->devnum;  	pccb->lun = dev_desc->lun; -	USB_STOR_PRINTF(" address %d\n",dev_desc->target); +	USB_STOR_PRINTF(" address %d\n", dev_desc->target); -	if(usb_inquiry(pccb,ss)) +	if (usb_inquiry(pccb, ss))  		return -1;  	perq = usb_stor_buf[0];  	modi = usb_stor_buf[1]; -	if((perq & 0x1f) == 0x1f) { -		return 0; /* skip unknown devices */ + +	if ((perq & 0x1f) == 0x1f) { +		/* skip unknown devices */ +		return 0;  	} -	if((modi&0x80) == 0x80) {/* drive is removable */ +	if ((modi&0x80) == 0x80) { +		/* drive is removable */  		dev_desc->removable = 1;  	}  	memcpy(&dev_desc->vendor[0], &usb_stor_buf[8], 8); @@ -1195,29 +1267,34 @@ int usb_stor_get_info(struct usb_device *dev,struct us_data *ss,block_dev_desc_t  	dev_desc->product[16] = 0;  	dev_desc->revision[4] = 0;  #ifdef CONFIG_USB_BIN_FIXUP -	usb_bin_fixup(dev->descriptor, (uchar *)dev_desc->vendor, (uchar *)dev_desc->product); +	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]); -	if(usb_test_unit_ready(pccb,ss)) { -		printf("Device NOT ready\n   Request Sense returned %02X %02X %02X\n",pccb->sense_buf[2],pccb->sense_buf[12],pccb->sense_buf[13]); -		if(dev_desc->removable == 1) { +	USB_STOR_PRINTF("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", +		       pccb->sense_buf[2], pccb->sense_buf[12], +		       pccb->sense_buf[13]); +		if (dev_desc->removable == 1) {  			dev_desc->type = perq;  			return 1;  		} -		else -			return 0; +		return 0;  	}  	pccb->pdata = (unsigned char *)&cap[0]; -	memset(pccb->pdata,0,8); -	if(usb_read_capacity(pccb,ss) != 0) { +	memset(pccb->pdata, 0, 8); +	if (usb_read_capacity(pccb, ss) != 0) {  		printf("READ_CAP ERROR\n");  		cap[0] = 2880;  		cap[1] = 0x200;  	} -	USB_STOR_PRINTF("Read Capacity returns: 0x%lx, 0x%lx\n",cap[0],cap[1]); +	USB_STOR_PRINTF("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; +	if (cap[0] > (0x200000 * 10)) /* greater than 10 GByte */ +		cap[0] >>= 16;  #endif  	cap[0] = cpu_to_be32(cap[0]);  	cap[1] = cpu_to_be32(cap[1]); @@ -1226,15 +1303,16 @@ int usb_stor_get_info(struct usb_device *dev,struct us_data *ss,block_dev_desc_t  	cap[0] += 1;  	capacity = &cap[0];  	blksz = &cap[1]; -	USB_STOR_PRINTF("Capacity = 0x%lx, blocksz = 0x%lx\n",*capacity,*blksz); +	USB_STOR_PRINTF("Capacity = 0x%lx, blocksz = 0x%lx\n", +			*capacity, *blksz);  	dev_desc->lba = *capacity;  	dev_desc->blksz = *blksz;  	dev_desc->type = perq; -	USB_STOR_PRINTF(" address %d\n",dev_desc->target); -	USB_STOR_PRINTF("partype: %d\n",dev_desc->part_type); +	USB_STOR_PRINTF(" address %d\n", dev_desc->target); +	USB_STOR_PRINTF("partype: %d\n", dev_desc->part_type);  	init_part(dev_desc); -	USB_STOR_PRINTF("partype: %d\n",dev_desc->part_type); +	USB_STOR_PRINTF("partype: %d\n", dev_desc->part_type);  	return 1;  } |