diff options
Diffstat (limited to 'common')
| -rw-r--r-- | common/usb.c | 21 | ||||
| -rw-r--r-- | common/usb_storage.c | 30 | 
2 files changed, 29 insertions, 22 deletions
| diff --git a/common/usb.c b/common/usb.c index 50fa466b4..8407974f7 100644 --- a/common/usb.c +++ b/common/usb.c @@ -348,6 +348,7 @@ static int usb_parse_config(struct usb_device *dev,  	struct usb_descriptor_header *head;  	int index, ifno, epno, curr_if_num;  	u16 ep_wMaxPacketSize; +	struct usb_interface *if_desc = NULL;  	ifno = -1;  	epno = -1; @@ -375,23 +376,27 @@ static int usb_parse_config(struct usb_device *dev,  			     &buffer[index])->bInterfaceNumber != curr_if_num) {  				/* this is a new interface, copy new desc */  				ifno = dev->config.no_of_if; +				if_desc = &dev->config.if_desc[ifno];  				dev->config.no_of_if++; -				memcpy(&dev->config.if_desc[ifno], -					&buffer[index], buffer[index]); -				dev->config.if_desc[ifno].no_of_ep = 0; -				dev->config.if_desc[ifno].num_altsetting = 1; +				memcpy(if_desc,	&buffer[index], buffer[index]); +				if_desc->no_of_ep = 0; +				if_desc->num_altsetting = 1;  				curr_if_num = -				     dev->config.if_desc[ifno].desc.bInterfaceNumber; +				     if_desc->desc.bInterfaceNumber;  			} else {  				/* found alternate setting for the interface */ -				dev->config.if_desc[ifno].num_altsetting++; +				if (ifno >= 0) { +					if_desc = &dev->config.if_desc[ifno]; +					if_desc->num_altsetting++; +				}  			}  			break;  		case USB_DT_ENDPOINT:  			epno = dev->config.if_desc[ifno].no_of_ep; +			if_desc = &dev->config.if_desc[ifno];  			/* found an endpoint */ -			dev->config.if_desc[ifno].no_of_ep++; -			memcpy(&dev->config.if_desc[ifno].ep_desc[epno], +			if_desc->no_of_ep++; +			memcpy(&if_desc->ep_desc[epno],  				&buffer[index], buffer[index]);  			ep_wMaxPacketSize = get_unaligned(&dev->config.\  							if_desc[ifno].\ diff --git a/common/usb_storage.c b/common/usb_storage.c index 67d26ce87..457970f77 100644 --- a/common/usb_storage.c +++ b/common/usb_storage.c @@ -269,9 +269,9 @@ int usb_stor_scan(int mode)  			     lun++) {  				usb_dev_desc[usb_max_devs].lun = lun;  				if (usb_stor_get_info(dev, &usb_stor[start], -						      &usb_dev_desc[usb_max_devs]) == 1) { -				usb_max_devs++; -		} +				    &usb_dev_desc[usb_max_devs]) == 1) { +					usb_max_devs++; +				}  			}  		}  		/* if storage device */ @@ -504,7 +504,7 @@ static 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", +	printf("dir %d lun %d cmdlen %d cmd %p datalen %lu pdata %p\n",  		dir_in, srb->lun, srb->cmdlen, srb->cmd, srb->datalen,  		srb->pdata);  	if (srb->cmdlen) { @@ -1209,6 +1209,7 @@ int usb_storage_probe(struct usb_device *dev, unsigned int ifnum,  {  	struct usb_interface *iface;  	int i; +	struct usb_endpoint_descriptor *ep_desc;  	unsigned int flags = 0;  	int protocol = 0; @@ -1291,24 +1292,25 @@ int usb_storage_probe(struct usb_device *dev, unsigned int ifnum,  	 * We will ignore any others.  	 */  	for (i = 0; i < iface->desc.bNumEndpoints; i++) { +		ep_desc = &iface->ep_desc[i];  		/* is it an BULK endpoint? */ -		if ((iface->ep_desc[i].bmAttributes & +		if ((ep_desc->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; +			if (ep_desc->bEndpointAddress & USB_DIR_IN) +				ss->ep_in = ep_desc->bEndpointAddress & +						USB_ENDPOINT_NUMBER_MASK;  			else  				ss->ep_out = -					iface->ep_desc[i].bEndpointAddress & +					ep_desc->bEndpointAddress &  					USB_ENDPOINT_NUMBER_MASK;  		}  		/* is it an interrupt endpoint? */ -		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; +		if ((ep_desc->bmAttributes & +		     USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT) { +			ss->ep_int = ep_desc->bEndpointAddress & +						USB_ENDPOINT_NUMBER_MASK; +			ss->irqinterval = ep_desc->bInterval;  		}  	}  	debug("Endpoints In %d Out %d Int %d\n", |