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()
110 struct lpfc_hba *phba; in lpfc_dev_loss_tmo_callbk() local
121 phba = vport->phba; in lpfc_dev_loss_tmo_callbk()
175 spin_lock_irq(&phba->hbalock); in lpfc_dev_loss_tmo_callbk()
178 list_add_tail(&evtp->evt_listp, &phba->work_list); in lpfc_dev_loss_tmo_callbk()
179 lpfc_worker_wake_up(phba); in lpfc_dev_loss_tmo_callbk()
181 spin_unlock_irq(&phba->hbalock); in lpfc_dev_loss_tmo_callbk()
202 struct lpfc_hba *phba; in lpfc_dev_loss_tmo_handler() local
221 phba = vport->phba; in lpfc_dev_loss_tmo_handler()
223 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_dev_loss_tmo_handler()
224 fcf_inuse = lpfc_fcf_inuse(phba); in lpfc_dev_loss_tmo_handler()
249 &phba->sli.ring[phba->sli.fcp_ring], in lpfc_dev_loss_tmo_handler()
285 lpfc_sli_abort_iocb(vport, &phba->sli.ring[phba->sli.fcp_ring], in lpfc_dev_loss_tmo_handler()
339 lpfc_sli4_post_dev_loss_tmo_handler(struct lpfc_hba *phba, int fcf_inuse, in lpfc_sli4_post_dev_loss_tmo_handler() argument
348 if ((phba->hba_flag & HBA_FIP_SUPPORT) && !lpfc_fcf_inuse(phba)) { in lpfc_sli4_post_dev_loss_tmo_handler()
349 spin_lock_irq(&phba->hbalock); in lpfc_sli4_post_dev_loss_tmo_handler()
350 if (phba->fcf.fcf_flag & FCF_DISCOVERY) { in lpfc_sli4_post_dev_loss_tmo_handler()
351 if (phba->hba_flag & HBA_DEVLOSS_TMO) { in lpfc_sli4_post_dev_loss_tmo_handler()
352 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_post_dev_loss_tmo_handler()
355 phba->hba_flag |= HBA_DEVLOSS_TMO; in lpfc_sli4_post_dev_loss_tmo_handler()
356 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_post_dev_loss_tmo_handler()
360 if (phba->fcf.fcf_flag & FCF_REDISC_PROG) { in lpfc_sli4_post_dev_loss_tmo_handler()
361 spin_unlock_irq(&phba->hbalock); 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()
367 if (!(phba->hba_flag & (FCF_TS_INPROG | FCF_RR_INPROG))) { in lpfc_sli4_post_dev_loss_tmo_handler()
368 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_post_dev_loss_tmo_handler()
369 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_post_dev_loss_tmo_handler()
373 lpfc_unregister_fcf_rescan(phba); in lpfc_sli4_post_dev_loss_tmo_handler()
376 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_post_dev_loss_tmo_handler()
377 if (phba->hba_flag & FCF_TS_INPROG) in lpfc_sli4_post_dev_loss_tmo_handler()
378 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_post_dev_loss_tmo_handler()
380 if (phba->hba_flag & FCF_RR_INPROG) 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 lpfc_unregister_unused_fcf(phba); in lpfc_sli4_post_dev_loss_tmo_handler()
399 lpfc_alloc_fast_evt(struct lpfc_hba *phba) { in lpfc_alloc_fast_evt() argument
403 if (atomic_read(&phba->fast_event_count) > LPFC_MAX_EVT_COUNT) in lpfc_alloc_fast_evt()
409 atomic_inc(&phba->fast_event_count); in lpfc_alloc_fast_evt()
425 lpfc_free_fast_evt(struct lpfc_hba *phba, in lpfc_free_fast_evt() argument
428 atomic_dec(&phba->fast_event_count); in lpfc_free_fast_evt()
442 lpfc_send_fastpath_evt(struct lpfc_hba *phba, in lpfc_send_fastpath_evt() argument
468 lpfc_free_fast_evt(phba, fast_evt_data); in lpfc_send_fastpath_evt()
489 lpfc_free_fast_evt(phba, fast_evt_data); in lpfc_send_fastpath_evt()
493 lpfc_free_fast_evt(phba, fast_evt_data); in lpfc_send_fastpath_evt()
503 lpfc_free_fast_evt(phba, fast_evt_data); in lpfc_send_fastpath_evt()
508 lpfc_work_list_done(struct lpfc_hba *phba) in lpfc_work_list_done() argument
516 spin_lock_irq(&phba->hbalock); in lpfc_work_list_done()
517 while (!list_empty(&phba->work_list)) { in lpfc_work_list_done()
518 list_remove_head((&phba->work_list), evtp, typeof(*evtp), in lpfc_work_list_done()
520 spin_unlock_irq(&phba->hbalock); in lpfc_work_list_done()
541 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_work_list_done()
542 lpfc_sli4_post_dev_loss_tmo_handler(phba, in lpfc_work_list_done()
547 if (phba->link_state < LPFC_LINK_DOWN) in lpfc_work_list_done()
548 *(int *) (evtp->evt_arg1) = lpfc_online(phba); in lpfc_work_list_done()
554 if (phba->link_state >= LPFC_LINK_DOWN) in lpfc_work_list_done()
555 lpfc_offline_prep(phba, LPFC_MBX_WAIT); in lpfc_work_list_done()
560 lpfc_offline(phba); in lpfc_work_list_done()
561 lpfc_sli_brdrestart(phba); in lpfc_work_list_done()
563 lpfc_sli_brdready(phba, HS_FFRDY | HS_MBRDY); in lpfc_work_list_done()
564 lpfc_unblock_mgmt_io(phba); in lpfc_work_list_done()
568 lpfc_offline(phba); in lpfc_work_list_done()
569 lpfc_reset_barrier(phba); in lpfc_work_list_done()
570 lpfc_sli_brdreset(phba); in lpfc_work_list_done()
571 lpfc_hba_down_post(phba); in lpfc_work_list_done()
573 lpfc_sli_brdready(phba, HS_MBRDY); in lpfc_work_list_done()
574 lpfc_unblock_mgmt_io(phba); in lpfc_work_list_done()
578 lpfc_offline(phba); in lpfc_work_list_done()
580 = (phba->pport->stopped) in lpfc_work_list_done()
581 ? 0 : lpfc_sli_brdkill(phba); in lpfc_work_list_done()
582 lpfc_unblock_mgmt_io(phba); in lpfc_work_list_done()
586 lpfc_send_fastpath_evt(phba, evtp); in lpfc_work_list_done()
590 if (!(phba->pport->load_flag & FC_UNLOADING)) in lpfc_work_list_done()
591 lpfc_reset_hba(phba); in lpfc_work_list_done()
596 spin_lock_irq(&phba->hbalock); in lpfc_work_list_done()
598 spin_unlock_irq(&phba->hbalock); in lpfc_work_list_done()
603 lpfc_work_done(struct lpfc_hba *phba) in lpfc_work_done() argument
611 spin_lock_irq(&phba->hbalock); in lpfc_work_done()
612 ha_copy = phba->work_ha; in lpfc_work_done()
613 phba->work_ha = 0; in lpfc_work_done()
614 spin_unlock_irq(&phba->hbalock); in lpfc_work_done()
617 if (phba->pci_dev_grp == LPFC_PCI_DEV_OC) in lpfc_work_done()
618 lpfc_sli4_post_async_mbox(phba); in lpfc_work_done()
622 lpfc_handle_eratt(phba); in lpfc_work_done()
625 lpfc_sli_handle_mb_event(phba); in lpfc_work_done()
628 lpfc_handle_latt(phba); in lpfc_work_done()
631 if (phba->pci_dev_grp == LPFC_PCI_DEV_OC) { in lpfc_work_done()
632 if (phba->hba_flag & HBA_RRQ_ACTIVE) in lpfc_work_done()
633 lpfc_handle_rrq_active(phba); in lpfc_work_done()
634 if (phba->hba_flag & FCP_XRI_ABORT_EVENT) in lpfc_work_done()
635 lpfc_sli4_fcp_xri_abort_event_proc(phba); in lpfc_work_done()
636 if (phba->hba_flag & ELS_XRI_ABORT_EVENT) in lpfc_work_done()
637 lpfc_sli4_els_xri_abort_event_proc(phba); in lpfc_work_done()
638 if (phba->hba_flag & ASYNC_EVENT) in lpfc_work_done()
639 lpfc_sli4_async_event_proc(phba); in lpfc_work_done()
640 if (phba->hba_flag & HBA_POST_RECEIVE_BUFFER) { in lpfc_work_done()
641 spin_lock_irq(&phba->hbalock); in lpfc_work_done()
642 phba->hba_flag &= ~HBA_POST_RECEIVE_BUFFER; in lpfc_work_done()
643 spin_unlock_irq(&phba->hbalock); in lpfc_work_done()
644 lpfc_sli_hbqbuf_add_hbqs(phba, LPFC_ELS_HBQ); in lpfc_work_done()
646 if (phba->fcf.fcf_flag & FCF_REDISC_EVT) in lpfc_work_done()
647 lpfc_sli4_fcf_redisc_event_proc(phba); in lpfc_work_done()
650 vports = lpfc_create_vport_work_array(phba); in lpfc_work_done()
652 for (i = 0; i <= phba->max_vports; i++) { in lpfc_work_done()
658 vport = phba->pport; in lpfc_work_done()
672 lpfc_hb_timeout_handler(phba); in lpfc_work_done()
674 lpfc_mbox_timeout_handler(phba); in lpfc_work_done()
676 lpfc_unblock_fabric_iocbs(phba); in lpfc_work_done()
680 lpfc_ramp_down_queue_handler(phba); in lpfc_work_done()
684 lpfc_destroy_vport_work_array(phba, vports); in lpfc_work_done()
686 pring = &phba->sli.ring[LPFC_ELS_RING]; in lpfc_work_done()
691 (phba->hba_flag & HBA_SP_QUEUE_EVT)) { in lpfc_work_done()
695 set_bit(LPFC_DATA_READY, &phba->data_flags); in lpfc_work_done()
697 if (phba->link_state >= LPFC_LINK_UP) { in lpfc_work_done()
699 lpfc_sli_handle_slow_ring_event(phba, pring, in lpfc_work_done()
704 if ((phba->sli_rev == LPFC_SLI_REV4) && in lpfc_work_done()
706 lpfc_drain_txq(phba); in lpfc_work_done()
710 if (phba->sli_rev <= LPFC_SLI_REV3) { in lpfc_work_done()
711 spin_lock_irq(&phba->hbalock); in lpfc_work_done()
712 control = readl(phba->HCregaddr); in lpfc_work_done()
714 lpfc_debugfs_slow_ring_trc(phba, in lpfc_work_done()
719 writel(control, phba->HCregaddr); in lpfc_work_done()
720 readl(phba->HCregaddr); /* flush */ in lpfc_work_done()
722 lpfc_debugfs_slow_ring_trc(phba, in lpfc_work_done()
726 spin_unlock_irq(&phba->hbalock); in lpfc_work_done()
729 lpfc_work_list_done(phba); in lpfc_work_done()
735 struct lpfc_hba *phba = p; in lpfc_do_work() local
740 phba->data_flags = 0; in lpfc_do_work()
744 rc = wait_event_interruptible(phba->work_waitq, in lpfc_do_work()
746 &phba->data_flags) in lpfc_do_work()
750 lpfc_printf_log(phba, KERN_ERR, LOG_ELS, in lpfc_do_work()
756 lpfc_work_done(phba); in lpfc_do_work()
758 phba->worker_thread = NULL; in lpfc_do_work()
759 lpfc_printf_log(phba, KERN_INFO, LOG_ELS, in lpfc_do_work()
770 lpfc_workq_post_event(struct lpfc_hba *phba, void *arg1, void *arg2, in lpfc_workq_post_event() argument
788 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_workq_post_event()
789 list_add_tail(&evtp->evt_listp, &phba->work_list); in lpfc_workq_post_event()
790 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_workq_post_event()
792 lpfc_worker_wake_up(phba); in lpfc_workq_post_event()
801 struct lpfc_hba *phba = vport->phba; in lpfc_cleanup_rpis() local
809 if ((phba->sli3_options & LPFC_SLI3_VPORT_TEARDOWN) || in lpfc_cleanup_rpis()
815 if ((phba->sli_rev < LPFC_SLI_REV4) && in lpfc_cleanup_rpis()
823 if (phba->sli3_options & LPFC_SLI3_VPORT_TEARDOWN) { in lpfc_cleanup_rpis()
824 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_cleanup_rpis()
874 lpfc_linkdown(struct lpfc_hba *phba) in lpfc_linkdown() argument
876 struct lpfc_vport *vport = phba->pport; in lpfc_linkdown()
882 if (phba->link_state == LPFC_LINK_DOWN) in lpfc_linkdown()
886 lpfc_scsi_dev_block(phba); in lpfc_linkdown()
888 spin_lock_irq(&phba->hbalock); in lpfc_linkdown()
889 phba->fcf.fcf_flag &= ~(FCF_AVAILABLE | FCF_SCAN_DONE); in lpfc_linkdown()
890 spin_unlock_irq(&phba->hbalock); in lpfc_linkdown()
891 if (phba->link_state > LPFC_LINK_DOWN) { in lpfc_linkdown()
892 phba->link_state = LPFC_LINK_DOWN; in lpfc_linkdown()
894 phba->pport->fc_flag &= ~FC_LBIT; in lpfc_linkdown()
897 vports = lpfc_create_vport_work_array(phba); in lpfc_linkdown()
899 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) { in lpfc_linkdown()
903 lpfc_destroy_vport_work_array(phba, vports); in lpfc_linkdown()
905 mb = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_linkdown()
907 lpfc_unreg_did(phba, 0xffff, LPFC_UNREG_ALL_DFLT_RPIS, mb); in lpfc_linkdown()
910 if (lpfc_sli_issue_mbox(phba, mb, MBX_NOWAIT) in lpfc_linkdown()
912 mempool_free(mb, phba->mbox_mem_pool); in lpfc_linkdown()
917 if (phba->pport->fc_flag & FC_PT2PT) { in lpfc_linkdown()
918 phba->pport->fc_myDID = 0; in lpfc_linkdown()
919 mb = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_linkdown()
921 lpfc_config_link(phba, mb); in lpfc_linkdown()
924 if (lpfc_sli_issue_mbox(phba, mb, MBX_NOWAIT) in lpfc_linkdown()
926 mempool_free(mb, phba->mbox_mem_pool); in lpfc_linkdown()
930 phba->pport->fc_flag &= ~(FC_PT2PT | FC_PT2PT_PLOGI); in lpfc_linkdown()
967 struct lpfc_hba *phba = vport->phba; in lpfc_linkup_port() local
974 phba->fc_topology, phba->fc_linkspeed, phba->link_flag); in lpfc_linkup_port()
977 if (!(phba->sli3_options & LPFC_SLI3_NPIV_ENABLED) && in lpfc_linkup_port()
978 (vport != phba->pport)) in lpfc_linkup_port()
996 lpfc_linkup(struct lpfc_hba *phba) in lpfc_linkup() argument
1001 phba->link_state = LPFC_LINK_UP; in lpfc_linkup()
1004 clear_bit(FABRIC_COMANDS_BLOCKED, &phba->bit_flags); in lpfc_linkup()
1005 del_timer_sync(&phba->fabric_block_timer); in lpfc_linkup()
1007 vports = lpfc_create_vport_work_array(phba); in lpfc_linkup()
1009 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) in lpfc_linkup()
1011 lpfc_destroy_vport_work_array(phba, vports); in lpfc_linkup()
1023 lpfc_mbx_cmpl_clear_la(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_clear_la() argument
1027 struct lpfc_sli *psli = &phba->sli; in lpfc_mbx_cmpl_clear_la()
1043 phba->link_state = LPFC_HBA_ERROR; in lpfc_mbx_cmpl_clear_la()
1048 phba->link_state = LPFC_HBA_READY; in lpfc_mbx_cmpl_clear_la()
1050 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_clear_la()
1052 control = readl(phba->HCregaddr); in lpfc_mbx_cmpl_clear_la()
1054 writel(control, phba->HCregaddr); in lpfc_mbx_cmpl_clear_la()
1055 readl(phba->HCregaddr); /* flush */ in lpfc_mbx_cmpl_clear_la()
1056 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_clear_la()
1057 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_clear_la()
1064 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_clear_la()
1074 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_clear_la()
1076 control = readl(phba->HCregaddr); in lpfc_mbx_cmpl_clear_la()
1078 writel(control, phba->HCregaddr); in lpfc_mbx_cmpl_clear_la()
1079 readl(phba->HCregaddr); /* flush */ in lpfc_mbx_cmpl_clear_la()
1080 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_clear_la()
1087 lpfc_mbx_cmpl_local_config_link(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_local_config_link() argument
1094 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_local_config_link()
1097 if ((phba->sli_rev == LPFC_SLI_REV4) && in lpfc_mbx_cmpl_local_config_link()
1098 !(phba->hba_flag & HBA_FCOE_MODE) && in lpfc_mbx_cmpl_local_config_link()
1099 (phba->link_flag & LS_LOOPBACK_MODE)) in lpfc_mbx_cmpl_local_config_link()
1102 if (phba->fc_topology == LPFC_TOPOLOGY_LOOP && in lpfc_mbx_cmpl_local_config_link()
1125 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_local_config_link()
1127 lpfc_linkdown(phba); in lpfc_mbx_cmpl_local_config_link()
1133 lpfc_issue_clear_la(phba, vport); in lpfc_mbx_cmpl_local_config_link()
1146 lpfc_sli4_clear_fcf_rr_bmask(struct lpfc_hba *phba) in lpfc_sli4_clear_fcf_rr_bmask() argument
1150 memset(phba->fcf.fcf_rr_bmask, 0, sizeof(*phba->fcf.fcf_rr_bmask)); in lpfc_sli4_clear_fcf_rr_bmask()
1151 spin_lock_irq(&phba->hbalock); in lpfc_sli4_clear_fcf_rr_bmask()
1153 &phba->fcf.fcf_pri_list, list) { in lpfc_sli4_clear_fcf_rr_bmask()
1157 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_clear_fcf_rr_bmask()
1160 lpfc_mbx_cmpl_reg_fcfi(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_mbx_cmpl_reg_fcfi() argument
1173 phba->fcf.fcfi = bf_get(lpfc_reg_fcfi_fcfi, &mboxq->u.mqe.un.reg_fcfi); in lpfc_mbx_cmpl_reg_fcfi()
1175 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_reg_fcfi()
1176 phba->fcf.fcf_flag |= FCF_REGISTERED; in lpfc_mbx_cmpl_reg_fcfi()
1177 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_reg_fcfi()
1180 if ((!(phba->hba_flag & FCF_RR_INPROG)) && in lpfc_mbx_cmpl_reg_fcfi()
1181 lpfc_check_pending_fcoe_event(phba, LPFC_UNREG_FCF)) in lpfc_mbx_cmpl_reg_fcfi()
1185 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_reg_fcfi()
1186 phba->fcf.fcf_flag |= (FCF_SCAN_DONE | FCF_IN_USE); in lpfc_mbx_cmpl_reg_fcfi()
1187 phba->hba_flag &= ~FCF_TS_INPROG; in lpfc_mbx_cmpl_reg_fcfi()
1189 phba->hba_flag |= FCF_RR_INPROG; in lpfc_mbx_cmpl_reg_fcfi()
1190 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_reg_fcfi()
1194 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_reg_fcfi()
1198 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_reg_fcfi()
1199 phba->hba_flag &= ~FCF_RR_INPROG; in lpfc_mbx_cmpl_reg_fcfi()
1200 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_reg_fcfi()
1202 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_mbx_cmpl_reg_fcfi()
1311 __lpfc_update_fcf_record_pri(struct lpfc_hba *phba, uint16_t fcf_index, in __lpfc_update_fcf_record_pri() argument
1317 fcf_pri = &phba->fcf.fcf_pri[fcf_index]; in __lpfc_update_fcf_record_pri()
1397 __lpfc_update_fcf_record(struct lpfc_hba *phba, struct lpfc_fcf_rec *fcf_rec, in __lpfc_update_fcf_record() argument
1407 __lpfc_update_fcf_record_pri(phba, in __lpfc_update_fcf_record()
1420 lpfc_register_fcf(struct lpfc_hba *phba) in lpfc_register_fcf() argument
1425 spin_lock_irq(&phba->hbalock); in lpfc_register_fcf()
1427 if (!(phba->fcf.fcf_flag & FCF_AVAILABLE)) { in lpfc_register_fcf()
1428 phba->hba_flag &= ~(FCF_TS_INPROG | FCF_RR_INPROG); in lpfc_register_fcf()
1429 spin_unlock_irq(&phba->hbalock); in lpfc_register_fcf()
1434 if (phba->fcf.fcf_flag & FCF_REGISTERED) { in lpfc_register_fcf()
1435 phba->fcf.fcf_flag |= (FCF_SCAN_DONE | FCF_IN_USE); in lpfc_register_fcf()
1436 phba->hba_flag &= ~FCF_TS_INPROG; in lpfc_register_fcf()
1437 if (phba->pport->port_state != LPFC_FLOGI && in lpfc_register_fcf()
1438 phba->pport->fc_flag & FC_FABRIC) { in lpfc_register_fcf()
1439 phba->hba_flag |= FCF_RR_INPROG; in lpfc_register_fcf()
1440 spin_unlock_irq(&phba->hbalock); in lpfc_register_fcf()
1441 lpfc_initial_flogi(phba->pport); in lpfc_register_fcf()
1444 spin_unlock_irq(&phba->hbalock); in lpfc_register_fcf()
1447 spin_unlock_irq(&phba->hbalock); in lpfc_register_fcf()
1449 fcf_mbxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_register_fcf()
1451 spin_lock_irq(&phba->hbalock); in lpfc_register_fcf()
1452 phba->hba_flag &= ~(FCF_TS_INPROG | FCF_RR_INPROG); in lpfc_register_fcf()
1453 spin_unlock_irq(&phba->hbalock); in lpfc_register_fcf()
1457 lpfc_reg_fcfi(phba, fcf_mbxq); in lpfc_register_fcf()
1458 fcf_mbxq->vport = phba->pport; in lpfc_register_fcf()
1460 rc = lpfc_sli_issue_mbox(phba, fcf_mbxq, MBX_NOWAIT); in lpfc_register_fcf()
1462 spin_lock_irq(&phba->hbalock); in lpfc_register_fcf()
1463 phba->hba_flag &= ~(FCF_TS_INPROG | FCF_RR_INPROG); in lpfc_register_fcf()
1464 spin_unlock_irq(&phba->hbalock); in lpfc_register_fcf()
1465 mempool_free(fcf_mbxq, phba->mbox_mem_pool); in lpfc_register_fcf()
1490 lpfc_match_fcf_conn_list(struct lpfc_hba *phba, in lpfc_match_fcf_conn_list() argument
1517 if (!(phba->hba_flag & HBA_FIP_SUPPORT)) { in lpfc_match_fcf_conn_list()
1521 if (phba->valid_vlan) in lpfc_match_fcf_conn_list()
1522 *vlan_id = phba->vlan_id; in lpfc_match_fcf_conn_list()
1532 if (list_empty(&phba->fcf_conn_rec_list)) { in lpfc_match_fcf_conn_list()
1553 &phba->fcf_conn_rec_list, list) { in lpfc_match_fcf_conn_list()
1675 lpfc_check_pending_fcoe_event(struct lpfc_hba *phba, uint8_t unreg_fcf) in lpfc_check_pending_fcoe_event() argument
1681 if ((phba->link_state >= LPFC_LINK_UP) && in lpfc_check_pending_fcoe_event()
1682 (phba->fcoe_eventtag == phba->fcoe_eventtag_at_fcf_scan)) in lpfc_check_pending_fcoe_event()
1685 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_check_pending_fcoe_event()
1689 phba->link_state, phba->fcoe_eventtag_at_fcf_scan, in lpfc_check_pending_fcoe_event()
1690 phba->fcoe_eventtag); in lpfc_check_pending_fcoe_event()
1692 spin_lock_irq(&phba->hbalock); in lpfc_check_pending_fcoe_event()
1693 phba->fcf.fcf_flag &= ~FCF_AVAILABLE; in lpfc_check_pending_fcoe_event()
1694 spin_unlock_irq(&phba->hbalock); in lpfc_check_pending_fcoe_event()
1696 if (phba->link_state >= LPFC_LINK_UP) { in lpfc_check_pending_fcoe_event()
1697 lpfc_printf_log(phba, KERN_INFO, LOG_FIP | LOG_DISCOVERY, in lpfc_check_pending_fcoe_event()
1701 phba->fcoe_eventtag_at_fcf_scan, in lpfc_check_pending_fcoe_event()
1702 phba->fcoe_eventtag); in lpfc_check_pending_fcoe_event()
1703 lpfc_sli4_fcf_scan_read_fcf_rec(phba, LPFC_FCOE_FCF_GET_FIRST); in lpfc_check_pending_fcoe_event()
1709 lpfc_printf_log(phba, KERN_INFO, LOG_FIP | LOG_DISCOVERY, in lpfc_check_pending_fcoe_event()
1711 "state change (x%x)\n", phba->link_state); in lpfc_check_pending_fcoe_event()
1712 spin_lock_irq(&phba->hbalock); in lpfc_check_pending_fcoe_event()
1713 phba->hba_flag &= ~(FCF_TS_INPROG | FCF_RR_INPROG); in lpfc_check_pending_fcoe_event()
1714 phba->fcf.fcf_flag &= ~(FCF_REDISC_FOV | FCF_DISCOVERY); in lpfc_check_pending_fcoe_event()
1715 spin_unlock_irq(&phba->hbalock); in lpfc_check_pending_fcoe_event()
1720 spin_lock_irq(&phba->hbalock); in lpfc_check_pending_fcoe_event()
1721 phba->fcf.fcf_flag &= ~FCF_REGISTERED; in lpfc_check_pending_fcoe_event()
1722 spin_unlock_irq(&phba->hbalock); in lpfc_check_pending_fcoe_event()
1723 lpfc_sli4_unregister_fcf(phba); in lpfc_check_pending_fcoe_event()
1744 lpfc_sli4_new_fcf_random_select(struct lpfc_hba *phba, uint32_t fcf_cnt) in lpfc_sli4_new_fcf_random_select() argument
1772 lpfc_sli4_fcf_rec_mbox_parse(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq, in lpfc_sli4_fcf_rec_mbox_parse() argument
1787 lpfc_printf_log(phba, KERN_ERR, LOG_MBOX, in lpfc_sli4_fcf_rec_mbox_parse()
1798 if_type = bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf); in lpfc_sli4_fcf_rec_mbox_parse()
1803 lpfc_printf_log(phba, KERN_ERR, LOG_FIP, in lpfc_sli4_fcf_rec_mbox_parse()
1807 lpfc_printf_log(phba, KERN_ERR, LOG_FIP, in lpfc_sli4_fcf_rec_mbox_parse()
1840 lpfc_sli4_log_fcf_record_info(struct lpfc_hba *phba, in lpfc_sli4_log_fcf_record_info() argument
1845 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_log_fcf_record_info()
1904 lpfc_sli4_fcf_record_match(struct lpfc_hba *phba, in lpfc_sli4_fcf_record_match() argument
1936 struct lpfc_hba *phba = vport->phba; in lpfc_sli4_fcf_rr_next_proc() local
1940 spin_lock_irq(&phba->hbalock); in lpfc_sli4_fcf_rr_next_proc()
1941 if (phba->hba_flag & HBA_DEVLOSS_TMO) { in lpfc_sli4_fcf_rr_next_proc()
1942 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_fcf_rr_next_proc()
1943 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_fcf_rr_next_proc()
1947 phba->fcf.current_rec.fcf_indx); in lpfc_sli4_fcf_rr_next_proc()
1948 lpfc_unregister_fcf_rescan(phba); in lpfc_sli4_fcf_rr_next_proc()
1952 phba->hba_flag &= ~FCF_RR_INPROG; in lpfc_sli4_fcf_rr_next_proc()
1954 phba->fcf.fcf_flag &= ~(FCF_AVAILABLE | FCF_SCAN_DONE); in lpfc_sli4_fcf_rr_next_proc()
1955 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_fcf_rr_next_proc()
1956 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_fcf_rr_next_proc()
1959 phba->pport->port_state, LPFC_VPORT_UNKNOWN); in lpfc_sli4_fcf_rr_next_proc()
1960 phba->pport->port_state = LPFC_VPORT_UNKNOWN; in lpfc_sli4_fcf_rr_next_proc()
1963 lpfc_printf_log(phba, KERN_INFO, LOG_FIP | LOG_ELS, in lpfc_sli4_fcf_rr_next_proc()
1966 rc = lpfc_sli4_fcf_rr_read_fcf_rec(phba, fcf_index); in lpfc_sli4_fcf_rr_next_proc()
1968 lpfc_printf_log(phba, KERN_WARNING, LOG_FIP | LOG_ELS, in lpfc_sli4_fcf_rr_next_proc()
1971 rc, phba->fcf.current_rec.fcf_indx); in lpfc_sli4_fcf_rr_next_proc()
1991 static void lpfc_sli4_fcf_pri_list_del(struct lpfc_hba *phba, in lpfc_sli4_fcf_pri_list_del() argument
1996 new_fcf_pri = &phba->fcf.fcf_pri[fcf_index]; in lpfc_sli4_fcf_pri_list_del()
1997 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_fcf_pri_list_del()
2001 spin_lock_irq(&phba->hbalock); in lpfc_sli4_fcf_pri_list_del()
2003 if (phba->fcf.current_rec.priority == in lpfc_sli4_fcf_pri_list_del()
2005 phba->fcf.eligible_fcf_cnt--; in lpfc_sli4_fcf_pri_list_del()
2009 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_fcf_pri_list_del()
2023 lpfc_sli4_set_fcf_flogi_fail(struct lpfc_hba *phba, uint16_t fcf_index) in lpfc_sli4_set_fcf_flogi_fail() argument
2026 new_fcf_pri = &phba->fcf.fcf_pri[fcf_index]; in lpfc_sli4_set_fcf_flogi_fail()
2027 spin_lock_irq(&phba->hbalock); in lpfc_sli4_set_fcf_flogi_fail()
2029 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_set_fcf_flogi_fail()
2047 static int lpfc_sli4_fcf_pri_list_add(struct lpfc_hba *phba, in lpfc_sli4_fcf_pri_list_add() argument
2058 new_fcf_pri = &phba->fcf.fcf_pri[fcf_index]; in lpfc_sli4_fcf_pri_list_add()
2059 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_sli4_fcf_pri_list_add()
2063 spin_lock_irq(&phba->hbalock); in lpfc_sli4_fcf_pri_list_add()
2068 if (list_empty(&phba->fcf.fcf_pri_list)) { in lpfc_sli4_fcf_pri_list_add()
2069 list_add(&new_fcf_pri->list, &phba->fcf.fcf_pri_list); in lpfc_sli4_fcf_pri_list_add()
2070 ret = lpfc_sli4_fcf_rr_index_set(phba, in lpfc_sli4_fcf_pri_list_add()
2075 last_index = find_first_bit(phba->fcf.fcf_rr_bmask, in lpfc_sli4_fcf_pri_list_add()
2081 current_fcf_pri = phba->fcf.fcf_pri[last_index].fcf_rec.priority; in lpfc_sli4_fcf_pri_list_add()
2083 list_add(&new_fcf_pri->list, &phba->fcf.fcf_pri_list); in lpfc_sli4_fcf_pri_list_add()
2085 memset(phba->fcf.fcf_rr_bmask, 0, in lpfc_sli4_fcf_pri_list_add()
2086 sizeof(*phba->fcf.fcf_rr_bmask)); in lpfc_sli4_fcf_pri_list_add()
2088 phba->fcf.eligible_fcf_cnt = 1; in lpfc_sli4_fcf_pri_list_add()
2091 phba->fcf.eligible_fcf_cnt++; in lpfc_sli4_fcf_pri_list_add()
2092 ret = lpfc_sli4_fcf_rr_index_set(phba, in lpfc_sli4_fcf_pri_list_add()
2098 &phba->fcf.fcf_pri_list, list) { in lpfc_sli4_fcf_pri_list_add()
2101 if (fcf_pri->list.prev == &phba->fcf.fcf_pri_list) in lpfc_sli4_fcf_pri_list_add()
2103 &phba->fcf.fcf_pri_list); in lpfc_sli4_fcf_pri_list_add()
2110 } else if (fcf_pri->list.next == &phba->fcf.fcf_pri_list in lpfc_sli4_fcf_pri_list_add()
2125 spin_unlock_irq(&phba->hbalock); in lpfc_sli4_fcf_pri_list_add()
2145 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
2156 if (lpfc_check_pending_fcoe_event(phba, LPFC_SKIP_UNREG_FCF)) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2157 lpfc_sli4_mbox_cmd_free(phba, mboxq); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2162 new_fcf_record = lpfc_sli4_fcf_rec_mbox_parse(phba, mboxq, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2165 lpfc_printf_log(phba, KERN_ERR, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2169 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2170 phba->hba_flag &= ~FCF_TS_INPROG; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2171 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2172 lpfc_sli4_mbox_cmd_free(phba, mboxq); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2177 rc = lpfc_match_fcf_conn_list(phba, new_fcf_record, &boot_flag, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2181 lpfc_sli4_log_fcf_record_info(phba, new_fcf_record, vlan_id, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2190 lpfc_sli4_fcf_pri_list_del(phba, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2193 lpfc_printf_log(phba, KERN_WARNING, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2204 if ((phba->fcf.fcf_flag & FCF_IN_USE) && in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2205 lpfc_sli4_fcf_record_match(phba, &phba->fcf.current_rec, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2208 phba->fcf.current_rec.fcf_indx) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2209 lpfc_printf_log(phba, KERN_ERR, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2214 phba->fcf.current_rec.fcf_indx); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2223 if (!(phba->fcf.fcf_flag & FCF_REDISC_PEND) && in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2224 !(phba->fcf.fcf_flag & FCF_REDISC_FOV)) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2225 lpfc_printf_log(phba, KERN_WARNING, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2229 phba->fcf.current_rec.fcf_indx); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2230 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2231 phba->fcf.fcf_flag |= FCF_REDISC_FOV; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2232 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2233 lpfc_sli4_mbox_cmd_free(phba, mboxq); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2234 lpfc_sli4_fcf_scan_read_fcf_rec(phba, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2242 rc = lpfc_sli4_fcf_pri_list_add(phba, fcf_index, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2254 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2255 if (phba->fcf.fcf_flag & FCF_IN_USE) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2256 if (phba->cfg_fcf_failover_policy == LPFC_FCF_FOV && in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2257 lpfc_sli4_fcf_record_match(phba, &phba->fcf.current_rec, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2260 phba->fcf.current_rec.fcf_indx) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2261 phba->fcf.fcf_flag |= FCF_AVAILABLE; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2262 if (phba->fcf.fcf_flag & FCF_REDISC_PEND) in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2265 phba); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2266 else if (phba->fcf.fcf_flag & FCF_REDISC_FOV) in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2268 phba->fcf.fcf_flag &= ~FCF_REDISC_FOV; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2269 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2270 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2274 phba->fcf.current_rec.fcf_indx, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2275 phba->pport->port_state, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2276 phba->pport->fc_flag); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2279 lpfc_printf_log(phba, KERN_ERR, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2284 phba->fcf.current_rec.fcf_indx); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2293 if (!(phba->fcf.fcf_flag & FCF_REDISC_FOV)) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2294 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2302 if (phba->fcf.fcf_flag & FCF_REDISC_FOV) in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2303 fcf_rec = &phba->fcf.failover_rec; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2305 fcf_rec = &phba->fcf.current_rec; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2307 if (phba->fcf.fcf_flag & FCF_AVAILABLE) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2315 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2321 __lpfc_update_fcf_record(phba, fcf_rec, new_fcf_record, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2323 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2332 spin_unlock_irq(&phba->hbalock); 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()
2350 phba->fcf.eligible_fcf_cnt = 1; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2353 phba->fcf.eligible_fcf_cnt++; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2354 select_new_fcf = lpfc_sli4_new_fcf_random_select(phba, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2355 phba->fcf.eligible_fcf_cnt); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2357 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2364 __lpfc_update_fcf_record(phba, fcf_rec, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2369 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2377 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2382 __lpfc_update_fcf_record(phba, fcf_rec, new_fcf_record, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2385 phba->fcf.fcf_flag |= FCF_AVAILABLE; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2387 phba->fcf.eligible_fcf_cnt = 1; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2389 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2393 lpfc_sli4_mbox_cmd_free(phba, mboxq); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2395 if (phba->fcf.fcf_flag & FCF_REDISC_FOV) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2404 if (!(phba->fcf.failover_rec.flag & RECORD_VALID)) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2405 lpfc_printf_log(phba, KERN_WARNING, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2408 phba->fcoe_eventtag_at_fcf_scan, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2411 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2412 if (phba->hba_flag & HBA_DEVLOSS_TMO) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2413 phba->hba_flag &= ~FCF_TS_INPROG; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2414 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2416 lpfc_printf_log(phba, KERN_INFO, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2421 lpfc_unregister_fcf_rescan(phba); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2427 phba->hba_flag &= ~FCF_TS_INPROG; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2428 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2441 lpfc_unregister_fcf(phba); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2444 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2447 phba->fcf.current_rec.fcf_indx, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2448 phba->fcf.failover_rec.fcf_indx); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2449 memcpy(&phba->fcf.current_rec, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2450 &phba->fcf.failover_rec, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2457 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2458 phba->fcf.fcf_flag &= ~FCF_REDISC_FOV; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2459 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2461 lpfc_register_fcf(phba); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2467 if ((phba->fcf.fcf_flag & FCF_REDISC_EVT) || in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2468 (phba->fcf.fcf_flag & FCF_REDISC_PEND)) in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2471 if (phba->cfg_fcf_failover_policy == LPFC_FCF_FOV && in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2472 phba->fcf.fcf_flag & FCF_IN_USE) { in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2479 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2483 phba->fcf.current_rec.fcf_indx); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2484 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2485 phba->fcf.fcf_flag |= FCF_REDISC_FOV; in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2486 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2487 lpfc_sli4_fcf_scan_read_fcf_rec(phba, in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2492 lpfc_register_fcf(phba); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2495 lpfc_sli4_fcf_scan_read_fcf_rec(phba, next_fcf_index); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2499 lpfc_sli4_mbox_cmd_free(phba, mboxq); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2500 lpfc_register_fcf(phba); in lpfc_mbx_cmpl_fcf_scan_read_fcf_rec()
2521 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
2531 if (phba->link_state < LPFC_LINK_UP) { in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2532 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2533 phba->fcf.fcf_flag &= ~FCF_DISCOVERY; in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2534 phba->hba_flag &= ~FCF_RR_INPROG; in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2535 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2540 new_fcf_record = lpfc_sli4_fcf_rec_mbox_parse(phba, mboxq, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2543 lpfc_printf_log(phba, KERN_WARNING, LOG_FIP, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2546 "hba_flg x%x fcf_flg x%x\n", phba->hba_flag, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2547 phba->fcf.fcf_flag); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2548 lpfc_unregister_fcf_rescan(phba); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2553 rc = lpfc_match_fcf_conn_list(phba, new_fcf_record, &boot_flag, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2557 lpfc_sli4_log_fcf_record_info(phba, new_fcf_record, vlan_id, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2562 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2566 lpfc_sli4_fcf_rr_index_clear(phba, fcf_index); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2568 fcf_index = lpfc_sli4_fcf_rr_next_index_get(phba); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2569 rc = lpfc_sli4_fcf_rr_next_proc(phba->pport, fcf_index); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2575 if (fcf_index == phba->fcf.current_rec.fcf_indx) { in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2576 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2579 phba->fcf.current_rec.fcf_indx, fcf_index); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2582 lpfc_issue_init_vfi(phba->pport); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2587 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2589 phba->fcf.failover_rec.fcf_indx, fcf_index); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2590 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2591 __lpfc_update_fcf_record(phba, &phba->fcf.failover_rec, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2594 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2596 current_fcf_index = phba->fcf.current_rec.fcf_indx; in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2599 lpfc_unregister_fcf(phba); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2602 memcpy(&phba->fcf.current_rec, &phba->fcf.failover_rec, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2605 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2610 lpfc_register_fcf(phba); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2612 lpfc_sli4_mbox_cmd_free(phba, mboxq); in lpfc_mbx_cmpl_fcf_rr_read_fcf_rec()
2627 lpfc_mbx_cmpl_read_fcf_rec(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_mbx_cmpl_read_fcf_rec() argument
2636 if (phba->link_state < LPFC_LINK_UP) in lpfc_mbx_cmpl_read_fcf_rec()
2640 if (!(phba->fcf.fcf_flag & FCF_DISCOVERY)) in lpfc_mbx_cmpl_read_fcf_rec()
2644 new_fcf_record = lpfc_sli4_fcf_rec_mbox_parse(phba, mboxq, in lpfc_mbx_cmpl_read_fcf_rec()
2647 lpfc_printf_log(phba, KERN_INFO, LOG_FIP, in lpfc_mbx_cmpl_read_fcf_rec()
2654 rc = lpfc_match_fcf_conn_list(phba, new_fcf_record, &boot_flag, in lpfc_mbx_cmpl_read_fcf_rec()
2658 lpfc_sli4_log_fcf_record_info(phba, new_fcf_record, vlan_id, in lpfc_mbx_cmpl_read_fcf_rec()
2667 rc = lpfc_sli4_fcf_pri_list_add(phba, fcf_index, new_fcf_record); in lpfc_mbx_cmpl_read_fcf_rec()
2670 lpfc_sli4_mbox_cmd_free(phba, mboxq); in lpfc_mbx_cmpl_read_fcf_rec()
2681 lpfc_init_vfi_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_init_vfi_cmpl() argument
2690 (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) != in lpfc_init_vfi_cmpl()
2697 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_init_vfi_cmpl()
2703 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_init_vfi_cmpl()
2719 struct lpfc_hba *phba = vport->phba; in lpfc_issue_init_vfi() local
2721 mboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_issue_init_vfi()
2730 rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_NOWAIT); in lpfc_issue_init_vfi()
2734 mempool_free(mboxq, vport->phba->mbox_mem_pool); in lpfc_issue_init_vfi()
2746 lpfc_init_vpi_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_init_vpi_cmpl() argument
2757 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_init_vpi_cmpl()
2766 if ((phba->pport == vport) || (vport->port_state == LPFC_FDISC)) { in lpfc_init_vpi_cmpl()
2774 lpfc_register_new_vport(phba, vport, ndlp); in lpfc_init_vpi_cmpl()
2775 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_init_vpi_cmpl()
2779 if (phba->link_flag & LS_NPIV_FAB_SUPPORTED) in lpfc_init_vpi_cmpl()
2786 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_init_vpi_cmpl()
2804 vpi = lpfc_alloc_vpi(vport->phba); in lpfc_issue_init_vpi()
2815 mboxq = mempool_alloc(vport->phba->mbox_mem_pool, GFP_KERNEL); in lpfc_issue_init_vpi()
2822 lpfc_init_vpi(vport->phba, mboxq, vport->vpi); in lpfc_issue_init_vpi()
2825 rc = lpfc_sli_issue_mbox(vport->phba, mboxq, MBX_NOWAIT); in lpfc_issue_init_vpi()
2829 mempool_free(mboxq, vport->phba->mbox_mem_pool); in lpfc_issue_init_vpi()
2841 lpfc_start_fdiscs(struct lpfc_hba *phba) in lpfc_start_fdiscs() argument
2846 vports = lpfc_create_vport_work_array(phba); in lpfc_start_fdiscs()
2848 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) { in lpfc_start_fdiscs()
2852 if (vports[i]->vpi > phba->max_vpi) { in lpfc_start_fdiscs()
2857 if (phba->fc_topology == LPFC_TOPOLOGY_LOOP) { in lpfc_start_fdiscs()
2866 if (phba->link_flag & LS_NPIV_FAB_SUPPORTED) in lpfc_start_fdiscs()
2878 lpfc_destroy_vport_work_array(phba, vports); in lpfc_start_fdiscs()
2882 lpfc_mbx_cmpl_reg_vfi(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_mbx_cmpl_reg_vfi() argument
2893 (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) != in lpfc_mbx_cmpl_reg_vfi()
2900 if (phba->fc_topology == LPFC_TOPOLOGY_LOOP) { in lpfc_mbx_cmpl_reg_vfi()
2916 if (!(phba->sli_rev == LPFC_SLI_REV4 && in lpfc_mbx_cmpl_reg_vfi()
2929 if ((phba->sli_rev == LPFC_SLI_REV4) && in lpfc_mbx_cmpl_reg_vfi()
2930 (phba->link_flag & LS_LOOPBACK_MODE)) { in lpfc_mbx_cmpl_reg_vfi()
2931 phba->link_state = LPFC_HBA_READY; in lpfc_mbx_cmpl_reg_vfi()
2939 vport->phba->alpa_map[0], in lpfc_mbx_cmpl_reg_vfi()
2940 phba->link_state, phba->fc_topology); in lpfc_mbx_cmpl_reg_vfi()
2948 ((phba->fc_topology == LPFC_TOPOLOGY_LOOP) && in lpfc_mbx_cmpl_reg_vfi()
2959 lpfc_start_fdiscs(phba); in lpfc_mbx_cmpl_reg_vfi()
2960 lpfc_do_scr_ns_plogi(phba, vport); in lpfc_mbx_cmpl_reg_vfi()
2965 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_mbx_cmpl_reg_vfi()
2966 lpfc_mbuf_free(phba, dmabuf->virt, dmabuf->phys); in lpfc_mbx_cmpl_reg_vfi()
2972 lpfc_mbx_cmpl_read_sparam(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_read_sparam() argument
2987 lpfc_linkdown(phba); in lpfc_mbx_cmpl_read_sparam()
2998 phba->fc_edtov = ed_tov; in lpfc_mbx_cmpl_read_sparam()
2999 phba->fc_ratov = (2 * ed_tov) / 1000; in lpfc_mbx_cmpl_read_sparam()
3000 if (phba->fc_ratov < FF_DEF_RATOV) { in lpfc_mbx_cmpl_read_sparam()
3002 phba->fc_ratov = FF_DEF_RATOV; in lpfc_mbx_cmpl_read_sparam()
3007 memcpy(&phba->wwnn, &vport->fc_nodename, sizeof(phba->wwnn)); in lpfc_mbx_cmpl_read_sparam()
3008 memcpy(&phba->wwpn, &vport->fc_portname, sizeof(phba->wwnn)); in lpfc_mbx_cmpl_read_sparam()
3011 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_read_sparam()
3013 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_read_sparam()
3018 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_read_sparam()
3020 lpfc_issue_clear_la(phba, vport); in lpfc_mbx_cmpl_read_sparam()
3021 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_read_sparam()
3026 lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la) in lpfc_mbx_process_link_up() argument
3028 struct lpfc_vport *vport = phba->pport; in lpfc_mbx_process_link_up()
3037 spin_lock_irq(&phba->hbalock); in lpfc_mbx_process_link_up()
3046 phba->fc_linkspeed = bf_get(lpfc_mbx_read_top_link_spd, la); in lpfc_mbx_process_link_up()
3049 phba->fc_linkspeed = LPFC_LINK_SPEED_UNKNOWN; in lpfc_mbx_process_link_up()
3053 if (phba->fc_topology && in lpfc_mbx_process_link_up()
3054 phba->fc_topology != bf_get(lpfc_mbx_read_top_topology, la)) { in lpfc_mbx_process_link_up()
3055 lpfc_printf_log(phba, KERN_WARNING, LOG_SLI, in lpfc_mbx_process_link_up()
3057 phba->fc_topology, in lpfc_mbx_process_link_up()
3059 phba->fc_topology_changed = 1; in lpfc_mbx_process_link_up()
3062 phba->fc_topology = bf_get(lpfc_mbx_read_top_topology, la); in lpfc_mbx_process_link_up()
3063 phba->link_flag &= ~LS_NPIV_FAB_SUPPORTED; in lpfc_mbx_process_link_up()
3066 if (phba->fc_topology == LPFC_TOPOLOGY_LOOP) { in lpfc_mbx_process_link_up()
3067 phba->sli3_options &= ~LPFC_SLI3_NPIV_ENABLED; in lpfc_mbx_process_link_up()
3072 if (phba->cfg_enable_npiv && phba->max_vpi) in lpfc_mbx_process_link_up()
3073 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_process_link_up()
3084 phba->alpa_map[0] = 0; in lpfc_mbx_process_link_up()
3097 numalpa = phba->alpa_map[0]; in lpfc_mbx_process_link_up()
3103 phba->alpa_map[j + 1]; in lpfc_mbx_process_link_up()
3109 lpfc_printf_log(phba, in lpfc_mbx_process_link_up()
3121 if (!(phba->sli3_options & LPFC_SLI3_NPIV_ENABLED)) { in lpfc_mbx_process_link_up()
3122 if (phba->max_vpi && phba->cfg_enable_npiv && in lpfc_mbx_process_link_up()
3123 (phba->sli_rev >= LPFC_SLI_REV3)) in lpfc_mbx_process_link_up()
3124 phba->sli3_options |= LPFC_SLI3_NPIV_ENABLED; in lpfc_mbx_process_link_up()
3126 vport->fc_myDID = phba->fc_pref_DID; in lpfc_mbx_process_link_up()
3129 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_process_link_up()
3137 lpfc_linkup(phba); in lpfc_mbx_process_link_up()
3138 sparam_mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_mbx_process_link_up()
3142 rc = lpfc_read_sparam(phba, sparam_mbox, 0); in lpfc_mbx_process_link_up()
3144 mempool_free(sparam_mbox, phba->mbox_mem_pool); in lpfc_mbx_process_link_up()
3149 rc = lpfc_sli_issue_mbox(phba, sparam_mbox, MBX_NOWAIT); in lpfc_mbx_process_link_up()
3152 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_process_link_up()
3154 mempool_free(sparam_mbox, phba->mbox_mem_pool); in lpfc_mbx_process_link_up()
3158 if (!(phba->hba_flag & HBA_FCOE_MODE)) { in lpfc_mbx_process_link_up()
3159 cfglink_mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_mbx_process_link_up()
3163 lpfc_config_link(phba, cfglink_mbox); in lpfc_mbx_process_link_up()
3166 rc = lpfc_sli_issue_mbox(phba, cfglink_mbox, MBX_NOWAIT); in lpfc_mbx_process_link_up()
3168 mempool_free(cfglink_mbox, phba->mbox_mem_pool); in lpfc_mbx_process_link_up()
3178 if (!(phba->hba_flag & HBA_FIP_SUPPORT)) { in lpfc_mbx_process_link_up()
3182 lpfc_printf_log(phba, KERN_ERR, in lpfc_mbx_process_link_up()
3190 lpfc_sli4_build_dflt_fcf_record(phba, fcf_record, in lpfc_mbx_process_link_up()
3192 rc = lpfc_sli4_add_fcf_record(phba, fcf_record); in lpfc_mbx_process_link_up()
3194 lpfc_printf_log(phba, KERN_ERR, in lpfc_mbx_process_link_up()
3208 spin_lock_irq(&phba->hbalock); in lpfc_mbx_process_link_up()
3209 if (phba->hba_flag & FCF_TS_INPROG) { in lpfc_mbx_process_link_up()
3210 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_process_link_up()
3214 phba->fcf.fcf_flag |= FCF_INIT_DISC; in lpfc_mbx_process_link_up()
3215 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_process_link_up()
3216 lpfc_printf_log(phba, KERN_INFO, LOG_FIP | LOG_DISCOVERY, in lpfc_mbx_process_link_up()
3218 rc = lpfc_sli4_fcf_scan_read_fcf_rec(phba, in lpfc_mbx_process_link_up()
3221 spin_lock_irq(&phba->hbalock); in lpfc_mbx_process_link_up()
3222 phba->fcf.fcf_flag &= ~FCF_INIT_DISC; in lpfc_mbx_process_link_up()
3223 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_process_link_up()
3227 lpfc_sli4_clear_fcf_rr_bmask(phba); in lpfc_mbx_process_link_up()
3236 lpfc_issue_clear_la(phba, vport); in lpfc_mbx_process_link_up()
3241 lpfc_enable_la(struct lpfc_hba *phba) in lpfc_enable_la() argument
3244 struct lpfc_sli *psli = &phba->sli; in lpfc_enable_la()
3245 spin_lock_irq(&phba->hbalock); in lpfc_enable_la()
3247 if (phba->sli_rev <= LPFC_SLI_REV3) { in lpfc_enable_la()
3248 control = readl(phba->HCregaddr); in lpfc_enable_la()
3250 writel(control, phba->HCregaddr); in lpfc_enable_la()
3251 readl(phba->HCregaddr); /* flush */ in lpfc_enable_la()
3253 spin_unlock_irq(&phba->hbalock); in lpfc_enable_la()
3257 lpfc_mbx_issue_link_down(struct lpfc_hba *phba) in lpfc_mbx_issue_link_down() argument
3259 lpfc_linkdown(phba); in lpfc_mbx_issue_link_down()
3260 lpfc_enable_la(phba); in lpfc_mbx_issue_link_down()
3261 lpfc_unregister_unused_fcf(phba); in lpfc_mbx_issue_link_down()
3273 lpfc_mbx_cmpl_read_topology(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_read_topology() argument
3282 phba->sli.ring[LPFC_ELS_RING].flag &= ~LPFC_STOP_IOCB_EVENT; in lpfc_mbx_cmpl_read_topology()
3285 lpfc_printf_log(phba, KERN_INFO, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3288 lpfc_mbx_issue_link_down(phba); in lpfc_mbx_cmpl_read_topology()
3289 phba->link_state = LPFC_HBA_ERROR; in lpfc_mbx_cmpl_read_topology()
3295 memcpy(&phba->alpa_map[0], mp->virt, 128); in lpfc_mbx_cmpl_read_topology()
3304 if (phba->fc_eventTag <= la->eventTag) { in lpfc_mbx_cmpl_read_topology()
3305 phba->fc_stat.LinkMultiEvent++; in lpfc_mbx_cmpl_read_topology()
3307 if (phba->fc_eventTag != 0) in lpfc_mbx_cmpl_read_topology()
3308 lpfc_linkdown(phba); in lpfc_mbx_cmpl_read_topology()
3311 phba->fc_eventTag = la->eventTag; in lpfc_mbx_cmpl_read_topology()
3312 if (phba->sli_rev < LPFC_SLI_REV4) { in lpfc_mbx_cmpl_read_topology()
3313 spin_lock_irq(&phba->hbalock); in lpfc_mbx_cmpl_read_topology()
3315 phba->sli.sli_flag |= LPFC_MENLO_MAINT; in lpfc_mbx_cmpl_read_topology()
3317 phba->sli.sli_flag &= ~LPFC_MENLO_MAINT; in lpfc_mbx_cmpl_read_topology()
3318 spin_unlock_irq(&phba->hbalock); in lpfc_mbx_cmpl_read_topology()
3321 phba->link_events++; in lpfc_mbx_cmpl_read_topology()
3323 !(phba->sli.sli_flag & LPFC_MENLO_MAINT)) { in lpfc_mbx_cmpl_read_topology()
3324 phba->fc_stat.LinkUp++; in lpfc_mbx_cmpl_read_topology()
3325 if (phba->link_flag & LS_LOOPBACK_MODE) { in lpfc_mbx_cmpl_read_topology()
3326 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3329 la->eventTag, phba->fc_eventTag, in lpfc_mbx_cmpl_read_topology()
3333 phba->alpa_map[0]); in lpfc_mbx_cmpl_read_topology()
3335 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3338 la->eventTag, phba->fc_eventTag, in lpfc_mbx_cmpl_read_topology()
3342 phba->alpa_map[0], in lpfc_mbx_cmpl_read_topology()
3345 phba->wait_4_mlo_maint_flg); in lpfc_mbx_cmpl_read_topology()
3347 lpfc_mbx_process_link_up(phba, la); in lpfc_mbx_cmpl_read_topology()
3350 phba->fc_stat.LinkDown++; in lpfc_mbx_cmpl_read_topology()
3351 if (phba->link_flag & LS_LOOPBACK_MODE) in lpfc_mbx_cmpl_read_topology()
3352 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3356 la->eventTag, phba->fc_eventTag, in lpfc_mbx_cmpl_read_topology()
3357 phba->pport->port_state, vport->fc_flag); in lpfc_mbx_cmpl_read_topology()
3359 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3362 la->eventTag, phba->fc_eventTag, in lpfc_mbx_cmpl_read_topology()
3363 phba->pport->port_state, vport->fc_flag, in lpfc_mbx_cmpl_read_topology()
3366 lpfc_mbx_issue_link_down(phba); in lpfc_mbx_cmpl_read_topology()
3368 if ((phba->sli.sli_flag & LPFC_MENLO_MAINT) && in lpfc_mbx_cmpl_read_topology()
3370 if (phba->link_state != LPFC_LINK_DOWN) { in lpfc_mbx_cmpl_read_topology()
3371 phba->fc_stat.LinkDown++; in lpfc_mbx_cmpl_read_topology()
3372 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3375 la->eventTag, phba->fc_eventTag, in lpfc_mbx_cmpl_read_topology()
3376 phba->pport->port_state, vport->fc_flag); in lpfc_mbx_cmpl_read_topology()
3377 lpfc_mbx_issue_link_down(phba); in lpfc_mbx_cmpl_read_topology()
3379 lpfc_enable_la(phba); in lpfc_mbx_cmpl_read_topology()
3381 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3384 la->eventTag, phba->fc_eventTag, in lpfc_mbx_cmpl_read_topology()
3385 phba->pport->port_state, vport->fc_flag); in lpfc_mbx_cmpl_read_topology()
3391 if (phba->wait_4_mlo_maint_flg) { in lpfc_mbx_cmpl_read_topology()
3392 phba->wait_4_mlo_maint_flg = 0; in lpfc_mbx_cmpl_read_topology()
3393 wake_up_interruptible(&phba->wait_4_mlo_m_q); in lpfc_mbx_cmpl_read_topology()
3397 if ((phba->sli_rev < LPFC_SLI_REV4) && in lpfc_mbx_cmpl_read_topology()
3399 if (phba->sli.sli_flag & LPFC_MENLO_MAINT) in lpfc_mbx_cmpl_read_topology()
3400 lpfc_issue_clear_la(phba, vport); in lpfc_mbx_cmpl_read_topology()
3401 lpfc_printf_log(phba, KERN_INFO, LOG_LINK_EVENT, in lpfc_mbx_cmpl_read_topology()
3407 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_read_topology()
3409 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_read_topology()
3420 lpfc_mbx_cmpl_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_reg_login() argument
3456 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_reg_login()
3458 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_reg_login()
3468 lpfc_mbx_cmpl_unreg_vpi(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_unreg_vpi() argument
3486 if (!(phba->pport->load_flag & FC_UNLOADING)) in lpfc_mbx_cmpl_unreg_vpi()
3487 lpfc_workq_post_event(phba, NULL, NULL, in lpfc_mbx_cmpl_unreg_vpi()
3495 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_unreg_vpi()
3501 if ((vport->load_flag & FC_UNLOADING) && (vport != phba->pport)) in lpfc_mbx_cmpl_unreg_vpi()
3508 struct lpfc_hba *phba = vport->phba; in lpfc_mbx_unreg_vpi() local
3512 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_mbx_unreg_vpi()
3516 lpfc_unreg_vpi(phba, vport->vpi, mbox); in lpfc_mbx_unreg_vpi()
3519 rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT); in lpfc_mbx_unreg_vpi()
3523 mempool_free(mbox, phba->mbox_mem_pool); in lpfc_mbx_unreg_vpi()
3531 lpfc_mbx_cmpl_reg_vpi(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_reg_vpi() argument
3570 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_reg_vpi()
3583 lpfc_create_static_vport(struct lpfc_hba *phba) in lpfc_create_static_vport() argument
3598 pmb = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_create_static_vport()
3600 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, in lpfc_create_static_vport()
3610 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, in lpfc_create_static_vport()
3613 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_create_static_vport()
3622 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_create_static_vport()
3625 if (lpfc_dump_static_vport(phba, pmb, offset)) in lpfc_create_static_vport()
3628 pmb->vport = phba->pport; in lpfc_create_static_vport()
3629 mbx_wait_rc = lpfc_sli_issue_mbox_wait(phba, pmb, in lpfc_create_static_vport()
3633 lpfc_printf_log(phba, KERN_WARNING, LOG_INIT, in lpfc_create_static_vport()
3641 if (phba->sli_rev == LPFC_SLI_REV4) { in lpfc_create_static_vport()
3671 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, in lpfc_create_static_vport()
3680 shost = lpfc_shost_from_vport(phba->pport); in lpfc_create_static_vport()
3695 lpfc_printf_log(phba, KERN_WARNING, LOG_INIT, in lpfc_create_static_vport()
3710 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_create_static_vport()
3713 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_create_static_vport()
3726 lpfc_mbx_cmpl_fabric_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_fabric_reg_login() argument
3742 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_fabric_reg_login()
3744 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_fabric_reg_login()
3746 if (phba->fc_topology == LPFC_TOPOLOGY_LOOP) { in lpfc_mbx_cmpl_fabric_reg_login()
3767 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_mbx_cmpl_fabric_reg_login()
3777 lpfc_start_fdiscs(phba); in lpfc_mbx_cmpl_fabric_reg_login()
3784 lpfc_do_scr_ns_plogi(phba, vport); in lpfc_mbx_cmpl_fabric_reg_login()
3787 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_fabric_reg_login()
3789 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_fabric_reg_login()
3805 lpfc_mbx_cmpl_ns_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_ns_reg_login() argument
3824 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_ns_reg_login()
3826 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_ns_reg_login()
3831 if (phba->fc_topology == LPFC_TOPOLOGY_LOOP) { in lpfc_mbx_cmpl_ns_reg_login()
3846 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_mbx_cmpl_ns_reg_login()
3880 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_ns_reg_login()
3882 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_ns_reg_login()
3894 struct lpfc_hba *phba = vport->phba; in lpfc_register_remote_port() local
3931 dev_printk(KERN_WARNING, &phba->pcidev->dev, in lpfc_register_remote_port()
4035 vport->phba->nport_event_cnt++; in lpfc_nlp_state_cleanup()
4041 vport->phba->nport_event_cnt++; in lpfc_nlp_state_cleanup()
4203 ndlp->phba = vport->phba; in lpfc_initialize_node()
4215 struct lpfc_hba *phba = vport->phba; in lpfc_enable_node() local
4223 spin_lock_irqsave(&phba->ndlp_lock, flags); in lpfc_enable_node()
4226 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_enable_node()
4236 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_enable_node()
4247 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_enable_node()
4255 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_enable_node()
4258 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_enable_node()
4259 if (vport->phba->sli_rev == LPFC_SLI_REV4) { in lpfc_enable_node()
4260 ndlp->nlp_rpi = lpfc_sli4_alloc_rpi(vport->phba); in lpfc_enable_node()
4292 if (vport->phba->sli_rev == LPFC_SLI_REV4) { in lpfc_drop_node()
4308 struct lpfc_hba *phba = vport->phba; in lpfc_set_disctmo() local
4313 tmo = (((phba->fc_edtov + 999) / 1000) + 1); in lpfc_set_disctmo()
4318 tmo = ((phba->fc_ratov * 3) + 3); in lpfc_set_disctmo()
4382 lpfc_check_sli_ndlp(struct lpfc_hba *phba, in lpfc_check_sli_ndlp() argument
4387 struct lpfc_sli *psli = &phba->sli; in lpfc_check_sli_ndlp()
4428 lpfc_no_rpi(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp) in lpfc_no_rpi() argument
4442 psli = &phba->sli; in lpfc_no_rpi()
4448 spin_lock_irq(&phba->hbalock); in lpfc_no_rpi()
4455 if ((lpfc_check_sli_ndlp(phba, pring, iocb, in lpfc_no_rpi()
4463 spin_unlock_irq(&phba->hbalock); in lpfc_no_rpi()
4468 lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT, in lpfc_no_rpi()
4483 lpfc_nlp_logo_unreg(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_nlp_logo_unreg() argument
4492 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_nlp_logo_unreg()
4507 struct lpfc_hba *phba = vport->phba; in lpfc_unreg_rpi() local
4521 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_unreg_rpi()
4525 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_unreg_rpi()
4526 rpi = phba->sli4_hba.rpi_ids[ndlp->nlp_rpi]; in lpfc_unreg_rpi()
4528 lpfc_unreg_login(phba, vport->vpi, rpi, mbox); in lpfc_unreg_rpi()
4534 if (phba->sli_rev == LPFC_SLI_REV4 && in lpfc_unreg_rpi()
4537 &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()
4557 lpfc_no_rpi(phba, ndlp); in lpfc_unreg_rpi()
4559 if (phba->sli_rev != LPFC_SLI_REV4) in lpfc_unreg_rpi()
4579 lpfc_unreg_hba_rpis(struct lpfc_hba *phba) in lpfc_unreg_hba_rpis() argument
4586 vports = lpfc_create_vport_work_array(phba); in lpfc_unreg_hba_rpis()
4588 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY, in lpfc_unreg_hba_rpis()
4592 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) { in lpfc_unreg_hba_rpis()
4605 lpfc_destroy_vport_work_array(phba, vports); in lpfc_unreg_hba_rpis()
4611 struct lpfc_hba *phba = vport->phba; in lpfc_unreg_all_rpis() local
4615 if (phba->sli_rev == LPFC_SLI_REV4) { in lpfc_unreg_all_rpis()
4620 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_unreg_all_rpis()
4622 lpfc_unreg_login(phba, vport->vpi, LPFC_UNREG_ALL_RPIS_VPORT, in lpfc_unreg_all_rpis()
4627 rc = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO); in lpfc_unreg_all_rpis()
4629 mempool_free(mbox, phba->mbox_mem_pool); in lpfc_unreg_all_rpis()
4641 struct lpfc_hba *phba = vport->phba; in lpfc_unreg_default_rpis() local
4645 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_unreg_default_rpis()
4647 lpfc_unreg_did(phba, vport->vpi, LPFC_UNREG_ALL_DFLT_RPIS, in lpfc_unreg_default_rpis()
4652 rc = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO); in lpfc_unreg_default_rpis()
4654 mempool_free(mbox, phba->mbox_mem_pool); in lpfc_unreg_default_rpis()
4672 struct lpfc_hba *phba = vport->phba; in lpfc_cleanup_node() local
4702 if ((mb = phba->sli.mbox_active)) { in lpfc_cleanup_node()
4711 spin_lock_irq(&phba->hbalock); in lpfc_cleanup_node()
4713 list_for_each_entry(mb, &phba->sli.mboxq_cmpl, list) { in lpfc_cleanup_node()
4723 list_for_each_entry_safe(mb, nextmb, &phba->sli.mboxq, list) { in lpfc_cleanup_node()
4729 __lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_cleanup_node()
4733 mempool_free(mb, phba->mbox_mem_pool); in lpfc_cleanup_node()
4740 spin_unlock_irq(&phba->hbalock); in lpfc_cleanup_node()
4742 lpfc_els_abort(phba, ndlp); in lpfc_cleanup_node()
4767 struct lpfc_hba *phba = vport->phba; in lpfc_nlp_remove() local
4785 if ((mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL)) in lpfc_nlp_remove()
4787 rc = lpfc_reg_rpi(phba, vport->vpi, ndlp->nlp_DID, in lpfc_nlp_remove()
4790 mempool_free(mbox, phba->mbox_mem_pool); in lpfc_nlp_remove()
4797 rc =lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT); in lpfc_nlp_remove()
4799 mempool_free(mbox, phba->mbox_mem_pool); in lpfc_nlp_remove()
4863 vport->phba->fc_topology == in lpfc_matchdid()
4937 mempool_alloc(vport->phba->nlp_mem_pool, GFP_KERNEL); in lpfc_setup_disc_node()
4995 struct lpfc_hba *phba = vport->phba; in lpfc_disc_list_loopmap() local
4999 if (!lpfc_is_link_up(phba)) in lpfc_disc_list_loopmap()
5002 if (phba->fc_topology != LPFC_TOPOLOGY_LOOP) in lpfc_disc_list_loopmap()
5006 if (phba->alpa_map[0]) { in lpfc_disc_list_loopmap()
5007 for (j = 1; j <= phba->alpa_map[0]; j++) { in lpfc_disc_list_loopmap()
5008 alpa = phba->alpa_map[j]; in lpfc_disc_list_loopmap()
5033 lpfc_issue_clear_la(struct lpfc_hba *phba, struct lpfc_vport *vport) in lpfc_issue_clear_la() argument
5036 struct lpfc_sli *psli = &phba->sli; in lpfc_issue_clear_la()
5046 if ((phba->link_state >= LPFC_CLEAR_LA) || in lpfc_issue_clear_la()
5048 (phba->sli_rev == LPFC_SLI_REV4)) in lpfc_issue_clear_la()
5052 if ((mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL)) != NULL) { in lpfc_issue_clear_la()
5053 phba->link_state = LPFC_CLEAR_LA; in lpfc_issue_clear_la()
5054 lpfc_clear_la(phba, mbox); in lpfc_issue_clear_la()
5057 rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT); in lpfc_issue_clear_la()
5059 mempool_free(mbox, phba->mbox_mem_pool); in lpfc_issue_clear_la()
5064 phba->link_state = LPFC_HBA_ERROR; in lpfc_issue_clear_la()
5071 lpfc_issue_reg_vpi(struct lpfc_hba *phba, struct lpfc_vport *vport) in lpfc_issue_reg_vpi() argument
5075 regvpimbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_issue_reg_vpi()
5080 if (lpfc_sli_issue_mbox(phba, regvpimbox, MBX_NOWAIT) in lpfc_issue_reg_vpi()
5082 mempool_free(regvpimbox, phba->mbox_mem_pool); in lpfc_issue_reg_vpi()
5092 struct lpfc_hba *phba = vport->phba; in lpfc_disc_start() local
5096 if (!lpfc_is_link_up(phba)) { in lpfc_disc_start()
5099 phba->link_state); in lpfc_disc_start()
5103 if (phba->link_state == LPFC_CLEAR_LA) in lpfc_disc_start()
5130 if ((phba->sli3_options & LPFC_SLI3_NPIV_ENABLED) && in lpfc_disc_start()
5133 (phba->sli_rev < LPFC_SLI_REV4)) { in lpfc_disc_start()
5134 lpfc_issue_clear_la(phba, vport); in lpfc_disc_start()
5135 lpfc_issue_reg_vpi(phba, vport); in lpfc_disc_start()
5145 lpfc_issue_clear_la(phba, vport); in lpfc_disc_start()
5190 lpfc_free_tx(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp) in lpfc_free_tx() argument
5198 psli = &phba->sli; in lpfc_free_tx()
5204 spin_lock_irq(&phba->hbalock); in lpfc_free_tx()
5225 lpfc_sli_issue_abort_iotag(phba, pring, iocb); in lpfc_free_tx()
5228 spin_unlock_irq(&phba->hbalock); in lpfc_free_tx()
5231 lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT, in lpfc_free_tx()
5239 struct lpfc_hba *phba = vport->phba; in lpfc_disc_flush_list() local
5248 lpfc_free_tx(phba, ndlp); in lpfc_disc_flush_list()
5281 struct lpfc_hba *phba = vport->phba; in lpfc_disc_timeout() local
5285 if (unlikely(!phba)) in lpfc_disc_timeout()
5295 lpfc_worker_wake_up(phba); in lpfc_disc_timeout()
5303 struct lpfc_hba *phba = vport->phba; in lpfc_disc_timeout_handler() local
5304 struct lpfc_sli *psli = &phba->sli; in lpfc_disc_timeout_handler()
5348 if (phba->sli_rev <= LPFC_SLI_REV3) in lpfc_disc_timeout_handler()
5384 lpfc_els_abort(phba, ndlp); in lpfc_disc_timeout_handler()
5412 if (phba->sli_rev < LPFC_SLI_REV4) { in lpfc_disc_timeout_handler()
5413 if (phba->sli3_options & LPFC_SLI3_NPIV_ENABLED) in lpfc_disc_timeout_handler()
5414 lpfc_issue_reg_vpi(phba, vport); in lpfc_disc_timeout_handler()
5416 lpfc_issue_clear_la(phba, vport); in lpfc_disc_timeout_handler()
5422 initlinkmbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_disc_timeout_handler()
5427 phba->link_state = LPFC_HBA_ERROR; in lpfc_disc_timeout_handler()
5431 lpfc_linkdown(phba); in lpfc_disc_timeout_handler()
5432 lpfc_init_link(phba, initlinkmbox, phba->cfg_topology, in lpfc_disc_timeout_handler()
5433 phba->cfg_link_speed); in lpfc_disc_timeout_handler()
5437 rc = lpfc_sli_issue_mbox(phba, initlinkmbox, MBX_NOWAIT); in lpfc_disc_timeout_handler()
5438 lpfc_set_loopback_flag(phba); in lpfc_disc_timeout_handler()
5440 mempool_free(initlinkmbox, phba->mbox_mem_pool); in lpfc_disc_timeout_handler()
5454 if (phba->sli_rev < LPFC_SLI_REV4) { in lpfc_disc_timeout_handler()
5455 if (phba->sli3_options & LPFC_SLI3_NPIV_ENABLED) in lpfc_disc_timeout_handler()
5456 lpfc_issue_reg_vpi(phba, vport); in lpfc_disc_timeout_handler()
5458 lpfc_issue_clear_la(phba, vport); in lpfc_disc_timeout_handler()
5486 switch (phba->link_state) { in lpfc_disc_timeout_handler()
5495 lpfc_issue_clear_la(phba, vport); in lpfc_disc_timeout_handler()
5505 "state x%x\n", phba->link_state); in lpfc_disc_timeout_handler()
5531 lpfc_mbx_cmpl_fdmi_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) in lpfc_mbx_cmpl_fdmi_reg_login() argument
5541 if (phba->sli_rev < LPFC_SLI_REV4) in lpfc_mbx_cmpl_fdmi_reg_login()
5567 lpfc_mbuf_free(phba, mp->virt, mp->phys); in lpfc_mbx_cmpl_fdmi_reg_login()
5569 mempool_free(pmb, phba->mbox_mem_pool); in lpfc_mbx_cmpl_fdmi_reg_login()
5670 lpfc_find_vport_by_vpid(struct lpfc_hba *phba, uint16_t vpi) in lpfc_find_vport_by_vpid() argument
5682 for (i = 0; i < phba->max_vpi; i++) { in lpfc_find_vport_by_vpid()
5683 if (vpi == phba->vpi_ids[i]) in lpfc_find_vport_by_vpid()
5687 if (i >= phba->max_vpi) { in lpfc_find_vport_by_vpid()
5688 lpfc_printf_log(phba, KERN_ERR, LOG_ELS, in lpfc_find_vport_by_vpid()
5695 spin_lock_irqsave(&phba->hbalock, flags); in lpfc_find_vport_by_vpid()
5696 list_for_each_entry(vport, &phba->port_list, listentry) { in lpfc_find_vport_by_vpid()
5698 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_find_vport_by_vpid()
5702 spin_unlock_irqrestore(&phba->hbalock, flags); in lpfc_find_vport_by_vpid()
5714 if (vport->phba->sli_rev == LPFC_SLI_REV4) { in lpfc_nlp_init()
5715 ndlp->nlp_rpi = lpfc_sli4_alloc_rpi(vport->phba); in lpfc_nlp_init()
5724 mempool_alloc(vport->phba->active_rrq_pool, in lpfc_nlp_init()
5728 ndlp->phba->cfg_rrq_xri_bitmap_sz); in lpfc_nlp_init()
5746 struct lpfc_hba *phba; in lpfc_nlp_release() local
5765 phba = ndlp->phba; in lpfc_nlp_release()
5766 spin_lock_irqsave(&phba->ndlp_lock, flags); in lpfc_nlp_release()
5768 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_nlp_release()
5769 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_nlp_release()
5770 lpfc_sli4_free_rpi(phba, ndlp->nlp_rpi); in lpfc_nlp_release()
5775 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_nlp_release()
5777 ndlp->phba->active_rrq_pool); in lpfc_nlp_release()
5778 mempool_free(ndlp, ndlp->phba->nlp_mem_pool); in lpfc_nlp_release()
5789 struct lpfc_hba *phba; in lpfc_nlp_get() local
5801 phba = ndlp->phba; in lpfc_nlp_get()
5802 spin_lock_irqsave(&phba->ndlp_lock, flags); in lpfc_nlp_get()
5804 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_nlp_get()
5813 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_nlp_get()
5827 struct lpfc_hba *phba; in lpfc_nlp_put() local
5837 phba = ndlp->phba; in lpfc_nlp_put()
5838 spin_lock_irqsave(&phba->ndlp_lock, flags); in lpfc_nlp_put()
5844 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_nlp_put()
5857 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_nlp_put()
5877 spin_unlock_irqrestore(&phba->ndlp_lock, flags); in lpfc_nlp_put()
5916 lpfc_fcf_inuse(struct lpfc_hba *phba) in lpfc_fcf_inuse() argument
5923 vports = lpfc_create_vport_work_array(phba); in lpfc_fcf_inuse()
5929 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) { in lpfc_fcf_inuse()
5951 lpfc_printf_log(phba, KERN_INFO, LOG_ELS, in lpfc_fcf_inuse()
5961 lpfc_destroy_vport_work_array(phba, vports); in lpfc_fcf_inuse()
5973 lpfc_unregister_vfi_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_unregister_vfi_cmpl() argument
5979 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY|LOG_MBOX, in lpfc_unregister_vfi_cmpl()
5985 phba->pport->fc_flag &= ~FC_VFI_REGISTERED; in lpfc_unregister_vfi_cmpl()
5987 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_unregister_vfi_cmpl()
5999 lpfc_unregister_fcfi_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) in lpfc_unregister_fcfi_cmpl() argument
6004 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY|LOG_MBOX, in lpfc_unregister_fcfi_cmpl()
6009 mempool_free(mboxq, phba->mbox_mem_pool); in lpfc_unregister_fcfi_cmpl()
6022 lpfc_unregister_fcf_prep(struct lpfc_hba *phba) in lpfc_unregister_fcf_prep() argument
6030 if (lpfc_fcf_inuse(phba)) in lpfc_unregister_fcf_prep()
6031 lpfc_unreg_hba_rpis(phba); in lpfc_unregister_fcf_prep()
6034 phba->pport->port_state = LPFC_VPORT_UNKNOWN; in lpfc_unregister_fcf_prep()
6037 vports = lpfc_create_vport_work_array(phba); in lpfc_unregister_fcf_prep()
6038 if (vports && (phba->sli3_options & LPFC_SLI3_NPIV_ENABLED)) in lpfc_unregister_fcf_prep()
6039 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) { in lpfc_unregister_fcf_prep()
6045 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_unregister_fcf_prep()
6054 lpfc_destroy_vport_work_array(phba, vports); in lpfc_unregister_fcf_prep()
6055 if (i == 0 && (!(phba->sli3_options & LPFC_SLI3_NPIV_ENABLED))) { in lpfc_unregister_fcf_prep()
6056 ndlp = lpfc_findnode_did(phba->pport, Fabric_DID); in lpfc_unregister_fcf_prep()
6058 lpfc_cancel_retry_delay_tmo(phba->pport, ndlp); in lpfc_unregister_fcf_prep()
6059 lpfc_cleanup_pending_mbox(phba->pport); in lpfc_unregister_fcf_prep()
6060 if (phba->sli_rev == LPFC_SLI_REV4) in lpfc_unregister_fcf_prep()
6061 lpfc_sli4_unreg_all_rpis(phba->pport); in lpfc_unregister_fcf_prep()
6062 lpfc_mbx_unreg_vpi(phba->pport); in lpfc_unregister_fcf_prep()
6063 shost = lpfc_shost_from_vport(phba->pport); in lpfc_unregister_fcf_prep()
6065 phba->pport->fc_flag |= FC_VPORT_NEEDS_INIT_VPI; in lpfc_unregister_fcf_prep()
6066 phba->pport->vpi_state &= ~LPFC_VPI_REGISTERED; in lpfc_unregister_fcf_prep()
6071 lpfc_els_flush_all_cmd(phba); in lpfc_unregister_fcf_prep()
6074 rc = lpfc_issue_unreg_vfi(phba->pport); in lpfc_unregister_fcf_prep()
6089 lpfc_sli4_unregister_fcf(struct lpfc_hba *phba) in lpfc_sli4_unregister_fcf() argument
6094 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); in lpfc_sli4_unregister_fcf()
6096 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY|LOG_MBOX, in lpfc_sli4_unregister_fcf()
6098 "HBA state x%x\n", phba->pport->port_state); in lpfc_sli4_unregister_fcf()
6101 lpfc_unreg_fcfi(mbox, phba->fcf.fcfi); in lpfc_sli4_unregister_fcf()
6102 mbox->vport = phba->pport; in lpfc_sli4_unregister_fcf()
6104 rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT); in lpfc_sli4_unregister_fcf()
6107 lpfc_printf_log(phba, KERN_ERR, LOG_SLI, in lpfc_sli4_unregister_fcf()
6110 rc, phba->pport->port_state); in lpfc_sli4_unregister_fcf()
6124 lpfc_unregister_fcf_rescan(struct lpfc_hba *phba) in lpfc_unregister_fcf_rescan() argument
6129 rc = lpfc_unregister_fcf_prep(phba); in lpfc_unregister_fcf_rescan()
6131 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY, in lpfc_unregister_fcf_rescan()
6138 rc = lpfc_sli4_unregister_fcf(phba); in lpfc_unregister_fcf_rescan()
6142 phba->fcf.fcf_flag = 0; in lpfc_unregister_fcf_rescan()
6143 phba->fcf.current_rec.flag = 0; in lpfc_unregister_fcf_rescan()
6149 if ((phba->pport->load_flag & FC_UNLOADING) || in lpfc_unregister_fcf_rescan()
6150 (phba->link_state < LPFC_LINK_UP)) in lpfc_unregister_fcf_rescan()
6154 spin_lock_irq(&phba->hbalock); in lpfc_unregister_fcf_rescan()
6155 phba->fcf.fcf_flag |= FCF_INIT_DISC; in lpfc_unregister_fcf_rescan()
6156 spin_unlock_irq(&phba->hbalock); in lpfc_unregister_fcf_rescan()
6159 lpfc_sli4_clear_fcf_rr_bmask(phba); in lpfc_unregister_fcf_rescan()
6161 rc = lpfc_sli4_fcf_scan_read_fcf_rec(phba, LPFC_FCOE_FCF_GET_FIRST); in lpfc_unregister_fcf_rescan()
6164 spin_lock_irq(&phba->hbalock); in lpfc_unregister_fcf_rescan()
6165 phba->fcf.fcf_flag &= ~FCF_INIT_DISC; in lpfc_unregister_fcf_rescan()
6166 spin_unlock_irq(&phba->hbalock); in lpfc_unregister_fcf_rescan()
6167 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY|LOG_MBOX, in lpfc_unregister_fcf_rescan()
6170 phba->pport->port_state); in lpfc_unregister_fcf_rescan()
6182 lpfc_unregister_fcf(struct lpfc_hba *phba) in lpfc_unregister_fcf() argument
6187 rc = lpfc_unregister_fcf_prep(phba); in lpfc_unregister_fcf()
6189 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY, in lpfc_unregister_fcf()
6196 rc = lpfc_sli4_unregister_fcf(phba); in lpfc_unregister_fcf()
6200 spin_lock_irq(&phba->hbalock); in lpfc_unregister_fcf()
6201 phba->fcf.fcf_flag &= ~FCF_REGISTERED; in lpfc_unregister_fcf()
6202 spin_unlock_irq(&phba->hbalock); in lpfc_unregister_fcf()
6214 lpfc_unregister_unused_fcf(struct lpfc_hba *phba) in lpfc_unregister_unused_fcf() argument
6221 spin_lock_irq(&phba->hbalock); in lpfc_unregister_unused_fcf()
6222 if (!(phba->hba_flag & HBA_FCOE_MODE) || in lpfc_unregister_unused_fcf()
6223 !(phba->fcf.fcf_flag & FCF_REGISTERED) || in lpfc_unregister_unused_fcf()
6224 !(phba->hba_flag & HBA_FIP_SUPPORT) || in lpfc_unregister_unused_fcf()
6225 (phba->fcf.fcf_flag & FCF_DISCOVERY) || in lpfc_unregister_unused_fcf()
6226 (phba->pport->port_state == LPFC_FLOGI)) { in lpfc_unregister_unused_fcf()
6227 spin_unlock_irq(&phba->hbalock); in lpfc_unregister_unused_fcf()
6230 spin_unlock_irq(&phba->hbalock); in lpfc_unregister_unused_fcf()
6232 if (lpfc_fcf_inuse(phba)) in lpfc_unregister_unused_fcf()
6235 lpfc_unregister_fcf_rescan(phba); in lpfc_unregister_unused_fcf()
6247 lpfc_read_fcf_conn_tbl(struct lpfc_hba *phba, in lpfc_read_fcf_conn_tbl() argument
6258 &phba->fcf_conn_rec_list, list) { in lpfc_read_fcf_conn_tbl()
6276 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, in lpfc_read_fcf_conn_tbl()
6285 &phba->fcf_conn_rec_list); in lpfc_read_fcf_conn_tbl()
6288 if (!list_empty(&phba->fcf_conn_rec_list)) { in lpfc_read_fcf_conn_tbl()
6290 list_for_each_entry(conn_entry, &phba->fcf_conn_rec_list, in lpfc_read_fcf_conn_tbl()
6293 lpfc_printf_log(phba, KERN_INFO, LOG_INIT, in lpfc_read_fcf_conn_tbl()
6330 lpfc_read_fcoe_param(struct lpfc_hba *phba, in lpfc_read_fcoe_param() argument
6346 phba->valid_vlan = 1; in lpfc_read_fcoe_param()
6347 phba->vlan_id = le16_to_cpu(fcoe_param->vlan_tag) & in lpfc_read_fcoe_param()
6351 phba->fc_map[0] = fcoe_param->fc_map[0]; in lpfc_read_fcoe_param()
6352 phba->fc_map[1] = fcoe_param->fc_map[1]; in lpfc_read_fcoe_param()
6353 phba->fc_map[2] = fcoe_param->fc_map[2]; in lpfc_read_fcoe_param()
6406 lpfc_parse_fcoe_conf(struct lpfc_hba *phba, in lpfc_parse_fcoe_conf() argument
6422 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, in lpfc_parse_fcoe_conf()
6431 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, in lpfc_parse_fcoe_conf()
6441 lpfc_read_fcoe_param(phba, rec_ptr); in lpfc_parse_fcoe_conf()
6447 lpfc_read_fcf_conn_tbl(phba, rec_ptr); in lpfc_parse_fcoe_conf()