aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/lpfc/lpfc_sli.c
diff options
context:
space:
mode:
authorJames Smart <James.Smart@Emulex.Com>2009-06-10 17:22:56 -0400
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2009-06-15 11:09:33 -0400
commit0c2875893ef27b93d5d3221f8f98ae944d6be5fa (patch)
tree01e201e3827611c9b5cfc35a5f00b6532fc948ef /drivers/scsi/lpfc/lpfc_sli.c
parentf1126688805d77a4798b694439fa48bba6629388 (diff)
[SCSI] lpfc 8.3.3 : FC/FCOE discovery fixes
Contains the following changes: - Force vport to send LOGO to fabric controller when deleting vport - Fixed driver failing to register login when a PLOGI is received - Fixes for FIP discovery - Added stricter checks for FCF addressing mode - Added code to send only FLOGI, FDISC and LOGO to Fabric controller as FIP - Fixed handling of LOGO from Fabric port - Fixed consecutive link up events skipped link_down processing Signed-off-by: James Smart <James.Smart@emulex.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_sli.c')
-rw-r--r--drivers/scsi/lpfc/lpfc_sli.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
index b8cf0a1b1382..ba698d5f31af 100644
--- a/drivers/scsi/lpfc/lpfc_sli.c
+++ b/drivers/scsi/lpfc/lpfc_sli.c
@@ -4491,8 +4491,10 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba)
4491 rc = -ENODEV; 4491 rc = -ENODEV;
4492 goto out_free_vpd; 4492 goto out_free_vpd;
4493 } 4493 }
4494 /* Temporary initialization of lpfc_fip_flag to non-fip */ 4494 if (phba->cfg_enable_fip)
4495 bf_set(lpfc_fip_flag, &phba->sli4_hba.sli4_flags, 0); 4495 bf_set(lpfc_fip_flag, &phba->sli4_hba.sli4_flags, 1);
4496 else
4497 bf_set(lpfc_fip_flag, &phba->sli4_hba.sli4_flags, 0);
4496 4498
4497 /* Set up all the queues to the device */ 4499 /* Set up all the queues to the device */
4498 rc = lpfc_sli4_queue_setup(phba); 4500 rc = lpfc_sli4_queue_setup(phba);
@@ -5856,18 +5858,13 @@ lpfc_sli4_iocb2wqe(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq,
5856 5858
5857 fip = bf_get(lpfc_fip_flag, &phba->sli4_hba.sli4_flags); 5859 fip = bf_get(lpfc_fip_flag, &phba->sli4_hba.sli4_flags);
5858 /* The fcp commands will set command type */ 5860 /* The fcp commands will set command type */
5859 if ((!(iocbq->iocb_flag & LPFC_IO_FCP)) && (!fip)) 5861 if (iocbq->iocb_flag & LPFC_IO_FCP)
5860 command_type = ELS_COMMAND_NON_FIP;
5861 else if (!(iocbq->iocb_flag & LPFC_IO_FCP))
5862 command_type = ELS_COMMAND_FIP;
5863 else if (iocbq->iocb_flag & LPFC_IO_FCP)
5864 command_type = FCP_COMMAND; 5862 command_type = FCP_COMMAND;
5865 else { 5863 else if (fip && (iocbq->iocb_flag & LPFC_FIP_ELS))
5866 lpfc_printf_log(phba, KERN_ERR, LOG_SLI, 5864 command_type = ELS_COMMAND_FIP;
5867 "2019 Invalid cmd 0x%x\n", 5865 else
5868 iocbq->iocb.ulpCommand); 5866 command_type = ELS_COMMAND_NON_FIP;
5869 return IOCB_ERROR; 5867
5870 }
5871 /* Some of the fields are in the right position already */ 5868 /* Some of the fields are in the right position already */
5872 memcpy(wqe, &iocbq->iocb, sizeof(union lpfc_wqe)); 5869 memcpy(wqe, &iocbq->iocb, sizeof(union lpfc_wqe));
5873 abort_tag = (uint32_t) iocbq->iotag; 5870 abort_tag = (uint32_t) iocbq->iotag;
@@ -11467,6 +11464,7 @@ lpfc_sli4_build_dflt_fcf_record(struct lpfc_hba *phba,
11467 bf_set(lpfc_fcf_record_fc_map_1, fcf_record, phba->fc_map[1]); 11464 bf_set(lpfc_fcf_record_fc_map_1, fcf_record, phba->fc_map[1]);
11468 bf_set(lpfc_fcf_record_fc_map_2, fcf_record, phba->fc_map[2]); 11465 bf_set(lpfc_fcf_record_fc_map_2, fcf_record, phba->fc_map[2]);
11469 bf_set(lpfc_fcf_record_fcf_valid, fcf_record, 1); 11466 bf_set(lpfc_fcf_record_fcf_valid, fcf_record, 1);
11467 bf_set(lpfc_fcf_record_fcf_avail, fcf_record, 1);
11470 bf_set(lpfc_fcf_record_fcf_index, fcf_record, fcf_index); 11468 bf_set(lpfc_fcf_record_fcf_index, fcf_record, fcf_index);
11471 bf_set(lpfc_fcf_record_mac_addr_prov, fcf_record, 11469 bf_set(lpfc_fcf_record_mac_addr_prov, fcf_record,
11472 LPFC_FCF_FPMA | LPFC_FCF_SPMA); 11470 LPFC_FCF_FPMA | LPFC_FCF_SPMA);