usb: Update the test to cover reading and writing

Add test coverage for blk_write() as well.

The blk_erase() is not tested for now as the USB stor interface does not
support erase.

Signed-off-by: Simon Glass <sjg@chromium.org>
diff --git a/include/scsi.h b/include/scsi.h
index 94e1d8c..9efefea 100644
--- a/include/scsi.h
+++ b/include/scsi.h
@@ -255,6 +255,16 @@
 	u8 spare2[3];
 };
 
+/** struct scsi_write10_req - data for the write10 command */
+struct __packed scsi_write10_req {
+	u8 cmd;
+	u8 lun_flags;
+	u32 lba;
+	u8 spare;
+	u16 xfer_len;
+	u8 spare2[3];
+};
+
 /**
  * struct scsi_plat - stores information about SCSI controller
  *
diff --git a/include/scsi_emul.h b/include/scsi_emul.h
index 13c3f86..d439f7c 100644
--- a/include/scsi_emul.h
+++ b/include/scsi_emul.h
@@ -41,13 +41,20 @@
 	enum scsi_cmd_phase phase;
 	int buff_used;
 	int read_len;
+	int write_len;
 	uint seek_pos;
 	int alloc_len;
 	uint transfer_len;
 };
 
-/* Indicates that a read is being started */
-#define SCSI_EMUL_DO_READ	1
+/**
+ * Return value from sb_scsi_emul_command() indicates that a read or write is
+ * being started
+ */
+enum {
+	SCSI_EMUL_DO_READ	= 1,
+	SCSI_EMUL_DO_WRITE	= 2,
+};
 
 /**
  * sb_scsi_emul_command() - Process a SCSI command
@@ -61,8 +68,9 @@
  * @info: Emulation information
  * @req: Request to process
  * @len: Length of request in bytes
- * @return SCSI_EMUL_DO_READ if a read has started, 0 if some other operation
- *	has started, -ve if there was an error
+ * @return SCSI_EMUL_DO_READ if a read has started, SCSI_EMUL_DO_WRITE if a
+ *	write has started, 0 if some other operation has started, -ve if there
+ *	was an error
  */
 int sb_scsi_emul_command(struct scsi_emul_info *info,
 			 const struct scsi_cmd *req, int len);