[SCSI] lpfc 8.3.28: Add Loopback support for SLI4 adapters
- Add Basic support for SLI4 Loopback. (CR 124951, 125766, 124951, 125843, 125832, 125843) - Added missing protection in setting/clearing of phba->link_flag bit field (CR 125994) - Use link type and link number obtained from READ_CONFIG mailbox command. (CR 126264) Signed-off-by: Alex Iannicelli <alex.iannicelli@emulex.com> Signed-off-by: James Smart <james.smart@emulex.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
2e90f4b5a2
commit
1b51197d0f
9 changed files with 472 additions and 169 deletions
|
@ -627,6 +627,28 @@ lpfc_config_port_post(struct lpfc_hba *phba)
|
|||
**/
|
||||
int
|
||||
lpfc_hba_init_link(struct lpfc_hba *phba, uint32_t flag)
|
||||
{
|
||||
return lpfc_hba_init_link_fc_topology(phba, phba->cfg_topology, flag);
|
||||
}
|
||||
|
||||
/**
|
||||
* lpfc_hba_init_link_fc_topology - Initialize FC link with desired topology
|
||||
* @phba: pointer to lpfc hba data structure.
|
||||
* @fc_topology: desired fc topology.
|
||||
* @flag: mailbox command issue mode - either MBX_POLL or MBX_NOWAIT
|
||||
*
|
||||
* This routine will issue the INIT_LINK mailbox command call.
|
||||
* It is available to other drivers through the lpfc_hba data
|
||||
* structure for use as a delayed link up mechanism with the
|
||||
* module parameter lpfc_suppress_link_up.
|
||||
*
|
||||
* Return code
|
||||
* 0 - success
|
||||
* Any other value - error
|
||||
**/
|
||||
int
|
||||
lpfc_hba_init_link_fc_topology(struct lpfc_hba *phba, uint32_t fc_topology,
|
||||
uint32_t flag)
|
||||
{
|
||||
struct lpfc_vport *vport = phba->pport;
|
||||
LPFC_MBOXQ_t *pmb;
|
||||
|
@ -661,9 +683,10 @@ lpfc_hba_init_link(struct lpfc_hba *phba, uint32_t flag)
|
|||
phba->cfg_link_speed);
|
||||
phba->cfg_link_speed = LPFC_USER_LINK_SPEED_AUTO;
|
||||
}
|
||||
lpfc_init_link(phba, pmb, phba->cfg_topology, phba->cfg_link_speed);
|
||||
lpfc_init_link(phba, pmb, fc_topology, phba->cfg_link_speed);
|
||||
pmb->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
|
||||
lpfc_set_loopback_flag(phba);
|
||||
if (phba->sli_rev < LPFC_SLI_REV4)
|
||||
lpfc_set_loopback_flag(phba);
|
||||
rc = lpfc_sli_issue_mbox(phba, pmb, flag);
|
||||
if ((rc != MBX_BUSY) && (rc != MBX_SUCCESS)) {
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
|
||||
|
@ -6654,9 +6677,10 @@ lpfc_sli4_queue_setup(struct lpfc_hba *phba)
|
|||
phba->sli4_hba.sp_eq->queue_id);
|
||||
|
||||
/* Set up fast-path event queue */
|
||||
if (!phba->sli4_hba.fp_eq) {
|
||||
if (phba->cfg_fcp_eq_count && !phba->sli4_hba.fp_eq) {
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
|
||||
"3147 Fast-path EQs not allocated\n");
|
||||
rc = -ENOMEM;
|
||||
goto out_destroy_sp_eq;
|
||||
}
|
||||
for (fcp_eqidx = 0; fcp_eqidx < phba->cfg_fcp_eq_count; fcp_eqidx++) {
|
||||
|
@ -6664,6 +6688,7 @@ lpfc_sli4_queue_setup(struct lpfc_hba *phba)
|
|||
lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
|
||||
"0522 Fast-path EQ (%d) not "
|
||||
"allocated\n", fcp_eqidx);
|
||||
rc = -ENOMEM;
|
||||
goto out_destroy_fp_eq;
|
||||
}
|
||||
rc = lpfc_eq_create(phba, phba->sli4_hba.fp_eq[fcp_eqidx],
|
||||
|
@ -6688,6 +6713,7 @@ lpfc_sli4_queue_setup(struct lpfc_hba *phba)
|
|||
if (!phba->sli4_hba.mbx_cq) {
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
|
||||
"0528 Mailbox CQ not allocated\n");
|
||||
rc = -ENOMEM;
|
||||
goto out_destroy_fp_eq;
|
||||
}
|
||||
rc = lpfc_cq_create(phba, phba->sli4_hba.mbx_cq, phba->sli4_hba.sp_eq,
|
||||
|
@ -6707,6 +6733,7 @@ lpfc_sli4_queue_setup(struct lpfc_hba *phba)
|
|||
if (!phba->sli4_hba.els_cq) {
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
|
||||
"0530 ELS CQ not allocated\n");
|
||||
rc = -ENOMEM;
|
||||
goto out_destroy_mbx_cq;
|
||||
}
|
||||
rc = lpfc_cq_create(phba, phba->sli4_hba.els_cq, phba->sli4_hba.sp_eq,
|
||||
|
@ -6727,6 +6754,7 @@ lpfc_sli4_queue_setup(struct lpfc_hba *phba)
|
|||
lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
|
||||
"3148 Fast-path FCP CQ array not "
|
||||
"allocated\n");
|
||||
rc = -ENOMEM;
|
||||
goto out_destroy_els_cq;
|
||||
}
|
||||
fcp_cqidx = 0;
|
||||
|
@ -6735,6 +6763,7 @@ lpfc_sli4_queue_setup(struct lpfc_hba *phba)
|
|||
lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
|
||||
"0526 Fast-path FCP CQ (%d) not "
|
||||
"allocated\n", fcp_cqidx);
|
||||
rc = -ENOMEM;
|
||||
goto out_destroy_fcp_cq;
|
||||
}
|
||||
if (phba->cfg_fcp_eq_count)
|
||||
|
@ -6773,6 +6802,7 @@ lpfc_sli4_queue_setup(struct lpfc_hba *phba)
|
|||
if (!phba->sli4_hba.mbx_wq) {
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
|
||||
"0538 Slow-path MQ not allocated\n");
|
||||
rc = -ENOMEM;
|
||||
goto out_destroy_fcp_cq;
|
||||
}
|
||||
rc = lpfc_mq_create(phba, phba->sli4_hba.mbx_wq,
|
||||
|
@ -6792,6 +6822,7 @@ lpfc_sli4_queue_setup(struct lpfc_hba *phba)
|
|||
if (!phba->sli4_hba.els_wq) {
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
|
||||
"0536 Slow-path ELS WQ not allocated\n");
|
||||
rc = -ENOMEM;
|
||||
goto out_destroy_mbx_wq;
|
||||
}
|
||||
rc = lpfc_wq_create(phba, phba->sli4_hba.els_wq,
|
||||
|
@ -6812,6 +6843,7 @@ lpfc_sli4_queue_setup(struct lpfc_hba *phba)
|
|||
lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
|
||||
"3149 Fast-path FCP WQ array not "
|
||||
"allocated\n");
|
||||
rc = -ENOMEM;
|
||||
goto out_destroy_els_wq;
|
||||
}
|
||||
for (fcp_wqidx = 0; fcp_wqidx < phba->cfg_fcp_wq_count; fcp_wqidx++) {
|
||||
|
@ -6819,6 +6851,7 @@ lpfc_sli4_queue_setup(struct lpfc_hba *phba)
|
|||
lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
|
||||
"0534 Fast-path FCP WQ (%d) not "
|
||||
"allocated\n", fcp_wqidx);
|
||||
rc = -ENOMEM;
|
||||
goto out_destroy_fcp_wq;
|
||||
}
|
||||
rc = lpfc_wq_create(phba, phba->sli4_hba.fcp_wq[fcp_wqidx],
|
||||
|
@ -6849,6 +6882,7 @@ lpfc_sli4_queue_setup(struct lpfc_hba *phba)
|
|||
if (!phba->sli4_hba.hdr_rq || !phba->sli4_hba.dat_rq) {
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
|
||||
"0540 Receive Queue not allocated\n");
|
||||
rc = -ENOMEM;
|
||||
goto out_destroy_fcp_wq;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue