diff options
| author | James Smart <james.smart@broadcom.com> | 2020-11-15 11:26:39 -0800 | 
|---|---|---|
| committer | Martin K. Petersen <martin.petersen@oracle.com> | 2020-11-17 00:43:55 -0500 | 
| commit | b101eb27fde072866c6f5bdbcc2c28a6bf2c9bf7 (patch) | |
| tree | f5cc44c4ead1b656f088bd6ba92d71134c76ef91 /drivers/scsi/lpfc | |
| parent | a70e63eee1c14257f73ce9ec6d0c9db28f77f9ad (diff) | |
| download | linux-b101eb27fde072866c6f5bdbcc2c28a6bf2c9bf7.tar.bz2 | |
scsi: lpfc: Refactor WQE structure definitions for common use
In preparation of reworking the driver to use a native SLI-4 WQE interface
for the SCSI and NVMe I/O paths, start by commonizing the WQE exchange type
and command type attributes.
While adjusting these options also noted the variance in the pbde field.
Fix this by setting templates to 0 and in NVMe, which explicitly uses this
option, setting the value.
Link: https://lore.kernel.org/r/20201115192646.12977-11-james.smart@broadcom.com
Co-developed-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi/lpfc')
| -rw-r--r-- | drivers/scsi/lpfc/lpfc_hw4.h | 10 | ||||
| -rw-r--r-- | drivers/scsi/lpfc/lpfc_nvme.c | 20 | ||||
| -rw-r--r-- | drivers/scsi/lpfc/lpfc_nvmet.c | 6 | 
3 files changed, 21 insertions, 15 deletions
| diff --git a/drivers/scsi/lpfc/lpfc_hw4.h b/drivers/scsi/lpfc/lpfc_hw4.h index 49f5559f5fed..26a9057fb042 100644 --- a/drivers/scsi/lpfc/lpfc_hw4.h +++ b/drivers/scsi/lpfc/lpfc_hw4.h @@ -4386,9 +4386,11 @@ struct wqe_common {  #define wqe_ebde_cnt_SHIFT    0  #define wqe_ebde_cnt_MASK     0x0000000f  #define wqe_ebde_cnt_WORD     word10 -#define wqe_nvme_SHIFT        4 -#define wqe_nvme_MASK         0x00000001 -#define wqe_nvme_WORD         word10 +#define wqe_xchg_SHIFT        4 +#define wqe_xchg_MASK         0x00000001 +#define wqe_xchg_WORD         word10 +#define LPFC_SCSI_XCHG	      0x0 +#define LPFC_NVME_XCHG	      0x1  #define wqe_oas_SHIFT         6  #define wqe_oas_MASK          0x00000001  #define wqe_oas_WORD          word10 @@ -4886,6 +4888,8 @@ struct lpfc_grp_hdr {  #define NVME_READ_CMD		0x0  #define FCP_COMMAND_DATA_OUT	0x1  #define NVME_WRITE_CMD		0x1 +#define COMMAND_DATA_IN		0x0 +#define COMMAND_DATA_OUT	0x1  #define FCP_COMMAND_TRECEIVE	0x2  #define FCP_COMMAND_TRSP	0x3  #define FCP_COMMAND_TSEND	0x7 diff --git a/drivers/scsi/lpfc/lpfc_nvme.c b/drivers/scsi/lpfc/lpfc_nvme.c index 6ad626911cc7..1103eb8d929d 100644 --- a/drivers/scsi/lpfc/lpfc_nvme.c +++ b/drivers/scsi/lpfc/lpfc_nvme.c @@ -98,16 +98,16 @@ lpfc_nvme_cmd_template(void)  	/* Word 10 - dbde, wqes is variable */  	bf_set(wqe_qosd, &wqe->fcp_iread.wqe_com, 0); -	bf_set(wqe_nvme, &wqe->fcp_iread.wqe_com, 1); +	bf_set(wqe_xchg, &wqe->fcp_iread.wqe_com, LPFC_NVME_XCHG);  	bf_set(wqe_iod, &wqe->fcp_iread.wqe_com, LPFC_WQE_IOD_READ);  	bf_set(wqe_lenloc, &wqe->fcp_iread.wqe_com, LPFC_WQE_LENLOC_WORD4);  	bf_set(wqe_dbde, &wqe->fcp_iread.wqe_com, 0);  	bf_set(wqe_wqes, &wqe->fcp_iread.wqe_com, 1);  	/* Word 11 - pbde is variable */ -	bf_set(wqe_cmd_type, &wqe->fcp_iread.wqe_com, NVME_READ_CMD); +	bf_set(wqe_cmd_type, &wqe->fcp_iread.wqe_com, COMMAND_DATA_IN);  	bf_set(wqe_cqid, &wqe->fcp_iread.wqe_com, LPFC_WQE_CQ_ID_DEFAULT); -	bf_set(wqe_pbde, &wqe->fcp_iread.wqe_com, 1); +	bf_set(wqe_pbde, &wqe->fcp_iread.wqe_com, 0);  	/* Word 12 - is zero */ @@ -139,16 +139,16 @@ lpfc_nvme_cmd_template(void)  	/* Word 10 - dbde, wqes is variable */  	bf_set(wqe_qosd, &wqe->fcp_iwrite.wqe_com, 0); -	bf_set(wqe_nvme, &wqe->fcp_iwrite.wqe_com, 1); +	bf_set(wqe_xchg, &wqe->fcp_iwrite.wqe_com, LPFC_NVME_XCHG);  	bf_set(wqe_iod, &wqe->fcp_iwrite.wqe_com, LPFC_WQE_IOD_WRITE);  	bf_set(wqe_lenloc, &wqe->fcp_iwrite.wqe_com, LPFC_WQE_LENLOC_WORD4);  	bf_set(wqe_dbde, &wqe->fcp_iwrite.wqe_com, 0);  	bf_set(wqe_wqes, &wqe->fcp_iwrite.wqe_com, 1);  	/* Word 11 - pbde is variable */ -	bf_set(wqe_cmd_type, &wqe->fcp_iwrite.wqe_com, NVME_WRITE_CMD); +	bf_set(wqe_cmd_type, &wqe->fcp_iwrite.wqe_com, COMMAND_DATA_OUT);  	bf_set(wqe_cqid, &wqe->fcp_iwrite.wqe_com, LPFC_WQE_CQ_ID_DEFAULT); -	bf_set(wqe_pbde, &wqe->fcp_iwrite.wqe_com, 1); +	bf_set(wqe_pbde, &wqe->fcp_iwrite.wqe_com, 0);  	/* Word 12 - is zero */ @@ -178,14 +178,14 @@ lpfc_nvme_cmd_template(void)  	/* Word 10 - dbde, wqes is variable */  	bf_set(wqe_qosd, &wqe->fcp_icmd.wqe_com, 1); -	bf_set(wqe_nvme, &wqe->fcp_icmd.wqe_com, 1); +	bf_set(wqe_xchg, &wqe->fcp_icmd.wqe_com, LPFC_NVME_XCHG);  	bf_set(wqe_iod, &wqe->fcp_icmd.wqe_com, LPFC_WQE_IOD_NONE);  	bf_set(wqe_lenloc, &wqe->fcp_icmd.wqe_com, LPFC_WQE_LENLOC_NONE);  	bf_set(wqe_dbde, &wqe->fcp_icmd.wqe_com, 0);  	bf_set(wqe_wqes, &wqe->fcp_icmd.wqe_com, 1);  	/* Word 11 */ -	bf_set(wqe_cmd_type, &wqe->fcp_icmd.wqe_com, FCP_COMMAND); +	bf_set(wqe_cmd_type, &wqe->fcp_icmd.wqe_com, COMMAND_DATA_IN);  	bf_set(wqe_cqid, &wqe->fcp_icmd.wqe_com, LPFC_WQE_CQ_ID_DEFAULT);  	bf_set(wqe_pbde, &wqe->fcp_icmd.wqe_com, 0); @@ -1567,7 +1567,9 @@ lpfc_nvme_prep_io_dma(struct lpfc_vport *vport,  				le32_to_cpu(first_data_sgl->sge_len);  			bde->tus.f.bdeFlags = BUFF_TYPE_BDE_64;  			bde->tus.w = cpu_to_le32(bde->tus.w); -			/* wqe_pbde is 1 in template */ + +			/* Word 11 */ +			bf_set(wqe_pbde, &wqe->generic.wqe_com, 1);  		} else {  			memset(&wqe->words[13], 0, (sizeof(uint32_t) * 3));  			bf_set(wqe_pbde, &wqe->generic.wqe_com, 0); diff --git a/drivers/scsi/lpfc/lpfc_nvmet.c b/drivers/scsi/lpfc/lpfc_nvmet.c index 78b934b021aa..99d781e32b8e 100644 --- a/drivers/scsi/lpfc/lpfc_nvmet.c +++ b/drivers/scsi/lpfc/lpfc_nvmet.c @@ -105,7 +105,7 @@ lpfc_nvmet_cmd_template(void)  	/* Word 9  - reqtag, rcvoxid is variable */  	/* Word 10 - wqes, xc is variable */ -	bf_set(wqe_nvme, &wqe->fcp_tsend.wqe_com, 1); +	bf_set(wqe_xchg, &wqe->fcp_tsend.wqe_com, LPFC_NVME_XCHG);  	bf_set(wqe_dbde, &wqe->fcp_tsend.wqe_com, 1);  	bf_set(wqe_wqes, &wqe->fcp_tsend.wqe_com, 0);  	bf_set(wqe_xc, &wqe->fcp_tsend.wqe_com, 1); @@ -153,7 +153,7 @@ lpfc_nvmet_cmd_template(void)  	/* Word 10 - xc is variable */  	bf_set(wqe_dbde, &wqe->fcp_treceive.wqe_com, 1);  	bf_set(wqe_wqes, &wqe->fcp_treceive.wqe_com, 0); -	bf_set(wqe_nvme, &wqe->fcp_treceive.wqe_com, 1); +	bf_set(wqe_xchg, &wqe->fcp_treceive.wqe_com, LPFC_NVME_XCHG);  	bf_set(wqe_iod, &wqe->fcp_treceive.wqe_com, LPFC_WQE_IOD_READ);  	bf_set(wqe_lenloc, &wqe->fcp_treceive.wqe_com, LPFC_WQE_LENLOC_WORD12);  	bf_set(wqe_xc, &wqe->fcp_tsend.wqe_com, 1); @@ -195,7 +195,7 @@ lpfc_nvmet_cmd_template(void)  	/* Word 10 wqes, xc is variable */  	bf_set(wqe_dbde, &wqe->fcp_trsp.wqe_com, 1); -	bf_set(wqe_nvme, &wqe->fcp_trsp.wqe_com, 1); +	bf_set(wqe_xchg, &wqe->fcp_trsp.wqe_com, LPFC_NVME_XCHG);  	bf_set(wqe_wqes, &wqe->fcp_trsp.wqe_com, 0);  	bf_set(wqe_xc, &wqe->fcp_trsp.wqe_com, 0);  	bf_set(wqe_iod, &wqe->fcp_trsp.wqe_com, LPFC_WQE_IOD_NONE); |