Lines Matching refs:phba
74 struct lpfc_hba *phba; in lpfc_terminate_rport_io() local
87 phba = ndlp->phba; in lpfc_terminate_rport_io()
95 &phba->sli.ring[phba->sli.fcp_ring], in lpfc_terminate_rport_io()
109 struct lpfc_hba *phba; in lpfc_dev_loss_tmo_callbk() local
120 phba = vport->phba; in lpfc_dev_loss_tmo_callbk()
187 spin_lock_irq(&phba->hbalock); in lpfc_dev_loss_tmo_callbk()
193 list_add_tail(&evtp->evt_listp, &phba->work_list); in lpfc_dev_loss_tmo_callbk()
194 lpfc_worker_wake_up(phba); in lpfc_dev_loss_tmo_callbk()
196 spin_unlock_irq(&phba->hbalock); in lpfc_dev_loss_tmo_callbk()
217 struct lpfc_hba *phba; in lpfc_dev_loss_tmo_handler() local
234 phba = vport->phba; in lpfc_dev_loss_tmo_handler()
236 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_dev_loss_tmo_handler()
237 fcf_inuse = lpfc_fcf_inuse(phba); in lpfc_dev_loss_tmo_handler()
255 &phba->sli.ring[phba->sli.fcp_ring], in lpfc_dev_loss_tmo_handler()
300 lpfc_sli_abort_iocb(vport, &phba->sli.ring[phba->sli.fcp_ring], in lpfc_dev_loss_tmo_handler()
364 lpfc_sli4_post_dev_loss_tmo_handler(struct lpfc_hba *phba, int fcf_inuse, in lpfc_sli4_post_dev_loss_tmo_handler() argument
373 if ((phba->hba_flag & HBA_FIP_SUPPORT) && !lpfc_fcf_inuse(phba)) { in lpfc_sli4_post_dev_loss_tmo_handler()
374 spin_lock_irq(&phba->hbalock); in lpfc_sli4_post_dev_loss_tmo_handler()
375 if (phba->fcf.fcf_flag & FCF_DISCOVERY) { in lpfc_sli4_post_dev_loss_tmo_handler()
376 if (phba->hba_flag & HBA_DEVLOSS_TMO) { in lpfc_sli4_post_dev_loss_tmo_handler()
377 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_post_dev_loss_tmo_handler()
380 phba->hba_flag |= HBA_DEVLOSS_TMO; in lpfc_sli4_post_dev_loss_tmo_handler()
381 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_post_dev_loss_tmo_handler()
385 if (phba->fcf.fcf_flag & FCF_REDISC_PROG) { in lpfc_sli4_post_dev_loss_tmo_handler()
386 spin_unlock_irq(&phba->hbalock); 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()
392 if (!(phba->hba_flag & (FCF_TS_INPROG | FCF_RR_INPROG))) { in lpfc_sli4_post_dev_loss_tmo_handler()
393 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_post_dev_loss_tmo_handler()
394 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_post_dev_loss_tmo_handler()
398 lpfc_unregister_fcf_rescan(phba); in lpfc_sli4_post_dev_loss_tmo_handler()
401 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_post_dev_loss_tmo_handler()
402 if (phba->hba_flag & FCF_TS_INPROG) in lpfc_sli4_post_dev_loss_tmo_handler()
403 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_post_dev_loss_tmo_handler()
405 if (phba->hba_flag & FCF_RR_INPROG) in lpfc_sli4_post_dev_loss_tmo_handler()
406 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_post_dev_loss_tmo_handler()
410 lpfc_unregister_unused_fcf(phba); in lpfc_sli4_post_dev_loss_tmo_handler()
424 lpfc_alloc_fast_evt(struct lpfc_hba *phba) { in lpfc_alloc_fast_evt() argument
428 if (atomic_read(&phba->fast_event_count) > LPFC_MAX_EVT_COUNT) in lpfc_alloc_fast_evt()
434 atomic_inc(&phba->fast_event_count); in lpfc_alloc_fast_evt()
450 lpfc_free_fast_evt(struct lpfc_hba *phba, in lpfc_free_fast_evt() argument
453 atomic_dec(&phba->fast_event_count); in lpfc_free_fast_evt()
467 lpfc_send_fastpath_evt(struct lpfc_hba *phba, in lpfc_send_fastpath_evt() argument
493 lpfc_free_fast_evt(phba, fast_evt_data); in lpfc_send_fastpath_evt()
514 lpfc_free_fast_evt(phba, fast_evt_data); in lpfc_send_fastpath_evt()
518 lpfc_free_fast_evt(phba, fast_evt_data); in lpfc_send_fastpath_evt()
528 lpfc_free_fast_evt(phba, fast_evt_data); in lpfc_send_fastpath_evt()
533 lpfc_work_list_done(struct lpfc_hba *phba) in lpfc_work_list_done() argument
541 spin_lock_irq(&phba->hbalock); in lpfc_work_list_done()
542 while (!list_empty(&phba->work_list)) { in lpfc_work_list_done()
543 list_remove_head((&phba->work_list), evtp, typeof(*evtp), in lpfc_work_list_done()
545 spin_unlock_irq(&phba->hbalock); in lpfc_work_list_done()
566 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_work_list_done()
567 lpfc_sli4_post_dev_loss_tmo_handler(phba, in lpfc_work_list_done()
572 if (phba->link_state < LPFC_LINK_DOWN) in lpfc_work_list_done()
573 *(int *) (evtp->evt_arg1) = lpfc_online(phba); in lpfc_work_list_done()
579 if (phba->link_state >= LPFC_LINK_DOWN) in lpfc_work_list_done()
580 lpfc_offline_prep(phba, LPFC_MBX_WAIT); in lpfc_work_list_done()
585 lpfc_offline(phba); in lpfc_work_list_done()
586 lpfc_sli_brdrestart(phba); in lpfc_work_list_done()
588 lpfc_sli_brdready(phba, HS_FFRDY | HS_MBRDY); in lpfc_work_list_done()
589 lpfc_unblock_mgmt_io(phba); in lpfc_work_list_done()
593 lpfc_offline(phba); in lpfc_work_list_done()
594 lpfc_reset_barrier(phba); in lpfc_work_list_done()
595 lpfc_sli_brdreset(phba); in lpfc_work_list_done()
596 lpfc_hba_down_post(phba); in lpfc_work_list_done()
598 lpfc_sli_brdready(phba, HS_MBRDY); in lpfc_work_list_done()
599 lpfc_unblock_mgmt_io(phba); in lpfc_work_list_done()
603 lpfc_offline(phba); in lpfc_work_list_done()
605 = (phba->pport->stopped) in lpfc_work_list_done()
606 ? 0 : lpfc_sli_brdkill(phba); in lpfc_work_list_done()
607 lpfc_unblock_mgmt_io(phba); in lpfc_work_list_done()
611 lpfc_send_fastpath_evt(phba, evtp); in lpfc_work_list_done()
615 if (!(phba->pport->load_flag & FC_UNLOADING)) in lpfc_work_list_done()
616 lpfc_reset_hba(phba); in lpfc_work_list_done()
621 spin_lock_irq(&phba->hbalock); in lpfc_work_list_done()
623 spin_unlock_irq(&phba->hbalock); in lpfc_work_list_done()
628 lpfc_work_done(struct lpfc_hba *phba) in lpfc_work_done() argument
636 spin_lock_irq(&phba->hbalock); in lpfc_work_done()
637 ha_copy = phba->work_ha; in lpfc_work_done()
638 phba->work_ha = 0; in lpfc_work_done()
639 spin_unlock_irq(&phba->hbalock); in lpfc_work_done()
642 if (phba->pci_dev_grp == LPFC_PCI_DEV_OC) in lpfc_work_done()
643 lpfc_sli4_post_async_mbox(phba); in lpfc_work_done()
647 lpfc_handle_eratt(phba); in lpfc_work_done()
650 lpfc_sli_handle_mb_event(phba); in lpfc_work_done()
653 lpfc_handle_latt(phba); in lpfc_work_done()
656 if (phba->pci_dev_grp == LPFC_PCI_DEV_OC) { in lpfc_work_done()
657 if (phba->hba_flag & HBA_RRQ_ACTIVE) in lpfc_work_done()
658 lpfc_handle_rrq_active(phba); in lpfc_work_done()
659 if (phba->hba_flag & FCP_XRI_ABORT_EVENT) in lpfc_work_done()
660 lpfc_sli4_fcp_xri_abort_event_proc(phba); in lpfc_work_done()
661 if (phba->hba_flag & ELS_XRI_ABORT_EVENT) in lpfc_work_done()
662 lpfc_sli4_els_xri_abort_event_proc(phba); in lpfc_work_done()
663 if (phba->hba_flag & ASYNC_EVENT) in lpfc_work_done()
664 lpfc_sli4_async_event_proc(phba); in lpfc_work_done()
665 if (phba->hba_flag & HBA_POST_RECEIVE_BUFFER) { in lpfc_work_done()
666 spin_lock_irq(&phba->hbalock); in lpfc_work_done()
667 phba->hba_flag &= ~HBA_POST_RECEIVE_BUFFER; in lpfc_work_done()
668 spin_unlock_irq(&phba->hbalock); in lpfc_work_done()
669 lpfc_sli_hbqbuf_add_hbqs(phba, LPFC_ELS_HBQ); in lpfc_work_done()
671 if (phba->fcf.fcf_flag & FCF_REDISC_EVT) in lpfc_work_done()
672 lpfc_sli4_fcf_redisc_event_proc(phba); in lpfc_work_done()
675 vports = lpfc_create_vport_work_array(phba); in lpfc_work_done()
677 for (i = 0; i <= phba->max_vports; i++) { in lpfc_work_done()
683 vport = phba->pport; in lpfc_work_done()
697 lpfc_hb_timeout_handler(phba); in lpfc_work_done()
699 lpfc_mbox_timeout_handler(phba); in lpfc_work_done()
701 lpfc_unblock_fabric_iocbs(phba); in lpfc_work_done()
705 lpfc_ramp_down_queue_handler(phba); in lpfc_work_done()
709 lpfc_destroy_vport_work_array(phba, vports); in lpfc_work_done()
711 pring = &phba->sli.ring[LPFC_ELS_RING]; in lpfc_work_done()
716 (phba->hba_flag & HBA_SP_QUEUE_EVT)) { in lpfc_work_done()
720 set_bit(LPFC_DATA_READY, &phba->data_flags); in lpfc_work_done()
722 if (phba->link_state >= LPFC_LINK_UP) { in lpfc_work_done()
724 lpfc_sli_handle_slow_ring_event(phba, pring, in lpfc_work_done()
729 if ((phba->sli_rev == LPFC_SLI_REV4) & in lpfc_work_done()
731 lpfc_drain_txq(phba); in lpfc_work_done()
735 if (phba->sli_rev <= LPFC_SLI_REV3) { in lpfc_work_done()
736 spin_lock_irq(&phba->hbalock); in lpfc_work_done()
737 control = readl(phba->HCregaddr); in lpfc_work_done()
739 lpfc_debugfs_slow_ring_trc(phba, in lpfc_work_done()
744 writel(control, phba->HCregaddr); in lpfc_work_done()
745 readl(phba->HCregaddr); /* flush */ in lpfc_work_done()
747 lpfc_debugfs_slow_ring_trc(phba, in lpfc_work_done()
751 spin_unlock_irq(&phba->hbalock); in lpfc_work_done()
754 lpfc_work_list_done(phba); in lpfc_work_done()
760 struct lpfc_hba *phba = p; in lpfc_do_work() local
765 phba->data_flags = 0; in lpfc_do_work()
769 rc = wait_event_interruptible(phba->work_waitq, in lpfc_do_work()
771 &phba->data_flags) in lpfc_do_work()
775 lpfc_printf_log(phba, KERN_ERR, LOG_ELS, in lpfc_do_work()
781 lpfc_work_done(phba); in lpfc_do_work()
783 phba->worker_thread = NULL; in lpfc_do_work()
784 lpfc_printf_log(phba, KERN_INFO, LOG_ELS, in lpfc_do_work()
795 lpfc_workq_post_event(struct lpfc_hba *phba, void *arg1, void *arg2, in lpfc_workq_post_event() argument
813 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_workq_post_event()
814 list_add_tail(&evtp->evt_listp, &phba->work_list); in lpfc_workq_post_event()
815 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_workq_post_event()
817 lpfc_worker_wake_up(phba); in lpfc_workq_post_event()
826 struct lpfc_hba *phba = vport->phba; in lpfc_cleanup_rpis() local
835 if ((phba->sli3_options & LPFC_SLI3_VPORT_TEARDOWN) || in lpfc_cleanup_rpis()
841 if ((phba->sli_rev < LPFC_SLI_REV4) && in lpfc_cleanup_rpis()
849 if (phba->sli3_options & LPFC_SLI3_VPORT_TEARDOWN) { in lpfc_cleanup_rpis()
850 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_cleanup_rpis()
900 lpfc_linkdown(struct lpfc_hba *phba) in lpfc_linkdown() argument
902 struct lpfc_vport *vport = phba->pport; in lpfc_linkdown()
908 if (phba->link_state == LPFC_LINK_DOWN) in lpfc_linkdown()
912 lpfc_scsi_dev_block(phba); in lpfc_linkdown()
914 spin_lock_irq(&phba->hbalock); in lpfc_linkdown()
915 phba->fcf.fcf_flag &= ~(FCF_AVAILABLE | FCF_SCAN_DONE); in lpfc_linkdown()
916 spin_unlock_irq(&phba->hbalock); in lpfc_linkdown()
917 if (phba->link_state > LPFC_LINK_DOWN) { in lpfc_linkdown()
918 phba->link_state = LPFC_LINK_DOWN; in lpfc_linkdown()
920 phba->pport->fc_flag &= ~FC_LBIT; in lpfc_linkdown()
923 vports = lpfc_create_vport_work_array(phba); in lpfc_linkdown()
925 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) { in lpfc_linkdown()
929 lpfc_destroy_vport_work_array(phba, vports); in lpfc_linkdown()
931 mb = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_linkdown()
933 lpfc_unreg_did(phba, 0xffff, LPFC_UNREG_ALL_DFLT_RPIS, mb); in lpfc_linkdown()
936 if (lpfc_sli_issue_mbox(phba, mb, MBX_NOWAIT) in lpfc_linkdown()
938 mempool_free(mb, phba->mbox_mem_pool); in lpfc_linkdown()
943 if (phba->pport->fc_flag & FC_PT2PT) { in lpfc_linkdown()
944 phba->pport->fc_myDID = 0; in lpfc_linkdown()
945 mb = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_linkdown()
947 lpfc_config_link(phba, mb); in lpfc_linkdown()
950 if (lpfc_sli_issue_mbox(phba, mb, MBX_NOWAIT) in lpfc_linkdown()
952 mempool_free(mb, phba->mbox_mem_pool); in lpfc_linkdown()
956 phba->pport->fc_flag &= ~(FC_PT2PT | FC_PT2PT_PLOGI); in lpfc_linkdown()
993 struct lpfc_hba *phba = vport->phba; in lpfc_linkup_port() local
1000 phba->fc_topology, phba->fc_linkspeed, phba->link_flag); in lpfc_linkup_port()
1003 if (!(phba->sli3_options & LPFC_SLI3_NPIV_ENABLED) && in lpfc_linkup_port()
1004 (vport != phba->pport)) in lpfc_linkup_port()
1022 lpfc_linkup(struct lpfc_hba *phba) in lpfc_linkup() argument
1027 phba->link_state = LPFC_LINK_UP; in lpfc_linkup()
1030 clear_bit(FABRIC_COMANDS_BLOCKED, &phba->bit_flags); in lpfc_linkup()
1031 del_timer_sync(&phba->fabric_block_timer); in lpfc_linkup()
1033 vports = lpfc_create_vport_work_array(phba); in lpfc_linkup()
1035 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) in lpfc_linkup()
1037 lpfc_destroy_vport_work_array(phba, vports); in lpfc_linkup()
1049 lpfc_mbx_cmpl_clear_la(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_clear_la() argument
1053 struct lpfc_sli *psli = &phba->sli; in lpfc_mbx_cmpl_clear_la()
1069 phba->link_state = LPFC_HBA_ERROR; in lpfc_mbx_cmpl_clear_la()
1074 phba->link_state = LPFC_HBA_READY; in lpfc_mbx_cmpl_clear_la()
1076 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_clear_la()
1078 control = readl(phba->HCregaddr); in lpfc_mbx_cmpl_clear_la()
1080 writel(control, phba->HCregaddr); in lpfc_mbx_cmpl_clear_la()
1081 readl(phba->HCregaddr); /* flush */ in lpfc_mbx_cmpl_clear_la()
1082 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_clear_la()
1083 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_clear_la()
1090 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_clear_la()
1100 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_clear_la()
1102 control = readl(phba->HCregaddr); in lpfc_mbx_cmpl_clear_la()
1104 writel(control, phba->HCregaddr); in lpfc_mbx_cmpl_clear_la()
1105 readl(phba->HCregaddr); /* flush */ in lpfc_mbx_cmpl_clear_la()
1106 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_clear_la()
1113 lpfc_mbx_cmpl_local_config_link(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_local_config_link() argument
1120 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_local_config_link()
1123 if ((phba->sli_rev == LPFC_SLI_REV4) && in lpfc_mbx_cmpl_local_config_link()
1124 !(phba->hba_flag & HBA_FCOE_MODE) && in lpfc_mbx_cmpl_local_config_link()
1125 (phba->link_flag & LS_LOOPBACK_MODE)) in lpfc_mbx_cmpl_local_config_link()
1128 if (phba->fc_topology == LPFC_TOPOLOGY_LOOP && in lpfc_mbx_cmpl_local_config_link()
1151 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_local_config_link()
1153 lpfc_linkdown(phba); in lpfc_mbx_cmpl_local_config_link()
1159 lpfc_issue_clear_la(phba, vport); in lpfc_mbx_cmpl_local_config_link()
1172 lpfc_sli4_clear_fcf_rr_bmask(struct lpfc_hba *phba) in lpfc_sli4_clear_fcf_rr_bmask() argument
1176 memset(phba->fcf.fcf_rr_bmask, 0, sizeof(*phba->fcf.fcf_rr_bmask)); in lpfc_sli4_clear_fcf_rr_bmask()
1177 spin_lock_irq(&phba->hbalock); in lpfc_sli4_clear_fcf_rr_bmask()
1179 &phba->fcf.fcf_pri_list, list) { in lpfc_sli4_clear_fcf_rr_bmask()
1183 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_clear_fcf_rr_bmask()
1186 lpfc_mbx_cmpl_reg_fcfi(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_mbx_cmpl_reg_fcfi() argument
1199 phba->fcf.fcfi = bf_get(lpfc_reg_fcfi_fcfi, &mboxq->u.mqe.un.reg_fcfi); in lpfc_mbx_cmpl_reg_fcfi()
1201 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_reg_fcfi()
1202 phba->fcf.fcf_flag |= FCF_REGISTERED; in lpfc_mbx_cmpl_reg_fcfi()
1203 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_reg_fcfi()
1206 if ((!(phba->hba_flag & FCF_RR_INPROG)) && in lpfc_mbx_cmpl_reg_fcfi()
1207 lpfc_check_pending_fcoe_event(phba, LPFC_UNREG_FCF)) in lpfc_mbx_cmpl_reg_fcfi()
1211 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_reg_fcfi()
1212 phba->fcf.fcf_flag |= (FCF_SCAN_DONE | FCF_IN_USE); in lpfc_mbx_cmpl_reg_fcfi()
1213 phba->hba_flag &= ~FCF_TS_INPROG; in lpfc_mbx_cmpl_reg_fcfi()
1215 phba->hba_flag |= FCF_RR_INPROG; in lpfc_mbx_cmpl_reg_fcfi()
1216 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_reg_fcfi()
1220 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_reg_fcfi()
1224 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_reg_fcfi()
1225 phba->hba_flag &= ~FCF_RR_INPROG; in lpfc_mbx_cmpl_reg_fcfi()
1226 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_reg_fcfi()
1228 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_mbx_cmpl_reg_fcfi()
1337 __lpfc_update_fcf_record_pri(struct lpfc_hba *phba, uint16_t fcf_index, in __lpfc_update_fcf_record_pri() argument
1343 fcf_pri = &phba->fcf.fcf_pri[fcf_index]; in __lpfc_update_fcf_record_pri()
1423 __lpfc_update_fcf_record(struct lpfc_hba *phba, struct lpfc_fcf_rec *fcf_rec, in __lpfc_update_fcf_record() argument
1433 __lpfc_update_fcf_record_pri(phba, in __lpfc_update_fcf_record()
1446 lpfc_register_fcf(struct lpfc_hba *phba) in lpfc_register_fcf() argument
1451 spin_lock_irq(&phba->hbalock); in lpfc_register_fcf()
1453 if (!(phba->fcf.fcf_flag & FCF_AVAILABLE)) { in lpfc_register_fcf()
1454 phba->hba_flag &= ~(FCF_TS_INPROG | FCF_RR_INPROG); in lpfc_register_fcf()
1455 spin_unlock_irq(&phba->hbalock); in lpfc_register_fcf()
1460 if (phba->fcf.fcf_flag & FCF_REGISTERED) { in lpfc_register_fcf()
1461 phba->fcf.fcf_flag |= (FCF_SCAN_DONE | FCF_IN_USE); in lpfc_register_fcf()
1462 phba->hba_flag &= ~FCF_TS_INPROG; in lpfc_register_fcf()
1463 if (phba->pport->port_state != LPFC_FLOGI && in lpfc_register_fcf()
1464 phba->pport->fc_flag & FC_FABRIC) { in lpfc_register_fcf()
1465 phba->hba_flag |= FCF_RR_INPROG; in lpfc_register_fcf()
1466 spin_unlock_irq(&phba->hbalock); in lpfc_register_fcf()
1467 lpfc_initial_flogi(phba->pport); in lpfc_register_fcf()
1470 spin_unlock_irq(&phba->hbalock); in lpfc_register_fcf()
1473 spin_unlock_irq(&phba->hbalock); in lpfc_register_fcf()
1475 fcf_mbxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_register_fcf()
1477 spin_lock_irq(&phba->hbalock); in lpfc_register_fcf()
1478 phba->hba_flag &= ~(FCF_TS_INPROG | FCF_RR_INPROG); in lpfc_register_fcf()
1479 spin_unlock_irq(&phba->hbalock); in lpfc_register_fcf()
1483 lpfc_reg_fcfi(phba, fcf_mbxq); in lpfc_register_fcf()
1484 fcf_mbxq->vport = phba->pport; in lpfc_register_fcf()
1486 rc = lpfc_sli_issue_mbox(phba, fcf_mbxq, MBX_NOWAIT); in lpfc_register_fcf()
1488 spin_lock_irq(&phba->hbalock); in lpfc_register_fcf()
1489 phba->hba_flag &= ~(FCF_TS_INPROG | FCF_RR_INPROG); in lpfc_register_fcf()
1490 spin_unlock_irq(&phba->hbalock); in lpfc_register_fcf()
1491 mempool_free(fcf_mbxq, phba->mbox_mem_pool); in lpfc_register_fcf()
1516 lpfc_match_fcf_conn_list(struct lpfc_hba *phba, in lpfc_match_fcf_conn_list() argument
1543 if (!(phba->hba_flag & HBA_FIP_SUPPORT)) { in lpfc_match_fcf_conn_list()
1547 if (phba->valid_vlan) in lpfc_match_fcf_conn_list()
1548 *vlan_id = phba->vlan_id; in lpfc_match_fcf_conn_list()
1558 if (list_empty(&phba->fcf_conn_rec_list)) { in lpfc_match_fcf_conn_list()
1579 &phba->fcf_conn_rec_list, list) { in lpfc_match_fcf_conn_list()
1701 lpfc_check_pending_fcoe_event(struct lpfc_hba *phba, uint8_t unreg_fcf) in lpfc_check_pending_fcoe_event() argument
1707 if ((phba->link_state >= LPFC_LINK_UP) && in lpfc_check_pending_fcoe_event()
1708 (phba->fcoe_eventtag == phba->fcoe_eventtag_at_fcf_scan)) in lpfc_check_pending_fcoe_event()
1711 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_check_pending_fcoe_event()
1715 phba->link_state, phba->fcoe_eventtag_at_fcf_scan, in lpfc_check_pending_fcoe_event()
1716 phba->fcoe_eventtag); in lpfc_check_pending_fcoe_event()
1718 spin_lock_irq(&phba->hbalock); in lpfc_check_pending_fcoe_event()
1719 phba->fcf.fcf_flag &= ~FCF_AVAILABLE; in lpfc_check_pending_fcoe_event()
1720 spin_unlock_irq(&phba->hbalock); in lpfc_check_pending_fcoe_event()
1722 if (phba->link_state >= LPFC_LINK_UP) { in lpfc_check_pending_fcoe_event()
1723 lpfc_printf_log(phba, KERN_INFO, LOG_FIP | LOG_DISCOVERY, in lpfc_check_pending_fcoe_event()
1727 phba->fcoe_eventtag_at_fcf_scan, in lpfc_check_pending_fcoe_event()
1728 phba->fcoe_eventtag); in lpfc_check_pending_fcoe_event()
1729 lpfc_sli4_fcf_scan_read_fcf_rec(phba, LPFC_FCOE_FCF_GET_FIRST); in lpfc_check_pending_fcoe_event()
1735 lpfc_printf_log(phba, KERN_INFO, LOG_FIP | LOG_DISCOVERY, in lpfc_check_pending_fcoe_event()
1737 "state change (x%x)\n", phba->link_state); in lpfc_check_pending_fcoe_event()
1738 spin_lock_irq(&phba->hbalock); in lpfc_check_pending_fcoe_event()
1739 phba->hba_flag &= ~(FCF_TS_INPROG | FCF_RR_INPROG); in lpfc_check_pending_fcoe_event()
1740 phba->fcf.fcf_flag &= ~(FCF_REDISC_FOV | FCF_DISCOVERY); in lpfc_check_pending_fcoe_event()
1741 spin_unlock_irq(&phba->hbalock); in lpfc_check_pending_fcoe_event()
1746 spin_lock_irq(&phba->hbalock); in lpfc_check_pending_fcoe_event()
1747 phba->fcf.fcf_flag &= ~FCF_REGISTERED; in lpfc_check_pending_fcoe_event()
1748 spin_unlock_irq(&phba->hbalock); in lpfc_check_pending_fcoe_event()
1749 lpfc_sli4_unregister_fcf(phba); in lpfc_check_pending_fcoe_event()
1770 lpfc_sli4_new_fcf_random_select(struct lpfc_hba *phba, uint32_t fcf_cnt) in lpfc_sli4_new_fcf_random_select() argument
1798 lpfc_sli4_fcf_rec_mbox_parse(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq, in lpfc_sli4_fcf_rec_mbox_parse() argument
1815 lpfc_printf_log(phba, KERN_ERR, LOG_MBOX, in lpfc_sli4_fcf_rec_mbox_parse()
1829 lpfc_printf_log(phba, KERN_ERR, LOG_FIP, in lpfc_sli4_fcf_rec_mbox_parse()
1833 lpfc_printf_log(phba, KERN_ERR, LOG_FIP, in lpfc_sli4_fcf_rec_mbox_parse()
1866 lpfc_sli4_log_fcf_record_info(struct lpfc_hba *phba, in lpfc_sli4_log_fcf_record_info() argument
1871 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_log_fcf_record_info()
1930 lpfc_sli4_fcf_record_match(struct lpfc_hba *phba, in lpfc_sli4_fcf_record_match() argument
1962 struct lpfc_hba *phba = vport->phba; in lpfc_sli4_fcf_rr_next_proc() local
1966 spin_lock_irq(&phba->hbalock); in lpfc_sli4_fcf_rr_next_proc()
1967 if (phba->hba_flag & HBA_DEVLOSS_TMO) { in lpfc_sli4_fcf_rr_next_proc()
1968 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_fcf_rr_next_proc()
1969 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_fcf_rr_next_proc()
1973 phba->fcf.current_rec.fcf_indx); in lpfc_sli4_fcf_rr_next_proc()
1974 lpfc_unregister_fcf_rescan(phba); in lpfc_sli4_fcf_rr_next_proc()
1978 phba->hba_flag &= ~FCF_RR_INPROG; in lpfc_sli4_fcf_rr_next_proc()
1980 phba->fcf.fcf_flag &= ~(FCF_AVAILABLE | FCF_SCAN_DONE); in lpfc_sli4_fcf_rr_next_proc()
1981 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_fcf_rr_next_proc()
1982 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_fcf_rr_next_proc()
1985 phba->pport->port_state, LPFC_VPORT_UNKNOWN); in lpfc_sli4_fcf_rr_next_proc()
1986 phba->pport->port_state = LPFC_VPORT_UNKNOWN; in lpfc_sli4_fcf_rr_next_proc()
1989 lpfc_printf_log(phba, KERN_INFO, LOG_FIP | LOG_ELS, in lpfc_sli4_fcf_rr_next_proc()
1992 rc = lpfc_sli4_fcf_rr_read_fcf_rec(phba, fcf_index); in lpfc_sli4_fcf_rr_next_proc()
1994 lpfc_printf_log(phba, KERN_WARNING, LOG_FIP | LOG_ELS, in lpfc_sli4_fcf_rr_next_proc()
1997 rc, phba->fcf.current_rec.fcf_indx); in lpfc_sli4_fcf_rr_next_proc()
2017 static void lpfc_sli4_fcf_pri_list_del(struct lpfc_hba *phba, in lpfc_sli4_fcf_pri_list_del() argument
2022 new_fcf_pri = &phba->fcf.fcf_pri[fcf_index]; in lpfc_sli4_fcf_pri_list_del()
2023 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_fcf_pri_list_del()
2027 spin_lock_irq(&phba->hbalock); in lpfc_sli4_fcf_pri_list_del()
2029 if (phba->fcf.current_rec.priority == in lpfc_sli4_fcf_pri_list_del()
2031 phba->fcf.eligible_fcf_cnt--; in lpfc_sli4_fcf_pri_list_del()
2035 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_fcf_pri_list_del()
2049 lpfc_sli4_set_fcf_flogi_fail(struct lpfc_hba *phba, uint16_t fcf_index) in lpfc_sli4_set_fcf_flogi_fail() argument
2052 new_fcf_pri = &phba->fcf.fcf_pri[fcf_index]; in lpfc_sli4_set_fcf_flogi_fail()
2053 spin_lock_irq(&phba->hbalock); in lpfc_sli4_set_fcf_flogi_fail()
2055 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_set_fcf_flogi_fail()
2073 static int lpfc_sli4_fcf_pri_list_add(struct lpfc_hba *phba, in lpfc_sli4_fcf_pri_list_add() argument
2084 new_fcf_pri = &phba->fcf.fcf_pri[fcf_index]; in lpfc_sli4_fcf_pri_list_add()
2085 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_fcf_pri_list_add()
2089 spin_lock_irq(&phba->hbalock); in lpfc_sli4_fcf_pri_list_add()
2094 if (list_empty(&phba->fcf.fcf_pri_list)) { in lpfc_sli4_fcf_pri_list_add()
2095 list_add(&new_fcf_pri->list, &phba->fcf.fcf_pri_list); in lpfc_sli4_fcf_pri_list_add()
2096 ret = lpfc_sli4_fcf_rr_index_set(phba, in lpfc_sli4_fcf_pri_list_add()
2101 last_index = find_first_bit(phba->fcf.fcf_rr_bmask, in lpfc_sli4_fcf_pri_list_add()
2107 current_fcf_pri = phba->fcf.fcf_pri[last_index].fcf_rec.priority; in lpfc_sli4_fcf_pri_list_add()
2109 list_add(&new_fcf_pri->list, &phba->fcf.fcf_pri_list); in lpfc_sli4_fcf_pri_list_add()
2111 memset(phba->fcf.fcf_rr_bmask, 0, in lpfc_sli4_fcf_pri_list_add()
2112 sizeof(*phba->fcf.fcf_rr_bmask)); in lpfc_sli4_fcf_pri_list_add()
2114 phba->fcf.eligible_fcf_cnt = 1; in lpfc_sli4_fcf_pri_list_add()
2117 phba->fcf.eligible_fcf_cnt++; in lpfc_sli4_fcf_pri_list_add()
2118 ret = lpfc_sli4_fcf_rr_index_set(phba, in lpfc_sli4_fcf_pri_list_add()
2124 &phba->fcf.fcf_pri_list, list) { in lpfc_sli4_fcf_pri_list_add()
2127 if (fcf_pri->list.prev == &phba->fcf.fcf_pri_list) in lpfc_sli4_fcf_pri_list_add()
2129 &phba->fcf.fcf_pri_list); in lpfc_sli4_fcf_pri_list_add()
2136 } else if (fcf_pri->list.next == &phba->fcf.fcf_pri_list in lpfc_sli4_fcf_pri_list_add()
2151 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_fcf_pri_list_add()
2171 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
2182 if (lpfc_check_pending_fcoe_event(phba, LPFC_SKIP_UNREG_FCF)) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2183 lpfc_sli4_mbox_cmd_free(phba, mboxq); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2188 new_fcf_record = lpfc_sli4_fcf_rec_mbox_parse(phba, mboxq, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2191 lpfc_printf_log(phba, KERN_ERR, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2195 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2196 phba->hba_flag &= ~FCF_TS_INPROG; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2197 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2198 lpfc_sli4_mbox_cmd_free(phba, mboxq); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2203 rc = lpfc_match_fcf_conn_list(phba, new_fcf_record, &boot_flag, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2207 lpfc_sli4_log_fcf_record_info(phba, new_fcf_record, vlan_id, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2216 lpfc_sli4_fcf_pri_list_del(phba, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2219 lpfc_printf_log(phba, KERN_WARNING, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2230 if ((phba->fcf.fcf_flag & FCF_IN_USE) && in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2231 lpfc_sli4_fcf_record_match(phba, &phba->fcf.current_rec, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2234 phba->fcf.current_rec.fcf_indx) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2235 lpfc_printf_log(phba, KERN_ERR, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2240 phba->fcf.current_rec.fcf_indx); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2249 if (!(phba->fcf.fcf_flag & FCF_REDISC_PEND) && in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2250 !(phba->fcf.fcf_flag & FCF_REDISC_FOV)) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2251 lpfc_printf_log(phba, KERN_WARNING, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2255 phba->fcf.current_rec.fcf_indx); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2256 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2257 phba->fcf.fcf_flag |= FCF_REDISC_FOV; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2258 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2259 lpfc_sli4_mbox_cmd_free(phba, mboxq); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2260 lpfc_sli4_fcf_scan_read_fcf_rec(phba, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2268 rc = lpfc_sli4_fcf_pri_list_add(phba, fcf_index, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2280 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2281 if (phba->fcf.fcf_flag & FCF_IN_USE) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2282 if (phba->cfg_fcf_failover_policy == LPFC_FCF_FOV && in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2283 lpfc_sli4_fcf_record_match(phba, &phba->fcf.current_rec, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2286 phba->fcf.current_rec.fcf_indx) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2287 phba->fcf.fcf_flag |= FCF_AVAILABLE; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2288 if (phba->fcf.fcf_flag & FCF_REDISC_PEND) in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2291 phba); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2292 else if (phba->fcf.fcf_flag & FCF_REDISC_FOV) in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2294 phba->fcf.fcf_flag &= ~FCF_REDISC_FOV; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2295 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2296 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2300 phba->fcf.current_rec.fcf_indx, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2301 phba->pport->port_state, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2302 phba->pport->fc_flag); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2305 lpfc_printf_log(phba, KERN_ERR, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2310 phba->fcf.current_rec.fcf_indx); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2319 if (!(phba->fcf.fcf_flag & FCF_REDISC_FOV)) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2320 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2328 if (phba->fcf.fcf_flag & FCF_REDISC_FOV) in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2329 fcf_rec = &phba->fcf.failover_rec; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2331 fcf_rec = &phba->fcf.current_rec; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2333 if (phba->fcf.fcf_flag & FCF_AVAILABLE) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2341 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2347 __lpfc_update_fcf_record(phba, fcf_rec, new_fcf_record, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2349 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2358 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2367 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2373 __lpfc_update_fcf_record(phba, fcf_rec, new_fcf_record, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2376 phba->fcf.eligible_fcf_cnt = 1; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2379 phba->fcf.eligible_fcf_cnt++; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2380 select_new_fcf = lpfc_sli4_new_fcf_random_select(phba, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2381 phba->fcf.eligible_fcf_cnt); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2383 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2390 __lpfc_update_fcf_record(phba, fcf_rec, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2395 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2403 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2408 __lpfc_update_fcf_record(phba, fcf_rec, new_fcf_record, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2411 phba->fcf.fcf_flag |= FCF_AVAILABLE; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2413 phba->fcf.eligible_fcf_cnt = 1; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2415 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2419 lpfc_sli4_mbox_cmd_free(phba, mboxq); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2421 if (phba->fcf.fcf_flag & FCF_REDISC_FOV) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2430 if (!(phba->fcf.failover_rec.flag & RECORD_VALID)) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2431 lpfc_printf_log(phba, KERN_WARNING, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2434 phba->fcoe_eventtag_at_fcf_scan, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2437 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2438 if (phba->hba_flag & HBA_DEVLOSS_TMO) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2439 phba->hba_flag &= ~FCF_TS_INPROG; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2440 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2442 lpfc_printf_log(phba, KERN_INFO, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2447 lpfc_unregister_fcf_rescan(phba); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2453 phba->hba_flag &= ~FCF_TS_INPROG; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2454 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2467 lpfc_unregister_fcf(phba); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2470 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2473 phba->fcf.current_rec.fcf_indx, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2474 phba->fcf.failover_rec.fcf_indx); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2475 memcpy(&phba->fcf.current_rec, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2476 &phba->fcf.failover_rec, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2483 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2484 phba->fcf.fcf_flag &= ~FCF_REDISC_FOV; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2485 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2487 lpfc_register_fcf(phba); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2493 if ((phba->fcf.fcf_flag & FCF_REDISC_EVT) || in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2494 (phba->fcf.fcf_flag & FCF_REDISC_PEND)) in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2497 if (phba->cfg_fcf_failover_policy == LPFC_FCF_FOV && in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2498 phba->fcf.fcf_flag & FCF_IN_USE) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2505 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2509 phba->fcf.current_rec.fcf_indx); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2510 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2511 phba->fcf.fcf_flag |= FCF_REDISC_FOV; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2512 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2513 lpfc_sli4_fcf_scan_read_fcf_rec(phba, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2518 lpfc_register_fcf(phba); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2521 lpfc_sli4_fcf_scan_read_fcf_rec(phba, next_fcf_index); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2525 lpfc_sli4_mbox_cmd_free(phba, mboxq); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2526 lpfc_register_fcf(phba); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2547 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
2557 if (phba->link_state < LPFC_LINK_UP) { in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2558 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2559 phba->fcf.fcf_flag &= ~FCF_DISCOVERY; in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2560 phba->hba_flag &= ~FCF_RR_INPROG; in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2561 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2566 new_fcf_record = lpfc_sli4_fcf_rec_mbox_parse(phba, mboxq, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2569 lpfc_printf_log(phba, KERN_WARNING, LOG_FIP, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2572 "hba_flg x%x fcf_flg x%x\n", phba->hba_flag, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2573 phba->fcf.fcf_flag); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2574 lpfc_unregister_fcf_rescan(phba); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2579 rc = lpfc_match_fcf_conn_list(phba, new_fcf_record, &boot_flag, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2583 lpfc_sli4_log_fcf_record_info(phba, new_fcf_record, vlan_id, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2588 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2592 lpfc_sli4_fcf_rr_index_clear(phba, fcf_index); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2594 fcf_index = lpfc_sli4_fcf_rr_next_index_get(phba); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2595 rc = lpfc_sli4_fcf_rr_next_proc(phba->pport, fcf_index); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2601 if (fcf_index == phba->fcf.current_rec.fcf_indx) { in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2602 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2605 phba->fcf.current_rec.fcf_indx, fcf_index); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2608 lpfc_issue_init_vfi(phba->pport); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2613 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2615 phba->fcf.failover_rec.fcf_indx, fcf_index); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2616 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2617 __lpfc_update_fcf_record(phba, &phba->fcf.failover_rec, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2620 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2622 current_fcf_index = phba->fcf.current_rec.fcf_indx; in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2625 lpfc_unregister_fcf(phba); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2628 memcpy(&phba->fcf.current_rec, &phba->fcf.failover_rec, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2631 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2636 lpfc_register_fcf(phba); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2638 lpfc_sli4_mbox_cmd_free(phba, mboxq); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2653 lpfc_mbx_cmpl_read_fcf_rec(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_mbx_cmpl_read_fcf_rec() argument
2662 if (phba->link_state < LPFC_LINK_UP) in lpfc_mbx_cmpl_read_fcf_rec()
2666 if (!(phba->fcf.fcf_flag & FCF_DISCOVERY)) in lpfc_mbx_cmpl_read_fcf_rec()
2670 new_fcf_record = lpfc_sli4_fcf_rec_mbox_parse(phba, mboxq, in lpfc_mbx_cmpl_read_fcf_rec()
2673 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_read_fcf_rec()
2680 rc = lpfc_match_fcf_conn_list(phba, new_fcf_record, &boot_flag, in lpfc_mbx_cmpl_read_fcf_rec()
2684 lpfc_sli4_log_fcf_record_info(phba, new_fcf_record, vlan_id, in lpfc_mbx_cmpl_read_fcf_rec()
2693 rc = lpfc_sli4_fcf_pri_list_add(phba, fcf_index, new_fcf_record); in lpfc_mbx_cmpl_read_fcf_rec()
2696 lpfc_sli4_mbox_cmd_free(phba, mboxq); in lpfc_mbx_cmpl_read_fcf_rec()
2707 lpfc_init_vfi_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_init_vfi_cmpl() argument
2716 (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) != in lpfc_init_vfi_cmpl()
2723 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_init_vfi_cmpl()
2729 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_init_vfi_cmpl()
2745 struct lpfc_hba *phba = vport->phba; in lpfc_issue_init_vfi() local
2747 mboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_issue_init_vfi()
2756 rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_NOWAIT); in lpfc_issue_init_vfi()
2760 mempool_free(mboxq, vport->phba->mbox_mem_pool); in lpfc_issue_init_vfi()
2772 lpfc_init_vpi_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_init_vpi_cmpl() argument
2783 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_init_vpi_cmpl()
2792 if ((phba->pport == vport) || (vport->port_state == LPFC_FDISC)) { in lpfc_init_vpi_cmpl()
2800 lpfc_register_new_vport(phba, vport, ndlp); in lpfc_init_vpi_cmpl()
2801 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_init_vpi_cmpl()
2805 if (phba->link_flag & LS_NPIV_FAB_SUPPORTED) in lpfc_init_vpi_cmpl()
2812 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_init_vpi_cmpl()
2830 vpi = lpfc_alloc_vpi(vport->phba); in lpfc_issue_init_vpi()
2841 mboxq = mempool_alloc(vport->phba->mbox_mem_pool, GFP_KERNEL); in lpfc_issue_init_vpi()
2848 lpfc_init_vpi(vport->phba, mboxq, vport->vpi); in lpfc_issue_init_vpi()
2851 rc = lpfc_sli_issue_mbox(vport->phba, mboxq, MBX_NOWAIT); in lpfc_issue_init_vpi()
2855 mempool_free(mboxq, vport->phba->mbox_mem_pool); in lpfc_issue_init_vpi()
2867 lpfc_start_fdiscs(struct lpfc_hba *phba) in lpfc_start_fdiscs() argument
2872 vports = lpfc_create_vport_work_array(phba); in lpfc_start_fdiscs()
2874 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) { in lpfc_start_fdiscs()
2878 if (vports[i]->vpi > phba->max_vpi) { in lpfc_start_fdiscs()
2883 if (phba->fc_topology == LPFC_TOPOLOGY_LOOP) { in lpfc_start_fdiscs()
2892 if (phba->link_flag & LS_NPIV_FAB_SUPPORTED) in lpfc_start_fdiscs()
2904 lpfc_destroy_vport_work_array(phba, vports); in lpfc_start_fdiscs()
2908 lpfc_mbx_cmpl_reg_vfi(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_mbx_cmpl_reg_vfi() argument
2919 (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) != in lpfc_mbx_cmpl_reg_vfi()
2926 if (phba->fc_topology == LPFC_TOPOLOGY_LOOP) { in lpfc_mbx_cmpl_reg_vfi()
2942 if (!(phba->sli_rev == LPFC_SLI_REV4 && in lpfc_mbx_cmpl_reg_vfi()
2955 if ((phba->sli_rev == LPFC_SLI_REV4) && in lpfc_mbx_cmpl_reg_vfi()
2956 (phba->link_flag & LS_LOOPBACK_MODE)) { in lpfc_mbx_cmpl_reg_vfi()
2957 phba->link_state = LPFC_HBA_READY; in lpfc_mbx_cmpl_reg_vfi()
2965 vport->phba->alpa_map[0], in lpfc_mbx_cmpl_reg_vfi()
2966 phba->link_state, phba->fc_topology); in lpfc_mbx_cmpl_reg_vfi()
2974 ((phba->fc_topology == LPFC_TOPOLOGY_LOOP) && in lpfc_mbx_cmpl_reg_vfi()
2985 lpfc_start_fdiscs(phba); in lpfc_mbx_cmpl_reg_vfi()
2986 lpfc_do_scr_ns_plogi(phba, vport); in lpfc_mbx_cmpl_reg_vfi()
2991 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_mbx_cmpl_reg_vfi()
2992 lpfc_mbuf_free(phba, dmabuf->virt, dmabuf->phys); in lpfc_mbx_cmpl_reg_vfi()
2998 lpfc_mbx_cmpl_read_sparam(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_read_sparam() argument
3012 lpfc_linkdown(phba); in lpfc_mbx_cmpl_read_sparam()
3020 memcpy(&phba->wwnn, &vport->fc_nodename, sizeof(phba->wwnn)); in lpfc_mbx_cmpl_read_sparam()
3021 memcpy(&phba->wwpn, &vport->fc_portname, sizeof(phba->wwnn)); in lpfc_mbx_cmpl_read_sparam()
3024 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_read_sparam()
3026 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_read_sparam()
3031 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_read_sparam()
3033 lpfc_issue_clear_la(phba, vport); in lpfc_mbx_cmpl_read_sparam()
3034 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_read_sparam()
3039 lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la) in lpfc_mbx_process_link_up() argument
3041 struct lpfc_vport *vport = phba->pport; in lpfc_mbx_process_link_up()
3050 spin_lock_irq(&phba->hbalock); in lpfc_mbx_process_link_up()
3058 phba->fc_linkspeed = bf_get(lpfc_mbx_read_top_link_spd, la); in lpfc_mbx_process_link_up()
3061 phba->fc_linkspeed = LPFC_LINK_SPEED_UNKNOWN; in lpfc_mbx_process_link_up()
3065 if (phba->fc_topology && in lpfc_mbx_process_link_up()
3066 phba->fc_topology != bf_get(lpfc_mbx_read_top_topology, la)) { in lpfc_mbx_process_link_up()
3067 lpfc_printf_log(phba, KERN_WARNING, LOG_SLI, in lpfc_mbx_process_link_up()
3069 phba->fc_topology, in lpfc_mbx_process_link_up()
3071 phba->fc_topology_changed = 1; in lpfc_mbx_process_link_up()
3074 phba->fc_topology = bf_get(lpfc_mbx_read_top_topology, la); in lpfc_mbx_process_link_up()
3075 phba->link_flag &= ~LS_NPIV_FAB_SUPPORTED; in lpfc_mbx_process_link_up()
3078 if (phba->fc_topology == LPFC_TOPOLOGY_LOOP) { in lpfc_mbx_process_link_up()
3079 phba->sli3_options &= ~LPFC_SLI3_NPIV_ENABLED; in lpfc_mbx_process_link_up()
3084 if (phba->cfg_enable_npiv && phba->max_vpi) in lpfc_mbx_process_link_up()
3085 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_process_link_up()
3096 phba->alpa_map[0] = 0; in lpfc_mbx_process_link_up()
3109 numalpa = phba->alpa_map[0]; in lpfc_mbx_process_link_up()
3115 phba->alpa_map[j + 1]; in lpfc_mbx_process_link_up()
3121 lpfc_printf_log(phba, in lpfc_mbx_process_link_up()
3133 if (!(phba->sli3_options & LPFC_SLI3_NPIV_ENABLED)) { in lpfc_mbx_process_link_up()
3134 if (phba->max_vpi && phba->cfg_enable_npiv && in lpfc_mbx_process_link_up()
3135 (phba->sli_rev >= LPFC_SLI_REV3)) in lpfc_mbx_process_link_up()
3136 phba->sli3_options |= LPFC_SLI3_NPIV_ENABLED; in lpfc_mbx_process_link_up()
3138 vport->fc_myDID = phba->fc_pref_DID; in lpfc_mbx_process_link_up()
3141 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_process_link_up()
3149 lpfc_linkup(phba); in lpfc_mbx_process_link_up()
3150 sparam_mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_mbx_process_link_up()
3154 rc = lpfc_read_sparam(phba, sparam_mbox, 0); in lpfc_mbx_process_link_up()
3156 mempool_free(sparam_mbox, phba->mbox_mem_pool); in lpfc_mbx_process_link_up()
3161 rc = lpfc_sli_issue_mbox(phba, sparam_mbox, MBX_NOWAIT); in lpfc_mbx_process_link_up()
3164 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_process_link_up()
3166 mempool_free(sparam_mbox, phba->mbox_mem_pool); in lpfc_mbx_process_link_up()
3170 if (!(phba->hba_flag & HBA_FCOE_MODE)) { in lpfc_mbx_process_link_up()
3171 cfglink_mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_mbx_process_link_up()
3175 lpfc_config_link(phba, cfglink_mbox); in lpfc_mbx_process_link_up()
3178 rc = lpfc_sli_issue_mbox(phba, cfglink_mbox, MBX_NOWAIT); in lpfc_mbx_process_link_up()
3180 mempool_free(cfglink_mbox, phba->mbox_mem_pool); in lpfc_mbx_process_link_up()
3190 if (!(phba->hba_flag & HBA_FIP_SUPPORT)) { in lpfc_mbx_process_link_up()
3194 lpfc_printf_log(phba, KERN_ERR, in lpfc_mbx_process_link_up()
3202 lpfc_sli4_build_dflt_fcf_record(phba, fcf_record, in lpfc_mbx_process_link_up()
3204 rc = lpfc_sli4_add_fcf_record(phba, fcf_record); in lpfc_mbx_process_link_up()
3206 lpfc_printf_log(phba, KERN_ERR, in lpfc_mbx_process_link_up()
3220 spin_lock_irq(&phba->hbalock); in lpfc_mbx_process_link_up()
3221 if (phba->hba_flag & FCF_TS_INPROG) { in lpfc_mbx_process_link_up()
3222 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_process_link_up()
3226 phba->fcf.fcf_flag |= FCF_INIT_DISC; in lpfc_mbx_process_link_up()
3227 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_process_link_up()
3228 lpfc_printf_log(phba, KERN_INFO, LOG_FIP | LOG_DISCOVERY, in lpfc_mbx_process_link_up()
3230 rc = lpfc_sli4_fcf_scan_read_fcf_rec(phba, in lpfc_mbx_process_link_up()
3233 spin_lock_irq(&phba->hbalock); in lpfc_mbx_process_link_up()
3234 phba->fcf.fcf_flag &= ~FCF_INIT_DISC; in lpfc_mbx_process_link_up()
3235 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_process_link_up()
3239 lpfc_sli4_clear_fcf_rr_bmask(phba); in lpfc_mbx_process_link_up()
3248 lpfc_issue_clear_la(phba, vport); in lpfc_mbx_process_link_up()
3253 lpfc_enable_la(struct lpfc_hba *phba) in lpfc_enable_la() argument
3256 struct lpfc_sli *psli = &phba->sli; in lpfc_enable_la()
3257 spin_lock_irq(&phba->hbalock); in lpfc_enable_la()
3259 if (phba->sli_rev <= LPFC_SLI_REV3) { in lpfc_enable_la()
3260 control = readl(phba->HCregaddr); in lpfc_enable_la()
3262 writel(control, phba->HCregaddr); in lpfc_enable_la()
3263 readl(phba->HCregaddr); /* flush */ in lpfc_enable_la()
3265 spin_unlock_irq(&phba->hbalock); in lpfc_enable_la()
3269 lpfc_mbx_issue_link_down(struct lpfc_hba *phba) in lpfc_mbx_issue_link_down() argument
3271 lpfc_linkdown(phba); in lpfc_mbx_issue_link_down()
3272 lpfc_enable_la(phba); in lpfc_mbx_issue_link_down()
3273 lpfc_unregister_unused_fcf(phba); in lpfc_mbx_issue_link_down()
3285 lpfc_mbx_cmpl_read_topology(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_read_topology() argument
3294 phba->sli.ring[LPFC_ELS_RING].flag &= ~LPFC_STOP_IOCB_EVENT; in lpfc_mbx_cmpl_read_topology()
3297 lpfc_printf_log(phba, KERN_INFO, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3300 lpfc_mbx_issue_link_down(phba); in lpfc_mbx_cmpl_read_topology()
3301 phba->link_state = LPFC_HBA_ERROR; in lpfc_mbx_cmpl_read_topology()
3307 memcpy(&phba->alpa_map[0], mp->virt, 128); in lpfc_mbx_cmpl_read_topology()
3316 if (phba->fc_eventTag <= la->eventTag) { in lpfc_mbx_cmpl_read_topology()
3317 phba->fc_stat.LinkMultiEvent++; in lpfc_mbx_cmpl_read_topology()
3319 if (phba->fc_eventTag != 0) in lpfc_mbx_cmpl_read_topology()
3320 lpfc_linkdown(phba); in lpfc_mbx_cmpl_read_topology()
3323 phba->fc_eventTag = la->eventTag; in lpfc_mbx_cmpl_read_topology()
3324 if (phba->sli_rev < LPFC_SLI_REV4) { in lpfc_mbx_cmpl_read_topology()
3325 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_read_topology()
3327 phba->sli.sli_flag |= LPFC_MENLO_MAINT; in lpfc_mbx_cmpl_read_topology()
3329 phba->sli.sli_flag &= ~LPFC_MENLO_MAINT; in lpfc_mbx_cmpl_read_topology()
3330 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_read_topology()
3333 phba->link_events++; in lpfc_mbx_cmpl_read_topology()
3335 !(phba->sli.sli_flag & LPFC_MENLO_MAINT)) { in lpfc_mbx_cmpl_read_topology()
3336 phba->fc_stat.LinkUp++; in lpfc_mbx_cmpl_read_topology()
3337 if (phba->link_flag & LS_LOOPBACK_MODE) { in lpfc_mbx_cmpl_read_topology()
3338 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3341 la->eventTag, phba->fc_eventTag, in lpfc_mbx_cmpl_read_topology()
3345 phba->alpa_map[0]); in lpfc_mbx_cmpl_read_topology()
3347 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3350 la->eventTag, phba->fc_eventTag, in lpfc_mbx_cmpl_read_topology()
3354 phba->alpa_map[0], in lpfc_mbx_cmpl_read_topology()
3357 phba->wait_4_mlo_maint_flg); in lpfc_mbx_cmpl_read_topology()
3359 lpfc_mbx_process_link_up(phba, la); in lpfc_mbx_cmpl_read_topology()
3362 phba->fc_stat.LinkDown++; in lpfc_mbx_cmpl_read_topology()
3363 if (phba->link_flag & LS_LOOPBACK_MODE) in lpfc_mbx_cmpl_read_topology()
3364 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3368 la->eventTag, phba->fc_eventTag, in lpfc_mbx_cmpl_read_topology()
3369 phba->pport->port_state, vport->fc_flag); in lpfc_mbx_cmpl_read_topology()
3371 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3374 la->eventTag, phba->fc_eventTag, in lpfc_mbx_cmpl_read_topology()
3375 phba->pport->port_state, vport->fc_flag, in lpfc_mbx_cmpl_read_topology()
3378 lpfc_mbx_issue_link_down(phba); in lpfc_mbx_cmpl_read_topology()
3380 if ((phba->sli.sli_flag & LPFC_MENLO_MAINT) && in lpfc_mbx_cmpl_read_topology()
3382 if (phba->link_state != LPFC_LINK_DOWN) { in lpfc_mbx_cmpl_read_topology()
3383 phba->fc_stat.LinkDown++; in lpfc_mbx_cmpl_read_topology()
3384 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3387 la->eventTag, phba->fc_eventTag, in lpfc_mbx_cmpl_read_topology()
3388 phba->pport->port_state, vport->fc_flag); in lpfc_mbx_cmpl_read_topology()
3389 lpfc_mbx_issue_link_down(phba); in lpfc_mbx_cmpl_read_topology()
3391 lpfc_enable_la(phba); in lpfc_mbx_cmpl_read_topology()
3393 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3396 la->eventTag, phba->fc_eventTag, in lpfc_mbx_cmpl_read_topology()
3397 phba->pport->port_state, vport->fc_flag); in lpfc_mbx_cmpl_read_topology()
3403 if (phba->wait_4_mlo_maint_flg) { in lpfc_mbx_cmpl_read_topology()
3404 phba->wait_4_mlo_maint_flg = 0; in lpfc_mbx_cmpl_read_topology()
3405 wake_up_interruptible(&phba->wait_4_mlo_m_q); in lpfc_mbx_cmpl_read_topology()
3409 if ((phba->sli_rev < LPFC_SLI_REV4) && in lpfc_mbx_cmpl_read_topology()
3411 if (phba->sli.sli_flag & LPFC_MENLO_MAINT) in lpfc_mbx_cmpl_read_topology()
3412 lpfc_issue_clear_la(phba, vport); in lpfc_mbx_cmpl_read_topology()
3413 lpfc_printf_log(phba, KERN_INFO, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3419 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_read_topology()
3421 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_read_topology()
3432 lpfc_mbx_cmpl_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_reg_login() argument
3468 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_reg_login()
3470 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_reg_login()
3480 lpfc_mbx_cmpl_unreg_vpi(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_unreg_vpi() argument
3498 if (!(phba->pport->load_flag & FC_UNLOADING)) in lpfc_mbx_cmpl_unreg_vpi()
3499 lpfc_workq_post_event(phba, NULL, NULL, in lpfc_mbx_cmpl_unreg_vpi()
3507 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_unreg_vpi()
3513 if ((vport->load_flag & FC_UNLOADING) && (vport != phba->pport)) in lpfc_mbx_cmpl_unreg_vpi()
3520 struct lpfc_hba *phba = vport->phba; in lpfc_mbx_unreg_vpi() local
3524 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_mbx_unreg_vpi()
3528 lpfc_unreg_vpi(phba, vport->vpi, mbox); in lpfc_mbx_unreg_vpi()
3531 rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT); in lpfc_mbx_unreg_vpi()
3535 mempool_free(mbox, phba->mbox_mem_pool); in lpfc_mbx_unreg_vpi()
3543 lpfc_mbx_cmpl_reg_vpi(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_reg_vpi() argument
3582 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_reg_vpi()
3595 lpfc_create_static_vport(struct lpfc_hba *phba) in lpfc_create_static_vport() argument
3610 pmb = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_create_static_vport()
3612 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, in lpfc_create_static_vport()
3622 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, in lpfc_create_static_vport()
3625 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_create_static_vport()
3634 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_create_static_vport()
3637 if (lpfc_dump_static_vport(phba, pmb, offset)) in lpfc_create_static_vport()
3640 pmb->vport = phba->pport; in lpfc_create_static_vport()
3641 mbx_wait_rc = lpfc_sli_issue_mbox_wait(phba, pmb, in lpfc_create_static_vport()
3645 lpfc_printf_log(phba, KERN_WARNING, LOG_INIT, in lpfc_create_static_vport()
3653 if (phba->sli_rev == LPFC_SLI_REV4) { in lpfc_create_static_vport()
3683 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, in lpfc_create_static_vport()
3692 shost = lpfc_shost_from_vport(phba->pport); in lpfc_create_static_vport()
3707 lpfc_printf_log(phba, KERN_WARNING, LOG_INIT, in lpfc_create_static_vport()
3722 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_create_static_vport()
3725 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_create_static_vport()
3738 lpfc_mbx_cmpl_fabric_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_fabric_reg_login() argument
3754 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_fabric_reg_login()
3756 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_fabric_reg_login()
3758 if (phba->fc_topology == LPFC_TOPOLOGY_LOOP) { in lpfc_mbx_cmpl_fabric_reg_login()
3779 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_mbx_cmpl_fabric_reg_login()
3789 lpfc_start_fdiscs(phba); in lpfc_mbx_cmpl_fabric_reg_login()
3796 lpfc_do_scr_ns_plogi(phba, vport); in lpfc_mbx_cmpl_fabric_reg_login()
3799 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_fabric_reg_login()
3801 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_fabric_reg_login()
3817 lpfc_mbx_cmpl_ns_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_ns_reg_login() argument
3836 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_ns_reg_login()
3838 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_ns_reg_login()
3843 if (phba->fc_topology == LPFC_TOPOLOGY_LOOP) { in lpfc_mbx_cmpl_ns_reg_login()
3858 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_mbx_cmpl_ns_reg_login()
3892 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_ns_reg_login()
3894 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_ns_reg_login()
3906 struct lpfc_hba *phba = vport->phba; in lpfc_register_remote_port() local
3935 dev_printk(KERN_WARNING, &phba->pcidev->dev, in lpfc_register_remote_port()
4039 vport->phba->nport_event_cnt++; in lpfc_nlp_state_cleanup()
4045 vport->phba->nport_event_cnt++; in lpfc_nlp_state_cleanup()
4207 ndlp->phba = vport->phba; in lpfc_initialize_node()
4219 struct lpfc_hba *phba = vport->phba; in lpfc_enable_node() local
4227 spin_lock_irqsave(&phba->ndlp_lock, flags); in lpfc_enable_node()
4230 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_enable_node()
4240 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_enable_node()
4251 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_enable_node()
4259 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_enable_node()
4262 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_enable_node()
4263 if (vport->phba->sli_rev == LPFC_SLI_REV4) { in lpfc_enable_node()
4264 ndlp->nlp_rpi = lpfc_sli4_alloc_rpi(vport->phba); in lpfc_enable_node()
4296 if (vport->phba->sli_rev == LPFC_SLI_REV4) { in lpfc_drop_node()
4312 struct lpfc_hba *phba = vport->phba; in lpfc_set_disctmo() local
4317 tmo = (((phba->fc_edtov + 999) / 1000) + 1); in lpfc_set_disctmo()
4322 tmo = ((phba->fc_ratov * 3) + 3); in lpfc_set_disctmo()
4386 lpfc_check_sli_ndlp(struct lpfc_hba *phba, in lpfc_check_sli_ndlp() argument
4391 struct lpfc_sli *psli = &phba->sli; in lpfc_check_sli_ndlp()
4432 lpfc_no_rpi(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp) in lpfc_no_rpi() argument
4446 psli = &phba->sli; in lpfc_no_rpi()
4452 spin_lock_irq(&phba->hbalock); in lpfc_no_rpi()
4459 if ((lpfc_check_sli_ndlp(phba, pring, iocb, in lpfc_no_rpi()
4467 spin_unlock_irq(&phba->hbalock); in lpfc_no_rpi()
4472 lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT, in lpfc_no_rpi()
4487 lpfc_nlp_logo_unreg(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_nlp_logo_unreg() argument
4496 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_nlp_logo_unreg()
4511 struct lpfc_hba *phba = vport->phba; in lpfc_unreg_rpi() local
4525 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_unreg_rpi()
4529 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_unreg_rpi()
4530 rpi = phba->sli4_hba.rpi_ids[ndlp->nlp_rpi]; in lpfc_unreg_rpi()
4532 lpfc_unreg_login(phba, vport->vpi, rpi, mbox); in lpfc_unreg_rpi()
4538 if (phba->sli_rev == LPFC_SLI_REV4 && in lpfc_unreg_rpi()
4541 &phba->sli4_hba.sli_intf) == in lpfc_unreg_rpi()
4551 rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT); in lpfc_unreg_rpi()
4553 mempool_free(mbox, phba->mbox_mem_pool); in lpfc_unreg_rpi()
4555 lpfc_no_rpi(phba, ndlp); in lpfc_unreg_rpi()
4557 if (phba->sli_rev != LPFC_SLI_REV4) in lpfc_unreg_rpi()
4574 lpfc_unreg_hba_rpis(struct lpfc_hba *phba) in lpfc_unreg_hba_rpis() argument
4581 vports = lpfc_create_vport_work_array(phba); in lpfc_unreg_hba_rpis()
4583 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY, in lpfc_unreg_hba_rpis()
4587 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) { in lpfc_unreg_hba_rpis()
4600 lpfc_destroy_vport_work_array(phba, vports); in lpfc_unreg_hba_rpis()
4606 struct lpfc_hba *phba = vport->phba; in lpfc_unreg_all_rpis() local
4610 if (phba->sli_rev == LPFC_SLI_REV4) { in lpfc_unreg_all_rpis()
4615 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_unreg_all_rpis()
4617 lpfc_unreg_login(phba, vport->vpi, LPFC_UNREG_ALL_RPIS_VPORT, in lpfc_unreg_all_rpis()
4622 rc = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO); in lpfc_unreg_all_rpis()
4624 mempool_free(mbox, phba->mbox_mem_pool); in lpfc_unreg_all_rpis()
4636 struct lpfc_hba *phba = vport->phba; in lpfc_unreg_default_rpis() local
4640 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_unreg_default_rpis()
4642 lpfc_unreg_did(phba, vport->vpi, LPFC_UNREG_ALL_DFLT_RPIS, in lpfc_unreg_default_rpis()
4647 rc = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO); in lpfc_unreg_default_rpis()
4649 mempool_free(mbox, phba->mbox_mem_pool); in lpfc_unreg_default_rpis()
4667 struct lpfc_hba *phba = vport->phba; in lpfc_cleanup_node() local
4697 if ((mb = phba->sli.mbox_active)) { in lpfc_cleanup_node()
4706 spin_lock_irq(&phba->hbalock); in lpfc_cleanup_node()
4708 list_for_each_entry(mb, &phba->sli.mboxq_cmpl, list) { in lpfc_cleanup_node()
4718 list_for_each_entry_safe(mb, nextmb, &phba->sli.mboxq, list) { in lpfc_cleanup_node()
4724 __lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_cleanup_node()
4728 mempool_free(mb, phba->mbox_mem_pool); in lpfc_cleanup_node()
4735 spin_unlock_irq(&phba->hbalock); in lpfc_cleanup_node()
4737 lpfc_els_abort(phba, ndlp); in lpfc_cleanup_node()
4762 struct lpfc_hba *phba = vport->phba; in lpfc_nlp_remove() local
4779 if ((mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL)) in lpfc_nlp_remove()
4781 rc = lpfc_reg_rpi(phba, vport->vpi, ndlp->nlp_DID, in lpfc_nlp_remove()
4784 mempool_free(mbox, phba->mbox_mem_pool); in lpfc_nlp_remove()
4791 rc =lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT); in lpfc_nlp_remove()
4793 mempool_free(mbox, phba->mbox_mem_pool); in lpfc_nlp_remove()
4911 mempool_alloc(vport->phba->nlp_mem_pool, GFP_KERNEL); in lpfc_setup_disc_node()
4969 struct lpfc_hba *phba = vport->phba; in lpfc_disc_list_loopmap() local
4973 if (!lpfc_is_link_up(phba)) in lpfc_disc_list_loopmap()
4976 if (phba->fc_topology != LPFC_TOPOLOGY_LOOP) in lpfc_disc_list_loopmap()
4980 if (phba->alpa_map[0]) { in lpfc_disc_list_loopmap()
4981 for (j = 1; j <= phba->alpa_map[0]; j++) { in lpfc_disc_list_loopmap()
4982 alpa = phba->alpa_map[j]; in lpfc_disc_list_loopmap()
5007 lpfc_issue_clear_la(struct lpfc_hba *phba, struct lpfc_vport *vport) in lpfc_issue_clear_la() argument
5010 struct lpfc_sli *psli = &phba->sli; in lpfc_issue_clear_la()
5020 if ((phba->link_state >= LPFC_CLEAR_LA) || in lpfc_issue_clear_la()
5022 (phba->sli_rev == LPFC_SLI_REV4)) in lpfc_issue_clear_la()
5026 if ((mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL)) != NULL) { in lpfc_issue_clear_la()
5027 phba->link_state = LPFC_CLEAR_LA; in lpfc_issue_clear_la()
5028 lpfc_clear_la(phba, mbox); in lpfc_issue_clear_la()
5031 rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT); in lpfc_issue_clear_la()
5033 mempool_free(mbox, phba->mbox_mem_pool); in lpfc_issue_clear_la()
5038 phba->link_state = LPFC_HBA_ERROR; in lpfc_issue_clear_la()
5045 lpfc_issue_reg_vpi(struct lpfc_hba *phba, struct lpfc_vport *vport) in lpfc_issue_reg_vpi() argument
5049 regvpimbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_issue_reg_vpi()
5054 if (lpfc_sli_issue_mbox(phba, regvpimbox, MBX_NOWAIT) in lpfc_issue_reg_vpi()
5056 mempool_free(regvpimbox, phba->mbox_mem_pool); in lpfc_issue_reg_vpi()
5066 struct lpfc_hba *phba = vport->phba; in lpfc_disc_start() local
5070 if (!lpfc_is_link_up(phba)) { in lpfc_disc_start()
5073 phba->link_state); in lpfc_disc_start()
5077 if (phba->link_state == LPFC_CLEAR_LA) in lpfc_disc_start()
5104 if ((phba->sli3_options & LPFC_SLI3_NPIV_ENABLED) && in lpfc_disc_start()
5107 (phba->sli_rev < LPFC_SLI_REV4)) { in lpfc_disc_start()
5108 lpfc_issue_clear_la(phba, vport); in lpfc_disc_start()
5109 lpfc_issue_reg_vpi(phba, vport); in lpfc_disc_start()
5119 lpfc_issue_clear_la(phba, vport); in lpfc_disc_start()
5164 lpfc_free_tx(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp) in lpfc_free_tx() argument
5172 psli = &phba->sli; in lpfc_free_tx()
5178 spin_lock_irq(&phba->hbalock); in lpfc_free_tx()
5199 lpfc_sli_issue_abort_iotag(phba, pring, iocb); in lpfc_free_tx()
5202 spin_unlock_irq(&phba->hbalock); in lpfc_free_tx()
5205 lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT, in lpfc_free_tx()
5213 struct lpfc_hba *phba = vport->phba; in lpfc_disc_flush_list() local
5222 lpfc_free_tx(phba, ndlp); in lpfc_disc_flush_list()
5255 struct lpfc_hba *phba = vport->phba; in lpfc_disc_timeout() local
5259 if (unlikely(!phba)) in lpfc_disc_timeout()
5269 lpfc_worker_wake_up(phba); in lpfc_disc_timeout()
5277 struct lpfc_hba *phba = vport->phba; in lpfc_disc_timeout_handler() local
5278 struct lpfc_sli *psli = &phba->sli; in lpfc_disc_timeout_handler()
5322 if (phba->sli_rev <= LPFC_SLI_REV3) in lpfc_disc_timeout_handler()
5358 lpfc_els_abort(phba, ndlp); in lpfc_disc_timeout_handler()
5386 if (phba->sli_rev < LPFC_SLI_REV4) { in lpfc_disc_timeout_handler()
5387 if (phba->sli3_options & LPFC_SLI3_NPIV_ENABLED) in lpfc_disc_timeout_handler()
5388 lpfc_issue_reg_vpi(phba, vport); in lpfc_disc_timeout_handler()
5390 lpfc_issue_clear_la(phba, vport); in lpfc_disc_timeout_handler()
5396 initlinkmbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_disc_timeout_handler()
5401 phba->link_state = LPFC_HBA_ERROR; in lpfc_disc_timeout_handler()
5405 lpfc_linkdown(phba); in lpfc_disc_timeout_handler()
5406 lpfc_init_link(phba, initlinkmbox, phba->cfg_topology, in lpfc_disc_timeout_handler()
5407 phba->cfg_link_speed); in lpfc_disc_timeout_handler()
5411 rc = lpfc_sli_issue_mbox(phba, initlinkmbox, MBX_NOWAIT); in lpfc_disc_timeout_handler()
5412 lpfc_set_loopback_flag(phba); in lpfc_disc_timeout_handler()
5414 mempool_free(initlinkmbox, phba->mbox_mem_pool); in lpfc_disc_timeout_handler()
5428 if (phba->sli_rev < LPFC_SLI_REV4) { in lpfc_disc_timeout_handler()
5429 if (phba->sli3_options & LPFC_SLI3_NPIV_ENABLED) in lpfc_disc_timeout_handler()
5430 lpfc_issue_reg_vpi(phba, vport); in lpfc_disc_timeout_handler()
5432 lpfc_issue_clear_la(phba, vport); in lpfc_disc_timeout_handler()
5460 switch (phba->link_state) { in lpfc_disc_timeout_handler()
5469 lpfc_issue_clear_la(phba, vport); in lpfc_disc_timeout_handler()
5479 "state x%x\n", phba->link_state); in lpfc_disc_timeout_handler()
5505 lpfc_mbx_cmpl_fdmi_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_fdmi_reg_login() argument
5515 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_mbx_cmpl_fdmi_reg_login()
5541 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_fdmi_reg_login()
5543 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_fdmi_reg_login()
5644 lpfc_find_vport_by_vpid(struct lpfc_hba *phba, uint16_t vpi) in lpfc_find_vport_by_vpid() argument
5656 for (i = 0; i < phba->max_vpi; i++) { in lpfc_find_vport_by_vpid()
5657 if (vpi == phba->vpi_ids[i]) in lpfc_find_vport_by_vpid()
5661 if (i >= phba->max_vpi) { in lpfc_find_vport_by_vpid()
5662 lpfc_printf_log(phba, KERN_ERR, LOG_ELS, in lpfc_find_vport_by_vpid()
5669 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_find_vport_by_vpid()
5670 list_for_each_entry(vport, &phba->port_list, listentry) { in lpfc_find_vport_by_vpid()
5672 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_find_vport_by_vpid()
5676 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_find_vport_by_vpid()
5688 if (vport->phba->sli_rev == LPFC_SLI_REV4) { in lpfc_nlp_init()
5689 ndlp->nlp_rpi = lpfc_sli4_alloc_rpi(vport->phba); in lpfc_nlp_init()
5698 mempool_alloc(vport->phba->active_rrq_pool, in lpfc_nlp_init()
5702 ndlp->phba->cfg_rrq_xri_bitmap_sz); in lpfc_nlp_init()
5720 struct lpfc_hba *phba; in lpfc_nlp_release() local
5739 phba = ndlp->phba; in lpfc_nlp_release()
5740 spin_lock_irqsave(&phba->ndlp_lock, flags); in lpfc_nlp_release()
5742 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_nlp_release()
5743 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_nlp_release()
5744 lpfc_sli4_free_rpi(phba, ndlp->nlp_rpi); in lpfc_nlp_release()
5749 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_nlp_release()
5751 ndlp->phba->active_rrq_pool); in lpfc_nlp_release()
5752 mempool_free(ndlp, ndlp->phba->nlp_mem_pool); in lpfc_nlp_release()
5763 struct lpfc_hba *phba; in lpfc_nlp_get() local
5775 phba = ndlp->phba; in lpfc_nlp_get()
5776 spin_lock_irqsave(&phba->ndlp_lock, flags); in lpfc_nlp_get()
5778 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_nlp_get()
5787 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_nlp_get()
5801 struct lpfc_hba *phba; in lpfc_nlp_put() local
5811 phba = ndlp->phba; in lpfc_nlp_put()
5812 spin_lock_irqsave(&phba->ndlp_lock, flags); in lpfc_nlp_put()
5818 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_nlp_put()
5831 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_nlp_put()
5851 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_nlp_put()
5890 lpfc_fcf_inuse(struct lpfc_hba *phba) in lpfc_fcf_inuse() argument
5897 vports = lpfc_create_vport_work_array(phba); in lpfc_fcf_inuse()
5903 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) { in lpfc_fcf_inuse()
5925 lpfc_printf_log(phba, KERN_INFO, LOG_ELS, in lpfc_fcf_inuse()
5935 lpfc_destroy_vport_work_array(phba, vports); in lpfc_fcf_inuse()
5947 lpfc_unregister_vfi_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_unregister_vfi_cmpl() argument
5953 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY|LOG_MBOX, in lpfc_unregister_vfi_cmpl()
5959 phba->pport->fc_flag &= ~FC_VFI_REGISTERED; in lpfc_unregister_vfi_cmpl()
5961 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_unregister_vfi_cmpl()
5973 lpfc_unregister_fcfi_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_unregister_fcfi_cmpl() argument
5978 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY|LOG_MBOX, in lpfc_unregister_fcfi_cmpl()
5983 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_unregister_fcfi_cmpl()
5996 lpfc_unregister_fcf_prep(struct lpfc_hba *phba) in lpfc_unregister_fcf_prep() argument
6004 if (lpfc_fcf_inuse(phba)) in lpfc_unregister_fcf_prep()
6005 lpfc_unreg_hba_rpis(phba); in lpfc_unregister_fcf_prep()
6008 phba->pport->port_state = LPFC_VPORT_UNKNOWN; in lpfc_unregister_fcf_prep()
6011 vports = lpfc_create_vport_work_array(phba); in lpfc_unregister_fcf_prep()
6012 if (vports && (phba->sli3_options & LPFC_SLI3_NPIV_ENABLED)) in lpfc_unregister_fcf_prep()
6013 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) { in lpfc_unregister_fcf_prep()
6019 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_unregister_fcf_prep()
6028 lpfc_destroy_vport_work_array(phba, vports); in lpfc_unregister_fcf_prep()
6029 if (i == 0 && (!(phba->sli3_options & LPFC_SLI3_NPIV_ENABLED))) { in lpfc_unregister_fcf_prep()
6030 ndlp = lpfc_findnode_did(phba->pport, Fabric_DID); in lpfc_unregister_fcf_prep()
6032 lpfc_cancel_retry_delay_tmo(phba->pport, ndlp); in lpfc_unregister_fcf_prep()
6033 lpfc_cleanup_pending_mbox(phba->pport); in lpfc_unregister_fcf_prep()
6034 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_unregister_fcf_prep()
6035 lpfc_sli4_unreg_all_rpis(phba->pport); in lpfc_unregister_fcf_prep()
6036 lpfc_mbx_unreg_vpi(phba->pport); in lpfc_unregister_fcf_prep()
6037 shost = lpfc_shost_from_vport(phba->pport); in lpfc_unregister_fcf_prep()
6039 phba->pport->fc_flag |= FC_VPORT_NEEDS_INIT_VPI; in lpfc_unregister_fcf_prep()
6040 phba->pport->vpi_state &= ~LPFC_VPI_REGISTERED; in lpfc_unregister_fcf_prep()
6045 lpfc_els_flush_all_cmd(phba); in lpfc_unregister_fcf_prep()
6048 rc = lpfc_issue_unreg_vfi(phba->pport); in lpfc_unregister_fcf_prep()
6063 lpfc_sli4_unregister_fcf(struct lpfc_hba *phba) in lpfc_sli4_unregister_fcf() argument
6068 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_sli4_unregister_fcf()
6070 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY|LOG_MBOX, in lpfc_sli4_unregister_fcf()
6072 "HBA state x%x\n", phba->pport->port_state); in lpfc_sli4_unregister_fcf()
6075 lpfc_unreg_fcfi(mbox, phba->fcf.fcfi); in lpfc_sli4_unregister_fcf()
6076 mbox->vport = phba->pport; in lpfc_sli4_unregister_fcf()
6078 rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT); in lpfc_sli4_unregister_fcf()
6081 lpfc_printf_log(phba, KERN_ERR, LOG_SLI, in lpfc_sli4_unregister_fcf()
6084 rc, phba->pport->port_state); in lpfc_sli4_unregister_fcf()
6098 lpfc_unregister_fcf_rescan(struct lpfc_hba *phba) in lpfc_unregister_fcf_rescan() argument
6103 rc = lpfc_unregister_fcf_prep(phba); in lpfc_unregister_fcf_rescan()
6105 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY, in lpfc_unregister_fcf_rescan()
6112 rc = lpfc_sli4_unregister_fcf(phba); in lpfc_unregister_fcf_rescan()
6116 phba->fcf.fcf_flag = 0; in lpfc_unregister_fcf_rescan()
6117 phba->fcf.current_rec.flag = 0; in lpfc_unregister_fcf_rescan()
6123 if ((phba->pport->load_flag & FC_UNLOADING) || in lpfc_unregister_fcf_rescan()
6124 (phba->link_state < LPFC_LINK_UP)) in lpfc_unregister_fcf_rescan()
6128 spin_lock_irq(&phba->hbalock); in lpfc_unregister_fcf_rescan()
6129 phba->fcf.fcf_flag |= FCF_INIT_DISC; in lpfc_unregister_fcf_rescan()
6130 spin_unlock_irq(&phba->hbalock); in lpfc_unregister_fcf_rescan()
6133 lpfc_sli4_clear_fcf_rr_bmask(phba); in lpfc_unregister_fcf_rescan()
6135 rc = lpfc_sli4_fcf_scan_read_fcf_rec(phba, LPFC_FCOE_FCF_GET_FIRST); in lpfc_unregister_fcf_rescan()
6138 spin_lock_irq(&phba->hbalock); in lpfc_unregister_fcf_rescan()
6139 phba->fcf.fcf_flag &= ~FCF_INIT_DISC; in lpfc_unregister_fcf_rescan()
6140 spin_unlock_irq(&phba->hbalock); in lpfc_unregister_fcf_rescan()
6141 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY|LOG_MBOX, in lpfc_unregister_fcf_rescan()
6144 phba->pport->port_state); in lpfc_unregister_fcf_rescan()
6156 lpfc_unregister_fcf(struct lpfc_hba *phba) in lpfc_unregister_fcf() argument
6161 rc = lpfc_unregister_fcf_prep(phba); in lpfc_unregister_fcf()
6163 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY, in lpfc_unregister_fcf()
6170 rc = lpfc_sli4_unregister_fcf(phba); in lpfc_unregister_fcf()
6174 spin_lock_irq(&phba->hbalock); in lpfc_unregister_fcf()
6175 phba->fcf.fcf_flag &= ~FCF_REGISTERED; in lpfc_unregister_fcf()
6176 spin_unlock_irq(&phba->hbalock); in lpfc_unregister_fcf()
6188 lpfc_unregister_unused_fcf(struct lpfc_hba *phba) in lpfc_unregister_unused_fcf() argument
6195 spin_lock_irq(&phba->hbalock); in lpfc_unregister_unused_fcf()
6196 if (!(phba->hba_flag & HBA_FCOE_MODE) || in lpfc_unregister_unused_fcf()
6197 !(phba->fcf.fcf_flag & FCF_REGISTERED) || in lpfc_unregister_unused_fcf()
6198 !(phba->hba_flag & HBA_FIP_SUPPORT) || in lpfc_unregister_unused_fcf()
6199 (phba->fcf.fcf_flag & FCF_DISCOVERY) || in lpfc_unregister_unused_fcf()
6200 (phba->pport->port_state == LPFC_FLOGI)) { in lpfc_unregister_unused_fcf()
6201 spin_unlock_irq(&phba->hbalock); in lpfc_unregister_unused_fcf()
6204 spin_unlock_irq(&phba->hbalock); in lpfc_unregister_unused_fcf()
6206 if (lpfc_fcf_inuse(phba)) in lpfc_unregister_unused_fcf()
6209 lpfc_unregister_fcf_rescan(phba); in lpfc_unregister_unused_fcf()
6221 lpfc_read_fcf_conn_tbl(struct lpfc_hba *phba, in lpfc_read_fcf_conn_tbl() argument
6232 &phba->fcf_conn_rec_list, list) { in lpfc_read_fcf_conn_tbl()
6250 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, in lpfc_read_fcf_conn_tbl()
6259 &phba->fcf_conn_rec_list); in lpfc_read_fcf_conn_tbl()
6262 if (!list_empty(&phba->fcf_conn_rec_list)) { in lpfc_read_fcf_conn_tbl()
6264 list_for_each_entry(conn_entry, &phba->fcf_conn_rec_list, in lpfc_read_fcf_conn_tbl()
6267 lpfc_printf_log(phba, KERN_INFO, LOG_INIT, in lpfc_read_fcf_conn_tbl()
6304 lpfc_read_fcoe_param(struct lpfc_hba *phba, in lpfc_read_fcoe_param() argument
6320 phba->valid_vlan = 1; in lpfc_read_fcoe_param()
6321 phba->vlan_id = le16_to_cpu(fcoe_param->vlan_tag) & in lpfc_read_fcoe_param()
6325 phba->fc_map[0] = fcoe_param->fc_map[0]; in lpfc_read_fcoe_param()
6326 phba->fc_map[1] = fcoe_param->fc_map[1]; in lpfc_read_fcoe_param()
6327 phba->fc_map[2] = fcoe_param->fc_map[2]; in lpfc_read_fcoe_param()
6380 lpfc_parse_fcoe_conf(struct lpfc_hba *phba, in lpfc_parse_fcoe_conf() argument
6396 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, in lpfc_parse_fcoe_conf()
6405 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, in lpfc_parse_fcoe_conf()
6415 lpfc_read_fcoe_param(phba, rec_ptr); in lpfc_parse_fcoe_conf()
6421 lpfc_read_fcf_conn_tbl(phba, rec_ptr); in lpfc_parse_fcoe_conf()