• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/scsi/lpfc/

Lines Matching defs:vport

64 static void lpfc_disc_flush_list(struct lpfc_vport *vport);
87 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_RPORT,
92 lpfc_sli_abort_iocb(ndlp->vport,
106 struct lpfc_vport *vport;
117 vport = ndlp->vport;
118 phba = vport->phba;
120 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_RPORT,
124 /* Don't defer this if we are in the process of deleting the vport
128 if (vport->load_flag & FC_UNLOADING) {
172 struct lpfc_vport *vport;
186 vport = ndlp->vport;
187 phba = vport->phba;
189 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_RPORT,
193 /* Don't defer this if we are in the process of deleting the vport
197 if (vport->load_flag & FC_UNLOADING) {
200 lpfc_sli_abort_iocb(vport,
216 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY,
242 lpfc_sli_abort_iocb(vport, &phba->sli.ring[phba->sli.fcp_ring],
247 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
256 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY,
275 if (!(vport->load_flag & FC_UNLOADING) &&
281 lpfc_disc_state_machine(vport, ndlp, NULL, NLP_EVT_DEVICE_RM);
355 shost = lpfc_shost_from_vport(fast_evt_data->vport);
499 struct lpfc_vport *vport;
547 vport = phba->pport;
549 vport = vports[i];
550 if (vport == NULL)
552 spin_lock_irq(&vport->work_port_lock);
553 work_port_events = vport->work_port_events;
554 vport->work_port_events &= ~work_port_events;
555 spin_unlock_irq(&vport->work_port_lock);
557 lpfc_disc_timeout_handler(vport);
559 lpfc_els_timeout_handler(vport);
567 lpfc_fdmi_timeout_handler(vport);
683 lpfc_cleanup_rpis(struct lpfc_vport *vport, int remove)
685 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
686 struct lpfc_hba *phba = vport->phba;
690 list_for_each_entry_safe(ndlp, next_ndlp, &vport->fc_nodes, nlp_listp) {
696 ((vport->port_type == LPFC_NPIV_PORT) &&
698 lpfc_unreg_rpi(vport, ndlp);
704 rc = lpfc_disc_state_machine(vport, ndlp, NULL,
710 lpfc_mbx_unreg_vpi(vport);
712 vport->fc_flag |= FC_VPORT_NEEDS_REG_VPI;
718 lpfc_port_link_failure(struct lpfc_vport *vport)
720 lpfc_vport_set_state(vport, FC_VPORT_LINKDOWN);
723 lpfc_cleanup_rcv_buffers(vport);
726 lpfc_els_flush_rscn(vport);
729 lpfc_els_flush_cmd(vport);
731 lpfc_cleanup_rpis(vport, 0);
734 lpfc_can_disctmo(vport);
738 lpfc_linkdown_port(struct lpfc_vport *vport)
740 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
744 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD,
746 vport->port_state, vport->fc_ns_retry, vport->fc_flag);
748 lpfc_port_link_failure(vport);
755 struct lpfc_vport *vport = phba->pport;
756 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
787 mb->vport = vport;
802 mb->vport = vport;
817 lpfc_linkup_cleanup_nodes(struct lpfc_vport *vport)
821 list_for_each_entry(ndlp, &vport->fc_nodes, nlp_listp) {
831 lpfc_unreg_rpi(vport, ndlp);
832 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
837 lpfc_unreg_rpi(vport, ndlp);
843 lpfc_linkup_port(struct lpfc_vport *vport)
845 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
846 struct lpfc_hba *phba = vport->phba;
848 if ((vport->load_flag & FC_UNLOADING) != 0)
851 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD,
857 (vport != phba->pport))
863 vport->fc_flag &= ~(FC_PT2PT | FC_PT2PT_PLOGI | FC_ABORT_DISCOVERY |
865 vport->fc_flag |= FC_NDISC_ACTIVE;
866 vport->fc_ns_retry = 0;
869 if (vport->fc_flag & FC_LBIT)
870 lpfc_linkup_cleanup_nodes(vport);
907 struct lpfc_vport *vport = pmb->vport;
908 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
921 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX,
924 mb->mbxStatus, vport->port_state);
929 if (vport->port_type == LPFC_PHYSICAL_PORT)
944 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY,
949 vport->fc_flag &= ~FC_ABORT_DISCOVERY;
952 lpfc_can_disctmo(vport);
971 struct lpfc_vport *vport = pmb->vport;
979 vport->fc_flag & FC_PUBLIC_LOOP &&
980 !(vport->fc_flag & FC_LBIT)) {
985 lpfc_set_disctmo(vport);
992 if (vport->port_state != LPFC_FLOGI) {
993 lpfc_initial_flogi(vport);
998 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX,
1001 pmb->u.mb.mbxStatus, vport->port_state);
1006 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
1008 vport->port_state);
1010 lpfc_issue_clear_la(phba, vport);
1017 struct lpfc_vport *vport = mboxq->vport;
1021 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX,
1024 mboxq->u.mb.mbxStatus, vport->port_state);
1044 if (vport->port_state != LPFC_FLOGI)
1045 lpfc_initial_flogi(vport);
1275 fcf_mbxq->vport = phba->pport;
2260 struct lpfc_vport *vport = mboxq->vport;
2262 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
2265 lpfc_printf_vlog(vport, KERN_ERR,
2270 lpfc_vport_set_state(vport, FC_VPORT_FAILED);
2274 vport->fc_flag &= ~FC_VPORT_NEEDS_INIT_VPI;
2278 if ((phba->pport == vport) || (vport->port_state == LPFC_FDISC)) {
2279 ndlp = lpfc_findnode_did(vport, Fabric_DID);
2281 lpfc_printf_vlog(vport, KERN_ERR,
2286 lpfc_register_new_vport(phba, vport, ndlp);
2292 lpfc_initial_fdisc(vport);
2294 lpfc_vport_set_state(vport, FC_VPORT_NO_FABRIC_SUPP);
2295 lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS,
2304 * @vport: pointer to lpfc_vport data structure.
2307 * VPI for the vport.
2310 lpfc_issue_init_vpi(struct lpfc_vport *vport)
2315 mboxq = mempool_alloc(vport->phba->mbox_mem_pool, GFP_KERNEL);
2317 lpfc_printf_vlog(vport, KERN_ERR,
2322 lpfc_init_vpi(vport->phba, mboxq, vport->vpi);
2323 mboxq->vport = vport;
2325 rc = lpfc_sli_issue_mbox(vport->phba, mboxq, MBX_NOWAIT);
2327 lpfc_printf_vlog(vport, KERN_ERR,
2329 mempool_free(mboxq, vport->phba->mbox_mem_pool);
2351 /* There are no vpi for this vport */
2385 struct lpfc_vport *vport = mboxq->vport;
2386 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
2389 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX,
2392 mboxq->u.mb.mbxStatus, vport->port_state);
2395 lpfc_disc_list_loopmap(vport);
2397 lpfc_disc_start(vport);
2400 lpfc_vport_set_state(vport, FC_VPORT_FAILED);
2405 vport->vpi_state |= LPFC_VPI_REGISTERED;
2406 vport->fc_flag |= FC_VFI_REGISTERED;
2407 vport->fc_flag &= ~FC_VPORT_NEEDS_REG_VPI;
2410 if (vport->port_state == LPFC_FABRIC_CFG_LINK) {
2412 lpfc_do_scr_ns_plogi(phba, vport);
2427 struct lpfc_vport *vport = pmb->vport;
2433 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX,
2436 mb->mbxStatus, vport->port_state);
2441 memcpy((uint8_t *) &vport->fc_sparam, (uint8_t *) mp->virt,
2445 vport->fc_sparam.nodeName.u.wwn);
2448 vport->fc_sparam.portName.u.wwn);
2449 memcpy(&vport->fc_nodename, &vport->fc_sparam.nodeName,
2450 sizeof(vport->fc_nodename));
2451 memcpy(&vport->fc_portname, &vport->fc_sparam.portName,
2452 sizeof(vport->fc_portname));
2453 if (vport->port_type == LPFC_PHYSICAL_PORT) {
2454 memcpy(&phba->wwnn, &vport->fc_nodename, sizeof(phba->wwnn));
2455 memcpy(&phba->wwpn, &vport->fc_portname, sizeof(phba->wwnn));
2467 lpfc_issue_clear_la(phba, vport);
2475 struct lpfc_vport *vport = phba->pport;
2519 vport->fc_flag |= FC_LBIT;
2521 vport->fc_myDID = la->granted_AL_PA;
2527 if (vport->cfg_log_verbose & LOG_LINK_EVENT) {
2567 vport->fc_myDID = phba->fc_pref_DID;
2568 vport->fc_flag |= FC_LBIT;
2582 sparam_mbox->vport = vport;
2597 vport->port_state = LPFC_LOCAL_CFG_LINK;
2599 cfglink_mbox->vport = vport;
2607 vport->port_state = LPFC_VPORT_UNKNOWN;
2668 lpfc_vport_set_state(vport, FC_VPORT_FAILED);
2669 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX,
2671 vport->port_state, sparam_mbox, cfglink_mbox);
2672 lpfc_issue_clear_la(phba, vport);
2711 struct lpfc_vport *vport = pmb->vport;
2712 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
2723 mb->mbxStatus, vport->port_state);
2735 vport->fc_flag |= FC_BYPASSED_MODE;
2737 vport->fc_flag &= ~FC_BYPASSED_MODE;
2785 phba->pport->port_state, vport->fc_flag);
2792 phba->pport->port_state, vport->fc_flag,
2804 phba->pport->port_state, vport->fc_flag);
2813 phba->pport->port_state, vport->fc_flag);
2827 lpfc_issue_clear_la(phba, vport);
2848 struct lpfc_vport *vport = pmb->vport;
2851 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
2877 lpfc_disc_state_machine(vport, ndlp, pmb,
2895 struct lpfc_vport *vport = pmb->vport;
2896 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
2901 lpfc_printf_vlog(vport, KERN_INFO, LOG_NODE,
2907 lpfc_printf_vlog(vport, KERN_ERR, LOG_NODE,
2909 vport->vpi, mb->mbxStatus);
2915 vport->vpi_state &= ~LPFC_VPI_REGISTERED;
2916 vport->fc_flag |= FC_VPORT_NEEDS_REG_VPI;
2918 vport->unreg_vpi_cmpl = VPORT_OK;
2924 if ((vport->load_flag & FC_UNLOADING) && (vport != phba->pport))
2929 lpfc_mbx_unreg_vpi(struct lpfc_vport *vport)
2931 struct lpfc_hba *phba = vport->phba;
2939 lpfc_unreg_vpi(phba, vport->vpi, mbox);
2940 mbox->vport = vport;
2944 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX | LOG_VPORT,
2947 vport->unreg_vpi_cmpl = VPORT_ERROR;
2956 struct lpfc_vport *vport = pmb->vport;
2957 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
2964 lpfc_printf_vlog(vport, KERN_INFO, LOG_NODE,
2967 lpfc_vport_set_state(vport, FC_VPORT_FAILED);
2969 vport->fc_flag &= ~(FC_FABRIC | FC_PUBLIC_LOOP);
2971 vport->fc_myDID = 0;
2976 vport->vpi_state |= LPFC_VPI_REGISTERED;
2977 vport->fc_flag &= ~FC_VPORT_NEEDS_REG_VPI;
2979 vport->num_disc_nodes = 0;
2981 if (vport->fc_npr_cnt)
2982 lpfc_els_disc_plogi(vport);
2984 if (!vport->num_disc_nodes) {
2986 vport->fc_flag &= ~FC_NDISC_ACTIVE;
2988 lpfc_can_disctmo(vport);
2990 vport->port_state = LPFC_VPORT_READY;
3015 struct lpfc_vport *vport;
3045 pmb->vport = phba->pport;
3113 " create vport\n");
3117 vport = *(struct lpfc_vport **)new_fc_vport->dd_data;
3118 vport->vport_flag |= STATIC_VPORT;
3144 struct lpfc_vport *vport = pmb->vport;
3153 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX,
3162 lpfc_disc_list_loopmap(vport);
3165 lpfc_disc_start(vport);
3173 lpfc_vport_set_state(vport, FC_VPORT_FAILED);
3184 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE);
3186 if (vport->port_state == LPFC_FABRIC_CFG_LINK) {
3188 * vport discovery */
3189 if (!(vport->fc_flag & FC_LOGO_RCVD_DID_CHNG))
3192 vport->fc_flag &= ~FC_LOGO_RCVD_DID_CHNG ;
3193 lpfc_do_scr_ns_plogi(phba, vport);
3219 struct lpfc_vport *vport = pmb->vport;
3223 lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS,
3242 lpfc_disc_list_loopmap(vport);
3245 lpfc_disc_start(vport);
3248 lpfc_vport_set_state(vport, FC_VPORT_FAILED);
3257 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE);
3259 if (vport->port_state < LPFC_VPORT_READY) {
3261 lpfc_ns_cmd(vport, SLI_CTNS_RFF_ID, 0, 0); /* Do this first! */
3262 lpfc_ns_cmd(vport, SLI_CTNS_RNN_ID, 0, 0);
3263 lpfc_ns_cmd(vport, SLI_CTNS_RSNN_NN, 0, 0);
3264 lpfc_ns_cmd(vport, SLI_CTNS_RSPN_ID, 0, 0);
3265 lpfc_ns_cmd(vport, SLI_CTNS_RFT_ID, 0, 0);
3268 lpfc_issue_els_scr(vport, SCR_DID, 0);
3271 vport->fc_ns_retry = 0;
3273 if (lpfc_ns_cmd(vport, SLI_CTNS_GID_FT, 0, 0)) {
3290 lpfc_register_remote_port(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
3292 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
3296 struct lpfc_hba *phba = vport->phba;
3315 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_RPORT,
3353 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_RPORT,
3363 lpfc_nlp_counters(struct lpfc_vport *vport, int state, int count)
3365 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
3370 vport->fc_unused_cnt += count;
3373 vport->fc_plogi_cnt += count;
3376 vport->fc_adisc_cnt += count;
3379 vport->fc_reglogin_cnt += count;
3382 vport->fc_prli_cnt += count;
3385 vport->fc_unmap_cnt += count;
3388 vport->fc_map_cnt += count;
3391 vport->fc_npr_cnt += count;
3398 lpfc_nlp_state_cleanup(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
3401 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
3415 vport->phba->nport_event_cnt++;
3421 vport->phba->nport_event_cnt++;
3427 lpfc_register_remote_port(vport, ndlp);
3430 (vport->stat_data_enabled)) {
3440 lpfc_printf_vlog(vport, KERN_ERR, LOG_NODE,
3458 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE);
3484 lpfc_nlp_set_state(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
3487 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
3491 lpfc_printf_vlog(vport, KERN_INFO, LOG_NODE,
3497 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_NODE,
3503 lpfc_cancel_retry_delay_tmo(vport, ndlp);
3511 list_add_tail(&ndlp->nlp_listp, &vport->fc_nodes);
3514 lpfc_nlp_counters(vport, old_state, -1);
3517 lpfc_nlp_counters(vport, state, 1);
3518 lpfc_nlp_state_cleanup(vport, ndlp, old_state, state);
3522 lpfc_enqueue_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
3524 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
3528 list_add_tail(&ndlp->nlp_listp, &vport->fc_nodes);
3534 lpfc_dequeue_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
3536 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
3538 lpfc_cancel_retry_delay_tmo(vport, ndlp);
3540 lpfc_nlp_counters(vport, ndlp->nlp_state, -1);
3544 lpfc_nlp_state_cleanup(vport, ndlp, ndlp->nlp_state,
3549 lpfc_disable_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
3551 lpfc_cancel_retry_delay_tmo(vport, ndlp);
3553 lpfc_nlp_counters(vport, ndlp->nlp_state, -1);
3554 lpfc_nlp_state_cleanup(vport, ndlp, ndlp->nlp_state,
3559 * @vport: Pointer to Virtual Port object.
3566 * @vport, a direct reference to phba is taken here by @ndlp. This is due
3567 * to the life-span of the @ndlp might go beyond the existence of @vport as
3572 lpfc_initialize_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
3581 ndlp->vport = vport;
3582 ndlp->phba = vport->phba;
3587 ndlp->cmd_qdepth = vport->cfg_tgt_queue_depth;
3591 lpfc_enable_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
3594 struct lpfc_hba *phba = vport->phba;
3605 lpfc_printf_vlog(vport, KERN_WARNING, LOG_NODE,
3615 lpfc_printf_vlog(vport, KERN_WARNING, LOG_NODE,
3629 lpfc_initialize_node(vport, ndlp, did);
3634 lpfc_nlp_set_state(vport, ndlp, state);
3636 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_NODE,
3643 lpfc_drop_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
3648 * the ndlp from the vport. The ndlp marked as UNUSED on the list
3654 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNUSED_NODE);
3663 lpfc_set_disctmo(struct lpfc_vport *vport)
3665 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
3666 struct lpfc_hba *phba = vport->phba;
3669 if (vport->port_state == LPFC_LOCAL_CFG_LINK) {
3680 if (!timer_pending(&vport->fc_disctmo)) {
3681 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD,
3683 tmo, vport->port_state, vport->fc_flag);
3686 mod_timer(&vport->fc_disctmo, jiffies + HZ * tmo);
3688 vport->fc_flag |= FC_DISC_TMO;
3692 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY,
3695 vport->port_state, tmo,
3696 (unsigned long)&vport->fc_disctmo, vport->fc_plogi_cnt,
3697 vport->fc_adisc_cnt);
3706 lpfc_can_disctmo(struct lpfc_vport *vport)
3708 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
3711 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD,
3713 vport->port_state, vport->fc_ns_retry, vport->fc_flag);
3716 if (vport->fc_flag & FC_DISC_TMO) {
3718 vport->fc_flag &= ~FC_DISC_TMO;
3720 del_timer_sync(&vport->fc_disctmo);
3721 spin_lock_irqsave(&vport->work_port_lock, iflags);
3722 vport->work_port_events &= ~WORKER_DISC_TMO;
3723 spin_unlock_irqrestore(&vport->work_port_lock, iflags);
3727 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY,
3730 vport->port_state, vport->fc_flag,
3731 vport->fc_plogi_cnt, vport->fc_adisc_cnt);
3747 struct lpfc_vport *vport = ndlp->vport;
3749 if (iocb->vport != vport)
3843 lpfc_unreg_rpi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
3845 struct lpfc_hba *phba = vport->phba;
3852 lpfc_unreg_login(phba, vport->vpi, ndlp->nlp_rpi, mbox);
3853 mbox->vport = vport;
3902 lpfc_unreg_all_rpis(struct lpfc_vport *vport)
3904 struct lpfc_hba *phba = vport->phba;
3910 lpfc_unreg_login(phba, vport->vpi, 0xffff, mbox);
3911 mbox->vport = vport;
3919 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX | LOG_VPORT,
3926 lpfc_unreg_default_rpis(struct lpfc_vport *vport)
3928 struct lpfc_hba *phba = vport->phba;
3934 lpfc_unreg_did(phba, vport->vpi, 0xffffffff, mbox);
3935 mbox->vport = vport;
3943 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX | LOG_VPORT,
3955 lpfc_cleanup_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
3957 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
3958 struct lpfc_hba *phba = vport->phba;
3963 lpfc_printf_vlog(vport, KERN_INFO, LOG_NODE,
3969 lpfc_printf_vlog(vport, KERN_WARNING, LOG_NODE,
3974 lpfc_dequeue_node(vport, ndlp);
3976 lpfc_printf_vlog(vport, KERN_WARNING, LOG_NODE,
3981 lpfc_disable_node(vport, ndlp);
4027 lpfc_unreg_rpi(vport, ndlp);
4038 lpfc_nlp_remove(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
4040 struct lpfc_hba *phba = vport->phba;
4045 lpfc_cancel_retry_delay_tmo(vport, ndlp);
4054 rc = lpfc_reg_rpi(phba, vport->vpi, ndlp->nlp_DID,
4055 (uint8_t *) &vport->fc_sparam, mbox, 0);
4062 mbox->vport = vport;
4071 lpfc_cleanup_node(vport, ndlp);
4086 lpfc_matchdid(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
4099 mydid.un.word = vport->fc_myDID;
4132 __lpfc_findnode_did(struct lpfc_vport *vport, uint32_t did)
4137 list_for_each_entry(ndlp, &vport->fc_nodes, nlp_listp) {
4138 if (lpfc_matchdid(vport, ndlp, did)) {
4143 lpfc_printf_vlog(vport, KERN_INFO, LOG_NODE,
4153 lpfc_printf_vlog(vport, KERN_INFO, LOG_NODE,
4159 lpfc_findnode_did(struct lpfc_vport *vport, uint32_t did)
4161 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
4165 ndlp = __lpfc_findnode_did(vport, did);
4171 lpfc_setup_disc_node(struct lpfc_vport *vport, uint32_t did)
4173 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
4176 ndlp = lpfc_findnode_did(vport, did);
4178 if ((vport->fc_flag & FC_RSCN_MODE) != 0 &&
4179 lpfc_rscn_payload_check(vport, did) == 0)
4182 mempool_alloc(vport->phba->nlp_mem_pool, GFP_KERNEL);
4185 lpfc_nlp_init(vport, ndlp, did);
4186 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
4192 ndlp = lpfc_enable_node(vport, ndlp, NLP_STE_NPR_NODE);
4201 if ((vport->fc_flag & FC_RSCN_MODE) &&
4202 !(vport->fc_flag & FC_NDISC_ACTIVE)) {
4203 if (lpfc_rscn_payload_check(vport, did)) {
4213 lpfc_cancel_retry_delay_tmo(vport, ndlp);
4228 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
4238 lpfc_disc_list_loopmap(struct lpfc_vport *vport)
4240 struct lpfc_hba *phba = vport->phba;
4254 if (((vport->fc_myDID & 0xff) == alpa) || (alpa == 0))
4256 lpfc_setup_disc_node(vport, alpa);
4264 if (vport->cfg_scan_down)
4269 if ((vport->fc_myDID & 0xff) == alpa)
4271 lpfc_setup_disc_node(vport, alpa);
4278 lpfc_issue_clear_la(struct lpfc_hba *phba, struct lpfc_vport *vport)
4292 (vport->port_type != LPFC_PHYSICAL_PORT) ||
4301 mbox->vport = vport;
4305 lpfc_disc_flush_list(vport);
4316 lpfc_issue_reg_vpi(struct lpfc_hba *phba, struct lpfc_vport *vport)
4322 lpfc_reg_vpi(vport, regvpimbox);
4324 regvpimbox->vport = vport;
4334 lpfc_disc_start(struct lpfc_vport *vport)
4336 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
4337 struct lpfc_hba *phba = vport->phba;
4350 if (vport->port_state < LPFC_VPORT_READY)
4351 vport->port_state = LPFC_DISC_AUTH;
4353 lpfc_set_disctmo(vport);
4355 if (vport->fc_prevDID == vport->fc_myDID)
4360 vport->fc_prevDID = vport->fc_myDID;
4361 vport->num_disc_nodes = 0;
4364 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY,
4367 vport->port_state, vport->fc_flag, vport->fc_plogi_cnt,
4368 vport->fc_adisc_cnt);
4371 num_sent = lpfc_els_disc_adisc(vport);
4381 !(vport->fc_flag & FC_PT2PT) &&
4382 !(vport->fc_flag & FC_RSCN_MODE) &&
4384 lpfc_issue_reg_vpi(phba, vport);
4392 if (vport->port_state < LPFC_VPORT_READY && !clear_la_pending) {
4394 if (vport->port_type == LPFC_PHYSICAL_PORT)
4395 lpfc_issue_clear_la(phba, vport);
4397 if (!(vport->fc_flag & FC_ABORT_DISCOVERY)) {
4398 vport->num_disc_nodes = 0;
4400 if (vport->fc_npr_cnt)
4401 lpfc_els_disc_plogi(vport);
4403 if (!vport->num_disc_nodes) {
4405 vport->fc_flag &= ~FC_NDISC_ACTIVE;
4407 lpfc_can_disctmo(vport);
4410 vport->port_state = LPFC_VPORT_READY;
4413 num_sent = lpfc_els_disc_plogi(vport);
4418 if (vport->fc_flag & FC_RSCN_MODE) {
4422 if ((vport->fc_rscn_id_cnt == 0) &&
4423 (!(vport->fc_flag & FC_RSCN_DISCOVERY))) {
4425 vport->fc_flag &= ~FC_RSCN_MODE;
4427 lpfc_can_disctmo(vport);
4429 lpfc_els_handle_rscn(vport);
4487 lpfc_disc_flush_list(struct lpfc_vport *vport)
4490 struct lpfc_hba *phba = vport->phba;
4492 if (vport->fc_plogi_cnt || vport->fc_adisc_cnt) {
4493 list_for_each_entry_safe(ndlp, next_ndlp, &vport->fc_nodes,
4506 lpfc_cleanup_discovery_resources(struct lpfc_vport *vport)
4508 lpfc_els_flush_rscn(vport);
4509 lpfc_els_flush_cmd(vport);
4510 lpfc_disc_flush_list(vport);
4531 struct lpfc_vport *vport = (struct lpfc_vport *) ptr;
4532 struct lpfc_hba *phba = vport->phba;
4539 spin_lock_irqsave(&vport->work_port_lock, flags);
4540 tmo_posted = vport->work_port_events & WORKER_DISC_TMO;
4542 vport->work_port_events |= WORKER_DISC_TMO;
4543 spin_unlock_irqrestore(&vport->work_port_lock, flags);
4551 lpfc_disc_timeout_handler(struct lpfc_vport *vport)
4553 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
4554 struct lpfc_hba *phba = vport->phba;
4560 if (!(vport->fc_flag & FC_DISC_TMO))
4564 vport->fc_flag &= ~FC_DISC_TMO;
4567 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD,
4569 vport->port_state, vport->fc_ns_retry, vport->fc_flag);
4571 switch (vport->port_state) {
4578 lpfc_printf_vlog(vport, KERN_WARNING, LOG_DISCOVERY,
4581 list_for_each_entry_safe(ndlp, next_ndlp, &vport->fc_nodes,
4589 lpfc_drop_node(vport, ndlp);
4595 lpfc_unreg_rpi(vport, ndlp);
4598 if (vport->port_state != LPFC_FLOGI) {
4599 lpfc_initial_flogi(vport);
4608 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
4610 vport->vpi ? "FDISC" : "FLOGI");
4617 lpfc_disc_list_loopmap(vport);
4620 lpfc_disc_start(vport);
4626 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
4630 ndlp = lpfc_findnode_did(vport, NameServer_DID);
4639 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
4642 vport->fc_ns_retry, LPFC_MAX_NS_RETRY);
4644 if (vport->fc_ns_retry < LPFC_MAX_NS_RETRY) {
4646 vport->fc_ns_retry++;
4647 rc = lpfc_ns_cmd(vport, SLI_CTNS_GID_FT,
4648 vport->fc_ns_retry, 0);
4652 vport->fc_ns_retry = 0;
4662 lpfc_issue_reg_vpi(phba, vport);
4664 lpfc_issue_clear_la(phba, vport);
4665 vport->port_state = LPFC_VPORT_READY;
4672 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
4683 initlinkmbox->vport = vport;
4694 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
4696 lpfc_disc_flush_list(vport);
4704 lpfc_issue_reg_vpi(phba, vport);
4706 lpfc_issue_clear_la(phba, vport);
4707 vport->port_state = LPFC_VPORT_READY;
4713 if (vport->fc_flag & FC_RSCN_MODE) {
4714 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
4717 vport->fc_ns_retry, LPFC_MAX_NS_RETRY);
4720 lpfc_els_flush_cmd(vport);
4722 lpfc_els_flush_rscn(vport);
4723 lpfc_disc_flush_list(vport);
4728 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
4730 "vport State x%x\n", vport->port_state);
4737 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
4743 lpfc_issue_clear_la(phba, vport);
4751 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
4762 lpfc_disc_flush_list(vport);
4766 vport->port_state = LPFC_VPORT_READY;
4784 struct lpfc_vport *vport = pmb->vport;
4791 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE);
4799 if (vport->cfg_fdmi_on == 1)
4800 lpfc_fdmi_cmd(vport, ndlp, SLI_MGMT_DHBA);
4802 mod_timer(&vport->fc_fdmitmo, jiffies + HZ * 60);
4831 __lpfc_find_node(struct lpfc_vport *vport, node_filter filter, void *param)
4835 list_for_each_entry(ndlp, &vport->fc_nodes, nlp_listp) {
4847 __lpfc_findnode_rpi(struct lpfc_vport *vport, uint16_t rpi)
4849 return __lpfc_find_node(vport, lpfc_filter_by_rpi, &rpi);
4857 lpfc_findnode_wwpn(struct lpfc_vport *vport, struct lpfc_name *wwpn)
4859 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
4863 ndlp = __lpfc_find_node(vport, lpfc_filter_by_wwpn, wwpn);
4869 lpfc_nlp_init(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
4874 lpfc_initialize_node(vport, ndlp, did);
4877 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_NODE,
4895 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_NODE,
4899 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_NODE,
4906 lpfc_nlp_remove(ndlp->vport, ndlp);
4932 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_NODE,
4944 lpfc_printf_vlog(ndlp->vport, KERN_WARNING, LOG_NODE,
4972 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_NODE,
4984 lpfc_printf_vlog(ndlp->vport, KERN_WARNING, LOG_NODE,
4997 lpfc_printf_vlog(ndlp->vport, KERN_WARNING, LOG_NODE,
5034 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_NODE,
5100 struct lpfc_vport *vport = mboxq->vport;
5101 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
5107 mboxq->u.mb.mbxStatus, vport->port_state);
5126 struct lpfc_vport *vport = mboxq->vport;
5132 mboxq->u.mb.mbxStatus, vport->port_state);
5193 mbox->vport = phba->pport;
5238 mbox->vport = phba->pport;