Lines Matching refs:phba
81 struct lpfc_hba *phba; in lpfc_terminate_rport_io() local
94 phba = ndlp->phba; in lpfc_terminate_rport_io()
102 &phba->sli.sli3_ring[LPFC_FCP_RING], in lpfc_terminate_rport_io()
117 struct lpfc_hba *phba; in lpfc_dev_loss_tmo_callbk() local
128 phba = vport->phba; in lpfc_dev_loss_tmo_callbk()
182 spin_lock_irq(&phba->hbalock); in lpfc_dev_loss_tmo_callbk()
185 list_add_tail(&evtp->evt_listp, &phba->work_list); in lpfc_dev_loss_tmo_callbk()
186 lpfc_worker_wake_up(phba); in lpfc_dev_loss_tmo_callbk()
188 spin_unlock_irq(&phba->hbalock); in lpfc_dev_loss_tmo_callbk()
209 struct lpfc_hba *phba; in lpfc_dev_loss_tmo_handler() local
228 phba = vport->phba; in lpfc_dev_loss_tmo_handler()
230 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_dev_loss_tmo_handler()
231 fcf_inuse = lpfc_fcf_inuse(phba); in lpfc_dev_loss_tmo_handler()
256 &phba->sli.sli3_ring[LPFC_FCP_RING], in lpfc_dev_loss_tmo_handler()
292 lpfc_sli_abort_iocb(vport, &phba->sli.sli3_ring[LPFC_FCP_RING], in lpfc_dev_loss_tmo_handler()
345 lpfc_sli4_post_dev_loss_tmo_handler(struct lpfc_hba *phba, int fcf_inuse, in lpfc_sli4_post_dev_loss_tmo_handler() argument
354 if ((phba->hba_flag & HBA_FIP_SUPPORT) && !lpfc_fcf_inuse(phba)) { in lpfc_sli4_post_dev_loss_tmo_handler()
355 spin_lock_irq(&phba->hbalock); in lpfc_sli4_post_dev_loss_tmo_handler()
356 if (phba->fcf.fcf_flag & FCF_DISCOVERY) { in lpfc_sli4_post_dev_loss_tmo_handler()
357 if (phba->hba_flag & HBA_DEVLOSS_TMO) { in lpfc_sli4_post_dev_loss_tmo_handler()
358 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_post_dev_loss_tmo_handler()
361 phba->hba_flag |= HBA_DEVLOSS_TMO; in lpfc_sli4_post_dev_loss_tmo_handler()
362 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_post_dev_loss_tmo_handler()
366 if (phba->fcf.fcf_flag & FCF_REDISC_PROG) { in lpfc_sli4_post_dev_loss_tmo_handler()
367 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_post_dev_loss_tmo_handler()
368 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_post_dev_loss_tmo_handler()
373 if (!(phba->hba_flag & (FCF_TS_INPROG | FCF_RR_INPROG))) { in lpfc_sli4_post_dev_loss_tmo_handler()
374 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_post_dev_loss_tmo_handler()
375 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_post_dev_loss_tmo_handler()
379 lpfc_unregister_fcf_rescan(phba); in lpfc_sli4_post_dev_loss_tmo_handler()
382 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_post_dev_loss_tmo_handler()
383 if (phba->hba_flag & FCF_TS_INPROG) in lpfc_sli4_post_dev_loss_tmo_handler()
384 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_post_dev_loss_tmo_handler()
386 if (phba->hba_flag & FCF_RR_INPROG) in lpfc_sli4_post_dev_loss_tmo_handler()
387 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_post_dev_loss_tmo_handler()
391 lpfc_unregister_unused_fcf(phba); in lpfc_sli4_post_dev_loss_tmo_handler()
405 lpfc_alloc_fast_evt(struct lpfc_hba *phba) { in lpfc_alloc_fast_evt() argument
409 if (atomic_read(&phba->fast_event_count) > LPFC_MAX_EVT_COUNT) in lpfc_alloc_fast_evt()
415 atomic_inc(&phba->fast_event_count); in lpfc_alloc_fast_evt()
431 lpfc_free_fast_evt(struct lpfc_hba *phba, in lpfc_free_fast_evt() argument
434 atomic_dec(&phba->fast_event_count); in lpfc_free_fast_evt()
448 lpfc_send_fastpath_evt(struct lpfc_hba *phba, in lpfc_send_fastpath_evt() argument
474 lpfc_free_fast_evt(phba, fast_evt_data); in lpfc_send_fastpath_evt()
495 lpfc_free_fast_evt(phba, fast_evt_data); in lpfc_send_fastpath_evt()
499 lpfc_free_fast_evt(phba, fast_evt_data); in lpfc_send_fastpath_evt()
503 if (phba->cfg_enable_fc4_type != LPFC_ENABLE_NVME) in lpfc_send_fastpath_evt()
510 lpfc_free_fast_evt(phba, fast_evt_data); in lpfc_send_fastpath_evt()
515 lpfc_work_list_done(struct lpfc_hba *phba) in lpfc_work_list_done() argument
523 spin_lock_irq(&phba->hbalock); in lpfc_work_list_done()
524 while (!list_empty(&phba->work_list)) { in lpfc_work_list_done()
525 list_remove_head((&phba->work_list), evtp, typeof(*evtp), in lpfc_work_list_done()
527 spin_unlock_irq(&phba->hbalock); in lpfc_work_list_done()
548 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_work_list_done()
549 lpfc_sli4_post_dev_loss_tmo_handler(phba, in lpfc_work_list_done()
554 if (phba->link_state < LPFC_LINK_DOWN) in lpfc_work_list_done()
555 *(int *) (evtp->evt_arg1) = lpfc_online(phba); in lpfc_work_list_done()
561 if (phba->link_state >= LPFC_LINK_DOWN) in lpfc_work_list_done()
562 lpfc_offline_prep(phba, LPFC_MBX_WAIT); in lpfc_work_list_done()
567 lpfc_offline(phba); in lpfc_work_list_done()
568 lpfc_sli_brdrestart(phba); in lpfc_work_list_done()
570 lpfc_sli_brdready(phba, HS_FFRDY | HS_MBRDY); in lpfc_work_list_done()
571 lpfc_unblock_mgmt_io(phba); in lpfc_work_list_done()
575 lpfc_offline(phba); in lpfc_work_list_done()
576 lpfc_reset_barrier(phba); in lpfc_work_list_done()
577 lpfc_sli_brdreset(phba); in lpfc_work_list_done()
578 lpfc_hba_down_post(phba); in lpfc_work_list_done()
580 lpfc_sli_brdready(phba, HS_MBRDY); in lpfc_work_list_done()
581 lpfc_unblock_mgmt_io(phba); in lpfc_work_list_done()
585 lpfc_offline(phba); in lpfc_work_list_done()
587 = (phba->pport->stopped) in lpfc_work_list_done()
588 ? 0 : lpfc_sli_brdkill(phba); in lpfc_work_list_done()
589 lpfc_unblock_mgmt_io(phba); in lpfc_work_list_done()
593 lpfc_send_fastpath_evt(phba, evtp); in lpfc_work_list_done()
597 if (!(phba->pport->load_flag & FC_UNLOADING)) in lpfc_work_list_done()
598 lpfc_reset_hba(phba); in lpfc_work_list_done()
603 spin_lock_irq(&phba->hbalock); in lpfc_work_list_done()
605 spin_unlock_irq(&phba->hbalock); in lpfc_work_list_done()
610 lpfc_work_done(struct lpfc_hba *phba) in lpfc_work_done() argument
618 spin_lock_irq(&phba->hbalock); in lpfc_work_done()
619 ha_copy = phba->work_ha; in lpfc_work_done()
620 phba->work_ha = 0; in lpfc_work_done()
621 spin_unlock_irq(&phba->hbalock); in lpfc_work_done()
624 if (phba->pci_dev_grp == LPFC_PCI_DEV_OC) in lpfc_work_done()
625 lpfc_sli4_post_async_mbox(phba); in lpfc_work_done()
629 lpfc_handle_eratt(phba); in lpfc_work_done()
632 lpfc_sli_handle_mb_event(phba); in lpfc_work_done()
635 lpfc_handle_latt(phba); in lpfc_work_done()
638 if (phba->pci_dev_grp == LPFC_PCI_DEV_OC) { in lpfc_work_done()
639 if (phba->hba_flag & HBA_RRQ_ACTIVE) in lpfc_work_done()
640 lpfc_handle_rrq_active(phba); in lpfc_work_done()
641 if (phba->hba_flag & FCP_XRI_ABORT_EVENT) in lpfc_work_done()
642 lpfc_sli4_fcp_xri_abort_event_proc(phba); in lpfc_work_done()
643 if (phba->hba_flag & ELS_XRI_ABORT_EVENT) in lpfc_work_done()
644 lpfc_sli4_els_xri_abort_event_proc(phba); in lpfc_work_done()
645 if (phba->hba_flag & ASYNC_EVENT) in lpfc_work_done()
646 lpfc_sli4_async_event_proc(phba); in lpfc_work_done()
647 if (phba->hba_flag & HBA_POST_RECEIVE_BUFFER) { in lpfc_work_done()
648 spin_lock_irq(&phba->hbalock); in lpfc_work_done()
649 phba->hba_flag &= ~HBA_POST_RECEIVE_BUFFER; in lpfc_work_done()
650 spin_unlock_irq(&phba->hbalock); in lpfc_work_done()
651 lpfc_sli_hbqbuf_add_hbqs(phba, LPFC_ELS_HBQ); in lpfc_work_done()
653 if (phba->fcf.fcf_flag & FCF_REDISC_EVT) in lpfc_work_done()
654 lpfc_sli4_fcf_redisc_event_proc(phba); in lpfc_work_done()
657 vports = lpfc_create_vport_work_array(phba); in lpfc_work_done()
659 for (i = 0; i <= phba->max_vports; i++) { in lpfc_work_done()
665 vport = phba->pport; in lpfc_work_done()
679 lpfc_hb_timeout_handler(phba); in lpfc_work_done()
681 lpfc_mbox_timeout_handler(phba); in lpfc_work_done()
683 lpfc_unblock_fabric_iocbs(phba); in lpfc_work_done()
685 lpfc_ramp_down_queue_handler(phba); in lpfc_work_done()
689 lpfc_destroy_vport_work_array(phba, vports); in lpfc_work_done()
691 pring = lpfc_phba_elsring(phba); in lpfc_work_done()
696 phba->hba_flag & HBA_SP_QUEUE_EVT)) { in lpfc_work_done()
700 if (!(phba->hba_flag & HBA_SP_QUEUE_EVT)) in lpfc_work_done()
701 set_bit(LPFC_DATA_READY, &phba->data_flags); in lpfc_work_done()
703 if (phba->link_state >= LPFC_LINK_UP || in lpfc_work_done()
704 phba->link_flag & LS_MDS_LOOPBACK) { in lpfc_work_done()
706 lpfc_sli_handle_slow_ring_event(phba, pring, in lpfc_work_done()
711 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_work_done()
712 lpfc_drain_txq(phba); in lpfc_work_done()
716 if (phba->sli_rev <= LPFC_SLI_REV3) { in lpfc_work_done()
717 spin_lock_irq(&phba->hbalock); in lpfc_work_done()
718 control = readl(phba->HCregaddr); in lpfc_work_done()
720 lpfc_debugfs_slow_ring_trc(phba, in lpfc_work_done()
725 writel(control, phba->HCregaddr); in lpfc_work_done()
726 readl(phba->HCregaddr); /* flush */ in lpfc_work_done()
728 lpfc_debugfs_slow_ring_trc(phba, in lpfc_work_done()
732 spin_unlock_irq(&phba->hbalock); in lpfc_work_done()
735 lpfc_work_list_done(phba); in lpfc_work_done()
741 struct lpfc_hba *phba = p; in lpfc_do_work() local
746 phba->data_flags = 0; in lpfc_do_work()
750 rc = wait_event_interruptible(phba->work_waitq, in lpfc_do_work()
752 &phba->data_flags) in lpfc_do_work()
756 lpfc_printf_log(phba, KERN_ERR, LOG_ELS, in lpfc_do_work()
762 lpfc_work_done(phba); in lpfc_do_work()
764 phba->worker_thread = NULL; in lpfc_do_work()
765 lpfc_printf_log(phba, KERN_INFO, LOG_ELS, in lpfc_do_work()
776 lpfc_workq_post_event(struct lpfc_hba *phba, void *arg1, void *arg2, in lpfc_workq_post_event() argument
794 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_workq_post_event()
795 list_add_tail(&evtp->evt_listp, &phba->work_list); in lpfc_workq_post_event()
796 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_workq_post_event()
798 lpfc_worker_wake_up(phba); in lpfc_workq_post_event()
807 struct lpfc_hba *phba = vport->phba; in lpfc_cleanup_rpis() local
815 if ((phba->sli3_options & LPFC_SLI3_VPORT_TEARDOWN) || in lpfc_cleanup_rpis()
821 if ((phba->sli_rev < LPFC_SLI_REV4) && in lpfc_cleanup_rpis()
829 if (phba->sli3_options & LPFC_SLI3_VPORT_TEARDOWN) { in lpfc_cleanup_rpis()
830 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_cleanup_rpis()
862 struct lpfc_hba *phba = vport->phba; in lpfc_linkdown_port() local
865 if (phba->cfg_enable_fc4_type != LPFC_ENABLE_NVME) in lpfc_linkdown_port()
883 lpfc_linkdown(struct lpfc_hba *phba) in lpfc_linkdown() argument
885 struct lpfc_vport *vport = phba->pport; in lpfc_linkdown()
891 if (phba->link_state == LPFC_LINK_DOWN) in lpfc_linkdown()
895 lpfc_scsi_dev_block(phba); in lpfc_linkdown()
897 spin_lock_irq(&phba->hbalock); in lpfc_linkdown()
898 phba->fcf.fcf_flag &= ~(FCF_AVAILABLE | FCF_SCAN_DONE); in lpfc_linkdown()
899 spin_unlock_irq(&phba->hbalock); in lpfc_linkdown()
900 if (phba->link_state > LPFC_LINK_DOWN) { in lpfc_linkdown()
901 phba->link_state = LPFC_LINK_DOWN; in lpfc_linkdown()
903 phba->pport->fc_flag &= ~FC_LBIT; in lpfc_linkdown()
906 vports = lpfc_create_vport_work_array(phba); in lpfc_linkdown()
908 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) { in lpfc_linkdown()
914 if ((phba->cfg_enable_fc4_type == LPFC_ENABLE_BOTH) || in lpfc_linkdown()
915 (phba->cfg_enable_fc4_type == LPFC_ENABLE_NVME)) { in lpfc_linkdown()
916 if (phba->nvmet_support) in lpfc_linkdown()
917 lpfc_nvmet_update_targetport(phba); in lpfc_linkdown()
923 lpfc_destroy_vport_work_array(phba, vports); in lpfc_linkdown()
925 mb = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_linkdown()
927 lpfc_unreg_did(phba, 0xffff, LPFC_UNREG_ALL_DFLT_RPIS, mb); in lpfc_linkdown()
930 if (lpfc_sli_issue_mbox(phba, mb, MBX_NOWAIT) in lpfc_linkdown()
932 mempool_free(mb, phba->mbox_mem_pool); in lpfc_linkdown()
937 if (phba->pport->fc_flag & FC_PT2PT) { in lpfc_linkdown()
938 mb = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_linkdown()
940 lpfc_config_link(phba, mb); in lpfc_linkdown()
943 if (lpfc_sli_issue_mbox(phba, mb, MBX_NOWAIT) in lpfc_linkdown()
945 mempool_free(mb, phba->mbox_mem_pool); in lpfc_linkdown()
949 phba->pport->fc_flag &= ~(FC_PT2PT | FC_PT2PT_PLOGI); in lpfc_linkdown()
986 struct lpfc_hba *phba = vport->phba; in lpfc_linkup_port() local
993 phba->fc_topology, phba->fc_linkspeed, phba->link_flag); in lpfc_linkup_port()
996 if (!(phba->sli3_options & LPFC_SLI3_NPIV_ENABLED) && in lpfc_linkup_port()
997 (vport != phba->pport)) in lpfc_linkup_port()
1000 if (phba->cfg_enable_fc4_type != LPFC_ENABLE_NVME) in lpfc_linkup_port()
1017 lpfc_linkup(struct lpfc_hba *phba) in lpfc_linkup() argument
1022 phba->link_state = LPFC_LINK_UP; in lpfc_linkup()
1025 clear_bit(FABRIC_COMANDS_BLOCKED, &phba->bit_flags); in lpfc_linkup()
1026 del_timer_sync(&phba->fabric_block_timer); in lpfc_linkup()
1028 vports = lpfc_create_vport_work_array(phba); in lpfc_linkup()
1030 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) in lpfc_linkup()
1032 lpfc_destroy_vport_work_array(phba, vports); in lpfc_linkup()
1044 lpfc_mbx_cmpl_clear_la(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_clear_la() argument
1048 struct lpfc_sli *psli = &phba->sli; in lpfc_mbx_cmpl_clear_la()
1063 phba->link_state = LPFC_HBA_ERROR; in lpfc_mbx_cmpl_clear_la()
1068 phba->link_state = LPFC_HBA_READY; in lpfc_mbx_cmpl_clear_la()
1070 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_clear_la()
1072 control = readl(phba->HCregaddr); in lpfc_mbx_cmpl_clear_la()
1074 writel(control, phba->HCregaddr); in lpfc_mbx_cmpl_clear_la()
1075 readl(phba->HCregaddr); /* flush */ in lpfc_mbx_cmpl_clear_la()
1076 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_clear_la()
1077 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_clear_la()
1084 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_clear_la()
1094 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_clear_la()
1096 control = readl(phba->HCregaddr); in lpfc_mbx_cmpl_clear_la()
1098 writel(control, phba->HCregaddr); in lpfc_mbx_cmpl_clear_la()
1099 readl(phba->HCregaddr); /* flush */ in lpfc_mbx_cmpl_clear_la()
1100 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_clear_la()
1107 lpfc_mbx_cmpl_local_config_link(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_local_config_link() argument
1115 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_local_config_link()
1118 if ((phba->sli_rev == LPFC_SLI_REV4) && in lpfc_mbx_cmpl_local_config_link()
1119 !(phba->hba_flag & HBA_FCOE_MODE) && in lpfc_mbx_cmpl_local_config_link()
1120 (phba->link_flag & LS_LOOPBACK_MODE)) in lpfc_mbx_cmpl_local_config_link()
1123 if (phba->fc_topology == LPFC_TOPOLOGY_LOOP && in lpfc_mbx_cmpl_local_config_link()
1138 if (phba->bbcredit_support && phba->cfg_enable_bbcr) { in lpfc_mbx_cmpl_local_config_link()
1140 &phba->sli4_hba.bbscn_params); in lpfc_mbx_cmpl_local_config_link()
1155 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_local_config_link()
1157 lpfc_linkdown(phba); in lpfc_mbx_cmpl_local_config_link()
1163 lpfc_issue_clear_la(phba, vport); in lpfc_mbx_cmpl_local_config_link()
1176 lpfc_sli4_clear_fcf_rr_bmask(struct lpfc_hba *phba) in lpfc_sli4_clear_fcf_rr_bmask() argument
1180 memset(phba->fcf.fcf_rr_bmask, 0, sizeof(*phba->fcf.fcf_rr_bmask)); in lpfc_sli4_clear_fcf_rr_bmask()
1181 spin_lock_irq(&phba->hbalock); in lpfc_sli4_clear_fcf_rr_bmask()
1183 &phba->fcf.fcf_pri_list, list) { in lpfc_sli4_clear_fcf_rr_bmask()
1187 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_clear_fcf_rr_bmask()
1190 lpfc_mbx_cmpl_reg_fcfi(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_mbx_cmpl_reg_fcfi() argument
1203 phba->fcf.fcfi = bf_get(lpfc_reg_fcfi_fcfi, &mboxq->u.mqe.un.reg_fcfi); in lpfc_mbx_cmpl_reg_fcfi()
1205 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_reg_fcfi()
1206 phba->fcf.fcf_flag |= FCF_REGISTERED; in lpfc_mbx_cmpl_reg_fcfi()
1207 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_reg_fcfi()
1210 if ((!(phba->hba_flag & FCF_RR_INPROG)) && in lpfc_mbx_cmpl_reg_fcfi()
1211 lpfc_check_pending_fcoe_event(phba, LPFC_UNREG_FCF)) in lpfc_mbx_cmpl_reg_fcfi()
1215 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_reg_fcfi()
1216 phba->fcf.fcf_flag |= (FCF_SCAN_DONE | FCF_IN_USE); in lpfc_mbx_cmpl_reg_fcfi()
1217 phba->hba_flag &= ~FCF_TS_INPROG; in lpfc_mbx_cmpl_reg_fcfi()
1219 phba->hba_flag |= FCF_RR_INPROG; in lpfc_mbx_cmpl_reg_fcfi()
1220 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_reg_fcfi()
1224 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_reg_fcfi()
1228 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_reg_fcfi()
1229 phba->hba_flag &= ~FCF_RR_INPROG; in lpfc_mbx_cmpl_reg_fcfi()
1230 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_reg_fcfi()
1232 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_mbx_cmpl_reg_fcfi()
1341 __lpfc_update_fcf_record_pri(struct lpfc_hba *phba, uint16_t fcf_index, in __lpfc_update_fcf_record_pri() argument
1347 lockdep_assert_held(&phba->hbalock); in __lpfc_update_fcf_record_pri()
1349 fcf_pri = &phba->fcf.fcf_pri[fcf_index]; in __lpfc_update_fcf_record_pri()
1429 __lpfc_update_fcf_record(struct lpfc_hba *phba, struct lpfc_fcf_rec *fcf_rec, in __lpfc_update_fcf_record() argument
1433 lockdep_assert_held(&phba->hbalock); in __lpfc_update_fcf_record()
1441 __lpfc_update_fcf_record_pri(phba, in __lpfc_update_fcf_record()
1454 lpfc_register_fcf(struct lpfc_hba *phba) in lpfc_register_fcf() argument
1459 spin_lock_irq(&phba->hbalock); in lpfc_register_fcf()
1461 if (!(phba->fcf.fcf_flag & FCF_AVAILABLE)) { in lpfc_register_fcf()
1462 phba->hba_flag &= ~(FCF_TS_INPROG | FCF_RR_INPROG); in lpfc_register_fcf()
1463 spin_unlock_irq(&phba->hbalock); in lpfc_register_fcf()
1468 if (phba->fcf.fcf_flag & FCF_REGISTERED) { in lpfc_register_fcf()
1469 phba->fcf.fcf_flag |= (FCF_SCAN_DONE | FCF_IN_USE); in lpfc_register_fcf()
1470 phba->hba_flag &= ~FCF_TS_INPROG; in lpfc_register_fcf()
1471 if (phba->pport->port_state != LPFC_FLOGI && in lpfc_register_fcf()
1472 phba->pport->fc_flag & FC_FABRIC) { in lpfc_register_fcf()
1473 phba->hba_flag |= FCF_RR_INPROG; in lpfc_register_fcf()
1474 spin_unlock_irq(&phba->hbalock); in lpfc_register_fcf()
1475 lpfc_initial_flogi(phba->pport); in lpfc_register_fcf()
1478 spin_unlock_irq(&phba->hbalock); in lpfc_register_fcf()
1481 spin_unlock_irq(&phba->hbalock); in lpfc_register_fcf()
1483 fcf_mbxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_register_fcf()
1485 spin_lock_irq(&phba->hbalock); in lpfc_register_fcf()
1486 phba->hba_flag &= ~(FCF_TS_INPROG | FCF_RR_INPROG); in lpfc_register_fcf()
1487 spin_unlock_irq(&phba->hbalock); in lpfc_register_fcf()
1491 lpfc_reg_fcfi(phba, fcf_mbxq); in lpfc_register_fcf()
1492 fcf_mbxq->vport = phba->pport; in lpfc_register_fcf()
1494 rc = lpfc_sli_issue_mbox(phba, fcf_mbxq, MBX_NOWAIT); in lpfc_register_fcf()
1496 spin_lock_irq(&phba->hbalock); in lpfc_register_fcf()
1497 phba->hba_flag &= ~(FCF_TS_INPROG | FCF_RR_INPROG); in lpfc_register_fcf()
1498 spin_unlock_irq(&phba->hbalock); in lpfc_register_fcf()
1499 mempool_free(fcf_mbxq, phba->mbox_mem_pool); in lpfc_register_fcf()
1524 lpfc_match_fcf_conn_list(struct lpfc_hba *phba, in lpfc_match_fcf_conn_list() argument
1551 if (!(phba->hba_flag & HBA_FIP_SUPPORT)) { in lpfc_match_fcf_conn_list()
1555 if (phba->valid_vlan) in lpfc_match_fcf_conn_list()
1556 *vlan_id = phba->vlan_id; in lpfc_match_fcf_conn_list()
1566 if (list_empty(&phba->fcf_conn_rec_list)) { in lpfc_match_fcf_conn_list()
1587 &phba->fcf_conn_rec_list, list) { in lpfc_match_fcf_conn_list()
1709 lpfc_check_pending_fcoe_event(struct lpfc_hba *phba, uint8_t unreg_fcf) in lpfc_check_pending_fcoe_event() argument
1715 if ((phba->link_state >= LPFC_LINK_UP) && in lpfc_check_pending_fcoe_event()
1716 (phba->fcoe_eventtag == phba->fcoe_eventtag_at_fcf_scan)) in lpfc_check_pending_fcoe_event()
1719 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_check_pending_fcoe_event()
1723 phba->link_state, phba->fcoe_eventtag_at_fcf_scan, in lpfc_check_pending_fcoe_event()
1724 phba->fcoe_eventtag); in lpfc_check_pending_fcoe_event()
1726 spin_lock_irq(&phba->hbalock); in lpfc_check_pending_fcoe_event()
1727 phba->fcf.fcf_flag &= ~FCF_AVAILABLE; in lpfc_check_pending_fcoe_event()
1728 spin_unlock_irq(&phba->hbalock); in lpfc_check_pending_fcoe_event()
1730 if (phba->link_state >= LPFC_LINK_UP) { in lpfc_check_pending_fcoe_event()
1731 lpfc_printf_log(phba, KERN_INFO, LOG_FIP | LOG_DISCOVERY, in lpfc_check_pending_fcoe_event()
1735 phba->fcoe_eventtag_at_fcf_scan, in lpfc_check_pending_fcoe_event()
1736 phba->fcoe_eventtag); in lpfc_check_pending_fcoe_event()
1737 lpfc_sli4_fcf_scan_read_fcf_rec(phba, LPFC_FCOE_FCF_GET_FIRST); in lpfc_check_pending_fcoe_event()
1743 lpfc_printf_log(phba, KERN_INFO, LOG_FIP | LOG_DISCOVERY, in lpfc_check_pending_fcoe_event()
1745 "state change (x%x)\n", phba->link_state); in lpfc_check_pending_fcoe_event()
1746 spin_lock_irq(&phba->hbalock); in lpfc_check_pending_fcoe_event()
1747 phba->hba_flag &= ~(FCF_TS_INPROG | FCF_RR_INPROG); in lpfc_check_pending_fcoe_event()
1748 phba->fcf.fcf_flag &= ~(FCF_REDISC_FOV | FCF_DISCOVERY); in lpfc_check_pending_fcoe_event()
1749 spin_unlock_irq(&phba->hbalock); in lpfc_check_pending_fcoe_event()
1754 spin_lock_irq(&phba->hbalock); in lpfc_check_pending_fcoe_event()
1755 phba->fcf.fcf_flag &= ~FCF_REGISTERED; in lpfc_check_pending_fcoe_event()
1756 spin_unlock_irq(&phba->hbalock); in lpfc_check_pending_fcoe_event()
1757 lpfc_sli4_unregister_fcf(phba); in lpfc_check_pending_fcoe_event()
1778 lpfc_sli4_new_fcf_random_select(struct lpfc_hba *phba, uint32_t fcf_cnt) in lpfc_sli4_new_fcf_random_select() argument
1806 lpfc_sli4_fcf_rec_mbox_parse(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq, in lpfc_sli4_fcf_rec_mbox_parse() argument
1821 lpfc_printf_log(phba, KERN_ERR, LOG_MBOX, in lpfc_sli4_fcf_rec_mbox_parse()
1832 if_type = bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf); in lpfc_sli4_fcf_rec_mbox_parse()
1837 lpfc_printf_log(phba, KERN_ERR, LOG_FIP, in lpfc_sli4_fcf_rec_mbox_parse()
1841 lpfc_printf_log(phba, KERN_ERR, LOG_FIP, in lpfc_sli4_fcf_rec_mbox_parse()
1874 lpfc_sli4_log_fcf_record_info(struct lpfc_hba *phba, in lpfc_sli4_log_fcf_record_info() argument
1879 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_log_fcf_record_info()
1938 lpfc_sli4_fcf_record_match(struct lpfc_hba *phba, in lpfc_sli4_fcf_record_match() argument
1970 struct lpfc_hba *phba = vport->phba; in lpfc_sli4_fcf_rr_next_proc() local
1974 spin_lock_irq(&phba->hbalock); in lpfc_sli4_fcf_rr_next_proc()
1975 if (phba->hba_flag & HBA_DEVLOSS_TMO) { in lpfc_sli4_fcf_rr_next_proc()
1976 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_fcf_rr_next_proc()
1977 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_fcf_rr_next_proc()
1981 phba->fcf.current_rec.fcf_indx); in lpfc_sli4_fcf_rr_next_proc()
1982 lpfc_unregister_fcf_rescan(phba); in lpfc_sli4_fcf_rr_next_proc()
1986 phba->hba_flag &= ~FCF_RR_INPROG; in lpfc_sli4_fcf_rr_next_proc()
1988 phba->fcf.fcf_flag &= ~(FCF_AVAILABLE | FCF_SCAN_DONE); in lpfc_sli4_fcf_rr_next_proc()
1989 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_fcf_rr_next_proc()
1990 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_fcf_rr_next_proc()
1993 phba->pport->port_state, LPFC_VPORT_UNKNOWN); in lpfc_sli4_fcf_rr_next_proc()
1994 phba->pport->port_state = LPFC_VPORT_UNKNOWN; in lpfc_sli4_fcf_rr_next_proc()
1997 lpfc_printf_log(phba, KERN_INFO, LOG_FIP | LOG_ELS, in lpfc_sli4_fcf_rr_next_proc()
2000 rc = lpfc_sli4_fcf_rr_read_fcf_rec(phba, fcf_index); in lpfc_sli4_fcf_rr_next_proc()
2002 lpfc_printf_log(phba, KERN_WARNING, LOG_FIP | LOG_ELS, in lpfc_sli4_fcf_rr_next_proc()
2005 rc, phba->fcf.current_rec.fcf_indx); in lpfc_sli4_fcf_rr_next_proc()
2025 static void lpfc_sli4_fcf_pri_list_del(struct lpfc_hba *phba, in lpfc_sli4_fcf_pri_list_del() argument
2030 new_fcf_pri = &phba->fcf.fcf_pri[fcf_index]; in lpfc_sli4_fcf_pri_list_del()
2031 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_fcf_pri_list_del()
2035 spin_lock_irq(&phba->hbalock); in lpfc_sli4_fcf_pri_list_del()
2037 if (phba->fcf.current_rec.priority == in lpfc_sli4_fcf_pri_list_del()
2039 phba->fcf.eligible_fcf_cnt--; in lpfc_sli4_fcf_pri_list_del()
2043 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_fcf_pri_list_del()
2057 lpfc_sli4_set_fcf_flogi_fail(struct lpfc_hba *phba, uint16_t fcf_index) in lpfc_sli4_set_fcf_flogi_fail() argument
2060 new_fcf_pri = &phba->fcf.fcf_pri[fcf_index]; in lpfc_sli4_set_fcf_flogi_fail()
2061 spin_lock_irq(&phba->hbalock); in lpfc_sli4_set_fcf_flogi_fail()
2063 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_set_fcf_flogi_fail()
2081 static int lpfc_sli4_fcf_pri_list_add(struct lpfc_hba *phba, in lpfc_sli4_fcf_pri_list_add() argument
2092 new_fcf_pri = &phba->fcf.fcf_pri[fcf_index]; in lpfc_sli4_fcf_pri_list_add()
2093 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_fcf_pri_list_add()
2097 spin_lock_irq(&phba->hbalock); in lpfc_sli4_fcf_pri_list_add()
2102 if (list_empty(&phba->fcf.fcf_pri_list)) { in lpfc_sli4_fcf_pri_list_add()
2103 list_add(&new_fcf_pri->list, &phba->fcf.fcf_pri_list); in lpfc_sli4_fcf_pri_list_add()
2104 ret = lpfc_sli4_fcf_rr_index_set(phba, in lpfc_sli4_fcf_pri_list_add()
2109 last_index = find_first_bit(phba->fcf.fcf_rr_bmask, in lpfc_sli4_fcf_pri_list_add()
2115 current_fcf_pri = phba->fcf.fcf_pri[last_index].fcf_rec.priority; in lpfc_sli4_fcf_pri_list_add()
2117 list_add(&new_fcf_pri->list, &phba->fcf.fcf_pri_list); in lpfc_sli4_fcf_pri_list_add()
2119 memset(phba->fcf.fcf_rr_bmask, 0, in lpfc_sli4_fcf_pri_list_add()
2120 sizeof(*phba->fcf.fcf_rr_bmask)); in lpfc_sli4_fcf_pri_list_add()
2122 phba->fcf.eligible_fcf_cnt = 1; in lpfc_sli4_fcf_pri_list_add()
2125 phba->fcf.eligible_fcf_cnt++; in lpfc_sli4_fcf_pri_list_add()
2126 ret = lpfc_sli4_fcf_rr_index_set(phba, in lpfc_sli4_fcf_pri_list_add()
2132 &phba->fcf.fcf_pri_list, list) { in lpfc_sli4_fcf_pri_list_add()
2135 if (fcf_pri->list.prev == &phba->fcf.fcf_pri_list) in lpfc_sli4_fcf_pri_list_add()
2137 &phba->fcf.fcf_pri_list); in lpfc_sli4_fcf_pri_list_add()
2144 } else if (fcf_pri->list.next == &phba->fcf.fcf_pri_list in lpfc_sli4_fcf_pri_list_add()
2159 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_fcf_pri_list_add()
2179 lpfc_mbx_cmpl_fcf_scan_read_fcf_rec(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec() argument
2190 if (lpfc_check_pending_fcoe_event(phba, LPFC_SKIP_UNREG_FCF)) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2191 lpfc_sli4_mbox_cmd_free(phba, mboxq); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2196 new_fcf_record = lpfc_sli4_fcf_rec_mbox_parse(phba, mboxq, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2199 lpfc_printf_log(phba, KERN_ERR, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2203 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2204 phba->hba_flag &= ~FCF_TS_INPROG; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2205 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2206 lpfc_sli4_mbox_cmd_free(phba, mboxq); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2211 rc = lpfc_match_fcf_conn_list(phba, new_fcf_record, &boot_flag, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2215 lpfc_sli4_log_fcf_record_info(phba, new_fcf_record, vlan_id, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2224 lpfc_sli4_fcf_pri_list_del(phba, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2227 lpfc_printf_log(phba, KERN_WARNING, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2238 if ((phba->fcf.fcf_flag & FCF_IN_USE) && in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2239 lpfc_sli4_fcf_record_match(phba, &phba->fcf.current_rec, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2242 phba->fcf.current_rec.fcf_indx) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2243 lpfc_printf_log(phba, KERN_ERR, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2248 phba->fcf.current_rec.fcf_indx); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2257 if (!(phba->fcf.fcf_flag & FCF_REDISC_PEND) && in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2258 !(phba->fcf.fcf_flag & FCF_REDISC_FOV)) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2259 lpfc_printf_log(phba, KERN_WARNING, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2263 phba->fcf.current_rec.fcf_indx); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2264 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2265 phba->fcf.fcf_flag |= FCF_REDISC_FOV; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2266 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2267 lpfc_sli4_mbox_cmd_free(phba, mboxq); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2268 lpfc_sli4_fcf_scan_read_fcf_rec(phba, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2276 rc = lpfc_sli4_fcf_pri_list_add(phba, fcf_index, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2288 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2289 if (phba->fcf.fcf_flag & FCF_IN_USE) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2290 if (phba->cfg_fcf_failover_policy == LPFC_FCF_FOV && in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2291 lpfc_sli4_fcf_record_match(phba, &phba->fcf.current_rec, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2294 phba->fcf.current_rec.fcf_indx) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2295 phba->fcf.fcf_flag |= FCF_AVAILABLE; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2296 if (phba->fcf.fcf_flag & FCF_REDISC_PEND) in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2299 phba); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2300 else if (phba->fcf.fcf_flag & FCF_REDISC_FOV) in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2302 phba->fcf.fcf_flag &= ~FCF_REDISC_FOV; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2303 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2304 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2308 phba->fcf.current_rec.fcf_indx, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2309 phba->pport->port_state, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2310 phba->pport->fc_flag); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2313 lpfc_printf_log(phba, KERN_ERR, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2318 phba->fcf.current_rec.fcf_indx); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2327 if (!(phba->fcf.fcf_flag & FCF_REDISC_FOV)) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2328 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2336 if (phba->fcf.fcf_flag & FCF_REDISC_FOV) in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2337 fcf_rec = &phba->fcf.failover_rec; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2339 fcf_rec = &phba->fcf.current_rec; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2341 if (phba->fcf.fcf_flag & FCF_AVAILABLE) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2349 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2355 __lpfc_update_fcf_record(phba, fcf_rec, new_fcf_record, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2357 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2366 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2375 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2381 __lpfc_update_fcf_record(phba, fcf_rec, new_fcf_record, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2384 phba->fcf.eligible_fcf_cnt = 1; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2387 phba->fcf.eligible_fcf_cnt++; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2388 select_new_fcf = lpfc_sli4_new_fcf_random_select(phba, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2389 phba->fcf.eligible_fcf_cnt); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2391 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2398 __lpfc_update_fcf_record(phba, fcf_rec, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2403 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2411 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2416 __lpfc_update_fcf_record(phba, fcf_rec, new_fcf_record, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2419 phba->fcf.fcf_flag |= FCF_AVAILABLE; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2421 phba->fcf.eligible_fcf_cnt = 1; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2423 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2427 lpfc_sli4_mbox_cmd_free(phba, mboxq); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2429 if (phba->fcf.fcf_flag & FCF_REDISC_FOV) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2438 if (!(phba->fcf.failover_rec.flag & RECORD_VALID)) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2439 lpfc_printf_log(phba, KERN_WARNING, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2442 phba->fcoe_eventtag_at_fcf_scan, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2445 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2446 if (phba->hba_flag & HBA_DEVLOSS_TMO) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2447 phba->hba_flag &= ~FCF_TS_INPROG; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2448 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2450 lpfc_printf_log(phba, KERN_INFO, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2455 lpfc_unregister_fcf_rescan(phba); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2461 phba->hba_flag &= ~FCF_TS_INPROG; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2462 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2475 lpfc_unregister_fcf(phba); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2478 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2481 phba->fcf.current_rec.fcf_indx, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2482 phba->fcf.failover_rec.fcf_indx); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2483 memcpy(&phba->fcf.current_rec, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2484 &phba->fcf.failover_rec, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2491 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2492 phba->fcf.fcf_flag &= ~FCF_REDISC_FOV; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2493 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2495 lpfc_register_fcf(phba); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2501 if ((phba->fcf.fcf_flag & FCF_REDISC_EVT) || in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2502 (phba->fcf.fcf_flag & FCF_REDISC_PEND)) in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2505 if (phba->cfg_fcf_failover_policy == LPFC_FCF_FOV && in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2506 phba->fcf.fcf_flag & FCF_IN_USE) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2513 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2517 phba->fcf.current_rec.fcf_indx); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2518 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2519 phba->fcf.fcf_flag |= FCF_REDISC_FOV; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2520 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2521 lpfc_sli4_fcf_scan_read_fcf_rec(phba, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2526 lpfc_register_fcf(phba); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2529 lpfc_sli4_fcf_scan_read_fcf_rec(phba, next_fcf_index); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2533 lpfc_sli4_mbox_cmd_free(phba, mboxq); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2534 lpfc_register_fcf(phba); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2555 lpfc_mbx_cmpl_fcf_rr_read_fcf_rec(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec() argument
2565 if (phba->link_state < LPFC_LINK_UP) { in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2566 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2567 phba->fcf.fcf_flag &= ~FCF_DISCOVERY; in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2568 phba->hba_flag &= ~FCF_RR_INPROG; in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2569 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2574 new_fcf_record = lpfc_sli4_fcf_rec_mbox_parse(phba, mboxq, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2577 lpfc_printf_log(phba, KERN_WARNING, LOG_FIP, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2580 "hba_flg x%x fcf_flg x%x\n", phba->hba_flag, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2581 phba->fcf.fcf_flag); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2582 lpfc_unregister_fcf_rescan(phba); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2587 rc = lpfc_match_fcf_conn_list(phba, new_fcf_record, &boot_flag, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2591 lpfc_sli4_log_fcf_record_info(phba, new_fcf_record, vlan_id, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2596 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2600 lpfc_sli4_fcf_rr_index_clear(phba, fcf_index); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2602 fcf_index = lpfc_sli4_fcf_rr_next_index_get(phba); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2603 rc = lpfc_sli4_fcf_rr_next_proc(phba->pport, fcf_index); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2609 if (fcf_index == phba->fcf.current_rec.fcf_indx) { in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2610 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2613 phba->fcf.current_rec.fcf_indx, fcf_index); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2616 lpfc_issue_init_vfi(phba->pport); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2621 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2623 phba->fcf.failover_rec.fcf_indx, fcf_index); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2624 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2625 __lpfc_update_fcf_record(phba, &phba->fcf.failover_rec, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2628 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2630 current_fcf_index = phba->fcf.current_rec.fcf_indx; in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2633 lpfc_unregister_fcf(phba); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2636 memcpy(&phba->fcf.current_rec, &phba->fcf.failover_rec, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2639 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2644 lpfc_register_fcf(phba); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2646 lpfc_sli4_mbox_cmd_free(phba, mboxq); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2661 lpfc_mbx_cmpl_read_fcf_rec(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_mbx_cmpl_read_fcf_rec() argument
2670 if (phba->link_state < LPFC_LINK_UP) in lpfc_mbx_cmpl_read_fcf_rec()
2674 if (!(phba->fcf.fcf_flag & FCF_DISCOVERY)) in lpfc_mbx_cmpl_read_fcf_rec()
2678 new_fcf_record = lpfc_sli4_fcf_rec_mbox_parse(phba, mboxq, in lpfc_mbx_cmpl_read_fcf_rec()
2681 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_read_fcf_rec()
2688 rc = lpfc_match_fcf_conn_list(phba, new_fcf_record, &boot_flag, in lpfc_mbx_cmpl_read_fcf_rec()
2692 lpfc_sli4_log_fcf_record_info(phba, new_fcf_record, vlan_id, in lpfc_mbx_cmpl_read_fcf_rec()
2701 rc = lpfc_sli4_fcf_pri_list_add(phba, fcf_index, new_fcf_record); in lpfc_mbx_cmpl_read_fcf_rec()
2704 lpfc_sli4_mbox_cmd_free(phba, mboxq); in lpfc_mbx_cmpl_read_fcf_rec()
2715 lpfc_init_vfi_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_init_vfi_cmpl() argument
2724 (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) != in lpfc_init_vfi_cmpl()
2731 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_init_vfi_cmpl()
2737 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_init_vfi_cmpl()
2753 struct lpfc_hba *phba = vport->phba; in lpfc_issue_init_vfi() local
2755 mboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_issue_init_vfi()
2764 rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_NOWAIT); in lpfc_issue_init_vfi()
2768 mempool_free(mboxq, vport->phba->mbox_mem_pool); in lpfc_issue_init_vfi()
2780 lpfc_init_vpi_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_init_vpi_cmpl() argument
2791 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_init_vpi_cmpl()
2800 if ((phba->pport == vport) || (vport->port_state == LPFC_FDISC)) { in lpfc_init_vpi_cmpl()
2808 lpfc_register_new_vport(phba, vport, ndlp); in lpfc_init_vpi_cmpl()
2809 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_init_vpi_cmpl()
2813 if (phba->link_flag & LS_NPIV_FAB_SUPPORTED) in lpfc_init_vpi_cmpl()
2820 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_init_vpi_cmpl()
2838 vpi = lpfc_alloc_vpi(vport->phba); in lpfc_issue_init_vpi()
2849 mboxq = mempool_alloc(vport->phba->mbox_mem_pool, GFP_KERNEL); in lpfc_issue_init_vpi()
2856 lpfc_init_vpi(vport->phba, mboxq, vport->vpi); in lpfc_issue_init_vpi()
2859 rc = lpfc_sli_issue_mbox(vport->phba, mboxq, MBX_NOWAIT); in lpfc_issue_init_vpi()
2863 mempool_free(mboxq, vport->phba->mbox_mem_pool); in lpfc_issue_init_vpi()
2875 lpfc_start_fdiscs(struct lpfc_hba *phba) in lpfc_start_fdiscs() argument
2880 vports = lpfc_create_vport_work_array(phba); in lpfc_start_fdiscs()
2882 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) { in lpfc_start_fdiscs()
2886 if (vports[i]->vpi > phba->max_vpi) { in lpfc_start_fdiscs()
2891 if (phba->fc_topology == LPFC_TOPOLOGY_LOOP) { in lpfc_start_fdiscs()
2900 if (phba->link_flag & LS_NPIV_FAB_SUPPORTED) in lpfc_start_fdiscs()
2912 lpfc_destroy_vport_work_array(phba, vports); in lpfc_start_fdiscs()
2916 lpfc_mbx_cmpl_reg_vfi(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_mbx_cmpl_reg_vfi() argument
2927 (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) != in lpfc_mbx_cmpl_reg_vfi()
2934 if (phba->fc_topology == LPFC_TOPOLOGY_LOOP) { in lpfc_mbx_cmpl_reg_vfi()
2950 if (!(phba->sli_rev == LPFC_SLI_REV4 && in lpfc_mbx_cmpl_reg_vfi()
2963 if ((phba->sli_rev == LPFC_SLI_REV4) && in lpfc_mbx_cmpl_reg_vfi()
2964 (phba->link_flag & LS_LOOPBACK_MODE)) { in lpfc_mbx_cmpl_reg_vfi()
2965 phba->link_state = LPFC_HBA_READY; in lpfc_mbx_cmpl_reg_vfi()
2973 vport->phba->alpa_map[0], in lpfc_mbx_cmpl_reg_vfi()
2974 phba->link_state, phba->fc_topology); in lpfc_mbx_cmpl_reg_vfi()
2982 ((phba->fc_topology == LPFC_TOPOLOGY_LOOP) && in lpfc_mbx_cmpl_reg_vfi()
2993 lpfc_start_fdiscs(phba); in lpfc_mbx_cmpl_reg_vfi()
2994 lpfc_do_scr_ns_plogi(phba, vport); in lpfc_mbx_cmpl_reg_vfi()
2999 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_mbx_cmpl_reg_vfi()
3001 lpfc_mbuf_free(phba, dmabuf->virt, dmabuf->phys); in lpfc_mbx_cmpl_reg_vfi()
3008 lpfc_mbx_cmpl_read_sparam(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_read_sparam() argument
3024 lpfc_linkdown(phba); in lpfc_mbx_cmpl_read_sparam()
3035 phba->fc_edtov = ed_tov; in lpfc_mbx_cmpl_read_sparam()
3036 phba->fc_ratov = (2 * ed_tov) / 1000; in lpfc_mbx_cmpl_read_sparam()
3037 if (phba->fc_ratov < FF_DEF_RATOV) { in lpfc_mbx_cmpl_read_sparam()
3039 phba->fc_ratov = FF_DEF_RATOV; in lpfc_mbx_cmpl_read_sparam()
3045 memcpy(&phba->wwnn, &vport->fc_nodename, sizeof(phba->wwnn)); in lpfc_mbx_cmpl_read_sparam()
3046 memcpy(&phba->wwpn, &vport->fc_portname, sizeof(phba->wwnn)); in lpfc_mbx_cmpl_read_sparam()
3049 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_read_sparam()
3051 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_read_sparam()
3056 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_read_sparam()
3058 lpfc_issue_clear_la(phba, vport); in lpfc_mbx_cmpl_read_sparam()
3059 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_read_sparam()
3064 lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la) in lpfc_mbx_process_link_up() argument
3066 struct lpfc_vport *vport = phba->pport; in lpfc_mbx_process_link_up()
3075 spin_lock_irq(&phba->hbalock); in lpfc_mbx_process_link_up()
3076 phba->fc_linkspeed = bf_get(lpfc_mbx_read_top_link_spd, la); in lpfc_mbx_process_link_up()
3078 if (!(phba->hba_flag & HBA_FCOE_MODE)) { in lpfc_mbx_process_link_up()
3090 phba->fc_linkspeed = LPFC_LINK_SPEED_UNKNOWN; in lpfc_mbx_process_link_up()
3095 if (phba->fc_topology && in lpfc_mbx_process_link_up()
3096 phba->fc_topology != bf_get(lpfc_mbx_read_top_topology, la)) { in lpfc_mbx_process_link_up()
3097 lpfc_printf_log(phba, KERN_WARNING, LOG_SLI, in lpfc_mbx_process_link_up()
3099 phba->fc_topology, in lpfc_mbx_process_link_up()
3101 phba->fc_topology_changed = 1; in lpfc_mbx_process_link_up()
3104 phba->fc_topology = bf_get(lpfc_mbx_read_top_topology, la); in lpfc_mbx_process_link_up()
3105 phba->link_flag &= ~LS_NPIV_FAB_SUPPORTED; in lpfc_mbx_process_link_up()
3108 if (phba->fc_topology == LPFC_TOPOLOGY_LOOP) { in lpfc_mbx_process_link_up()
3109 phba->sli3_options &= ~LPFC_SLI3_NPIV_ENABLED; in lpfc_mbx_process_link_up()
3114 if (phba->cfg_enable_npiv && phba->max_vpi) in lpfc_mbx_process_link_up()
3115 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_process_link_up()
3126 phba->alpa_map[0] = 0; in lpfc_mbx_process_link_up()
3139 numalpa = phba->alpa_map[0]; in lpfc_mbx_process_link_up()
3145 phba->alpa_map[j + 1]; in lpfc_mbx_process_link_up()
3151 lpfc_printf_log(phba, in lpfc_mbx_process_link_up()
3163 if (!(phba->sli3_options & LPFC_SLI3_NPIV_ENABLED)) { in lpfc_mbx_process_link_up()
3164 if (phba->max_vpi && phba->cfg_enable_npiv && in lpfc_mbx_process_link_up()
3165 (phba->sli_rev >= LPFC_SLI_REV3)) in lpfc_mbx_process_link_up()
3166 phba->sli3_options |= LPFC_SLI3_NPIV_ENABLED; in lpfc_mbx_process_link_up()
3168 vport->fc_myDID = phba->fc_pref_DID; in lpfc_mbx_process_link_up()
3171 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_process_link_up()
3179 lpfc_linkup(phba); in lpfc_mbx_process_link_up()
3180 sparam_mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_mbx_process_link_up()
3184 rc = lpfc_read_sparam(phba, sparam_mbox, 0); in lpfc_mbx_process_link_up()
3186 mempool_free(sparam_mbox, phba->mbox_mem_pool); in lpfc_mbx_process_link_up()
3191 rc = lpfc_sli_issue_mbox(phba, sparam_mbox, MBX_NOWAIT); in lpfc_mbx_process_link_up()
3194 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_process_link_up()
3196 mempool_free(sparam_mbox, phba->mbox_mem_pool); in lpfc_mbx_process_link_up()
3200 if (!(phba->hba_flag & HBA_FCOE_MODE)) { in lpfc_mbx_process_link_up()
3201 cfglink_mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_mbx_process_link_up()
3205 lpfc_config_link(phba, cfglink_mbox); in lpfc_mbx_process_link_up()
3208 rc = lpfc_sli_issue_mbox(phba, cfglink_mbox, MBX_NOWAIT); in lpfc_mbx_process_link_up()
3210 mempool_free(cfglink_mbox, phba->mbox_mem_pool); in lpfc_mbx_process_link_up()
3220 if (!(phba->hba_flag & HBA_FIP_SUPPORT)) { in lpfc_mbx_process_link_up()
3224 lpfc_printf_log(phba, KERN_ERR, in lpfc_mbx_process_link_up()
3232 lpfc_sli4_build_dflt_fcf_record(phba, fcf_record, in lpfc_mbx_process_link_up()
3234 rc = lpfc_sli4_add_fcf_record(phba, fcf_record); in lpfc_mbx_process_link_up()
3236 lpfc_printf_log(phba, KERN_ERR, in lpfc_mbx_process_link_up()
3250 spin_lock_irq(&phba->hbalock); in lpfc_mbx_process_link_up()
3251 if (phba->hba_flag & FCF_TS_INPROG) { in lpfc_mbx_process_link_up()
3252 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_process_link_up()
3256 phba->fcf.fcf_flag |= FCF_INIT_DISC; in lpfc_mbx_process_link_up()
3257 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_process_link_up()
3258 lpfc_printf_log(phba, KERN_INFO, LOG_FIP | LOG_DISCOVERY, in lpfc_mbx_process_link_up()
3260 rc = lpfc_sli4_fcf_scan_read_fcf_rec(phba, in lpfc_mbx_process_link_up()
3263 spin_lock_irq(&phba->hbalock); in lpfc_mbx_process_link_up()
3264 phba->fcf.fcf_flag &= ~FCF_INIT_DISC; in lpfc_mbx_process_link_up()
3265 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_process_link_up()
3269 lpfc_sli4_clear_fcf_rr_bmask(phba); in lpfc_mbx_process_link_up()
3278 lpfc_issue_clear_la(phba, vport); in lpfc_mbx_process_link_up()
3283 lpfc_enable_la(struct lpfc_hba *phba) in lpfc_enable_la() argument
3286 struct lpfc_sli *psli = &phba->sli; in lpfc_enable_la()
3287 spin_lock_irq(&phba->hbalock); in lpfc_enable_la()
3289 if (phba->sli_rev <= LPFC_SLI_REV3) { in lpfc_enable_la()
3290 control = readl(phba->HCregaddr); in lpfc_enable_la()
3292 writel(control, phba->HCregaddr); in lpfc_enable_la()
3293 readl(phba->HCregaddr); /* flush */ in lpfc_enable_la()
3295 spin_unlock_irq(&phba->hbalock); in lpfc_enable_la()
3299 lpfc_mbx_issue_link_down(struct lpfc_hba *phba) in lpfc_mbx_issue_link_down() argument
3301 lpfc_linkdown(phba); in lpfc_mbx_issue_link_down()
3302 lpfc_enable_la(phba); in lpfc_mbx_issue_link_down()
3303 lpfc_unregister_unused_fcf(phba); in lpfc_mbx_issue_link_down()
3315 lpfc_mbx_cmpl_read_topology(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_read_topology() argument
3326 pring = lpfc_phba_elsring(phba); in lpfc_mbx_cmpl_read_topology()
3332 lpfc_printf_log(phba, KERN_INFO, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3335 lpfc_mbx_issue_link_down(phba); in lpfc_mbx_cmpl_read_topology()
3336 phba->link_state = LPFC_HBA_ERROR; in lpfc_mbx_cmpl_read_topology()
3343 memcpy(&phba->alpa_map[0], mp->virt, 128); in lpfc_mbx_cmpl_read_topology()
3352 if (phba->fc_eventTag <= la->eventTag) { in lpfc_mbx_cmpl_read_topology()
3353 phba->fc_stat.LinkMultiEvent++; in lpfc_mbx_cmpl_read_topology()
3355 if (phba->fc_eventTag != 0) in lpfc_mbx_cmpl_read_topology()
3356 lpfc_linkdown(phba); in lpfc_mbx_cmpl_read_topology()
3359 phba->fc_eventTag = la->eventTag; in lpfc_mbx_cmpl_read_topology()
3360 if (phba->sli_rev < LPFC_SLI_REV4) { in lpfc_mbx_cmpl_read_topology()
3361 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_read_topology()
3363 phba->sli.sli_flag |= LPFC_MENLO_MAINT; in lpfc_mbx_cmpl_read_topology()
3365 phba->sli.sli_flag &= ~LPFC_MENLO_MAINT; in lpfc_mbx_cmpl_read_topology()
3366 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_read_topology()
3369 phba->link_events++; in lpfc_mbx_cmpl_read_topology()
3371 !(phba->sli.sli_flag & LPFC_MENLO_MAINT)) { in lpfc_mbx_cmpl_read_topology()
3372 phba->fc_stat.LinkUp++; in lpfc_mbx_cmpl_read_topology()
3373 if (phba->link_flag & LS_LOOPBACK_MODE) { in lpfc_mbx_cmpl_read_topology()
3374 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3377 la->eventTag, phba->fc_eventTag, in lpfc_mbx_cmpl_read_topology()
3381 phba->alpa_map[0]); in lpfc_mbx_cmpl_read_topology()
3383 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3386 la->eventTag, phba->fc_eventTag, in lpfc_mbx_cmpl_read_topology()
3390 phba->alpa_map[0], in lpfc_mbx_cmpl_read_topology()
3393 phba->wait_4_mlo_maint_flg); in lpfc_mbx_cmpl_read_topology()
3395 lpfc_mbx_process_link_up(phba, la); in lpfc_mbx_cmpl_read_topology()
3398 phba->fc_stat.LinkDown++; in lpfc_mbx_cmpl_read_topology()
3399 if (phba->link_flag & LS_LOOPBACK_MODE) in lpfc_mbx_cmpl_read_topology()
3400 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3404 la->eventTag, phba->fc_eventTag, in lpfc_mbx_cmpl_read_topology()
3405 phba->pport->port_state, vport->fc_flag); in lpfc_mbx_cmpl_read_topology()
3407 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3410 la->eventTag, phba->fc_eventTag, in lpfc_mbx_cmpl_read_topology()
3411 phba->pport->port_state, vport->fc_flag, in lpfc_mbx_cmpl_read_topology()
3415 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3418 la->eventTag, phba->fc_eventTag, in lpfc_mbx_cmpl_read_topology()
3419 phba->pport->port_state, vport->fc_flag, in lpfc_mbx_cmpl_read_topology()
3422 lpfc_mbx_issue_link_down(phba); in lpfc_mbx_cmpl_read_topology()
3424 if (phba->sli.sli_flag & LPFC_MENLO_MAINT && in lpfc_mbx_cmpl_read_topology()
3426 if (phba->link_state != LPFC_LINK_DOWN) { in lpfc_mbx_cmpl_read_topology()
3427 phba->fc_stat.LinkDown++; in lpfc_mbx_cmpl_read_topology()
3428 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3431 la->eventTag, phba->fc_eventTag, in lpfc_mbx_cmpl_read_topology()
3432 phba->pport->port_state, vport->fc_flag); in lpfc_mbx_cmpl_read_topology()
3433 lpfc_mbx_issue_link_down(phba); in lpfc_mbx_cmpl_read_topology()
3435 lpfc_enable_la(phba); in lpfc_mbx_cmpl_read_topology()
3437 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3440 la->eventTag, phba->fc_eventTag, in lpfc_mbx_cmpl_read_topology()
3441 phba->pport->port_state, vport->fc_flag); in lpfc_mbx_cmpl_read_topology()
3447 if (phba->wait_4_mlo_maint_flg) { in lpfc_mbx_cmpl_read_topology()
3448 phba->wait_4_mlo_maint_flg = 0; in lpfc_mbx_cmpl_read_topology()
3449 wake_up_interruptible(&phba->wait_4_mlo_m_q); in lpfc_mbx_cmpl_read_topology()
3453 if ((phba->sli_rev < LPFC_SLI_REV4) && in lpfc_mbx_cmpl_read_topology()
3455 if (phba->sli.sli_flag & LPFC_MENLO_MAINT) in lpfc_mbx_cmpl_read_topology()
3456 lpfc_issue_clear_la(phba, vport); in lpfc_mbx_cmpl_read_topology()
3457 lpfc_printf_log(phba, KERN_INFO, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3463 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_read_topology()
3465 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_read_topology()
3476 lpfc_mbx_cmpl_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_reg_login() argument
3520 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_reg_login()
3522 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_reg_login()
3532 lpfc_mbx_cmpl_unreg_vpi(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_unreg_vpi() argument
3550 if (!(phba->pport->load_flag & FC_UNLOADING)) in lpfc_mbx_cmpl_unreg_vpi()
3551 lpfc_workq_post_event(phba, NULL, NULL, in lpfc_mbx_cmpl_unreg_vpi()
3559 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_unreg_vpi()
3565 if ((vport->load_flag & FC_UNLOADING) && (vport != phba->pport)) in lpfc_mbx_cmpl_unreg_vpi()
3572 struct lpfc_hba *phba = vport->phba; in lpfc_mbx_unreg_vpi() local
3576 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_mbx_unreg_vpi()
3580 lpfc_unreg_vpi(phba, vport->vpi, mbox); in lpfc_mbx_unreg_vpi()
3583 rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT); in lpfc_mbx_unreg_vpi()
3587 mempool_free(mbox, phba->mbox_mem_pool); in lpfc_mbx_unreg_vpi()
3595 lpfc_mbx_cmpl_reg_vpi(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_reg_vpi() argument
3614 if ((phba->cfg_enable_fc4_type == LPFC_ENABLE_BOTH) || in lpfc_mbx_cmpl_reg_vpi()
3615 (phba->cfg_enable_fc4_type == LPFC_ENABLE_NVME)) { in lpfc_mbx_cmpl_reg_vpi()
3616 if (phba->nvmet_support) in lpfc_mbx_cmpl_reg_vpi()
3617 lpfc_nvmet_update_targetport(phba); in lpfc_mbx_cmpl_reg_vpi()
3642 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_reg_vpi()
3655 lpfc_create_static_vport(struct lpfc_hba *phba) in lpfc_create_static_vport() argument
3670 pmb = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_create_static_vport()
3672 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, in lpfc_create_static_vport()
3682 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, in lpfc_create_static_vport()
3685 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_create_static_vport()
3694 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_create_static_vport()
3697 if (lpfc_dump_static_vport(phba, pmb, offset)) in lpfc_create_static_vport()
3700 pmb->vport = phba->pport; in lpfc_create_static_vport()
3701 mbx_wait_rc = lpfc_sli_issue_mbox_wait(phba, pmb, in lpfc_create_static_vport()
3705 lpfc_printf_log(phba, KERN_WARNING, LOG_INIT, in lpfc_create_static_vport()
3713 if (phba->sli_rev == LPFC_SLI_REV4) { in lpfc_create_static_vport()
3743 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, in lpfc_create_static_vport()
3752 shost = lpfc_shost_from_vport(phba->pport); in lpfc_create_static_vport()
3767 lpfc_printf_log(phba, KERN_WARNING, LOG_INIT, in lpfc_create_static_vport()
3782 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_create_static_vport()
3785 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_create_static_vport()
3798 lpfc_mbx_cmpl_fabric_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_fabric_reg_login() argument
3814 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_fabric_reg_login()
3816 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_fabric_reg_login()
3818 if (phba->fc_topology == LPFC_TOPOLOGY_LOOP) { in lpfc_mbx_cmpl_fabric_reg_login()
3839 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_mbx_cmpl_fabric_reg_login()
3849 lpfc_start_fdiscs(phba); in lpfc_mbx_cmpl_fabric_reg_login()
3856 lpfc_do_scr_ns_plogi(phba, vport); in lpfc_mbx_cmpl_fabric_reg_login()
3859 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_fabric_reg_login()
3861 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_fabric_reg_login()
3877 struct lpfc_hba *phba = vport->phba; in lpfc_issue_gidft() local
3880 if ((phba->cfg_enable_fc4_type == LPFC_ENABLE_BOTH) || in lpfc_issue_gidft()
3881 (phba->cfg_enable_fc4_type == LPFC_ENABLE_FCP)) { in lpfc_issue_gidft()
3896 if ((phba->cfg_enable_fc4_type == LPFC_ENABLE_BOTH) || in lpfc_issue_gidft()
3897 (phba->cfg_enable_fc4_type == LPFC_ENABLE_NVME)) { in lpfc_issue_gidft()
3923 lpfc_mbx_cmpl_ns_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_ns_reg_login() argument
3944 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_ns_reg_login()
3946 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_ns_reg_login()
3951 if (phba->fc_topology == LPFC_TOPOLOGY_LOOP) { in lpfc_mbx_cmpl_ns_reg_login()
3966 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_mbx_cmpl_ns_reg_login()
3984 if ((phba->cfg_enable_fc4_type == LPFC_ENABLE_BOTH) || in lpfc_mbx_cmpl_ns_reg_login()
3985 (phba->cfg_enable_fc4_type == LPFC_ENABLE_FCP)) in lpfc_mbx_cmpl_ns_reg_login()
3988 if ((phba->cfg_enable_fc4_type == LPFC_ENABLE_BOTH) || in lpfc_mbx_cmpl_ns_reg_login()
3989 (phba->cfg_enable_fc4_type == LPFC_ENABLE_NVME)) in lpfc_mbx_cmpl_ns_reg_login()
4009 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_ns_reg_login()
4011 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_ns_reg_login()
4023 struct lpfc_hba *phba = vport->phba; in lpfc_register_remote_port() local
4025 if (phba->cfg_enable_fc4_type == LPFC_ENABLE_NVME) in lpfc_register_remote_port()
4065 dev_printk(KERN_WARNING, &phba->pcidev->dev, in lpfc_register_remote_port()
4100 struct lpfc_hba *phba = vport->phba; in lpfc_unregister_remote_port() local
4102 if (phba->cfg_enable_fc4_type == LPFC_ENABLE_NVME) in lpfc_unregister_remote_port()
4175 vport->phba->nport_event_cnt++; in lpfc_nlp_state_cleanup()
4180 vport->phba->nport_event_cnt++; in lpfc_nlp_state_cleanup()
4181 if (vport->phba->nvmet_support == 0) { in lpfc_nlp_state_cleanup()
4200 vport->phba->nport_event_cnt++; in lpfc_nlp_state_cleanup()
4208 if (vport->phba->sli_rev >= LPFC_SLI_REV4 && in lpfc_nlp_state_cleanup()
4210 if (vport->phba->nvmet_support == 0) { in lpfc_nlp_state_cleanup()
4216 vport->phba->nport_event_cnt++; in lpfc_nlp_state_cleanup()
4381 ndlp->phba = vport->phba; in lpfc_initialize_node()
4394 struct lpfc_hba *phba = vport->phba; in lpfc_enable_node() local
4403 if (phba->sli_rev == LPFC_SLI_REV4) { in lpfc_enable_node()
4404 rpi = lpfc_sli4_alloc_rpi(vport->phba); in lpfc_enable_node()
4409 spin_lock_irqsave(&phba->ndlp_lock, flags); in lpfc_enable_node()
4412 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_enable_node()
4422 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_enable_node()
4433 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_enable_node()
4441 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_enable_node()
4444 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_enable_node()
4445 if (vport->phba->sli_rev == LPFC_SLI_REV4) { in lpfc_enable_node()
4465 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_enable_node()
4466 lpfc_sli4_free_rpi(vport->phba, rpi); in lpfc_enable_node()
4483 if (vport->phba->sli_rev == LPFC_SLI_REV4) { in lpfc_drop_node()
4499 struct lpfc_hba *phba = vport->phba; in lpfc_set_disctmo() local
4504 tmo = (((phba->fc_edtov + 999) / 1000) + 1); in lpfc_set_disctmo()
4509 tmo = ((phba->fc_ratov * 3) + 3); in lpfc_set_disctmo()
4573 lpfc_check_sli_ndlp(struct lpfc_hba *phba, in lpfc_check_sli_ndlp() argument
4610 __lpfc_dequeue_nport_iocbs(struct lpfc_hba *phba, in __lpfc_dequeue_nport_iocbs() argument
4618 if (lpfc_check_sli_ndlp(phba, pring, iocb, ndlp)) in __lpfc_dequeue_nport_iocbs()
4625 lpfc_sli3_dequeue_nport_iocbs(struct lpfc_hba *phba, in lpfc_sli3_dequeue_nport_iocbs() argument
4628 struct lpfc_sli *psli = &phba->sli; in lpfc_sli3_dequeue_nport_iocbs()
4631 spin_lock_irq(&phba->hbalock); in lpfc_sli3_dequeue_nport_iocbs()
4633 __lpfc_dequeue_nport_iocbs(phba, ndlp, &psli->sli3_ring[i], in lpfc_sli3_dequeue_nport_iocbs()
4635 spin_unlock_irq(&phba->hbalock); in lpfc_sli3_dequeue_nport_iocbs()
4639 lpfc_sli4_dequeue_nport_iocbs(struct lpfc_hba *phba, in lpfc_sli4_dequeue_nport_iocbs() argument
4645 spin_lock_irq(&phba->hbalock); in lpfc_sli4_dequeue_nport_iocbs()
4646 list_for_each_entry(qp, &phba->sli4_hba.lpfc_wq_list, wq_list) { in lpfc_sli4_dequeue_nport_iocbs()
4651 __lpfc_dequeue_nport_iocbs(phba, ndlp, pring, dequeue_list); in lpfc_sli4_dequeue_nport_iocbs()
4654 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_dequeue_nport_iocbs()
4662 lpfc_no_rpi(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp) in lpfc_no_rpi() argument
4673 if (phba->sli_rev != LPFC_SLI_REV4) in lpfc_no_rpi()
4674 lpfc_sli3_dequeue_nport_iocbs(phba, ndlp, &completions); in lpfc_no_rpi()
4676 lpfc_sli4_dequeue_nport_iocbs(phba, ndlp, &completions); in lpfc_no_rpi()
4680 lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT, in lpfc_no_rpi()
4695 lpfc_nlp_logo_unreg(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_nlp_logo_unreg() argument
4704 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_nlp_logo_unreg()
4719 struct lpfc_hba *phba = vport->phba; in lpfc_unreg_rpi() local
4733 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_unreg_rpi()
4737 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_unreg_rpi()
4738 rpi = phba->sli4_hba.rpi_ids[ndlp->nlp_rpi]; in lpfc_unreg_rpi()
4740 lpfc_unreg_login(phba, vport->vpi, rpi, mbox); in lpfc_unreg_rpi()
4746 if (phba->sli_rev == LPFC_SLI_REV4 && in lpfc_unreg_rpi()
4749 &phba->sli4_hba.sli_intf) == in lpfc_unreg_rpi()
4764 rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT); in lpfc_unreg_rpi()
4766 mempool_free(mbox, phba->mbox_mem_pool); in lpfc_unreg_rpi()
4770 lpfc_no_rpi(phba, ndlp); in lpfc_unreg_rpi()
4772 if (phba->sli_rev != LPFC_SLI_REV4) in lpfc_unreg_rpi()
4792 lpfc_unreg_hba_rpis(struct lpfc_hba *phba) in lpfc_unreg_hba_rpis() argument
4799 vports = lpfc_create_vport_work_array(phba); in lpfc_unreg_hba_rpis()
4801 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY, in lpfc_unreg_hba_rpis()
4805 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) { in lpfc_unreg_hba_rpis()
4818 lpfc_destroy_vport_work_array(phba, vports); in lpfc_unreg_hba_rpis()
4824 struct lpfc_hba *phba = vport->phba; in lpfc_unreg_all_rpis() local
4828 if (phba->sli_rev == LPFC_SLI_REV4) { in lpfc_unreg_all_rpis()
4833 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_unreg_all_rpis()
4835 lpfc_unreg_login(phba, vport->vpi, LPFC_UNREG_ALL_RPIS_VPORT, in lpfc_unreg_all_rpis()
4840 rc = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO); in lpfc_unreg_all_rpis()
4842 mempool_free(mbox, phba->mbox_mem_pool); in lpfc_unreg_all_rpis()
4854 struct lpfc_hba *phba = vport->phba; in lpfc_unreg_default_rpis() local
4858 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_unreg_default_rpis()
4860 lpfc_unreg_did(phba, vport->vpi, LPFC_UNREG_ALL_DFLT_RPIS, in lpfc_unreg_default_rpis()
4865 rc = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO); in lpfc_unreg_default_rpis()
4867 mempool_free(mbox, phba->mbox_mem_pool); in lpfc_unreg_default_rpis()
4885 struct lpfc_hba *phba = vport->phba; in lpfc_cleanup_node() local
4915 if ((mb = phba->sli.mbox_active)) { in lpfc_cleanup_node()
4924 spin_lock_irq(&phba->hbalock); in lpfc_cleanup_node()
4926 list_for_each_entry(mb, &phba->sli.mboxq_cmpl, list) { in lpfc_cleanup_node()
4936 list_for_each_entry_safe(mb, nextmb, &phba->sli.mboxq, list) { in lpfc_cleanup_node()
4942 __lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_cleanup_node()
4946 mempool_free(mb, phba->mbox_mem_pool); in lpfc_cleanup_node()
4953 spin_unlock_irq(&phba->hbalock); in lpfc_cleanup_node()
4955 lpfc_els_abort(phba, ndlp); in lpfc_cleanup_node()
4980 struct lpfc_hba *phba = vport->phba; in lpfc_nlp_remove() local
4990 phba->sli_rev != LPFC_SLI_REV4) { in lpfc_nlp_remove()
4999 if ((mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL)) in lpfc_nlp_remove()
5001 rc = lpfc_reg_rpi(phba, vport->vpi, ndlp->nlp_DID, in lpfc_nlp_remove()
5004 mempool_free(mbox, phba->mbox_mem_pool); in lpfc_nlp_remove()
5011 rc =lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT); in lpfc_nlp_remove()
5013 mempool_free(mbox, phba->mbox_mem_pool); in lpfc_nlp_remove()
5077 vport->phba->fc_topology == in lpfc_matchdid()
5147 if (vport->phba->nvmet_support) in lpfc_setup_disc_node()
5161 if (vport->phba->nvmet_support) in lpfc_setup_disc_node()
5190 if (vport->phba->nvmet_support) in lpfc_setup_disc_node()
5211 (!vport->phba->nvmet_support && in lpfc_setup_disc_node()
5215 if (vport->phba->nvmet_support) in lpfc_setup_disc_node()
5234 struct lpfc_hba *phba = vport->phba; in lpfc_disc_list_loopmap() local
5238 if (!lpfc_is_link_up(phba)) in lpfc_disc_list_loopmap()
5241 if (phba->fc_topology != LPFC_TOPOLOGY_LOOP) in lpfc_disc_list_loopmap()
5245 if (phba->alpa_map[0]) { in lpfc_disc_list_loopmap()
5246 for (j = 1; j <= phba->alpa_map[0]; j++) { in lpfc_disc_list_loopmap()
5247 alpa = phba->alpa_map[j]; in lpfc_disc_list_loopmap()
5273 lpfc_issue_clear_la(struct lpfc_hba *phba, struct lpfc_vport *vport) in lpfc_issue_clear_la() argument
5276 struct lpfc_sli *psli = &phba->sli; in lpfc_issue_clear_la()
5285 if ((phba->link_state >= LPFC_CLEAR_LA) || in lpfc_issue_clear_la()
5287 (phba->sli_rev == LPFC_SLI_REV4)) in lpfc_issue_clear_la()
5291 if ((mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL)) != NULL) { in lpfc_issue_clear_la()
5292 phba->link_state = LPFC_CLEAR_LA; in lpfc_issue_clear_la()
5293 lpfc_clear_la(phba, mbox); in lpfc_issue_clear_la()
5296 rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT); in lpfc_issue_clear_la()
5298 mempool_free(mbox, phba->mbox_mem_pool); in lpfc_issue_clear_la()
5302 phba->link_state = LPFC_HBA_ERROR; in lpfc_issue_clear_la()
5309 lpfc_issue_reg_vpi(struct lpfc_hba *phba, struct lpfc_vport *vport) in lpfc_issue_reg_vpi() argument
5313 regvpimbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_issue_reg_vpi()
5318 if (lpfc_sli_issue_mbox(phba, regvpimbox, MBX_NOWAIT) in lpfc_issue_reg_vpi()
5320 mempool_free(regvpimbox, phba->mbox_mem_pool); in lpfc_issue_reg_vpi()
5330 struct lpfc_hba *phba = vport->phba; in lpfc_disc_start() local
5334 if (!lpfc_is_link_up(phba)) { in lpfc_disc_start()
5337 phba->link_state); in lpfc_disc_start()
5341 if (phba->link_state == LPFC_CLEAR_LA) in lpfc_disc_start()
5368 if ((phba->sli3_options & LPFC_SLI3_NPIV_ENABLED) && in lpfc_disc_start()
5371 (phba->sli_rev < LPFC_SLI_REV4)) { in lpfc_disc_start()
5372 lpfc_issue_clear_la(phba, vport); in lpfc_disc_start()
5373 lpfc_issue_reg_vpi(phba, vport); in lpfc_disc_start()
5383 lpfc_issue_clear_la(phba, vport); in lpfc_disc_start()
5428 lpfc_free_tx(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp) in lpfc_free_tx() argument
5436 psli = &phba->sli; in lpfc_free_tx()
5437 pring = lpfc_phba_elsring(phba); in lpfc_free_tx()
5444 spin_lock_irq(&phba->hbalock); in lpfc_free_tx()
5465 lpfc_sli_issue_abort_iotag(phba, pring, iocb); in lpfc_free_tx()
5468 spin_unlock_irq(&phba->hbalock); in lpfc_free_tx()
5471 lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT, in lpfc_free_tx()
5479 struct lpfc_hba *phba = vport->phba; in lpfc_disc_flush_list() local
5488 lpfc_free_tx(phba, ndlp); in lpfc_disc_flush_list()
5521 struct lpfc_hba *phba = vport->phba; in lpfc_disc_timeout() local
5525 if (unlikely(!phba)) in lpfc_disc_timeout()
5535 lpfc_worker_wake_up(phba); in lpfc_disc_timeout()
5543 struct lpfc_hba *phba = vport->phba; in lpfc_disc_timeout_handler() local
5544 struct lpfc_sli *psli = &phba->sli; in lpfc_disc_timeout_handler()
5589 if (phba->sli_rev <= LPFC_SLI_REV3) in lpfc_disc_timeout_handler()
5625 lpfc_els_abort(phba, ndlp); in lpfc_disc_timeout_handler()
5653 if (phba->sli_rev < LPFC_SLI_REV4) { in lpfc_disc_timeout_handler()
5654 if (phba->sli3_options & LPFC_SLI3_NPIV_ENABLED) in lpfc_disc_timeout_handler()
5655 lpfc_issue_reg_vpi(phba, vport); in lpfc_disc_timeout_handler()
5657 lpfc_issue_clear_la(phba, vport); in lpfc_disc_timeout_handler()
5663 initlinkmbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_disc_timeout_handler()
5668 phba->link_state = LPFC_HBA_ERROR; in lpfc_disc_timeout_handler()
5672 lpfc_linkdown(phba); in lpfc_disc_timeout_handler()
5673 lpfc_init_link(phba, initlinkmbox, phba->cfg_topology, in lpfc_disc_timeout_handler()
5674 phba->cfg_link_speed); in lpfc_disc_timeout_handler()
5678 rc = lpfc_sli_issue_mbox(phba, initlinkmbox, MBX_NOWAIT); in lpfc_disc_timeout_handler()
5679 lpfc_set_loopback_flag(phba); in lpfc_disc_timeout_handler()
5681 mempool_free(initlinkmbox, phba->mbox_mem_pool); in lpfc_disc_timeout_handler()
5695 if (phba->sli_rev < LPFC_SLI_REV4) { in lpfc_disc_timeout_handler()
5696 if (phba->sli3_options & LPFC_SLI3_NPIV_ENABLED) in lpfc_disc_timeout_handler()
5697 lpfc_issue_reg_vpi(phba, vport); in lpfc_disc_timeout_handler()
5699 lpfc_issue_clear_la(phba, vport); in lpfc_disc_timeout_handler()
5727 switch (phba->link_state) { in lpfc_disc_timeout_handler()
5736 lpfc_issue_clear_la(phba, vport); in lpfc_disc_timeout_handler()
5746 "state x%x\n", phba->link_state); in lpfc_disc_timeout_handler()
5756 if (phba->sli_rev != LPFC_SLI_REV4) { in lpfc_disc_timeout_handler()
5774 lpfc_mbx_cmpl_fdmi_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_fdmi_reg_login() argument
5784 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_mbx_cmpl_fdmi_reg_login()
5810 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_fdmi_reg_login()
5812 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_fdmi_reg_login()
5916 lpfc_find_vport_by_vpid(struct lpfc_hba *phba, uint16_t vpi) in lpfc_find_vport_by_vpid() argument
5928 for (i = 0; i < phba->max_vpi; i++) { in lpfc_find_vport_by_vpid()
5929 if (vpi == phba->vpi_ids[i]) in lpfc_find_vport_by_vpid()
5933 if (i >= phba->max_vpi) { in lpfc_find_vport_by_vpid()
5934 lpfc_printf_log(phba, KERN_ERR, LOG_ELS, in lpfc_find_vport_by_vpid()
5941 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_find_vport_by_vpid()
5942 list_for_each_entry(vport, &phba->port_list, listentry) { in lpfc_find_vport_by_vpid()
5944 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_find_vport_by_vpid()
5948 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_find_vport_by_vpid()
5958 if (vport->phba->sli_rev == LPFC_SLI_REV4) { in lpfc_nlp_init()
5959 rpi = lpfc_sli4_alloc_rpi(vport->phba); in lpfc_nlp_init()
5964 ndlp = mempool_alloc(vport->phba->nlp_mem_pool, GFP_KERNEL); in lpfc_nlp_init()
5966 if (vport->phba->sli_rev == LPFC_SLI_REV4) in lpfc_nlp_init()
5967 lpfc_sli4_free_rpi(vport->phba, rpi); in lpfc_nlp_init()
5975 if (vport->phba->sli_rev == LPFC_SLI_REV4) { in lpfc_nlp_init()
5985 mempool_alloc(vport->phba->active_rrq_pool, in lpfc_nlp_init()
5989 ndlp->phba->cfg_rrq_xri_bitmap_sz); in lpfc_nlp_init()
6007 struct lpfc_hba *phba; in lpfc_nlp_release() local
6026 phba = ndlp->phba; in lpfc_nlp_release()
6027 spin_lock_irqsave(&phba->ndlp_lock, flags); in lpfc_nlp_release()
6029 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_nlp_release()
6030 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_nlp_release()
6031 lpfc_sli4_free_rpi(phba, ndlp->nlp_rpi); in lpfc_nlp_release()
6036 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_nlp_release()
6038 ndlp->phba->active_rrq_pool); in lpfc_nlp_release()
6039 mempool_free(ndlp, ndlp->phba->nlp_mem_pool); in lpfc_nlp_release()
6050 struct lpfc_hba *phba; in lpfc_nlp_get() local
6062 phba = ndlp->phba; in lpfc_nlp_get()
6063 spin_lock_irqsave(&phba->ndlp_lock, flags); in lpfc_nlp_get()
6065 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_nlp_get()
6074 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_nlp_get()
6088 struct lpfc_hba *phba; in lpfc_nlp_put() local
6098 phba = ndlp->phba; in lpfc_nlp_put()
6099 spin_lock_irqsave(&phba->ndlp_lock, flags); in lpfc_nlp_put()
6105 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_nlp_put()
6118 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_nlp_put()
6138 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_nlp_put()
6177 lpfc_fcf_inuse(struct lpfc_hba *phba) in lpfc_fcf_inuse() argument
6184 vports = lpfc_create_vport_work_array(phba); in lpfc_fcf_inuse()
6190 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) { in lpfc_fcf_inuse()
6212 lpfc_printf_log(phba, KERN_INFO, LOG_ELS, in lpfc_fcf_inuse()
6222 lpfc_destroy_vport_work_array(phba, vports); in lpfc_fcf_inuse()
6234 lpfc_unregister_vfi_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_unregister_vfi_cmpl() argument
6240 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY|LOG_MBOX, in lpfc_unregister_vfi_cmpl()
6246 phba->pport->fc_flag &= ~FC_VFI_REGISTERED; in lpfc_unregister_vfi_cmpl()
6248 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_unregister_vfi_cmpl()
6260 lpfc_unregister_fcfi_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_unregister_fcfi_cmpl() argument
6265 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY|LOG_MBOX, in lpfc_unregister_fcfi_cmpl()
6270 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_unregister_fcfi_cmpl()
6283 lpfc_unregister_fcf_prep(struct lpfc_hba *phba) in lpfc_unregister_fcf_prep() argument
6291 if (lpfc_fcf_inuse(phba)) in lpfc_unregister_fcf_prep()
6292 lpfc_unreg_hba_rpis(phba); in lpfc_unregister_fcf_prep()
6295 phba->pport->port_state = LPFC_VPORT_UNKNOWN; in lpfc_unregister_fcf_prep()
6298 vports = lpfc_create_vport_work_array(phba); in lpfc_unregister_fcf_prep()
6299 if (vports && (phba->sli3_options & LPFC_SLI3_NPIV_ENABLED)) in lpfc_unregister_fcf_prep()
6300 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) { in lpfc_unregister_fcf_prep()
6306 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_unregister_fcf_prep()
6315 lpfc_destroy_vport_work_array(phba, vports); in lpfc_unregister_fcf_prep()
6316 if (i == 0 && (!(phba->sli3_options & LPFC_SLI3_NPIV_ENABLED))) { in lpfc_unregister_fcf_prep()
6317 ndlp = lpfc_findnode_did(phba->pport, Fabric_DID); in lpfc_unregister_fcf_prep()
6319 lpfc_cancel_retry_delay_tmo(phba->pport, ndlp); in lpfc_unregister_fcf_prep()
6320 lpfc_cleanup_pending_mbox(phba->pport); in lpfc_unregister_fcf_prep()
6321 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_unregister_fcf_prep()
6322 lpfc_sli4_unreg_all_rpis(phba->pport); in lpfc_unregister_fcf_prep()
6323 lpfc_mbx_unreg_vpi(phba->pport); in lpfc_unregister_fcf_prep()
6324 shost = lpfc_shost_from_vport(phba->pport); in lpfc_unregister_fcf_prep()
6326 phba->pport->fc_flag |= FC_VPORT_NEEDS_INIT_VPI; in lpfc_unregister_fcf_prep()
6327 phba->pport->vpi_state &= ~LPFC_VPI_REGISTERED; in lpfc_unregister_fcf_prep()
6332 lpfc_els_flush_all_cmd(phba); in lpfc_unregister_fcf_prep()
6335 rc = lpfc_issue_unreg_vfi(phba->pport); in lpfc_unregister_fcf_prep()
6350 lpfc_sli4_unregister_fcf(struct lpfc_hba *phba) in lpfc_sli4_unregister_fcf() argument
6355 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_sli4_unregister_fcf()
6357 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY|LOG_MBOX, in lpfc_sli4_unregister_fcf()
6359 "HBA state x%x\n", phba->pport->port_state); in lpfc_sli4_unregister_fcf()
6362 lpfc_unreg_fcfi(mbox, phba->fcf.fcfi); in lpfc_sli4_unregister_fcf()
6363 mbox->vport = phba->pport; in lpfc_sli4_unregister_fcf()
6365 rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT); in lpfc_sli4_unregister_fcf()
6368 lpfc_printf_log(phba, KERN_ERR, LOG_SLI, in lpfc_sli4_unregister_fcf()
6371 rc, phba->pport->port_state); in lpfc_sli4_unregister_fcf()
6385 lpfc_unregister_fcf_rescan(struct lpfc_hba *phba) in lpfc_unregister_fcf_rescan() argument
6390 rc = lpfc_unregister_fcf_prep(phba); in lpfc_unregister_fcf_rescan()
6392 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY, in lpfc_unregister_fcf_rescan()
6399 rc = lpfc_sli4_unregister_fcf(phba); in lpfc_unregister_fcf_rescan()
6403 phba->fcf.fcf_flag = 0; in lpfc_unregister_fcf_rescan()
6404 phba->fcf.current_rec.flag = 0; in lpfc_unregister_fcf_rescan()
6410 if ((phba->pport->load_flag & FC_UNLOADING) || in lpfc_unregister_fcf_rescan()
6411 (phba->link_state < LPFC_LINK_UP)) in lpfc_unregister_fcf_rescan()
6415 spin_lock_irq(&phba->hbalock); in lpfc_unregister_fcf_rescan()
6416 phba->fcf.fcf_flag |= FCF_INIT_DISC; in lpfc_unregister_fcf_rescan()
6417 spin_unlock_irq(&phba->hbalock); in lpfc_unregister_fcf_rescan()
6420 lpfc_sli4_clear_fcf_rr_bmask(phba); in lpfc_unregister_fcf_rescan()
6422 rc = lpfc_sli4_fcf_scan_read_fcf_rec(phba, LPFC_FCOE_FCF_GET_FIRST); in lpfc_unregister_fcf_rescan()
6425 spin_lock_irq(&phba->hbalock); in lpfc_unregister_fcf_rescan()
6426 phba->fcf.fcf_flag &= ~FCF_INIT_DISC; in lpfc_unregister_fcf_rescan()
6427 spin_unlock_irq(&phba->hbalock); in lpfc_unregister_fcf_rescan()
6428 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY|LOG_MBOX, in lpfc_unregister_fcf_rescan()
6431 phba->pport->port_state); in lpfc_unregister_fcf_rescan()
6443 lpfc_unregister_fcf(struct lpfc_hba *phba) in lpfc_unregister_fcf() argument
6448 rc = lpfc_unregister_fcf_prep(phba); in lpfc_unregister_fcf()
6450 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY, in lpfc_unregister_fcf()
6457 rc = lpfc_sli4_unregister_fcf(phba); in lpfc_unregister_fcf()
6461 spin_lock_irq(&phba->hbalock); in lpfc_unregister_fcf()
6462 phba->fcf.fcf_flag &= ~FCF_REGISTERED; in lpfc_unregister_fcf()
6463 spin_unlock_irq(&phba->hbalock); in lpfc_unregister_fcf()
6475 lpfc_unregister_unused_fcf(struct lpfc_hba *phba) in lpfc_unregister_unused_fcf() argument
6482 spin_lock_irq(&phba->hbalock); in lpfc_unregister_unused_fcf()
6483 if (!(phba->hba_flag & HBA_FCOE_MODE) || in lpfc_unregister_unused_fcf()
6484 !(phba->fcf.fcf_flag & FCF_REGISTERED) || in lpfc_unregister_unused_fcf()
6485 !(phba->hba_flag & HBA_FIP_SUPPORT) || in lpfc_unregister_unused_fcf()
6486 (phba->fcf.fcf_flag & FCF_DISCOVERY) || in lpfc_unregister_unused_fcf()
6487 (phba->pport->port_state == LPFC_FLOGI)) { in lpfc_unregister_unused_fcf()
6488 spin_unlock_irq(&phba->hbalock); in lpfc_unregister_unused_fcf()
6491 spin_unlock_irq(&phba->hbalock); in lpfc_unregister_unused_fcf()
6493 if (lpfc_fcf_inuse(phba)) in lpfc_unregister_unused_fcf()
6496 lpfc_unregister_fcf_rescan(phba); in lpfc_unregister_unused_fcf()
6508 lpfc_read_fcf_conn_tbl(struct lpfc_hba *phba, in lpfc_read_fcf_conn_tbl() argument
6519 &phba->fcf_conn_rec_list, list) { in lpfc_read_fcf_conn_tbl()
6537 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, in lpfc_read_fcf_conn_tbl()
6546 &phba->fcf_conn_rec_list); in lpfc_read_fcf_conn_tbl()
6549 if (!list_empty(&phba->fcf_conn_rec_list)) { in lpfc_read_fcf_conn_tbl()
6551 list_for_each_entry(conn_entry, &phba->fcf_conn_rec_list, in lpfc_read_fcf_conn_tbl()
6554 lpfc_printf_log(phba, KERN_INFO, LOG_INIT, in lpfc_read_fcf_conn_tbl()
6591 lpfc_read_fcoe_param(struct lpfc_hba *phba, in lpfc_read_fcoe_param() argument
6607 phba->valid_vlan = 1; in lpfc_read_fcoe_param()
6608 phba->vlan_id = le16_to_cpu(fcoe_param->vlan_tag) & in lpfc_read_fcoe_param()
6612 phba->fc_map[0] = fcoe_param->fc_map[0]; in lpfc_read_fcoe_param()
6613 phba->fc_map[1] = fcoe_param->fc_map[1]; in lpfc_read_fcoe_param()
6614 phba->fc_map[2] = fcoe_param->fc_map[2]; in lpfc_read_fcoe_param()
6667 lpfc_parse_fcoe_conf(struct lpfc_hba *phba, in lpfc_parse_fcoe_conf() argument
6683 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, in lpfc_parse_fcoe_conf()
6692 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, in lpfc_parse_fcoe_conf()
6702 lpfc_read_fcoe_param(phba, rec_ptr); in lpfc_parse_fcoe_conf()
6708 lpfc_read_fcf_conn_tbl(phba, rec_ptr); in lpfc_parse_fcoe_conf()