|
@@ -1129,25 +1129,6 @@ lpfc_release_scsi_buf(struct lpfc_hba *phba, struct lpfc_scsi_buf *psb)
|
|
|
phba->lpfc_release_scsi_buf(phba, psb);
|
|
phba->lpfc_release_scsi_buf(phba, psb);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-/**
|
|
|
|
|
- * lpfc_fcpcmd_to_iocb - copy the fcp_cmd data into the IOCB
|
|
|
|
|
- * @data: A pointer to the immediate command data portion of the IOCB.
|
|
|
|
|
- * @fcp_cmnd: The FCP Command that is provided by the SCSI layer.
|
|
|
|
|
- *
|
|
|
|
|
- * The routine copies the entire FCP command from @fcp_cmnd to @data while
|
|
|
|
|
- * byte swapping the data to big endian format for transmission on the wire.
|
|
|
|
|
- **/
|
|
|
|
|
-static void
|
|
|
|
|
-lpfc_fcpcmd_to_iocb(uint8_t *data, struct fcp_cmnd *fcp_cmnd)
|
|
|
|
|
-{
|
|
|
|
|
- int i, j;
|
|
|
|
|
-
|
|
|
|
|
- for (i = 0, j = 0; i < sizeof(struct fcp_cmnd);
|
|
|
|
|
- i += sizeof(uint32_t), j++) {
|
|
|
|
|
- ((uint32_t *)data)[j] = cpu_to_be32(((uint32_t *)fcp_cmnd)[j]);
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
/**
|
|
/**
|
|
|
* lpfc_scsi_prep_dma_buf_s3 - DMA mapping for scsi buffer to SLI3 IF spec
|
|
* lpfc_scsi_prep_dma_buf_s3 - DMA mapping for scsi buffer to SLI3 IF spec
|
|
|
* @phba: The Hba for which this call is being executed.
|
|
* @phba: The Hba for which this call is being executed.
|
|
@@ -1283,7 +1264,6 @@ lpfc_scsi_prep_dma_buf_s3(struct lpfc_hba *phba, struct lpfc_scsi_buf *lpfc_cmd)
|
|
|
* we need to set word 4 of IOCB here
|
|
* we need to set word 4 of IOCB here
|
|
|
*/
|
|
*/
|
|
|
iocb_cmd->un.fcpi.fcpi_parm = scsi_bufflen(scsi_cmnd);
|
|
iocb_cmd->un.fcpi.fcpi_parm = scsi_bufflen(scsi_cmnd);
|
|
|
- lpfc_fcpcmd_to_iocb(iocb_cmd->unsli3.fcp_ext.icd, fcp_cmnd);
|
|
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -4146,6 +4126,24 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
|
|
|
lpfc_release_scsi_buf(phba, lpfc_cmd);
|
|
lpfc_release_scsi_buf(phba, lpfc_cmd);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+/**
|
|
|
|
|
+ * lpfc_fcpcmd_to_iocb - copy the fcp_cmd data into the IOCB
|
|
|
|
|
+ * @data: A pointer to the immediate command data portion of the IOCB.
|
|
|
|
|
+ * @fcp_cmnd: The FCP Command that is provided by the SCSI layer.
|
|
|
|
|
+ *
|
|
|
|
|
+ * The routine copies the entire FCP command from @fcp_cmnd to @data while
|
|
|
|
|
+ * byte swapping the data to big endian format for transmission on the wire.
|
|
|
|
|
+ **/
|
|
|
|
|
+static void
|
|
|
|
|
+lpfc_fcpcmd_to_iocb(uint8_t *data, struct fcp_cmnd *fcp_cmnd)
|
|
|
|
|
+{
|
|
|
|
|
+ int i, j;
|
|
|
|
|
+ for (i = 0, j = 0; i < sizeof(struct fcp_cmnd);
|
|
|
|
|
+ i += sizeof(uint32_t), j++) {
|
|
|
|
|
+ ((uint32_t *)data)[j] = cpu_to_be32(((uint32_t *)fcp_cmnd)[j]);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* lpfc_scsi_prep_cmnd - Wrapper func for convert scsi cmnd to FCP info unit
|
|
* lpfc_scsi_prep_cmnd - Wrapper func for convert scsi cmnd to FCP info unit
|
|
|
* @vport: The virtual port for which this call is being executed.
|
|
* @vport: The virtual port for which this call is being executed.
|
|
@@ -4225,6 +4223,9 @@ lpfc_scsi_prep_cmnd(struct lpfc_vport *vport, struct lpfc_scsi_buf *lpfc_cmd,
|
|
|
fcp_cmnd->fcpCntl3 = 0;
|
|
fcp_cmnd->fcpCntl3 = 0;
|
|
|
phba->fc4ControlRequests++;
|
|
phba->fc4ControlRequests++;
|
|
|
}
|
|
}
|
|
|
|
|
+ if (phba->sli_rev == 3 &&
|
|
|
|
|
+ !(phba->sli3_options & LPFC_SLI3_BG_ENABLED))
|
|
|
|
|
+ lpfc_fcpcmd_to_iocb(iocb_cmd->unsli3.fcp_ext.icd, fcp_cmnd);
|
|
|
/*
|
|
/*
|
|
|
* Finish initializing those IOCB fields that are independent
|
|
* Finish initializing those IOCB fields that are independent
|
|
|
* of the scsi_cmnd request_buffer
|
|
* of the scsi_cmnd request_buffer
|