[PATCH v2 10/15] sandbox: scsi: Remove setup calls from handle_read()

Simon Glass sjg at chromium.org
Wed Sep 21 16:21:42 CEST 2022


Move the device-specific code out into the top-level function.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

(no changes since v1)

 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.3.968.ga6b4b080e4-goog



More information about the U-Boot mailing list