]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/usb_storage.c
video: lcd: prevent crash when using bmp or splashimage due to unaligned accesses
[karo-tx-uboot.git] / common / usb_storage.c
index 67d26ce87af584c32ed2da075194ec52e9646fe6..6ac358d5e2be3ca3acce9dc7e5957ed483943922 100644 (file)
  * BBB support based on /sys/dev/usb/umass.c from
  * FreeBSD.
  *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * 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 Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- *
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 
 /* Note:
@@ -170,9 +153,9 @@ 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 usb_stor_read(int device, lbaint_t blknr,
                            lbaint_t blkcnt, void *buffer);
-unsigned long usb_stor_write(int device, unsigned long blknr,
+unsigned long usb_stor_write(int device, lbaint_t blknr,
                             lbaint_t blkcnt, const void *buffer);
 struct usb_device * usb_get_dev_index(int index);
 void uhci_show_temp_int_td(void);
@@ -269,9 +252,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 +487,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) {
@@ -1054,7 +1037,7 @@ static void usb_bin_fixup(struct usb_device_descriptor descriptor,
 }
 #endif /* CONFIG_USB_BIN_FIXUP */
 
-unsigned long usb_stor_read(int device, unsigned long blknr,
+unsigned long usb_stor_read(int device, lbaint_t blknr,
                            lbaint_t blkcnt, void *buffer)
 {
        lbaint_t start, blks;
@@ -1127,7 +1110,7 @@ retry_it:
        return blkcnt;
 }
 
-unsigned long usb_stor_write(int device, unsigned long blknr,
+unsigned long usb_stor_write(int device, lbaint_t blknr,
                                lbaint_t blkcnt, const void *buffer)
 {
        lbaint_t start, blks;
@@ -1209,6 +1192,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 +1275,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",