On Mon, Mar 26, 2012 at 10:04 AM, KOBAYASHI Yoshitake <yoshitake.kobayashi@xxxxxxxxxxxxx> wrote: > Santosh Y wrote: >> >> + ucd_cmd_ptr->exp_data_transfer_len = >> + cpu_to_be32(lrbp->cmd->transfersize); >> + >> + memcpy(ucd_cmd_ptr->cdb, >> + lrbp->cmd->cmnd, >> + (min_t(unsigned short, >> + lrbp->cmd->cmd_len, >> + MAX_CDB_SIZE))); > > > "Exptected Data Transfer Length" field contains a value that > represents the number of bytes that are required to complete the > SCSI command request and the number of bytes that the Initiator > expects to be transferred to/from the Target. > (JEDEC Standard 220 Table7-7) > On the other hand, "transfersize" in a scsi_cmnd struct is trimmed > to the sector size when requested transfer length exceeds it. > You may derive the actual transfer length from SCSI command itself like > following. > > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c > index feffe65..e63fecb 100644 > --- a/drivers/scsi/ufs/ufshcd.c > +++ b/drivers/scsi/ufs/ufshcd.c > @@ -647,6 +647,34 @@ static void ufshcd_compose_upiu(struct ufshcd_lrb > *lrbp) > (min_t(unsigned short, > lrbp->cmd->cmd_len, > MAX_CDB_SIZE))); > + > + /* Overwrite exptected transfer length by using > TRANSFER_LENGTH in SCSI commands */ > + switch(ucd_cmd_ptr->cdb[0]) { > + case READ_6: > + case WRITE_6: > + ucd_cmd_ptr->exp_data_transfer_len = > + cpu_to_be32(lrbp->cmd->transfersize * > + ucd_cmd_ptr->cdb[4]); > + break; > + case READ_10: > + case WRITE_10: > + ucd_cmd_ptr->exp_data_transfer_len = > + cpu_to_be32(lrbp->cmd->transfersize * > + ((ucd_cmd_ptr->cdb[7] << 8) | > + ucd_cmd_ptr->cdb[8])); > + break; > + case READ_12: > + case WRITE_12: Just a minor change, this will be READ_16 and WRITE_16. > + ucd_cmd_ptr->exp_data_transfer_len = > + cpu_to_be32(lrbp->cmd->transfersize * > + ((ucd_cmd_ptr->cdb[10] << 24) | > + (ucd_cmd_ptr->cdb[11] << 16) | > + (ucd_cmd_ptr->cdb[12] << 8) | > + ucd_cmd_ptr->cdb[13])); > + break; > + default: > + break; > + } > break; > case UTP_CMD_TYPE_DEV_MANAGE: > > /* For query function implementation */ > -- ~Santosh -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html