Merge tag 'ux500-devicetree-v3.16-1' of git://git.kernel.org/pub/scm/linux/kernel...
[cascardo/linux.git] / include / scsi / scsi_cmnd.h
index e016e2a..e0ae710 100644 (file)
@@ -7,6 +7,7 @@
 #include <linux/types.h>
 #include <linux/timer.h>
 #include <linux/scatterlist.h>
+#include <scsi/scsi_device.h>
 
 struct Scsi_Host;
 struct scsi_device;
@@ -315,4 +316,20 @@ static inline void set_driver_byte(struct scsi_cmnd *cmd, char status)
        cmd->result = (cmd->result & 0x00ffffff) | (status << 24);
 }
 
+static inline unsigned scsi_transfer_length(struct scsi_cmnd *scmd)
+{
+       unsigned int xfer_len = scsi_out(scmd)->length;
+       unsigned int prot_op = scsi_get_prot_op(scmd);
+       unsigned int sector_size = scmd->device->sector_size;
+
+       switch (prot_op) {
+       case SCSI_PROT_NORMAL:
+       case SCSI_PROT_WRITE_STRIP:
+       case SCSI_PROT_READ_INSERT:
+               return xfer_len;
+       }
+
+       return xfer_len + (xfer_len >> ilog2(sector_size)) * 8;
+}
+
 #endif /* _SCSI_SCSI_CMND_H */