Performs code cleanup by making common function for usb_stor_read/
usb_stor_write. Currently only difference in these fucntions is call
to usb_read_10/usb_write_10 scsi commands.

Signed-off-by: Rajesh Bhagat <rajesh.bha...@nxp.com>
---
Changes in v7:
 - Moves unification of usb_read_10/usb_write_10 to other patch

Changes in v6:
 - Removes USB_STOR_OP_TYPE macro and adds __func__ in debug prints
 - Unifies usb_read_10/usb_write_10 functions to usb_read_write_10

Changes in v5:
 - Converts USB_STOR_OPERATION_FUNC macro to a function
 - Corrects the multi line comment accroding to coding style
 - Renames variable to dev to remove code duplication

Changes in v4:
 - Adds code to make common function for read/write

 common/usb_storage.c | 121 ++++++++++++++-------------------------------------
 1 file changed, 32 insertions(+), 89 deletions(-)

diff --git a/common/usb_storage.c b/common/usb_storage.c
index 98798b5..a7d84bf 100644
--- a/common/usb_storage.c
+++ b/common/usb_storage.c
@@ -1087,11 +1087,13 @@ static void usb_bin_fixup(struct usb_device_descriptor 
descriptor,
 #endif /* CONFIG_USB_BIN_FIXUP */
 
 #ifdef CONFIG_BLK
-static unsigned long usb_stor_read(struct udevice *dev, lbaint_t blknr,
-                                  lbaint_t blkcnt, void *buffer)
+static unsigned long usb_stor_read_write(struct udevice *dev, lbaint_t blknr,
+                                        lbaint_t blkcnt, const void *buffer,
+                                        bool is_write)
 #else
-static unsigned long usb_stor_read(struct blk_desc *block_dev, lbaint_t blknr,
-                                  lbaint_t blkcnt, void *buffer)
+static unsigned long usb_stor_read_write(struct blk_desc *block_dev,
+                                        lbaint_t blknr, lbaint_t blkcnt,
+                                        const void *buffer, bool is_write)
 #endif
 {
        lbaint_t start, blks;
@@ -1111,9 +1113,9 @@ static unsigned long usb_stor_read(struct blk_desc 
*block_dev, lbaint_t blknr,
 #ifdef CONFIG_BLK
        block_dev = dev_get_uclass_platdata(dev);
        udev = dev_get_parent_priv(dev_get_parent(dev));
-       debug("\nusb_read: udev %d\n", block_dev->devnum);
+       debug("\n%s: udev %d\n", __func__, block_dev->devnum);
 #else
-       debug("\nusb_read: udev %d\n", block_dev->devnum);
+       debug("\n%s: udev %d\n", __func__, block_dev->devnum);
        udev = usb_dev_desc[block_dev->devnum].priv;
        if (!udev) {
                debug("%s: No device\n", __func__);
@@ -1128,11 +1130,15 @@ static unsigned long usb_stor_read(struct blk_desc 
*block_dev, lbaint_t blknr,
        start = blknr;
        blks = blkcnt;
 
-       debug("\nusb_read: dev %d startblk " LBAF ", blccnt " LBAF " buffer %"
-             PRIxPTR "\n", block_dev->devnum, start, blks, buf_addr);
+       debug("\n%s: dev %d startblk " LBAF ", blccnt " LBAF " buffer %"
+             PRIxPTR "\n", __func__, block_dev->devnum, start, blks,
+             buf_addr);
 
        do {
-               /* XXX need some comment here */
+               /*
+                * If read/write fails retry for max retry count else
+                * return with number of blocks written successfully.
+                */
                retry = 2;
                srb->pdata = (unsigned char *)buf_addr;
                if (blks > USB_MAX_XFER_BLK)
@@ -1144,8 +1150,8 @@ retry_it:
                        usb_show_progress();
                srb->datalen = block_dev->blksz * smallblks;
                srb->pdata = (unsigned char *)buf_addr;
-               if (usb_read_10(srb, ss, start, smallblks)) {
-                       debug("Read ERROR\n");
+               if (usb_read_write_10(srb, ss, start, smallblks, is_write)) {
+                       debug("%s ERROR\n", __func__);
                        usb_request_sense(srb, ss);
                        if (retry--)
                                goto retry_it;
@@ -1158,9 +1164,9 @@ retry_it:
        } while (blks != 0);
        ss->flags &= ~USB_READY;
 
-       debug("usb_read: end startblk " LBAF
+       debug("%s: end startblk " LBAF
              ", blccnt %x buffer %" PRIxPTR "\n",
-             start, smallblks, buf_addr);
+             __func__, start, smallblks, buf_addr);
 
        usb_disable_asynch(0); /* asynch transfer allowed */
        if (blkcnt >= USB_MAX_XFER_BLK)
@@ -1168,90 +1174,27 @@ retry_it:
        return blkcnt;
 }
 
+
 #ifdef CONFIG_BLK
-static unsigned long usb_stor_write(struct udevice *dev, lbaint_t blknr,
-                                   lbaint_t blkcnt, const void *buffer)
+static unsigned long usb_stor_read(struct udevice *dev, lbaint_t blknr,
+                                  lbaint_t blkcnt, void *buffer)
 #else
-static unsigned long usb_stor_write(struct blk_desc *block_dev, lbaint_t blknr,
-                                   lbaint_t blkcnt, const void *buffer)
+static unsigned long usb_stor_read(struct blk_desc *dev, lbaint_t blknr,
+                                  lbaint_t blkcnt, void *buffer)
 #endif
 {
-       lbaint_t start, blks;
-       uintptr_t buf_addr;
-       unsigned short smallblks;
-       struct usb_device *udev;
-       struct us_data *ss;
-       int retry;
-       ccb *srb = &usb_ccb;
-#ifdef CONFIG_BLK
-       struct blk_desc *block_dev;
-#endif
-
-       if (blkcnt == 0)
-               return 0;
+       return usb_stor_read_write(dev, blknr, blkcnt, buffer, false);
+}
 
-       /* Setup  device */
 #ifdef CONFIG_BLK
-       block_dev = dev_get_uclass_platdata(dev);
-       udev = dev_get_parent_priv(dev_get_parent(dev));
-       debug("\nusb_read: udev %d\n", block_dev->devnum);
+static unsigned long usb_stor_write(struct udevice *dev, lbaint_t blknr,
+                                   lbaint_t blkcnt, const void *buffer)
 #else
-       debug("\nusb_read: udev %d\n", block_dev->devnum);
-       udev = usb_dev_desc[block_dev->devnum].priv;
-       if (!udev) {
-               debug("%s: No device\n", __func__);
-               return 0;
-       }
+static unsigned long usb_stor_write(struct blk_desc *dev, lbaint_t blknr,
+                                   lbaint_t blkcnt, const void *buffer)
 #endif
-       ss = (struct us_data *)udev->privptr;
-
-       usb_disable_asynch(1); /* asynch transfer not allowed */
-
-       srb->lun = block_dev->lun;
-       buf_addr = (uintptr_t)buffer;
-       start = blknr;
-       blks = blkcnt;
-
-       debug("\nusb_write: dev %d startblk " LBAF ", blccnt " LBAF " buffer %"
-             PRIxPTR "\n", block_dev->devnum, start, blks, buf_addr);
-
-       do {
-               /* If write fails retry for max retry count else
-                * return with number of blocks written successfully.
-                */
-               retry = 2;
-               srb->pdata = (unsigned char *)buf_addr;
-               if (blks > USB_MAX_XFER_BLK)
-                       smallblks = USB_MAX_XFER_BLK;
-               else
-                       smallblks = (unsigned short) blks;
-retry_it:
-               if (smallblks == USB_MAX_XFER_BLK)
-                       usb_show_progress();
-               srb->datalen = block_dev->blksz * smallblks;
-               srb->pdata = (unsigned char *)buf_addr;
-               if (usb_write_10(srb, ss, start, smallblks)) {
-                       debug("Write ERROR\n");
-                       usb_request_sense(srb, ss);
-                       if (retry--)
-                               goto retry_it;
-                       blkcnt -= blks;
-                       break;
-               }
-               start += smallblks;
-               blks -= smallblks;
-               buf_addr += srb->datalen;
-       } while (blks != 0);
-       ss->flags &= ~USB_READY;
-
-       debug("usb_write: end startblk " LBAF ", blccnt %x buffer %"
-             PRIxPTR "\n", start, smallblks, buf_addr);
-
-       usb_disable_asynch(0); /* asynch transfer allowed */
-       if (blkcnt >= USB_MAX_XFER_BLK)
-               debug("\n");
-       return blkcnt;
-
+{
+       return usb_stor_read_write(dev, blknr, blkcnt, buffer, true);
 }
 
 /* Probe to see if a new device is actually a Storage device */
-- 
2.6.2.198.g614a2ac

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to