Commit b3e2c72a authored by Martin K. Petersen's avatar Martin K. Petersen

scsi: mpt3sas: Use the proper SCSI midlayer interfaces for PI

Use the SCSI midlayer interfaces to query protection interval, reference
tag, and per-command DIX flags.

Link: https://lore.kernel.org/r/20210817025014.12085-2-martin.petersen@oracle.com
Cc: Sreekanth Reddy <sreekanth.reddy@broadcom.com>
Cc: Kashyap Desai <kashyap.desai@broadcom.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 125c12f7
...@@ -5048,48 +5048,31 @@ _scsih_setup_eedp(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd, ...@@ -5048,48 +5048,31 @@ _scsih_setup_eedp(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd,
Mpi25SCSIIORequest_t *mpi_request) Mpi25SCSIIORequest_t *mpi_request)
{ {
u16 eedp_flags; u16 eedp_flags;
unsigned char prot_op = scsi_get_prot_op(scmd);
unsigned char prot_type = scsi_get_prot_type(scmd);
Mpi25SCSIIORequest_t *mpi_request_3v = Mpi25SCSIIORequest_t *mpi_request_3v =
(Mpi25SCSIIORequest_t *)mpi_request; (Mpi25SCSIIORequest_t *)mpi_request;
if (prot_type == SCSI_PROT_DIF_TYPE0 || prot_op == SCSI_PROT_NORMAL) switch (scsi_get_prot_op(scmd)) {
return; case SCSI_PROT_READ_STRIP:
if (prot_op == SCSI_PROT_READ_STRIP)
eedp_flags = MPI2_SCSIIO_EEDPFLAGS_CHECK_REMOVE_OP; eedp_flags = MPI2_SCSIIO_EEDPFLAGS_CHECK_REMOVE_OP;
else if (prot_op == SCSI_PROT_WRITE_INSERT) break;
case SCSI_PROT_WRITE_INSERT:
eedp_flags = MPI2_SCSIIO_EEDPFLAGS_INSERT_OP; eedp_flags = MPI2_SCSIIO_EEDPFLAGS_INSERT_OP;
else break;
default:
return; return;
}
switch (prot_type) { if (scmd->prot_flags & SCSI_PROT_GUARD_CHECK)
case SCSI_PROT_DIF_TYPE1: eedp_flags |= MPI2_SCSIIO_EEDPFLAGS_CHECK_GUARD;
case SCSI_PROT_DIF_TYPE2:
/* if (scmd->prot_flags & SCSI_PROT_REF_CHECK) {
* enable ref/guard checking
* auto increment ref tag
*/
eedp_flags |= MPI2_SCSIIO_EEDPFLAGS_INC_PRI_REFTAG | eedp_flags |= MPI2_SCSIIO_EEDPFLAGS_INC_PRI_REFTAG |
MPI2_SCSIIO_EEDPFLAGS_CHECK_REFTAG | MPI2_SCSIIO_EEDPFLAGS_CHECK_REFTAG;
MPI2_SCSIIO_EEDPFLAGS_CHECK_GUARD;
mpi_request->CDB.EEDP32.PrimaryReferenceTag = mpi_request->CDB.EEDP32.PrimaryReferenceTag =
cpu_to_be32(t10_pi_ref_tag(scsi_cmd_to_rq(scmd))); cpu_to_be32(scsi_prot_ref_tag(scmd));
break;
case SCSI_PROT_DIF_TYPE3:
/*
* enable guard checking
*/
eedp_flags |= MPI2_SCSIIO_EEDPFLAGS_CHECK_GUARD;
break;
} }
mpi_request_3v->EEDPBlockSize = mpi_request_3v->EEDPBlockSize = cpu_to_le16(scsi_prot_interval(scmd));
cpu_to_le16(scmd->device->sector_size);
if (ioc->is_gen35_ioc) if (ioc->is_gen35_ioc)
eedp_flags |= MPI25_SCSIIO_EEDPFLAGS_APPTAG_DISABLE_MODE; eedp_flags |= MPI25_SCSIIO_EEDPFLAGS_APPTAG_DISABLE_MODE;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment