]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
sandbox: scsi: Remove setup calls from handle_read()
authorSimon Glass <sjg@chromium.org>
Wed, 21 Sep 2022 14:21:42 +0000 (16:21 +0200)
committerSimon Glass <sjg@chromium.org>
Sun, 25 Sep 2022 14:30:05 +0000 (08:30 -0600)
Move the device-specific code out into the top-level function.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/usb/emul/sandbox_flash.c

index e699f89793da1e1c0f6d9ffb29db8d1e263a8b4b..7b9a99c1a387b116c04ae59d461b08e10acfd7a7 100644 (file)
@@ -206,8 +206,19 @@ static void setup_response(struct sandbox_flash_priv *priv)
        csw->bCSWStatus = CSWSTATUS_GOOD;
 }
 
-static void handle_read(struct sandbox_flash_priv *priv, ulong lba,
-                       ulong transfer_len)
+/**
+ * handle_read() - prepare for reading data from the backing file
+ *
+ * This seeks to the correct file position and sets info->buff_used to the
+ * correct size.
+ *
+ * @priv: Private information
+ * @lba: Start block to read from
+ * @transfer_length: Number of blocks to read
+ * @return 0 if OK, -EIO on failure
+ */
+static int handle_read(struct sandbox_flash_priv *priv, ulong lba,
+                      ulong transfer_len)
 {
        struct scsi_emul_info *info = &priv->eminfo;
 
@@ -216,10 +227,10 @@ static void handle_read(struct sandbox_flash_priv *priv, ulong lba,
        if (priv->fd != -1) {
                os_lseek(priv->fd, lba * info->block_size, OS_SEEK_SET);
                info->buff_used = transfer_len * info->block_size;
-               setup_response(priv);
-       } else {
-               setup_fail_response(priv);
+               return 0;
        }
+
+       return -EIO;
 }
 
 static int handle_ufi_command(struct sandbox_flash_plat *plat,
@@ -265,8 +276,12 @@ static int handle_ufi_command(struct sandbox_flash_plat *plat,
        case SCSI_READ10: {
                struct scsi_read10_req *req = (void *)buff;
 
-               handle_read(priv, be32_to_cpu(req->lba),
-                           be16_to_cpu(req->xfer_len));
+               if (!handle_read(priv, be32_to_cpu(req->lba),
+                                be16_to_cpu(req->xfer_len)))
+                       setup_response(priv);
+               else
+                       setup_fail_response(priv);
+
                break;
        }
        default: