[PATCH 10/15] sandbox: scsi: Remove setup calls from handle_read()
Simon Glass
sjg at chromium.org
Sat Aug 27 17:15:08 CEST 2022
Move the device-specific code out into the top-level function.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
drivers/usb/emul/sandbox_flash.c | 29 ++++++++++++++++++++++-------
1 file changed, 22 insertions(+), 7 deletions(-)
diff --git a/drivers/usb/emul/sandbox_flash.c b/drivers/usb/emul/sandbox_flash.c
index e699f89793d..7b9a99c1a38 100644
--- a/drivers/usb/emul/sandbox_flash.c
+++ b/drivers/usb/emul/sandbox_flash.c
@@ -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:
--
2.37.2.672.g94769d06f0-goog
More information about the U-Boot
mailing list