]> git.ipfire.org Git - thirdparty/u-boot.git/blobdiff - include/scsi_emul.h
mtd: spinand: Add support for XTX SPINAND
[thirdparty/u-boot.git] / include / scsi_emul.h
index f27c19750b036352b60ae4bfce5fd20037683a52..d439f7c00c2539f2b390e1095b4829173f5bea0d 100644 (file)
 /**
  * struct scsi_emul_info - information for emulating a SCSI device
  *
+ * @vendor: Vendor name
+ * @product: Product name
+ * @block_size: Block size of device in bytes (normally 512)
+ * @file_size: Size of the backing file for this emulator, in bytes
+ * @seek_block: Seek position for file (block number)
+ *
  * @phase: Current SCSI phase
  * @buff_used: Number of bytes ready to transfer back to host
  * @read_len: Number of bytes of data left in the current read command
 struct scsi_emul_info {
        /* provided by the caller: */
        void *buff;
+       const char *vendor;
+       const char *product;
+       int block_size;
+       loff_t file_size;
+       int seek_block;
 
        /* state maintained by the emulator: */
        enum scsi_cmd_phase phase;
        int buff_used;
        int read_len;
+       int write_len;
+       uint seek_pos;
        int alloc_len;
        uint transfer_len;
 };
 
+/**
+ * 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
+ *
+ * This sets up the response in info->buff and updates various other values
+ * in info.
+ *
+ * If SCSI_EMUL_DO_READ is returned then the caller should set up so that the
+ * backing file can be read, or return an error status if there is no file.
+ *
+ * @info: Emulation information
+ * @req: Request to process
+ * @len: Length of request in bytes
+ * @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);
+
 #endif