Lines Matching full:vport
54 static void lpfc_fabric_abort_vport(struct lpfc_vport *vport);
55 static int lpfc_issue_els_fdisc(struct lpfc_vport *vport,
67 static void lpfc_init_cs_ctl_bitmap(struct lpfc_vport *vport);
68 static void lpfc_vmid_set_cs_ctl_range(struct lpfc_vport *vport, u32 min, u32 max);
69 static void lpfc_vmid_put_cs_ctl(struct lpfc_vport *vport, u32 ctcl_vmid);
72 * lpfc_els_chk_latt - Check host link attention event for a vport
73 * @vport: pointer to a host virtual N_Port data structure.
76 * attention event during the discovery process with the @vport. It is done
78 * link attention events during this @vport's discovery process, the @vport
84 * Note that, if either the host link is in state LPFC_LINK_DOWN or @vport
94 lpfc_els_chk_latt(struct lpfc_vport *vport) in lpfc_els_chk_latt() argument
96 struct lpfc_hba *phba = vport->phba; in lpfc_els_chk_latt()
99 if (vport->port_state >= LPFC_VPORT_READY || in lpfc_els_chk_latt()
112 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_els_chk_latt()
123 set_bit(FC_ABORT_DISCOVERY, &vport->fc_flag); in lpfc_els_chk_latt()
126 lpfc_issue_clear_la(phba, vport); in lpfc_els_chk_latt()
142 * @vport: pointer to a host virtual N_Port data structure.
169 lpfc_prep_els_iocb(struct lpfc_vport *vport, u8 expect_rsp, in lpfc_prep_els_iocb() argument
174 struct lpfc_hba *phba = vport->phba; in lpfc_prep_els_iocb()
271 lpfc_sli_prep_els_req_rsp(phba, elsiocb, vport, bmp, cmd_size, did, in lpfc_prep_els_iocb()
291 elsiocb->vport = vport; in lpfc_prep_els_iocb()
298 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_prep_els_iocb()
303 vport->port_state, ndlp->nlp_rpi, in lpfc_prep_els_iocb()
304 vport->fc_flag); in lpfc_prep_els_iocb()
307 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_prep_els_iocb()
312 cmd_size, vport->port_state, in lpfc_prep_els_iocb()
313 ndlp->nlp_rpi, vport->fc_flag); in lpfc_prep_els_iocb()
334 * lpfc_issue_fabric_reglogin - Issue fabric registration login for a vport
335 * @vport: pointer to a host virtual N_Port data structure.
337 * This routine issues a fabric registration login for a @vport. An
338 * active ndlp node with Fabric_DID must already exist for this @vport.
341 * HBA to perform link configuration for the @vport; and the second mailbox
343 * with the @vport.
346 * 0 - successfully issued fabric registration login for @vport
347 * -ENXIO -- failed to issue fabric registration login for @vport
350 lpfc_issue_fabric_reglogin(struct lpfc_vport *vport) in lpfc_issue_fabric_reglogin() argument
352 struct lpfc_hba *phba = vport->phba; in lpfc_issue_fabric_reglogin()
360 ndlp = lpfc_findnode_did(vport, Fabric_DID); in lpfc_issue_fabric_reglogin()
372 vport->port_state = LPFC_FABRIC_CFG_LINK; in lpfc_issue_fabric_reglogin()
375 mbox->vport = vport; in lpfc_issue_fabric_reglogin()
388 rc = lpfc_reg_rpi(phba, vport->vpi, Fabric_DID, (uint8_t *)sp, mbox, in lpfc_issue_fabric_reglogin()
396 mbox->vport = vport; in lpfc_issue_fabric_reglogin()
422 lpfc_vport_set_state(vport, FC_VPORT_FAILED); in lpfc_issue_fabric_reglogin()
423 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_issue_fabric_reglogin()
430 * lpfc_issue_reg_vfi - Register VFI for this vport's fabric login
431 * @vport: pointer to a host virtual N_Port data structure.
434 * the @vport. This mailbox command is necessary for SLI4 port only.
437 * 0 - successfully issued REG_VFI for @vport
441 lpfc_issue_reg_vfi(struct lpfc_vport *vport) in lpfc_issue_reg_vfi() argument
443 struct lpfc_hba *phba = vport->phba; in lpfc_issue_reg_vfi()
452 !test_bit(FC_PT2PT, &vport->fc_flag)) { in lpfc_issue_reg_vfi()
453 ndlp = lpfc_findnode_did(vport, Fabric_DID); in lpfc_issue_reg_vfi()
467 if (test_bit(FC_FABRIC, &vport->fc_flag) || in lpfc_issue_reg_vfi()
468 test_bit(FC_PT2PT, &vport->fc_flag)) { in lpfc_issue_reg_vfi()
479 vport->port_state = LPFC_FABRIC_CFG_LINK; in lpfc_issue_reg_vfi()
481 lpfc_reg_vfi(mboxq, vport, dmabuf->phys); in lpfc_issue_reg_vfi()
485 lpfc_reg_vfi(mboxq, vport, 0); in lpfc_issue_reg_vfi()
489 mboxq->vport = vport; in lpfc_issue_reg_vfi()
500 lpfc_vport_set_state(vport, FC_VPORT_FAILED); in lpfc_issue_reg_vfi()
501 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_issue_reg_vfi()
507 * lpfc_issue_unreg_vfi - Unregister VFI for this vport's fabric login
508 * @vport: pointer to a host virtual N_Port data structure.
511 * the @vport. This mailbox command is necessary for SLI4 port only.
514 * 0 - successfully issued REG_VFI for @vport
518 lpfc_issue_unreg_vfi(struct lpfc_vport *vport) in lpfc_issue_unreg_vfi() argument
520 struct lpfc_hba *phba = vport->phba; in lpfc_issue_unreg_vfi()
532 lpfc_unreg_vfi(mboxq, vport); in lpfc_issue_unreg_vfi()
533 mboxq->vport = vport; in lpfc_issue_unreg_vfi()
546 clear_bit(FC_VFI_REGISTERED, &vport->fc_flag); in lpfc_issue_unreg_vfi()
552 * @vport: pointer to a host virtual N_Port data structure.
558 * 0. This function also set flag in the vport data structure to delay
569 lpfc_check_clean_addr_bit(struct lpfc_vport *vport, in lpfc_check_clean_addr_bit() argument
572 struct lpfc_hba *phba = vport->phba; in lpfc_check_clean_addr_bit()
575 if ((vport->fc_prevDID != vport->fc_myDID) || in lpfc_check_clean_addr_bit()
576 memcmp(&vport->fabric_portname, &sp->portName, in lpfc_check_clean_addr_bit()
578 memcmp(&vport->fabric_nodename, &sp->nodeName, in lpfc_check_clean_addr_bit()
580 (vport->vport_flag & FAWWPN_PARAM_CHG)) { in lpfc_check_clean_addr_bit()
582 vport->vport_flag &= ~FAWWPN_PARAM_CHG; in lpfc_check_clean_addr_bit()
591 * - vport->fc_prevDID != 0 (not initial discovery) OR in lpfc_check_clean_addr_bit()
595 (vport->fc_prevDID || phba->cfg_delay_discovery)) in lpfc_check_clean_addr_bit()
596 set_bit(FC_DISC_DELAYED, &vport->fc_flag); in lpfc_check_clean_addr_bit()
604 * @vport: pointer to a host virtual N_Port data structure.
613 * @vport against the previously assigned N_Port ID. If it is different from
615 * is invoked on all the remaining nodes with the @vport to unregister the
623 lpfc_cmpl_els_flogi_fabric(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, in lpfc_cmpl_els_flogi_fabric() argument
626 struct lpfc_hba *phba = vport->phba; in lpfc_cmpl_els_flogi_fabric()
631 set_bit(FC_FABRIC, &vport->fc_flag); in lpfc_cmpl_els_flogi_fabric()
641 set_bit(FC_PUBLIC_LOOP, &vport->fc_flag); in lpfc_cmpl_els_flogi_fabric()
643 vport->fc_myDID = ulp_word4 & Mask_DID; in lpfc_cmpl_els_flogi_fabric()
658 fabric_param_changed = lpfc_check_clean_addr_bit(vport, sp); in lpfc_cmpl_els_flogi_fabric()
664 vport->fdmi_hba_mask = LPFC_FDMI2_HBA_ATTR; in lpfc_cmpl_els_flogi_fabric()
666 vport->fdmi_port_mask = LPFC_FDMI2_SMART_ATTR; in lpfc_cmpl_els_flogi_fabric()
668 vport->fdmi_port_mask = LPFC_FDMI2_PORT_ATTR; in lpfc_cmpl_els_flogi_fabric()
670 vport->fdmi_hba_mask = 0; in lpfc_cmpl_els_flogi_fabric()
671 vport->fdmi_port_mask = 0; in lpfc_cmpl_els_flogi_fabric()
675 memcpy(&vport->fabric_portname, &sp->portName, in lpfc_cmpl_els_flogi_fabric()
677 memcpy(&vport->fabric_nodename, &sp->nodeName, in lpfc_cmpl_els_flogi_fabric()
683 lpfc_printf_vlog(vport, KERN_WARNING, in lpfc_cmpl_els_flogi_fabric()
694 lpfc_printf_vlog(vport, KERN_WARNING, in lpfc_cmpl_els_flogi_fabric()
715 if (test_bit(FC_VFI_REGISTERED, &vport->fc_flag)) in lpfc_cmpl_els_flogi_fabric()
716 lpfc_issue_reg_vfi(vport); in lpfc_cmpl_els_flogi_fabric()
720 !test_bit(FC_VPORT_NEEDS_REG_VPI, &vport->fc_flag)) { in lpfc_cmpl_els_flogi_fabric()
726 &vport->fc_nodes, nlp_listp) { in lpfc_cmpl_els_flogi_fabric()
731 lpfc_unreg_rpi(vport, np); in lpfc_cmpl_els_flogi_fabric()
733 lpfc_cleanup_pending_mbox(vport); in lpfc_cmpl_els_flogi_fabric()
736 lpfc_sli4_unreg_all_rpis(vport); in lpfc_cmpl_els_flogi_fabric()
737 lpfc_mbx_unreg_vpi(vport); in lpfc_cmpl_els_flogi_fabric()
738 set_bit(FC_VPORT_NEEDS_INIT_VPI, &vport->fc_flag); in lpfc_cmpl_els_flogi_fabric()
745 set_bit(FC_VPORT_NEEDS_REG_VPI, &vport->fc_flag); in lpfc_cmpl_els_flogi_fabric()
747 !test_bit(FC_VPORT_NEEDS_REG_VPI, &vport->fc_flag)) { in lpfc_cmpl_els_flogi_fabric()
752 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE); in lpfc_cmpl_els_flogi_fabric()
753 lpfc_register_new_vport(phba, vport, ndlp); in lpfc_cmpl_els_flogi_fabric()
758 lpfc_nlp_set_state(vport, ndlp, NLP_STE_REG_LOGIN_ISSUE); in lpfc_cmpl_els_flogi_fabric()
760 test_bit(FC_VPORT_NEEDS_REG_VPI, &vport->fc_flag)) in lpfc_cmpl_els_flogi_fabric()
761 lpfc_register_new_vport(phba, vport, ndlp); in lpfc_cmpl_els_flogi_fabric()
763 lpfc_issue_fabric_reglogin(vport); in lpfc_cmpl_els_flogi_fabric()
766 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE); in lpfc_cmpl_els_flogi_fabric()
767 if ((!test_bit(FC_VPORT_NEEDS_REG_VPI, &vport->fc_flag)) && in lpfc_cmpl_els_flogi_fabric()
768 (vport->vpi_state & LPFC_VPI_REGISTERED)) { in lpfc_cmpl_els_flogi_fabric()
770 lpfc_do_scr_ns_plogi(phba, vport); in lpfc_cmpl_els_flogi_fabric()
771 } else if (test_bit(FC_VFI_REGISTERED, &vport->fc_flag)) in lpfc_cmpl_els_flogi_fabric()
772 lpfc_issue_init_vpi(vport); in lpfc_cmpl_els_flogi_fabric()
774 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_cmpl_els_flogi_fabric()
776 vport->fc_prevDID, vport->fc_myDID); in lpfc_cmpl_els_flogi_fabric()
777 lpfc_issue_reg_vfi(vport); in lpfc_cmpl_els_flogi_fabric()
785 * @vport: pointer to a host virtual N_Port data structure.
791 * in a point-to-point topology. First, the @vport's N_Port Name is compared
792 * with the received N_Port Name: if the @vport's N_Port Name is greater than
804 lpfc_cmpl_els_flogi_nport(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, in lpfc_cmpl_els_flogi_nport() argument
807 struct lpfc_hba *phba = vport->phba; in lpfc_cmpl_els_flogi_nport()
811 clear_bit(FC_FABRIC, &vport->fc_flag); in lpfc_cmpl_els_flogi_nport()
812 clear_bit(FC_PUBLIC_LOOP, &vport->fc_flag); in lpfc_cmpl_els_flogi_nport()
813 set_bit(FC_PT2PT, &vport->fc_flag); in lpfc_cmpl_els_flogi_nport()
821 clear_bit(FC_VFI_REGISTERED, &vport->fc_flag); in lpfc_cmpl_els_flogi_nport()
825 rc = memcmp(&vport->fc_portname, &sp->portName, in lpfc_cmpl_els_flogi_nport()
826 sizeof(vport->fc_portname)); in lpfc_cmpl_els_flogi_nport()
830 set_bit(FC_PT2PT_PLOGI, &vport->fc_flag); in lpfc_cmpl_els_flogi_nport()
839 vport->fc_myDID = PT2PT_LocalID; in lpfc_cmpl_els_flogi_nport()
848 ndlp = lpfc_findnode_did(vport, PT2PT_RemoteID); in lpfc_cmpl_els_flogi_nport()
854 ndlp = lpfc_nlp_init(vport, PT2PT_RemoteID); in lpfc_cmpl_els_flogi_nport()
864 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE); in lpfc_cmpl_els_flogi_nport()
874 mbox->vport = vport; in lpfc_cmpl_els_flogi_nport()
889 lpfc_disc_start(vport); in lpfc_cmpl_els_flogi_nport()
924 struct lpfc_vport *vport = cmdiocb->vport; in lpfc_cmpl_els_flogi() local
935 if (lpfc_els_chk_latt(vport)) { in lpfc_cmpl_els_flogi()
954 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_cmpl_els_flogi()
957 vport->port_state); in lpfc_cmpl_els_flogi()
986 rc = lpfc_sli4_fcf_rr_next_proc(vport, fcf_index); in lpfc_cmpl_els_flogi()
996 lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS, in lpfc_cmpl_els_flogi()
1008 lpfc_check_nlp_post_devloss(vport, ndlp); in lpfc_cmpl_els_flogi()
1021 lpfc_printf_vlog(vport, KERN_WARNING, LOG_ELS, in lpfc_cmpl_els_flogi()
1032 lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS, in lpfc_cmpl_els_flogi()
1040 clear_bit(FC_FABRIC, &vport->fc_flag); in lpfc_cmpl_els_flogi()
1041 clear_bit(FC_PUBLIC_LOOP, &vport->fc_flag); in lpfc_cmpl_els_flogi()
1042 clear_bit(FC_PT2PT_NO_NVME, &vport->fc_flag); in lpfc_cmpl_els_flogi()
1049 vport->cfg_discovery_threads = LPFC_MAX_DISC_THREADS; in lpfc_cmpl_els_flogi()
1051 (!test_bit(FC_VFI_REGISTERED, &vport->fc_flag) || in lpfc_cmpl_els_flogi()
1052 (vport->fc_prevDID != vport->fc_myDID) || in lpfc_cmpl_els_flogi()
1054 if (test_bit(FC_VFI_REGISTERED, &vport->fc_flag)) { in lpfc_cmpl_els_flogi()
1058 &vport->fc_flag); in lpfc_cmpl_els_flogi()
1061 lpfc_sli4_unreg_all_rpis(vport); in lpfc_cmpl_els_flogi()
1066 if (!lpfc_error_lost_link(vport, ulp_status, ulp_word4)) in lpfc_cmpl_els_flogi()
1067 lpfc_issue_reg_vfi(vport); in lpfc_cmpl_els_flogi()
1073 clear_bit(FC_VPORT_CVL_RCVD, &vport->fc_flag); in lpfc_cmpl_els_flogi()
1074 clear_bit(FC_VPORT_LOGO_RCVD, &vport->fc_flag); in lpfc_cmpl_els_flogi()
1088 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_cmpl_els_flogi()
1094 vport->port_state, vport->fc_flag, in lpfc_cmpl_els_flogi()
1099 lpfc_reinit_vmid(vport); in lpfc_cmpl_els_flogi()
1100 vport->vmid_flag = 0; in lpfc_cmpl_els_flogi()
1103 vport->phba->pport->vmid_flag |= (LPFC_VMID_ISSUE_QFPA | in lpfc_cmpl_els_flogi()
1111 lpfc_check_nlp_post_devloss(vport, ndlp); in lpfc_cmpl_els_flogi()
1112 if (vport->port_state == LPFC_FLOGI) { in lpfc_cmpl_els_flogi()
1118 rc = lpfc_cmpl_els_flogi_fabric(vport, ndlp, sp, in lpfc_cmpl_els_flogi()
1121 rc = lpfc_cmpl_els_flogi_nport(vport, ndlp, sp); in lpfc_cmpl_els_flogi()
1123 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_cmpl_els_flogi()
1159 lpfc_printf_vlog(vport, KERN_INFO, LOG_FIP | in lpfc_cmpl_els_flogi()
1172 } else if (vport->port_state > LPFC_FLOGI && in lpfc_cmpl_els_flogi()
1173 test_bit(FC_PT2PT, &vport->fc_flag)) { in lpfc_cmpl_els_flogi()
1188 if (!lpfc_error_lost_link(vport, ulp_status, ulp_word4)) { in lpfc_cmpl_els_flogi()
1190 lpfc_disc_list_loopmap(vport); in lpfc_cmpl_els_flogi()
1193 lpfc_disc_start(vport); in lpfc_cmpl_els_flogi()
1201 lpfc_issue_clear_la(phba, vport); in lpfc_cmpl_els_flogi()
1247 * lpfc_issue_els_flogi - Issue an flogi iocb command for a vport
1248 * @vport: pointer to a host virtual N_Port data structure.
1253 * for a @vport. The initiator service parameters are put into the payload
1264 * 0 - successfully issued flogi iocb for @vport
1265 * 1 - failed to issue flogi iocb for @vport
1268 lpfc_issue_els_flogi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, in lpfc_issue_els_flogi() argument
1271 struct lpfc_hba *phba = vport->phba; in lpfc_issue_els_flogi()
1283 elsiocb = lpfc_prep_els_iocb(vport, 1, cmdsize, retry, ndlp, in lpfc_issue_els_flogi()
1296 memcpy(pcmd, &vport->fc_sparam, sizeof(struct serv_parm)); in lpfc_issue_els_flogi()
1313 if (!memchr_inv(vport->lpfc_vmid_host_uuid, 0, in lpfc_issue_els_flogi()
1314 sizeof(vport->lpfc_vmid_host_uuid))) { in lpfc_issue_els_flogi()
1315 memcpy(vport->lpfc_vmid_host_uuid, phba->wwpn, in lpfc_issue_els_flogi()
1317 memcpy(&vport->lpfc_vmid_host_uuid[8], phba->wwnn, in lpfc_issue_els_flogi()
1358 lpfc_set_disctmo(vport); in lpfc_issue_els_flogi()
1364 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_issue_els_flogi()
1393 ndlp = lpfc_findnode_did(vport, 0); in lpfc_issue_els_flogi()
1397 did = vport->fc_myDID; in lpfc_issue_els_flogi()
1398 vport->fc_myDID = Fabric_DID; in lpfc_issue_els_flogi()
1416 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_issue_els_flogi()
1423 lpfc_els_rsp_acc(vport, ELS_CMD_FLOGI, &defer_flogi_acc, in lpfc_issue_els_flogi()
1436 vport->fc_myDID = did; in lpfc_issue_els_flogi()
1502 * lpfc_initial_flogi - Issue an initial fabric login for a vport
1503 * @vport: pointer to a host virtual N_Port data structure.
1505 * This routine issues an initial Fabric Login (FLOGI) for the @vport
1507 * the @vport's ndlp list. If no such ndlp found, it will create an ndlp and
1508 * put it into the @vport's ndlp list. If an inactive ndlp found on the list,
1510 * is then invoked with the @vport and the ndlp to perform the FLOGI for the
1511 * @vport.
1514 * 0 - failed to issue initial flogi for @vport
1515 * 1 - successfully issued initial flogi for @vport
1518 lpfc_initial_flogi(struct lpfc_vport *vport) in lpfc_initial_flogi() argument
1522 vport->port_state = LPFC_FLOGI; in lpfc_initial_flogi()
1523 lpfc_set_disctmo(vport); in lpfc_initial_flogi()
1526 ndlp = lpfc_findnode_did(vport, Fabric_DID); in lpfc_initial_flogi()
1529 ndlp = lpfc_nlp_init(vport, Fabric_DID); in lpfc_initial_flogi()
1536 lpfc_enqueue_node(vport, ndlp); in lpfc_initial_flogi()
1540 clear_bit(FC_FABRIC, &vport->fc_flag); in lpfc_initial_flogi()
1541 if (lpfc_issue_els_flogi(vport, ndlp, 0)) { in lpfc_initial_flogi()
1555 * lpfc_initial_fdisc - Issue an initial fabric discovery for a vport
1556 * @vport: pointer to a host virtual N_Port data structure.
1558 * This routine issues an initial Fabric Discover (FDISC) for the @vport
1560 * the @vport's ndlp list. If no such ndlp found, it will create an ndlp and
1561 * put it into the @vport's ndlp list. If an inactive ndlp found on the list,
1563 * is then invoked with the @vport and the ndlp to perform the FDISC for the
1564 * @vport.
1567 * 0 - failed to issue initial fdisc for @vport
1568 * 1 - successfully issued initial fdisc for @vport
1571 lpfc_initial_fdisc(struct lpfc_vport *vport) in lpfc_initial_fdisc() argument
1576 ndlp = lpfc_findnode_did(vport, Fabric_DID); in lpfc_initial_fdisc()
1579 ndlp = lpfc_nlp_init(vport, Fabric_DID); in lpfc_initial_fdisc()
1587 lpfc_enqueue_node(vport, ndlp); in lpfc_initial_fdisc()
1590 if (lpfc_issue_els_fdisc(vport, ndlp, 0)) { in lpfc_initial_fdisc()
1604 * lpfc_more_plogi - Check and issue remaining plogis for a vport
1605 * @vport: pointer to a host virtual N_Port data structure.
1608 * (PLOGI) to be issued for the @vport. If so, it will invoke the routine
1611 * @vport (@vport->cfg_discovery_threads). The function also decrement
1612 * the @vport's num_disc_node by 1 if it is not already 0.
1615 lpfc_more_plogi(struct lpfc_vport *vport) in lpfc_more_plogi() argument
1617 if (vport->num_disc_nodes) in lpfc_more_plogi()
1618 vport->num_disc_nodes--; in lpfc_more_plogi()
1621 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY, in lpfc_more_plogi()
1624 vport->num_disc_nodes, in lpfc_more_plogi()
1625 atomic_read(&vport->fc_plogi_cnt), in lpfc_more_plogi()
1626 vport->fc_flag, vport->port_state); in lpfc_more_plogi()
1628 if (test_bit(FC_NLP_MORE, &vport->fc_flag)) in lpfc_more_plogi()
1630 lpfc_els_disc_plogi(vport); in lpfc_more_plogi()
1644 * 1) The N_Port is a Fabric ndlp; 2) The @ndlp is on vport list and matches
1645 * the WWPN of the N_Port logged into; 3) The @ndlp is not on vport list but
1648 * 1) if there is a node on vport list other than the @ndlp with the same
1651 * no node found on vport list with the same WWPN of the N_Port PLOGI logged
1654 * be released and the new_ndlp shall be put on to the vport node list and
1658 * or inactive "new_ndlp" on the vport node list is assigned to the nlp_DID
1660 * into an inactive state on the vport node list and the vport node list
1670 struct lpfc_vport *vport = ndlp->vport; in lpfc_plogi_confirm_nport() local
1688 new_ndlp = lpfc_findnode_wwpn(vport, &sp->portName); in lpfc_plogi_confirm_nport()
1702 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS | LOG_NODE, in lpfc_plogi_confirm_nport()
1719 new_ndlp = lpfc_nlp_init(vport, ndlp->nlp_DID); in lpfc_plogi_confirm_nport()
1737 lpfc_nlp_unreg_node(vport, new_ndlp); in lpfc_plogi_confirm_nport()
1747 if (test_bit(FC_FABRIC, &vport->fc_flag)) { in lpfc_plogi_confirm_nport()
1752 lpfc_unreg_rpi(vport, new_ndlp); in lpfc_plogi_confirm_nport()
1816 lpfc_nlp_set_state(vport, new_ndlp, ndlp->nlp_state); in lpfc_plogi_confirm_nport()
1828 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_plogi_confirm_nport()
1838 lpfc_nlp_set_state(vport, ndlp, keep_nlp_state); in lpfc_plogi_confirm_nport()
1846 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_plogi_confirm_nport()
1850 lpfc_unreg_rpi(vport, ndlp); in lpfc_plogi_confirm_nport()
1870 lpfc_nlp_set_state(vport, ndlp, keep_nlp_state); in lpfc_plogi_confirm_nport()
1879 lpfc_disc_state_machine(vport, ndlp, NULL, NLP_EVT_DEVICE_RM); in lpfc_plogi_confirm_nport()
1886 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS | LOG_NODE, in lpfc_plogi_confirm_nport()
1895 * lpfc_end_rscn - Check and handle more rscn for a vport
1896 * @vport: pointer to a host virtual N_Port data structure.
1901 * invoked to handle the additional RSCNs for the @vport. Otherwise, the
1902 * FC_RSCN_MODE bit will be cleared with the @vport to mark as the end of
1906 lpfc_end_rscn(struct lpfc_vport *vport) in lpfc_end_rscn() argument
1909 if (test_bit(FC_RSCN_MODE, &vport->fc_flag)) { in lpfc_end_rscn()
1914 if (vport->fc_rscn_id_cnt || in lpfc_end_rscn()
1915 test_bit(FC_RSCN_DISCOVERY, &vport->fc_flag)) in lpfc_end_rscn()
1916 lpfc_els_handle_rscn(vport); in lpfc_end_rscn()
1918 clear_bit(FC_RSCN_MODE, &vport->fc_flag); in lpfc_end_rscn()
1938 struct lpfc_vport *vport = cmdiocb->vport; in lpfc_cmpl_els_rrq() local
1948 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_cmpl_els_rrq()
1955 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_cmpl_els_rrq()
1963 /* Warn RRQ status Don't print the vport to vport rjts */ in lpfc_cmpl_els_rrq()
1968 lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS, in lpfc_cmpl_els_rrq()
1988 * ndlp on the vport node list that matches the remote node ID from the
1996 * there are additional N_Port nodes with the vport that need to perform
2004 struct lpfc_vport *vport = cmdiocb->vport; in lpfc_cmpl_els_plogi() local
2027 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_cmpl_els_plogi()
2031 ndlp = lpfc_findnode_did(vport, did); in lpfc_cmpl_els_plogi()
2033 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_cmpl_els_plogi()
2046 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_cmpl_els_plogi()
2052 disc, vport->num_disc_nodes); in lpfc_cmpl_els_plogi()
2055 if (lpfc_els_chk_latt(vport)) { in lpfc_cmpl_els_plogi()
2068 /* Warn PLOGI status Don't print the vport to vport rjts */ in lpfc_cmpl_els_plogi()
2073 lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS, in lpfc_cmpl_els_plogi()
2080 if (!lpfc_error_lost_link(vport, ulp_status, ulp_word4)) in lpfc_cmpl_els_plogi()
2081 lpfc_disc_state_machine(vport, ndlp, cmdiocb, in lpfc_cmpl_els_plogi()
2107 lpfc_disc_state_machine(vport, ndlp, cmdiocb, in lpfc_cmpl_els_plogi()
2135 lpfc_disc_state_machine(vport, ndlp, cmdiocb, in lpfc_cmpl_els_plogi()
2139 if (disc && vport->num_disc_nodes) { in lpfc_cmpl_els_plogi()
2141 lpfc_more_plogi(vport); in lpfc_cmpl_els_plogi()
2143 if (vport->num_disc_nodes == 0) { in lpfc_cmpl_els_plogi()
2144 clear_bit(FC_NDISC_ACTIVE, &vport->fc_flag); in lpfc_cmpl_els_plogi()
2146 lpfc_can_disctmo(vport); in lpfc_cmpl_els_plogi()
2147 lpfc_end_rscn(vport); in lpfc_cmpl_els_plogi()
2152 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_NODE, in lpfc_cmpl_els_plogi()
2166 * lpfc_issue_els_plogi - Issue an plogi iocb command for a vport
2167 * @vport: pointer to a host virtual N_Port data structure.
2172 * (with the @did) for a @vport. Before issuing a PLOGI to a remote N_Port,
2173 * the ndlp with the remote N_Port DID must exist on the @vport's ndlp list.
2182 * 0 - Successfully issued a plogi for @vport
2183 * 1 - failed to issue a plogi for @vport
2186 lpfc_issue_els_plogi(struct lpfc_vport *vport, uint32_t did, uint8_t retry) in lpfc_issue_els_plogi() argument
2188 struct lpfc_hba *phba = vport->phba; in lpfc_issue_els_plogi()
2196 ndlp = lpfc_findnode_did(vport, did); in lpfc_issue_els_plogi()
2207 !test_bit(FC_OFFLINE_MODE, &vport->fc_flag)) { in lpfc_issue_els_plogi()
2208 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY, in lpfc_issue_els_plogi()
2222 elsiocb = lpfc_prep_els_iocb(vport, 1, cmdsize, retry, ndlp, did, in lpfc_issue_els_plogi()
2232 memcpy(pcmd, &vport->fc_sparam, sizeof(struct serv_parm)); in lpfc_issue_els_plogi()
2239 if (test_bit(FC_FABRIC, &vport->fc_flag) && in lpfc_issue_els_plogi()
2240 !test_bit(FC_PUBLIC_LOOP, &vport->fc_flag)) in lpfc_issue_els_plogi()
2255 if (vport->vmid_priority_tagging) in lpfc_issue_els_plogi()
2261 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_issue_els_plogi()
2277 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_issue_els_plogi()
2313 struct lpfc_vport *vport = cmdiocb->vport; in lpfc_cmpl_els_prli() local
2332 vport->fc_prli_sent--; in lpfc_cmpl_els_prli()
2336 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_cmpl_els_prli()
2342 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_cmpl_els_prli()
2346 vport->num_disc_nodes, ndlp->fc4_prli_sent, in lpfc_cmpl_els_prli()
2350 if (lpfc_els_chk_latt(vport)) in lpfc_cmpl_els_prli()
2363 if (test_bit(FC_FABRIC, &vport->fc_flag) || in lpfc_cmpl_els_prli()
2364 vport->cfg_enable_fc4_type != LPFC_ENABLE_BOTH) in lpfc_cmpl_els_prli()
2370 lpfc_printf_vlog(vport, mode, LOG_ELS, in lpfc_cmpl_els_prli()
2378 if (!lpfc_error_lost_link(vport, ulp_status, ulp_word4)) in lpfc_cmpl_els_prli()
2379 lpfc_disc_state_machine(vport, ndlp, cmdiocb, in lpfc_cmpl_els_prli()
2390 lpfc_printf_vlog(vport, KERN_ERR, LOG_NODE, in lpfc_cmpl_els_prli()
2402 if (test_bit(FC_PT2PT, &vport->fc_flag)) in lpfc_cmpl_els_prli()
2420 lpfc_disc_state_machine(vport, ndlp, cmdiocb, in lpfc_cmpl_els_prli()
2428 lpfc_disc_state_machine(vport, ndlp, cmdiocb, in lpfc_cmpl_els_prli()
2439 * lpfc_issue_els_prli - Issue a prli iocb command for a vport
2440 * @vport: pointer to a host virtual N_Port data structure.
2445 * @vport. The PRLI service parameters are set up in the payload of the
2455 * 0 - successfully issued prli iocb command for @vport
2456 * 1 - failed to issue prli iocb command for @vport
2459 lpfc_issue_els_prli(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, in lpfc_issue_els_prli() argument
2463 struct lpfc_hba *phba = vport->phba; in lpfc_issue_els_prli()
2478 test_bit(FC_RSCN_MODE, &vport->fc_flag) && in lpfc_issue_els_prli()
2479 vport->nvmei_support) in lpfc_issue_els_prli()
2503 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY, in lpfc_issue_els_prli()
2514 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY, in lpfc_issue_els_prli()
2517 lpfc_disc_state_machine(vport, ndlp, NULL, NLP_EVT_DEVICE_RM); in lpfc_issue_els_prli()
2521 elsiocb = lpfc_prep_els_iocb(vport, 1, cmdsize, retry, ndlp, in lpfc_issue_els_prli()
2552 if (vport->cfg_first_burst_size) in lpfc_issue_els_prli()
2601 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_issue_els_prli()
2617 /* The vport counters are used for lpfc_scan_finished, but in lpfc_issue_els_prli()
2623 vport->fc_prli_sent++; in lpfc_issue_els_prli()
2638 * lpfc_rscn_disc - Perform rscn discovery for a vport
2639 * @vport: pointer to a host virtual N_Port data structure.
2642 * discovery for a @vport. If the @vport's node port recovery count is not
2650 lpfc_rscn_disc(struct lpfc_vport *vport) in lpfc_rscn_disc() argument
2652 lpfc_can_disctmo(vport); in lpfc_rscn_disc()
2656 if (atomic_read(&vport->fc_npr_cnt)) in lpfc_rscn_disc()
2657 if (lpfc_els_disc_plogi(vport)) in lpfc_rscn_disc()
2660 lpfc_end_rscn(vport); in lpfc_rscn_disc()
2665 * @vport: pointer to lpfc_vport hba data structure that finished all ADISCs.
2674 lpfc_adisc_done(struct lpfc_vport *vport) in lpfc_adisc_done() argument
2676 struct lpfc_hba *phba = vport->phba; in lpfc_adisc_done()
2683 !test_bit(FC_RSCN_MODE, &vport->fc_flag) && in lpfc_adisc_done()
2701 lpfc_issue_clear_la(phba, vport); in lpfc_adisc_done()
2702 lpfc_issue_reg_vpi(phba, vport); in lpfc_adisc_done()
2709 if (vport->port_state < LPFC_VPORT_READY) { in lpfc_adisc_done()
2711 lpfc_issue_clear_la(phba, vport); in lpfc_adisc_done()
2712 if (!test_bit(FC_ABORT_DISCOVERY, &vport->fc_flag)) { in lpfc_adisc_done()
2713 vport->num_disc_nodes = 0; in lpfc_adisc_done()
2715 if (atomic_read(&vport->fc_npr_cnt)) in lpfc_adisc_done()
2716 lpfc_els_disc_plogi(vport); in lpfc_adisc_done()
2717 if (!vport->num_disc_nodes) { in lpfc_adisc_done()
2718 clear_bit(FC_NDISC_ACTIVE, &vport->fc_flag); in lpfc_adisc_done()
2719 lpfc_can_disctmo(vport); in lpfc_adisc_done()
2720 lpfc_end_rscn(vport); in lpfc_adisc_done()
2723 vport->port_state = LPFC_VPORT_READY; in lpfc_adisc_done()
2725 lpfc_rscn_disc(vport); in lpfc_adisc_done()
2730 * @vport: pointer to a host virtual N_Port data structure.
2732 * This routine determines whether there are more ndlps on a @vport
2734 * invoke the lpfc_els_disc_adisc() routine to issue ADISC on the @vport's
2738 lpfc_more_adisc(struct lpfc_vport *vport) in lpfc_more_adisc() argument
2740 if (vport->num_disc_nodes) in lpfc_more_adisc()
2741 vport->num_disc_nodes--; in lpfc_more_adisc()
2743 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY, in lpfc_more_adisc()
2746 vport->num_disc_nodes, in lpfc_more_adisc()
2747 atomic_read(&vport->fc_adisc_cnt), in lpfc_more_adisc()
2748 vport->fc_flag, vport->port_state); in lpfc_more_adisc()
2750 if (test_bit(FC_NLP_MORE, &vport->fc_flag)) { in lpfc_more_adisc()
2751 lpfc_set_disctmo(vport); in lpfc_more_adisc()
2753 lpfc_els_disc_adisc(vport); in lpfc_more_adisc()
2755 if (!vport->num_disc_nodes) in lpfc_more_adisc()
2756 lpfc_adisc_done(vport); in lpfc_more_adisc()
2780 struct lpfc_vport *vport = cmdiocb->vport; in lpfc_cmpl_els_adisc() local
2804 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_cmpl_els_adisc()
2815 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_cmpl_els_adisc()
2820 tmo, disc, vport->num_disc_nodes); in lpfc_cmpl_els_adisc()
2823 if (lpfc_els_chk_latt(vport)) { in lpfc_cmpl_els_adisc()
2834 lpfc_set_disctmo(vport); in lpfc_cmpl_els_adisc()
2839 lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS, in lpfc_cmpl_els_adisc()
2843 lpfc_disc_state_machine(vport, ndlp, cmdiocb, in lpfc_cmpl_els_adisc()
2859 lpfc_disc_state_machine(vport, ndlp, cmdiocb, in lpfc_cmpl_els_adisc()
2863 lpfc_disc_state_machine(vport, ndlp, cmdiocb, in lpfc_cmpl_els_adisc()
2867 if (disc && vport->num_disc_nodes) in lpfc_cmpl_els_adisc()
2868 lpfc_more_adisc(vport); in lpfc_cmpl_els_adisc()
2876 * lpfc_issue_els_adisc - Issue an address discover iocb to an node on a vport
2877 * @vport: pointer to a virtual N_Port data structure.
2882 * @vport. It prepares the payload of the ADISC ELS command, updates the
2895 lpfc_issue_els_adisc(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, in lpfc_issue_els_adisc() argument
2899 struct lpfc_hba *phba = vport->phba; in lpfc_issue_els_adisc()
2906 elsiocb = lpfc_prep_els_iocb(vport, 1, cmdsize, retry, ndlp, in lpfc_issue_els_adisc()
2920 memcpy(&ap->portName, &vport->fc_portname, sizeof(struct lpfc_name)); in lpfc_issue_els_adisc()
2921 memcpy(&ap->nodeName, &vport->fc_nodename, sizeof(struct lpfc_name)); in lpfc_issue_els_adisc()
2922 ap->DID = be32_to_cpu(vport->fc_myDID); in lpfc_issue_els_adisc()
2933 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_issue_els_adisc()
2967 struct lpfc_vport *vport = ndlp->vport; in lpfc_cmpl_els_logo() local
2994 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_cmpl_els_logo()
3000 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_cmpl_els_logo()
3007 tmo, vport->num_disc_nodes); in lpfc_cmpl_els_logo()
3009 if (lpfc_els_chk_latt(vport)) { in lpfc_cmpl_els_logo()
3021 lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS, in lpfc_cmpl_els_logo()
3027 if (lpfc_error_lost_link(vport, ulp_status, ulp_word4)) in lpfc_cmpl_els_logo()
3032 lpfc_disc_state_machine(vport, ndlp, cmdiocb, NLP_EVT_CMPL_LOGO); in lpfc_cmpl_els_logo()
3050 lpfc_cancel_retry_delay_tmo(vport, ndlp); in lpfc_cmpl_els_logo()
3053 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_cmpl_els_logo()
3058 vport->num_disc_nodes); in lpfc_cmpl_els_logo()
3063 lpfc_disc_start(vport); in lpfc_cmpl_els_logo()
3074 lpfc_disc_state_machine(vport, ndlp, cmdiocb, in lpfc_cmpl_els_logo()
3084 * lpfc_issue_els_logo - Issue a logo to an node on a vport
3085 * @vport: pointer to a virtual N_Port data structure.
3090 * to a remote node, referred by an @ndlp on a @vport. It constructs the
3105 lpfc_issue_els_logo(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, in lpfc_issue_els_logo() argument
3108 struct lpfc_hba *phba = vport->phba; in lpfc_issue_els_logo()
3118 elsiocb = lpfc_prep_els_iocb(vport, 1, cmdsize, retry, ndlp, in lpfc_issue_els_logo()
3128 *((uint32_t *) (pcmd)) = be32_to_cpu(vport->fc_myDID); in lpfc_issue_els_logo()
3130 memcpy(pcmd, &vport->fc_portname, sizeof(struct lpfc_name)); in lpfc_issue_els_logo()
3142 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_issue_els_logo()
3156 lpfc_nlp_set_state(vport, ndlp, NLP_STE_LOGO_ISSUE); in lpfc_issue_els_logo()
3183 struct lpfc_vport *vport = cmdiocb->vport; in lpfc_cmpl_els_cmd() local
3201 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_cmpl_els_cmd()
3206 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_cmpl_els_cmd()
3211 lpfc_els_chk_latt(vport); in lpfc_cmpl_els_cmd()
3221 * @vport: pointer to lpfc_vport data structure.
3234 lpfc_reg_fab_ctrl_node(struct lpfc_vport *vport, struct lpfc_nodelist *fc_ndlp) in lpfc_reg_fab_ctrl_node() argument
3237 struct lpfc_hba *phba = vport->phba; in lpfc_reg_fab_ctrl_node()
3244 ns_ndlp = lpfc_findnode_did(vport, NameServer_DID); in lpfc_reg_fab_ctrl_node()
3248 lpfc_printf_vlog(vport, KERN_INFO, LOG_NODE, in lpfc_reg_fab_ctrl_node()
3257 lpfc_printf_vlog(vport, KERN_ERR, LOG_NODE, in lpfc_reg_fab_ctrl_node()
3264 rc = lpfc_reg_rpi(phba, vport->vpi, fc_ndlp->nlp_DID, in lpfc_reg_fab_ctrl_node()
3265 (u8 *)&vport->fc_sparam, mbox, fc_ndlp->nlp_rpi); in lpfc_reg_fab_ctrl_node()
3279 mbox->vport = vport; in lpfc_reg_fab_ctrl_node()
3287 lpfc_nlp_set_state(vport, fc_ndlp, in lpfc_reg_fab_ctrl_node()
3293 lpfc_printf_vlog(vport, KERN_ERR, LOG_NODE, in lpfc_reg_fab_ctrl_node()
3316 struct lpfc_vport *vport = cmdiocb->vport; in lpfc_cmpl_els_disc_cmd() local
3338 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_cmpl_els_disc_cmd()
3343 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS | LOG_CGN_MGMT, in lpfc_cmpl_els_disc_cmd()
3364 lpfc_issue_els_scr(vport, cmdiocb->retry); in lpfc_cmpl_els_disc_cmd()
3367 lpfc_issue_els_edc(vport, cmdiocb->retry); in lpfc_cmpl_els_disc_cmd()
3370 lpfc_issue_els_rdf(vport, cmdiocb->retry); in lpfc_cmpl_els_disc_cmd()
3384 lpfc_printf_vlog(vport, KERN_WARNING, LOG_ELS | LOG_CGN_MGMT, in lpfc_cmpl_els_disc_cmd()
3408 lpfc_printf_vlog(vport, KERN_INFO, in lpfc_cmpl_els_disc_cmd()
3420 lpfc_els_chk_latt(vport); in lpfc_cmpl_els_disc_cmd()
3427 * lpfc_issue_els_scr - Issue a scr to an node on a vport
3428 * @vport: pointer to a host virtual N_Port data structure.
3432 * on a @vport. The remote node is Fabric Controller (0xfffffd). It
3433 * first search the @vport node list to find the matching ndlp. If no such
3447 lpfc_issue_els_scr(struct lpfc_vport *vport, uint8_t retry) in lpfc_issue_els_scr() argument
3450 struct lpfc_hba *phba = vport->phba; in lpfc_issue_els_scr()
3458 ndlp = lpfc_findnode_did(vport, Fabric_Cntl_DID); in lpfc_issue_els_scr()
3460 ndlp = lpfc_nlp_init(vport, Fabric_Cntl_DID); in lpfc_issue_els_scr()
3463 lpfc_enqueue_node(vport, ndlp); in lpfc_issue_els_scr()
3466 elsiocb = lpfc_prep_els_iocb(vport, 1, cmdsize, retry, ndlp, in lpfc_issue_els_scr()
3472 rc = lpfc_reg_fab_ctrl_node(vport, ndlp); in lpfc_issue_els_scr()
3475 lpfc_printf_vlog(vport, KERN_ERR, LOG_NODE, in lpfc_issue_els_scr()
3490 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_issue_els_scr()
3502 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_issue_els_scr()
3519 * @vport: pointer to a host virtual N_Port data structure.
3536 lpfc_issue_els_rscn(struct lpfc_vport *vport, uint8_t retry) in lpfc_issue_els_rscn() argument
3539 struct lpfc_hba *phba = vport->phba; in lpfc_issue_els_rscn()
3551 !test_bit(FC_PUBLIC_LOOP, &vport->fc_flag)) in lpfc_issue_els_rscn()
3554 if (test_bit(FC_PT2PT, &vport->fc_flag)) { in lpfc_issue_els_rscn()
3556 ndlp = lpfc_findnode_mapped(vport); in lpfc_issue_els_rscn()
3562 ndlp = lpfc_findnode_did(vport, nportid); in lpfc_issue_els_rscn()
3565 ndlp = lpfc_nlp_init(vport, nportid); in lpfc_issue_els_rscn()
3568 lpfc_enqueue_node(vport, ndlp); in lpfc_issue_els_rscn()
3572 elsiocb = lpfc_prep_els_iocb(vport, 1, cmdsize, retry, ndlp, in lpfc_issue_els_rscn()
3584 nportid = vport->fc_myDID; in lpfc_issue_els_rscn()
3599 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_issue_els_rscn()
3614 * lpfc_issue_els_farpr - Issue a farp to an node on a vport
3615 * @vport: pointer to a host virtual N_Port data structure.
3620 * (FARPR) to a node on a vport. The remote node N_Port identifier (@nportid)
3621 * is passed into the function. It first search the @vport node list to find
3635 lpfc_issue_els_farpr(struct lpfc_vport *vport, uint32_t nportid, uint8_t retry) in lpfc_issue_els_farpr() argument
3638 struct lpfc_hba *phba = vport->phba; in lpfc_issue_els_farpr()
3649 ndlp = lpfc_findnode_did(vport, nportid); in lpfc_issue_els_farpr()
3651 ndlp = lpfc_nlp_init(vport, nportid); in lpfc_issue_els_farpr()
3654 lpfc_enqueue_node(vport, ndlp); in lpfc_issue_els_farpr()
3657 elsiocb = lpfc_prep_els_iocb(vport, 1, cmdsize, retry, ndlp, in lpfc_issue_els_farpr()
3672 *lp++ = be32_to_cpu(vport->fc_myDID); in lpfc_issue_els_farpr()
3676 memcpy(&fp->RportName, &vport->fc_portname, sizeof(struct lpfc_name)); in lpfc_issue_els_farpr()
3677 memcpy(&fp->RnodeName, &vport->fc_nodename, sizeof(struct lpfc_name)); in lpfc_issue_els_farpr()
3678 ondlp = lpfc_findnode_did(vport, nportid); in lpfc_issue_els_farpr()
3686 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_issue_els_farpr()
3717 * @vport: pointer to a host virtual N_Port data structure.
3732 lpfc_issue_els_rdf(struct lpfc_vport *vport, uint8_t retry) in lpfc_issue_els_rdf() argument
3734 struct lpfc_hba *phba = vport->phba; in lpfc_issue_els_rdf()
3743 ndlp = lpfc_findnode_did(vport, Fabric_Cntl_DID); in lpfc_issue_els_rdf()
3745 ndlp = lpfc_nlp_init(vport, Fabric_Cntl_DID); in lpfc_issue_els_rdf()
3748 lpfc_enqueue_node(vport, ndlp); in lpfc_issue_els_rdf()
3752 if (vport->port_type == LPFC_NPIV_PORT) in lpfc_issue_els_rdf()
3755 elsiocb = lpfc_prep_els_iocb(vport, 1, cmdsize, retry, ndlp, in lpfc_issue_els_rdf()
3775 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS | LOG_CGN_MGMT, in lpfc_issue_els_rdf()
3788 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_issue_els_rdf()
3803 * @vport: pointer to a host virtual N_Port data structure.
3816 lpfc_els_rcv_rdf(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb, in lpfc_els_rcv_rdf() argument
3820 if (lpfc_els_rsp_acc(vport, ELS_CMD_RDF, cmdiocb, ndlp, NULL)) { in lpfc_els_rcv_rdf()
3821 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS | LOG_CGN_MGMT, in lpfc_els_rcv_rdf()
3823 ndlp->nlp_DID, vport->fc_myDID); in lpfc_els_rcv_rdf()
3828 if (lpfc_issue_els_rdf(vport, 0)) { in lpfc_els_rcv_rdf()
3829 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS | LOG_CGN_MGMT, in lpfc_els_rcv_rdf()
3831 vport->fc_myDID); in lpfc_els_rcv_rdf()
4210 * @vport: pointer to a host virtual N_Port data structure.
4231 lpfc_issue_els_edc(struct lpfc_vport *vport, uint8_t retry) in lpfc_issue_els_edc() argument
4233 struct lpfc_hba *phba = vport->phba; in lpfc_issue_els_edc()
4243 if (vport->port_type == LPFC_NPIV_PORT) in lpfc_issue_els_edc()
4246 ndlp = lpfc_findnode_did(vport, Fabric_DID); in lpfc_issue_els_edc()
4261 elsiocb = lpfc_prep_els_iocb(vport, 1, cmdsize, retry, ndlp, in lpfc_issue_els_edc()
4283 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS | LOG_CGN_MGMT, in lpfc_issue_els_edc()
4296 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_issue_els_edc()
4313 rc = lpfc_issue_els_rdf(vport, 0); in lpfc_issue_els_edc()
4319 * @vport: pointer to a host virtual N_Port data structure.
4323 * a @vport's @ndlp. It stops the timer for the delayed function retrial and
4326 * commands are sent for the @vport's nodes that require issuing discovery
4330 lpfc_cancel_retry_delay_tmo(struct lpfc_vport *vport, struct lpfc_nodelist *nlp) in lpfc_cancel_retry_delay_tmo() argument
4345 if (vport->num_disc_nodes) { in lpfc_cancel_retry_delay_tmo()
4346 if (vport->port_state < LPFC_VPORT_READY) { in lpfc_cancel_retry_delay_tmo()
4348 lpfc_more_adisc(vport); in lpfc_cancel_retry_delay_tmo()
4351 lpfc_more_plogi(vport); in lpfc_cancel_retry_delay_tmo()
4352 if (vport->num_disc_nodes == 0) { in lpfc_cancel_retry_delay_tmo()
4354 &vport->fc_flag); in lpfc_cancel_retry_delay_tmo()
4355 lpfc_can_disctmo(vport); in lpfc_cancel_retry_delay_tmo()
4356 lpfc_end_rscn(vport); in lpfc_cancel_retry_delay_tmo()
4382 struct lpfc_vport *vport = ndlp->vport; in lpfc_els_retry_delay() local
4383 struct lpfc_hba *phba = vport->phba; in lpfc_els_retry_delay()
4418 struct lpfc_vport *vport = ndlp->vport; in lpfc_els_retry_delay_handler() local
4440 lpfc_issue_els_flogi(vport, ndlp, retry); in lpfc_els_retry_delay_handler()
4443 if (!lpfc_issue_els_plogi(vport, ndlp->nlp_DID, retry)) { in lpfc_els_retry_delay_handler()
4445 lpfc_nlp_set_state(vport, ndlp, NLP_STE_PLOGI_ISSUE); in lpfc_els_retry_delay_handler()
4449 if (!lpfc_issue_els_adisc(vport, ndlp, retry)) { in lpfc_els_retry_delay_handler()
4451 lpfc_nlp_set_state(vport, ndlp, NLP_STE_ADISC_ISSUE); in lpfc_els_retry_delay_handler()
4456 if (!lpfc_issue_els_prli(vport, ndlp, retry)) { in lpfc_els_retry_delay_handler()
4458 lpfc_nlp_set_state(vport, ndlp, NLP_STE_PRLI_ISSUE); in lpfc_els_retry_delay_handler()
4462 if (!lpfc_issue_els_logo(vport, ndlp, retry)) { in lpfc_els_retry_delay_handler()
4464 lpfc_nlp_set_state(vport, ndlp, NLP_STE_LOGO_ISSUE); in lpfc_els_retry_delay_handler()
4468 if (!test_bit(FC_VPORT_NEEDS_INIT_VPI, &vport->fc_flag)) in lpfc_els_retry_delay_handler()
4469 lpfc_issue_els_fdisc(vport, ndlp, retry); in lpfc_els_retry_delay_handler()
4477 * @vport: pointer to a virtual N_Port data structure.
4488 lpfc_link_reset(struct lpfc_vport *vport) in lpfc_link_reset() argument
4490 struct lpfc_hba *phba = vport->phba; in lpfc_link_reset()
4495 lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS, in lpfc_link_reset()
4518 mbox->vport = vport; in lpfc_link_reset()
4556 struct lpfc_vport *vport = cmdiocb->vport; in lpfc_els_retry() local
4586 ndlp = lpfc_findnode_did(vport, did); in lpfc_els_retry()
4591 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_els_retry()
4617 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_els_retry()
4707 if (test_bit(FC_PT2PT, &vport->fc_flag) && in lpfc_els_retry()
4714 lpfc_printf_vlog(vport, KERN_WARNING, LOG_ELS, in lpfc_els_retry()
4720 set_bit(FC_PT2PT_NO_NVME, &vport->fc_flag); in lpfc_els_retry()
4734 lpfc_printf_vlog(vport, KERN_INFO, in lpfc_els_retry()
4775 lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS, in lpfc_els_retry()
4779 lpfc_vport_set_state(vport, in lpfc_els_retry()
4823 vport->fc_sparam.cmn.bbRcvSizeMsb &= 0xf; in lpfc_els_retry()
4825 lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS, in lpfc_els_retry()
4852 lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS, in lpfc_els_retry()
4856 lpfc_vport_set_state(vport, in lpfc_els_retry()
4890 rc = lpfc_link_reset(vport); in lpfc_els_retry()
4907 !lpfc_error_lost_link(vport, ulp_status, ulp_word4)) { in lpfc_els_retry()
4921 !lpfc_error_lost_link(vport, ulp_status, ulp_word4)) { in lpfc_els_retry()
4924 maxretry = vport->cfg_devloss_tmo; in lpfc_els_retry()
4934 if (test_bit(FC_UNLOADING, &vport->load_flag)) in lpfc_els_retry()
4942 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_retry()
4952 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_retry()
4964 if (timer_pending(&vport->fc_disctmo) || in lpfc_els_retry()
4965 test_bit(FC_RSCN_MODE, &vport->fc_flag)) in lpfc_els_retry()
4966 lpfc_set_disctmo(vport); in lpfc_els_retry()
4982 lpfc_nlp_set_state(vport, ndlp, in lpfc_els_retry()
4985 lpfc_nlp_set_state(vport, ndlp, in lpfc_els_retry()
4993 lpfc_issue_els_flogi(vport, ndlp, cmdiocb->retry); in lpfc_els_retry()
4996 lpfc_issue_els_fdisc(vport, ndlp, cmdiocb->retry); in lpfc_els_retry()
5001 lpfc_nlp_set_state(vport, ndlp, in lpfc_els_retry()
5004 lpfc_issue_els_plogi(vport, did, cmdiocb->retry); in lpfc_els_retry()
5008 lpfc_nlp_set_state(vport, ndlp, NLP_STE_ADISC_ISSUE); in lpfc_els_retry()
5009 lpfc_issue_els_adisc(vport, ndlp, cmdiocb->retry); in lpfc_els_retry()
5014 lpfc_nlp_set_state(vport, ndlp, NLP_STE_PRLI_ISSUE); in lpfc_els_retry()
5015 lpfc_issue_els_prli(vport, ndlp, cmdiocb->retry); in lpfc_els_retry()
5019 lpfc_nlp_set_state(vport, ndlp, NLP_STE_LOGO_ISSUE); in lpfc_els_retry()
5020 lpfc_issue_els_logo(vport, ndlp, cmdiocb->retry); in lpfc_els_retry()
5026 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_els_retry()
5034 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_retry()
5192 struct lpfc_vport *vport = cmdiocb->vport; in lpfc_cmpl_els_logo_acc() local
5198 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_RSP, in lpfc_cmpl_els_logo_acc()
5202 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_cmpl_els_logo_acc()
5220 lpfc_unreg_rpi(vport, ndlp); in lpfc_cmpl_els_logo_acc()
5228 lpfc_nlp_set_state(vport, ndlp, NLP_STE_PLOGI_ISSUE); in lpfc_cmpl_els_logo_acc()
5229 lpfc_issue_els_plogi(vport, ndlp->nlp_DID, 0); in lpfc_cmpl_els_logo_acc()
5262 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_NODE, in lpfc_mbx_cmpl_dflt_rpi()
5278 lpfc_drop_node(ndlp->vport, ndlp); in lpfc_mbx_cmpl_dflt_rpi()
5302 struct lpfc_vport *vport = ndlp ? ndlp->vport : NULL; in lpfc_cmpl_els_rsp() local
5303 struct Scsi_Host *shost = vport ? lpfc_shost_from_vport(vport) : NULL; in lpfc_cmpl_els_rsp()
5308 if (!vport) { in lpfc_cmpl_els_rsp()
5310 "3177 null vport in ELS rsp\n"); in lpfc_cmpl_els_rsp()
5330 if (!ndlp || lpfc_els_chk_latt(vport)) { in lpfc_cmpl_els_rsp()
5336 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_RSP, in lpfc_cmpl_els_rsp()
5340 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_cmpl_els_rsp()
5349 if (!lpfc_unreg_rpi(vport, ndlp) && in lpfc_cmpl_els_rsp()
5350 !test_bit(FC_PT2PT, &vport->fc_flag)) { in lpfc_cmpl_els_rsp()
5354 lpfc_printf_vlog(vport, KERN_INFO, in lpfc_cmpl_els_rsp()
5374 mbox->vport = vport; in lpfc_cmpl_els_rsp()
5381 lpfc_nlp_set_state(vport, ndlp, in lpfc_cmpl_els_rsp()
5397 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_cmpl_els_rsp()
5417 vport && vport->port_type == LPFC_NPIV_PORT && in lpfc_cmpl_els_rsp()
5429 lpfc_drop_node(vport, ndlp); in lpfc_cmpl_els_rsp()
5441 * @vport: pointer to a host virtual N_Port data structure.
5465 lpfc_els_rsp_acc(struct lpfc_vport *vport, uint32_t flag, in lpfc_els_rsp_acc() argument
5469 struct lpfc_hba *phba = vport->phba; in lpfc_els_rsp_acc()
5485 elsiocb = lpfc_prep_els_iocb(vport, 0, cmdsize, oldiocb->retry, in lpfc_els_rsp_acc()
5515 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_RSP, in lpfc_els_rsp_acc()
5522 elsiocb = lpfc_prep_els_iocb(vport, 0, cmdsize, oldiocb->retry, in lpfc_els_rsp_acc()
5570 memcpy(&sp->portName, &vport->fc_sparam.portName, in lpfc_els_rsp_acc()
5572 memcpy(&sp->nodeName, &vport->fc_sparam.nodeName, in lpfc_els_rsp_acc()
5575 memcpy(pcmd, &vport->fc_sparam, in lpfc_els_rsp_acc()
5594 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_RSP, in lpfc_els_rsp_acc()
5600 elsiocb = lpfc_prep_els_iocb(vport, 0, cmdsize, oldiocb->retry, in lpfc_els_rsp_acc()
5632 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_RSP, in lpfc_els_rsp_acc()
5638 elsiocb = lpfc_prep_els_iocb(vport, 0, cmdsize, oldiocb->retry, in lpfc_els_rsp_acc()
5702 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_rsp_acc()
5708 ndlp->nlp_rpi, vport->fc_flag, kref_read(&ndlp->kref)); in lpfc_els_rsp_acc()
5714 * @vport: pointer to a virtual N_Port data structure.
5735 lpfc_els_rsp_reject(struct lpfc_vport *vport, uint32_t rejectError, in lpfc_els_rsp_reject() argument
5740 struct lpfc_hba *phba = vport->phba; in lpfc_els_rsp_reject()
5749 elsiocb = lpfc_prep_els_iocb(vport, 0, cmdsize, oldiocb->retry, ndlp, in lpfc_els_rsp_reject()
5777 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_rsp_reject()
5784 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_RSP, in lpfc_els_rsp_reject()
5808 * @vport: pointer to a host virtual N_Port data structure.
5821 lpfc_issue_els_edc_rsp(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb, in lpfc_issue_els_edc_rsp() argument
5824 struct lpfc_hba *phba = vport->phba; in lpfc_issue_els_edc_rsp()
5840 elsiocb = lpfc_prep_els_iocb(vport, 0, cmdsize, cmdiocb->retry, in lpfc_issue_els_edc_rsp()
5875 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_RSP, in lpfc_issue_els_edc_rsp()
5896 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_issue_els_edc_rsp()
5902 ndlp->nlp_rpi, vport->fc_flag); in lpfc_issue_els_edc_rsp()
5909 * @vport: pointer to a virtual N_Port data structure.
5927 lpfc_els_rsp_adisc_acc(struct lpfc_vport *vport, struct lpfc_iocbq *oldiocb, in lpfc_els_rsp_adisc_acc() argument
5930 struct lpfc_hba *phba = vport->phba; in lpfc_els_rsp_adisc_acc()
5941 elsiocb = lpfc_prep_els_iocb(vport, 0, cmdsize, oldiocb->retry, ndlp, in lpfc_els_rsp_adisc_acc()
5965 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_rsp_adisc_acc()
5978 memcpy(&ap->portName, &vport->fc_portname, sizeof(struct lpfc_name)); in lpfc_els_rsp_adisc_acc()
5979 memcpy(&ap->nodeName, &vport->fc_nodename, sizeof(struct lpfc_name)); in lpfc_els_rsp_adisc_acc()
5980 ap->DID = be32_to_cpu(vport->fc_myDID); in lpfc_els_rsp_adisc_acc()
5982 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_RSP, in lpfc_els_rsp_adisc_acc()
6006 * @vport: pointer to a virtual N_Port data structure.
6024 lpfc_els_rsp_prli_acc(struct lpfc_vport *vport, struct lpfc_iocbq *oldiocb, in lpfc_els_rsp_prli_acc() argument
6027 struct lpfc_hba *phba = vport->phba; in lpfc_els_rsp_prli_acc()
6051 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_rsp_prli_acc()
6065 elsiocb = lpfc_prep_els_iocb(vport, 0, cmdsize, oldiocb->retry, ndlp, in lpfc_els_rsp_prli_acc()
6087 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_rsp_prli_acc()
6128 lpfc_printf_vlog(vport, KERN_INFO, in lpfc_els_rsp_prli_acc()
6158 lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_DISC, in lpfc_els_rsp_prli_acc()
6169 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY, in lpfc_els_rsp_prli_acc()
6174 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_RSP, in lpfc_els_rsp_prli_acc()
6198 * @vport: pointer to a virtual N_Port data structure.
6217 lpfc_els_rsp_rnid_acc(struct lpfc_vport *vport, uint8_t format, in lpfc_els_rsp_rnid_acc() argument
6220 struct lpfc_hba *phba = vport->phba; in lpfc_els_rsp_rnid_acc()
6235 elsiocb = lpfc_prep_els_iocb(vport, 0, cmdsize, oldiocb->retry, ndlp, in lpfc_els_rsp_rnid_acc()
6257 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_rsp_rnid_acc()
6268 memcpy(&rn->portName, &vport->fc_portname, sizeof(struct lpfc_name)); in lpfc_els_rsp_rnid_acc()
6269 memcpy(&rn->nodeName, &vport->fc_nodename, sizeof(struct lpfc_name)); in lpfc_els_rsp_rnid_acc()
6277 &vport->fc_portname, sizeof(struct lpfc_name)); in lpfc_els_rsp_rnid_acc()
6288 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_RSP, in lpfc_els_rsp_rnid_acc()
6312 * @vport: pointer to a virtual N_Port data structure.
6319 lpfc_els_clear_rrq(struct lpfc_vport *vport, in lpfc_els_clear_rrq() argument
6322 struct lpfc_hba *phba = vport->phba; in lpfc_els_clear_rrq()
6336 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_clear_rrq()
6345 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_RSP, in lpfc_els_clear_rrq()
6348 if (vport->fc_myDID == be32_to_cpu(bf_get(rrq_did, rrq))) in lpfc_els_clear_rrq()
6352 prrq = lpfc_get_active_rrq(vport, xri, ndlp->nlp_DID); in lpfc_els_clear_rrq()
6360 * @vport: pointer to a virtual N_Port data structure.
6370 lpfc_els_rsp_echo_acc(struct lpfc_vport *vport, uint8_t *data, in lpfc_els_rsp_echo_acc() argument
6373 struct lpfc_hba *phba = vport->phba; in lpfc_els_rsp_echo_acc()
6392 elsiocb = lpfc_prep_els_iocb(vport, 0, cmdsize, oldiocb->retry, ndlp, in lpfc_els_rsp_echo_acc()
6414 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_rsp_echo_acc()
6422 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_RSP, in lpfc_els_rsp_echo_acc()
6445 * lpfc_els_disc_adisc - Issue remaining adisc iocbs to npr nodes of a vport
6446 * @vport: pointer to a host virtual N_Port data structure.
6450 * for the @vport. Each time an ELS ADISC IOCB is issued by invoking the
6451 * lpfc_issue_els_adisc() routine, the per @vport number of discover count
6453 * pre-configured threshold (cfg_discovery_threads), the @vport fc_flag will
6456 * all the ndlps with the @vport and there is none ADISC IOCB issued, the
6457 * @vport fc_flag shall be cleared with FC_NLP_MORE bit indicating there is
6464 lpfc_els_disc_adisc(struct lpfc_vport *vport) in lpfc_els_disc_adisc() argument
6470 list_for_each_entry_safe(ndlp, next_ndlp, &vport->fc_nodes, nlp_listp) { in lpfc_els_disc_adisc()
6486 lpfc_nlp_unreg_node(vport, ndlp); in lpfc_els_disc_adisc()
6487 lpfc_unreg_rpi(vport, ndlp); in lpfc_els_disc_adisc()
6492 lpfc_nlp_set_state(vport, ndlp, NLP_STE_ADISC_ISSUE); in lpfc_els_disc_adisc()
6493 lpfc_issue_els_adisc(vport, ndlp, 0); in lpfc_els_disc_adisc()
6495 vport->num_disc_nodes++; in lpfc_els_disc_adisc()
6496 if (vport->num_disc_nodes >= in lpfc_els_disc_adisc()
6497 vport->cfg_discovery_threads) { in lpfc_els_disc_adisc()
6498 set_bit(FC_NLP_MORE, &vport->fc_flag); in lpfc_els_disc_adisc()
6504 clear_bit(FC_NLP_MORE, &vport->fc_flag); in lpfc_els_disc_adisc()
6509 * lpfc_els_disc_plogi - Issue plogi for all npr nodes of a vport before adisc
6510 * @vport: pointer to a host virtual N_Port data structure.
6513 * which are in node port recovery state, with a @vport. Each time an ELS
6515 * the per @vport number of discover count (num_disc_nodes) shall be
6517 * (cfg_discovery_threads), the @vport fc_flag will be marked with FC_NLP_MORE
6520 * the @vport and there is none ADISC PLOGI IOCB issued, the @vport fc_flag
6528 lpfc_els_disc_plogi(struct lpfc_vport *vport) in lpfc_els_disc_plogi() argument
6534 list_for_each_entry_safe(ndlp, next_ndlp, &vport->fc_nodes, nlp_listp) { in lpfc_els_disc_plogi()
6540 lpfc_nlp_set_state(vport, ndlp, NLP_STE_PLOGI_ISSUE); in lpfc_els_disc_plogi()
6541 lpfc_issue_els_plogi(vport, ndlp->nlp_DID, 0); in lpfc_els_disc_plogi()
6543 vport->num_disc_nodes++; in lpfc_els_disc_plogi()
6544 if (vport->num_disc_nodes >= in lpfc_els_disc_plogi()
6545 vport->cfg_discovery_threads) { in lpfc_els_disc_plogi()
6546 set_bit(FC_NLP_MORE, &vport->fc_flag); in lpfc_els_disc_plogi()
6552 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY, in lpfc_els_disc_plogi()
6554 sentplogi, vport->fc_flag); in lpfc_els_disc_plogi()
6557 lpfc_set_disctmo(vport); in lpfc_els_disc_plogi()
6559 clear_bit(FC_NLP_MORE, &vport->fc_flag); in lpfc_els_disc_plogi()
6671 struct lpfc_vport *vport) in lpfc_rdp_res_bbc_desc() argument
6677 bbCredit = vport->fc_sparam.cmn.bbCreditLsb | in lpfc_rdp_res_bbc_desc()
6678 (vport->fc_sparam.cmn.bbCreditMsb << 8); in lpfc_rdp_res_bbc_desc()
6680 if (vport->phba->fc_topology != LPFC_TOPOLOGY_LOOP) { in lpfc_rdp_res_bbc_desc()
6681 bbCredit = vport->phba->fc_fabparam.cmn.bbCreditLsb | in lpfc_rdp_res_bbc_desc()
6682 (vport->phba->fc_fabparam.cmn.bbCreditMsb << 8); in lpfc_rdp_res_bbc_desc()
6841 uint8_t *page_a0, struct lpfc_vport *vport) in lpfc_rdp_res_opd_desc() argument
6949 struct lpfc_vport *vport) in lpfc_rdp_res_diag_port_names() argument
6954 memcpy(desc->port_names.wwnn, &vport->fc_nodename, in lpfc_rdp_res_diag_port_names()
6957 memcpy(desc->port_names.wwpn, &vport->fc_portname, in lpfc_rdp_res_diag_port_names()
6966 struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) in lpfc_rdp_res_attach_port_names() argument
6970 if (test_bit(FC_FABRIC, &vport->fc_flag)) { in lpfc_rdp_res_attach_port_names()
6971 memcpy(desc->port_names.wwnn, &vport->fabric_nodename, in lpfc_rdp_res_attach_port_names()
6974 memcpy(desc->port_names.wwpn, &vport->fabric_portname, in lpfc_rdp_res_attach_port_names()
6993 struct lpfc_vport *vport = ndlp->vport; in lpfc_els_rdp_cmpl() local
7012 elsiocb = lpfc_prep_els_iocb(vport, 0, cmdsize, in lpfc_els_rdp_cmpl()
7032 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_rdp_cmpl()
7061 (len + pcmd), vport); in lpfc_els_rdp_cmpl()
7063 (len + pcmd), vport, ndlp); in lpfc_els_rdp_cmpl()
7067 &rdp_context->link_stat, vport); in lpfc_els_rdp_cmpl()
7084 rdp_context->page_a0, vport); in lpfc_els_rdp_cmpl()
7112 elsiocb = lpfc_prep_els_iocb(vport, 0, cmdsize, lpfc_max_els_tries, in lpfc_els_rdp_cmpl()
7174 mbox->vport = rdp_context->ndlp->vport; in lpfc_get_rdp_info()
7235 mbox->vport = phba->pport; in lpfc_get_sfp_info_wait()
7262 mbox->vport = phba->pport; in lpfc_get_sfp_info_wait()
7323 * @vport: pointer to a host virtual N_Port data structure.
7339 lpfc_els_rcv_rdp(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb, in lpfc_els_rcv_rdp() argument
7342 struct lpfc_hba *phba = vport->phba; in lpfc_els_rcv_rdp()
7368 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_rcv_rdp()
7403 lpfc_printf_vlog(ndlp->vport, KERN_WARNING, LOG_ELS, in lpfc_els_rcv_rdp()
7420 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp, NULL); in lpfc_els_rcv_rdp()
7564 lpfc_sli4_set_beacon(struct lpfc_vport *vport, in lpfc_sli4_set_beacon() argument
7568 struct lpfc_hba *phba = vport->phba; in lpfc_sli4_set_beacon()
7585 mbox->vport = phba->pport; in lpfc_sli4_set_beacon()
7637 * @vport: pointer to a host virtual N_Port data structure.
7650 lpfc_els_rcv_lcb(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb, in lpfc_els_rcv_lcb() argument
7653 struct lpfc_hba *phba = vport->phba; in lpfc_els_rcv_lcb()
7665 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_rcv_lcb()
7709 if (lpfc_sli4_set_beacon(vport, lcb_context, state)) { in lpfc_els_rcv_lcb()
7710 lpfc_printf_vlog(ndlp->vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_els_rcv_lcb()
7723 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp, NULL); in lpfc_els_rcv_lcb()
7729 * lpfc_els_flush_rscn - Clean up any rscn activities with a vport
7730 * @vport: pointer to a host virtual N_Port data structure.
7733 * (RSCN) activity with a @vport. Note that the fc_rscn_flush flag of the
7734 * @vport together with the host_lock is used to prevent multiple thread
7735 * trying to access the RSCN array on a same @vport at the same time.
7738 lpfc_els_flush_rscn(struct lpfc_vport *vport) in lpfc_els_flush_rscn() argument
7740 struct Scsi_Host *shost = lpfc_shost_from_vport(vport); in lpfc_els_flush_rscn()
7741 struct lpfc_hba *phba = vport->phba; in lpfc_els_flush_rscn()
7745 if (vport->fc_rscn_flush) { in lpfc_els_flush_rscn()
7746 /* Another thread is walking fc_rscn_id_list on this vport */ in lpfc_els_flush_rscn()
7750 /* Indicate we are walking lpfc_els_flush_rscn on this vport */ in lpfc_els_flush_rscn()
7751 vport->fc_rscn_flush = 1; in lpfc_els_flush_rscn()
7754 for (i = 0; i < vport->fc_rscn_id_cnt; i++) { in lpfc_els_flush_rscn()
7755 lpfc_in_buf_free(phba, vport->fc_rscn_id_list[i]); in lpfc_els_flush_rscn()
7756 vport->fc_rscn_id_list[i] = NULL; in lpfc_els_flush_rscn()
7758 clear_bit(FC_RSCN_MODE, &vport->fc_flag); in lpfc_els_flush_rscn()
7759 clear_bit(FC_RSCN_DISCOVERY, &vport->fc_flag); in lpfc_els_flush_rscn()
7761 vport->fc_rscn_id_cnt = 0; in lpfc_els_flush_rscn()
7763 lpfc_can_disctmo(vport); in lpfc_els_flush_rscn()
7765 vport->fc_rscn_flush = 0; in lpfc_els_flush_rscn()
7770 * @vport: pointer to a host virtual N_Port data structure.
7774 * Configuration Notification (RSCN) to a @did on @vport.
7781 lpfc_rscn_payload_check(struct lpfc_vport *vport, uint32_t did) in lpfc_rscn_payload_check() argument
7787 struct Scsi_Host *shost = lpfc_shost_from_vport(vport); in lpfc_rscn_payload_check()
7796 if (test_bit(FC_RSCN_DISCOVERY, &vport->fc_flag)) in lpfc_rscn_payload_check()
7800 if (vport->fc_rscn_flush) { in lpfc_rscn_payload_check()
7801 /* Another thread is walking fc_rscn_id_list on this vport */ in lpfc_rscn_payload_check()
7805 /* Indicate we are walking fc_rscn_id_list on this vport */ in lpfc_rscn_payload_check()
7806 vport->fc_rscn_flush = 1; in lpfc_rscn_payload_check()
7808 for (i = 0; i < vport->fc_rscn_id_cnt; i++) { in lpfc_rscn_payload_check()
7809 lp = vport->fc_rscn_id_list[i]->virt; in lpfc_rscn_payload_check()
7836 /* Indicate we are done with walking fc_rscn_id_list on this vport */ in lpfc_rscn_payload_check()
7837 vport->fc_rscn_flush = 0; in lpfc_rscn_payload_check()
7840 /* Indicate we are done with walking fc_rscn_id_list on this vport */ in lpfc_rscn_payload_check()
7841 vport->fc_rscn_flush = 0; in lpfc_rscn_payload_check()
7846 * lpfc_rscn_recovery_check - Send recovery event to vport nodes matching rscn
7847 * @vport: pointer to a host virtual N_Port data structure.
7850 * state machine for a @vport's nodes that are with pending RSCN (Registration
7857 lpfc_rscn_recovery_check(struct lpfc_vport *vport) in lpfc_rscn_recovery_check() argument
7862 list_for_each_entry_safe(ndlp, n, &vport->fc_nodes, nlp_listp) { in lpfc_rscn_recovery_check()
7864 !lpfc_rscn_payload_check(vport, ndlp->nlp_DID)) in lpfc_rscn_recovery_check()
7868 if (vport->phba->nvmet_support) in lpfc_rscn_recovery_check()
7883 lpfc_disc_state_machine(vport, ndlp, NULL, in lpfc_rscn_recovery_check()
7885 lpfc_cancel_retry_delay_tmo(vport, ndlp); in lpfc_rscn_recovery_check()
7892 * @vport: pointer to a host virtual N_Port data structure.
7899 lpfc_send_rscn_event(struct lpfc_vport *vport, in lpfc_send_rscn_event() argument
7903 struct Scsi_Host *shost = lpfc_shost_from_vport(vport); in lpfc_send_rscn_event()
7915 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_send_rscn_event()
7935 * @vport: pointer to a host virtual N_Port data structure.
7946 * state, the fc_rscn_id_list of this @vport is walked and the
7956 lpfc_els_rcv_rscn(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb, in lpfc_els_rcv_rscn() argument
7959 struct Scsi_Host *shost = lpfc_shost_from_vport(vport); in lpfc_els_rcv_rscn()
7960 struct lpfc_hba *phba = vport->phba; in lpfc_els_rcv_rscn()
7974 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY, in lpfc_els_rcv_rscn()
7976 vport->fc_flag, payload_len, *lp, in lpfc_els_rcv_rscn()
7977 vport->fc_rscn_id_cnt); in lpfc_els_rcv_rscn()
7980 lpfc_send_rscn_event(vport, cmdiocb); in lpfc_els_rcv_rscn()
7987 if (test_bit(FC_PT2PT, &vport->fc_flag)) { in lpfc_els_rcv_rscn()
7989 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_rcv_rscn()
7991 *lp, vport->fc_flag, payload_len); in lpfc_els_rcv_rscn()
7992 lpfc_els_rsp_acc(vport, ELS_CMD_ACC, cmdiocb, ndlp, NULL); in lpfc_els_rcv_rscn()
7999 lpfc_nvme_rescan_port(vport, ndlp); in lpfc_els_rcv_rscn()
8006 if (vport->port_state <= LPFC_NS_QRY) { in lpfc_els_rcv_rscn()
8007 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_rcv_rscn()
8009 ndlp->nlp_DID, vport->port_state, ndlp->nlp_flag); in lpfc_els_rcv_rscn()
8011 lpfc_els_rsp_acc(vport, ELS_CMD_ACC, cmdiocb, ndlp, NULL); in lpfc_els_rcv_rscn()
8019 !(vport->cfg_peer_port_login)) { in lpfc_els_rcv_rscn()
8032 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY, in lpfc_els_rcv_rscn()
8035 vport->fc_flag, payload_len, in lpfc_els_rcv_rscn()
8036 *lp, vport->fc_rscn_id_cnt); in lpfc_els_rcv_rscn()
8037 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_rcv_rscn()
8038 "RCV RSCN vport: did:x%x/ste:x%x flg:x%lx", in lpfc_els_rcv_rscn()
8039 ndlp->nlp_DID, vport->port_state, in lpfc_els_rcv_rscn()
8042 lpfc_els_rsp_acc(vport, ELS_CMD_ACC, cmdiocb, in lpfc_els_rcv_rscn()
8045 if (test_bit(FC_DISC_TMO, &vport->fc_flag)) { in lpfc_els_rcv_rscn()
8047 mod_timer(&vport->fc_disctmo, in lpfc_els_rcv_rscn()
8056 if (vport->fc_rscn_flush) { in lpfc_els_rcv_rscn()
8057 /* Another thread is walking fc_rscn_id_list on this vport */ in lpfc_els_rcv_rscn()
8059 set_bit(FC_RSCN_DISCOVERY, &vport->fc_flag); in lpfc_els_rcv_rscn()
8061 lpfc_els_rsp_acc(vport, ELS_CMD_ACC, cmdiocb, ndlp, NULL); in lpfc_els_rcv_rscn()
8064 /* Indicate we are walking fc_rscn_id_list on this vport */ in lpfc_els_rcv_rscn()
8065 vport->fc_rscn_flush = 1; in lpfc_els_rcv_rscn()
8068 rscn_cnt = vport->fc_rscn_id_cnt; in lpfc_els_rcv_rscn()
8072 if (test_bit(FC_RSCN_MODE, &vport->fc_flag) || in lpfc_els_rcv_rscn()
8073 test_bit(FC_NDISC_ACTIVE, &vport->fc_flag)) { in lpfc_els_rcv_rscn()
8074 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_rcv_rscn()
8076 ndlp->nlp_DID, vport->port_state, ndlp->nlp_flag); in lpfc_els_rcv_rscn()
8078 set_bit(FC_RSCN_DEFERRED, &vport->fc_flag); in lpfc_els_rcv_rscn()
8081 if (test_bit(FC_DISC_TMO, &vport->fc_flag)) { in lpfc_els_rcv_rscn()
8083 mod_timer(&vport->fc_disctmo, in lpfc_els_rcv_rscn()
8087 !test_bit(FC_RSCN_DISCOVERY, &vport->fc_flag)) { in lpfc_els_rcv_rscn()
8088 set_bit(FC_RSCN_MODE, &vport->fc_flag); in lpfc_els_rcv_rscn()
8090 cmd = vport->fc_rscn_id_list[rscn_cnt-1]->virt; in lpfc_els_rcv_rscn()
8100 vport->fc_rscn_id_list[rscn_cnt] = pcmd; in lpfc_els_rcv_rscn()
8101 vport->fc_rscn_id_cnt++; in lpfc_els_rcv_rscn()
8108 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY, in lpfc_els_rcv_rscn()
8111 vport->fc_rscn_id_cnt, vport->fc_flag, in lpfc_els_rcv_rscn()
8112 vport->port_state); in lpfc_els_rcv_rscn()
8114 set_bit(FC_RSCN_DISCOVERY, &vport->fc_flag); in lpfc_els_rcv_rscn()
8116 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY, in lpfc_els_rcv_rscn()
8119 vport->fc_rscn_id_cnt, vport->fc_flag, in lpfc_els_rcv_rscn()
8120 vport->port_state); in lpfc_els_rcv_rscn()
8122 /* Indicate we are done walking fc_rscn_id_list on this vport */ in lpfc_els_rcv_rscn()
8123 vport->fc_rscn_flush = 0; in lpfc_els_rcv_rscn()
8125 lpfc_els_rsp_acc(vport, ELS_CMD_ACC, cmdiocb, ndlp, NULL); in lpfc_els_rcv_rscn()
8127 lpfc_rscn_recovery_check(vport); in lpfc_els_rcv_rscn()
8130 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_rcv_rscn()
8132 ndlp->nlp_DID, vport->port_state, ndlp->nlp_flag); in lpfc_els_rcv_rscn()
8134 set_bit(FC_RSCN_MODE, &vport->fc_flag); in lpfc_els_rcv_rscn()
8135 vport->fc_rscn_id_list[vport->fc_rscn_id_cnt++] = pcmd; in lpfc_els_rcv_rscn()
8136 /* Indicate we are done walking fc_rscn_id_list on this vport */ in lpfc_els_rcv_rscn()
8137 vport->fc_rscn_flush = 0; in lpfc_els_rcv_rscn()
8143 lpfc_set_disctmo(vport); in lpfc_els_rcv_rscn()
8145 lpfc_els_rsp_acc(vport, ELS_CMD_ACC, cmdiocb, ndlp, NULL); in lpfc_els_rcv_rscn()
8147 lpfc_rscn_recovery_check(vport); in lpfc_els_rcv_rscn()
8148 return lpfc_els_handle_rscn(vport); in lpfc_els_rcv_rscn()
8152 * lpfc_els_handle_rscn - Handle rscn for a vport
8153 * @vport: pointer to a host virtual N_Port data structure.
8156 * (RSCN) for a @vport. If login to NameServer does not exist, a new ndlp shall
8161 * RSCN activities with the @vport.
8164 * 0 - Cleaned up rscn on the @vport
8168 lpfc_els_handle_rscn(struct lpfc_vport *vport) in lpfc_els_handle_rscn() argument
8171 struct lpfc_hba *phba = vport->phba; in lpfc_els_handle_rscn()
8174 if (test_bit(FC_UNLOADING, &vport->load_flag)) { in lpfc_els_handle_rscn()
8175 lpfc_els_flush_rscn(vport); in lpfc_els_handle_rscn()
8180 lpfc_set_disctmo(vport); in lpfc_els_handle_rscn()
8183 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY, in lpfc_els_handle_rscn()
8185 vport->fc_flag, 0, vport->fc_rscn_id_cnt, in lpfc_els_handle_rscn()
8186 vport->port_state, vport->num_disc_nodes, in lpfc_els_handle_rscn()
8187 vport->gidft_inp); in lpfc_els_handle_rscn()
8190 vport->fc_ns_retry = 0; in lpfc_els_handle_rscn()
8191 vport->num_disc_nodes = 0; in lpfc_els_handle_rscn()
8193 ndlp = lpfc_findnode_did(vport, NameServer_DID); in lpfc_els_handle_rscn()
8201 if (lpfc_issue_gidft(vport) > 0) in lpfc_els_handle_rscn()
8204 if (lpfc_issue_gidpt(vport) > 0) in lpfc_els_handle_rscn()
8213 lpfc_nlp_set_state(vport, ndlp, NLP_STE_PLOGI_ISSUE); in lpfc_els_handle_rscn()
8215 ndlp = lpfc_nlp_init(vport, NameServer_DID); in lpfc_els_handle_rscn()
8217 lpfc_els_flush_rscn(vport); in lpfc_els_handle_rscn()
8221 lpfc_nlp_set_state(vport, ndlp, NLP_STE_PLOGI_ISSUE); in lpfc_els_handle_rscn()
8224 lpfc_issue_els_plogi(vport, NameServer_DID, 0); in lpfc_els_handle_rscn()
8231 lpfc_els_flush_rscn(vport); in lpfc_els_handle_rscn()
8237 * @vport: pointer to a host virtual N_Port data structure.
8249 * FLOGI shall be compared with the Port WWN of the @vport to determine who
8253 * of this will be marked in the @vport fc_flag field with FC_PT2PT_PLOGI
8261 lpfc_els_rcv_flogi(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb, in lpfc_els_rcv_flogi() argument
8264 struct Scsi_Host *shost = lpfc_shost_from_vport(vport); in lpfc_els_rcv_flogi()
8265 struct lpfc_hba *phba = vport->phba; in lpfc_els_rcv_flogi()
8284 lpfc_set_disctmo(vport); in lpfc_els_rcv_flogi()
8292 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_els_rcv_flogi()
8299 (void) lpfc_check_sparm(vport, ndlp, sp, CLASS3, 1); in lpfc_els_rcv_flogi()
8306 rc = memcmp(&vport->fc_portname, &sp->portName, in lpfc_els_rcv_flogi()
8321 mbox->vport = vport; in lpfc_els_rcv_flogi()
8333 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS | LOG_LIBDFC, in lpfc_els_rcv_flogi()
8343 set_bit(FC_PT2PT_PLOGI, &vport->fc_flag); in lpfc_els_rcv_flogi()
8350 vport->fc_myDID = PT2PT_LocalID; in lpfc_els_rcv_flogi()
8352 vport->fc_myDID = PT2PT_RemoteID; in lpfc_els_rcv_flogi()
8356 * The vport state should go to LPFC_FLOGI only in lpfc_els_rcv_flogi()
8360 fc_flag = vport->fc_flag; in lpfc_els_rcv_flogi()
8361 port_state = vport->port_state; in lpfc_els_rcv_flogi()
8365 vport->rcv_flogi_cnt++; in lpfc_els_rcv_flogi()
8367 set_bit(FC_PT2PT, &vport->fc_flag); in lpfc_els_rcv_flogi()
8368 clear_bit(FC_FABRIC, &vport->fc_flag); in lpfc_els_rcv_flogi()
8369 clear_bit(FC_PUBLIC_LOOP, &vport->fc_flag); in lpfc_els_rcv_flogi()
8370 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_rcv_flogi()
8373 port_state, vport->port_state, in lpfc_els_rcv_flogi()
8374 fc_flag, vport->fc_flag); in lpfc_els_rcv_flogi()
8381 did = vport->fc_myDID; in lpfc_els_rcv_flogi()
8382 vport->fc_myDID = Fabric_DID; in lpfc_els_rcv_flogi()
8393 vport->fc_myDID = did; in lpfc_els_rcv_flogi()
8395 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_rcv_flogi()
8413 lpfc_els_rsp_acc(vport, ELS_CMD_FLOGI, cmdiocb, ndlp, NULL); in lpfc_els_rcv_flogi()
8416 vport->fc_myDID = did; in lpfc_els_rcv_flogi()
8423 * @vport: pointer to a host virtual N_Port data structure.
8438 lpfc_els_rcv_rnid(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb, in lpfc_els_rcv_rnid() argument
8458 lpfc_els_rsp_rnid_acc(vport, rn->Format, cmdiocb, ndlp); in lpfc_els_rcv_rnid()
8466 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp, in lpfc_els_rcv_rnid()
8474 * @vport: pointer to a host virtual N_Port data structure.
8482 lpfc_els_rcv_echo(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb, in lpfc_els_rcv_echo() argument
8492 lpfc_els_rsp_echo_acc(vport, pcmd, cmdiocb, ndlp); in lpfc_els_rcv_echo()
8498 * @vport: pointer to a host virtual N_Port data structure.
8510 lpfc_els_rcv_lirr(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb, in lpfc_els_rcv_lirr() argument
8520 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp, NULL); in lpfc_els_rcv_lirr()
8526 * @vport: pointer to a host virtual N_Port data structure.
8541 lpfc_els_rcv_rrq(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb, in lpfc_els_rcv_rrq() argument
8544 lpfc_els_rsp_acc(vport, ELS_CMD_ACC, cmdiocb, ndlp, NULL); in lpfc_els_rcv_rrq()
8545 if (vport->phba->sli_rev == LPFC_SLI_REV4) in lpfc_els_rcv_rrq()
8546 lpfc_els_clear_rrq(vport, cmdiocb, ndlp); in lpfc_els_rcv_rrq()
8635 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_ELS, in lpfc_els_rsp_rls_acc()
8659 * @vport: pointer to a host virtual N_Port data structure.
8676 lpfc_els_rcv_rls(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb, in lpfc_els_rcv_rls() argument
8679 struct lpfc_hba *phba = vport->phba; in lpfc_els_rcv_rls()
8697 mbox->vport = vport; in lpfc_els_rcv_rls()
8716 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp, NULL); in lpfc_els_rcv_rls()
8722 * @vport: pointer to a host virtual N_Port data structure.
8742 lpfc_els_rcv_rtv(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb, in lpfc_els_rcv_rtv() argument
8748 struct lpfc_hba *phba = vport->phba; in lpfc_els_rcv_rtv()
8797 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_ELS, in lpfc_els_rcv_rtv()
8826 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp, NULL); in lpfc_els_rcv_rtv()
8831 * @vport: pointer to a host virtual N_Port data structure.
8844 lpfc_issue_els_rrq(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, in lpfc_issue_els_rrq() argument
8847 struct lpfc_hba *phba = vport->phba; in lpfc_issue_els_rrq()
8859 elsiocb = lpfc_prep_els_iocb(vport, 1, cmdsize, 0, ndlp, did, in lpfc_issue_els_rrq()
8873 bf_set(rrq_did, els_rrq, vport->fc_myDID); in lpfc_issue_els_rrq()
8878 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_issue_els_rrq()
8915 struct lpfc_nodelist *ndlp = lpfc_findnode_did(rrq->vport, in lpfc_send_rrq()
8921 return lpfc_issue_els_rrq(rrq->vport, ndlp, in lpfc_send_rrq()
8929 * @vport: pointer to a host virtual N_Port data structure.
8947 lpfc_els_rsp_rpl_acc(struct lpfc_vport *vport, uint16_t cmdsize, in lpfc_els_rsp_rpl_acc() argument
8951 struct lpfc_hba *phba = vport->phba; in lpfc_els_rsp_rpl_acc()
8959 elsiocb = lpfc_prep_els_iocb(vport, 0, cmdsize, oldiocb->retry, ndlp, in lpfc_els_rsp_rpl_acc()
8989 rpl_rsp.port_num_blk.portID = be32_to_cpu(vport->fc_myDID); in lpfc_els_rsp_rpl_acc()
8990 memcpy(&rpl_rsp.port_num_blk.portName, &vport->fc_portname, in lpfc_els_rsp_rpl_acc()
8994 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_rsp_rpl_acc()
9021 * @vport: pointer to a host virtual N_Port data structure.
9036 lpfc_els_rcv_rpl(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb, in lpfc_els_rcv_rpl() argument
9053 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp, in lpfc_els_rcv_rpl()
9072 lpfc_els_rsp_rpl_acc(vport, cmdsize, cmdiocb, ndlp); in lpfc_els_rcv_rpl()
9079 * @vport: pointer to a virtual N_Port data structure.
9088 * remote PortName is compared against the FC PortName stored in the @vport
9090 * compared against the FC NodeName stored in the @vport data structure.
9102 lpfc_els_rcv_farp(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb, in lpfc_els_rcv_farp() argument
9110 did = get_job_els_rsp64_did(vport->phba, cmdiocb); in lpfc_els_rcv_farp()
9117 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_rcv_farp()
9127 if (memcmp(&fp->RportName, &vport->fc_portname, in lpfc_els_rcv_farp()
9134 if (memcmp(&fp->RnodeName, &vport->fc_nodename, in lpfc_els_rcv_farp()
9145 lpfc_nlp_set_state(vport, ndlp, in lpfc_els_rcv_farp()
9147 lpfc_issue_els_plogi(vport, ndlp->nlp_DID, 0); in lpfc_els_rcv_farp()
9152 lpfc_issue_els_farpr(vport, did, 0); in lpfc_els_rcv_farp()
9160 * @vport: pointer to a host virtual N_Port data structure.
9173 lpfc_els_rcv_farpr(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb, in lpfc_els_rcv_farpr() argument
9178 did = get_job_els_rsp64_did(vport->phba, cmdiocb); in lpfc_els_rcv_farpr()
9181 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_rcv_farpr()
9184 lpfc_els_rsp_acc(vport, ELS_CMD_ACC, cmdiocb, ndlp, NULL); in lpfc_els_rcv_farpr()
9191 * @vport: pointer to a host virtual N_Port data structure.
9197 * only be processed on a physical port (i.e., the @vport represents the
9209 lpfc_els_rcv_fan(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb, in lpfc_els_rcv_fan() argument
9212 struct lpfc_hba *phba = vport->phba; in lpfc_els_rcv_fan()
9216 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, "0265 FAN received\n"); in lpfc_els_rcv_fan()
9220 if ((vport == phba->pport) && in lpfc_els_rcv_fan()
9221 (vport->port_state == LPFC_LOCAL_CFG_LINK)) { in lpfc_els_rcv_fan()
9227 lpfc_issue_init_vfi(vport); in lpfc_els_rcv_fan()
9230 vport->fc_myDID = vport->fc_prevDID; in lpfc_els_rcv_fan()
9232 lpfc_issue_fabric_reglogin(vport); in lpfc_els_rcv_fan()
9234 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_rcv_fan()
9236 vport->fc_prevDID, vport->fc_myDID); in lpfc_els_rcv_fan()
9237 lpfc_issue_reg_vfi(vport); in lpfc_els_rcv_fan()
9246 * @vport: pointer to a host virtual N_Port data structure.
9254 lpfc_els_rcv_edc(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb, in lpfc_els_rcv_edc() argument
9257 struct lpfc_hba *phba = vport->phba; in lpfc_els_rcv_edc()
9272 lpfc_printf_vlog(vport, KERN_INFO, in lpfc_els_rcv_edc()
9370 lpfc_issue_els_edc_rsp(vport, cmdiocb, ndlp); in lpfc_els_rcv_edc()
9378 * @t: timer context used to obtain the vport.
9389 struct lpfc_vport *vport = from_timer(vport, t, els_tmofunc); in lpfc_els_timeout() local
9390 struct lpfc_hba *phba = vport->phba; in lpfc_els_timeout()
9394 spin_lock_irqsave(&vport->work_port_lock, iflag); in lpfc_els_timeout()
9395 tmo_posted = vport->work_port_events & WORKER_ELS_TMO; in lpfc_els_timeout()
9396 if (!tmo_posted && !test_bit(FC_UNLOADING, &vport->load_flag)) in lpfc_els_timeout()
9397 vport->work_port_events |= WORKER_ELS_TMO; in lpfc_els_timeout()
9398 spin_unlock_irqrestore(&vport->work_port_lock, iflag); in lpfc_els_timeout()
9400 if (!tmo_posted && !test_bit(FC_UNLOADING, &vport->load_flag)) in lpfc_els_timeout()
9408 * @vport: pointer to a virtual N_Port data structure.
9412 * ABORT/CLOSE/FARP/FARPR/FDISC), which are associated with the @vport by
9416 lpfc_els_timeout_handler(struct lpfc_vport *vport) in lpfc_els_timeout_handler() argument
9418 struct lpfc_hba *phba = vport->phba; in lpfc_els_timeout_handler()
9461 if (piocb->vport != vport) in lpfc_els_timeout_handler()
9486 ndlp = __lpfc_findnode_rpi(vport, ulp_context); in lpfc_els_timeout_handler()
9497 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_els_timeout_handler()
9513 mod_timer(&vport->els_tmofunc, in lpfc_els_timeout_handler()
9518 * lpfc_els_flush_cmd - Clean up the outstanding els commands to a vport
9519 * @vport: pointer to a host virtual N_Port data structure.
9522 * @vport. It first aborts the @vport by invoking lpfc_fabric_abort_vport()
9524 * IOCBs with the @vport other than the QUE_RING and ABORT/CLOSE IOCBs. For
9530 * completion queue IOCB that is associated with the @vport and is not
9538 lpfc_els_flush_cmd(struct lpfc_vport *vport) in lpfc_els_flush_cmd() argument
9542 struct lpfc_hba *phba = vport->phba; in lpfc_els_flush_cmd()
9549 lpfc_fabric_abort_vport(vport); in lpfc_els_flush_cmd()
9572 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_flush_cmd()
9578 (piocb->vport == vport), in lpfc_els_flush_cmd()
9581 if (piocb->vport != vport) in lpfc_els_flush_cmd()
9636 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_els_flush_cmd()
9661 if (piocb->vport != vport) in lpfc_els_flush_cmd()
9669 if (vport == phba->pport) { in lpfc_els_flush_cmd()
9708 struct lpfc_vport *vport; in lpfc_els_flush_all_cmd() local
9711 list_for_each_entry(vport, &phba->port_list, listentry) in lpfc_els_flush_all_cmd()
9712 lpfc_els_flush_cmd(vport); in lpfc_els_flush_all_cmd()
9732 struct lpfc_vport *vport = cmdiocbp->vport; in lpfc_send_els_failure_event() local
9733 struct Scsi_Host *shost = lpfc_shost_from_vport(vport); in lpfc_send_els_failure_event()
9790 * @vport: Pointer to vport object.
9798 lpfc_send_els_event(struct lpfc_vport *vport, in lpfc_send_els_event() argument
9804 struct Scsi_Host *shost = lpfc_shost_from_vport(vport); in lpfc_send_els_event()
9809 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_send_els_event()
9819 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_send_els_event()
10162 lpfc_els_rcv_fpin(struct lpfc_vport *vport, void *p, u32 fpin_length) in lpfc_els_rcv_fpin() argument
10164 struct lpfc_hba *phba = vport->phba; in lpfc_els_rcv_fpin()
10173 if (vport->port_state < LPFC_DISC_AUTH) in lpfc_els_rcv_fpin()
10262 fc_host_fpin_rcv(lpfc_shost_from_vport(vport), in lpfc_els_rcv_fpin()
10272 * @vport: pointer to a host virtual N_Port data structure.
10284 struct lpfc_vport *vport, struct lpfc_iocbq *elsiocb) in lpfc_els_unsol_buffer() argument
10294 if (!vport || !elsiocb->cmd_dmabuf) in lpfc_els_unsol_buffer()
10311 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_unsol_buffer()
10318 if (lpfc_els_chk_latt(vport)) in lpfc_els_unsol_buffer()
10321 /* Ignore traffic received during vport shutdown. */ in lpfc_els_unsol_buffer()
10322 if (test_bit(FC_UNLOADING, &vport->load_flag)) in lpfc_els_unsol_buffer()
10326 if (test_bit(FC_DISC_DELAYED, &vport->fc_flag) && in lpfc_els_unsol_buffer()
10330 ndlp = lpfc_findnode_did(vport, did); in lpfc_els_unsol_buffer()
10333 ndlp = lpfc_nlp_init(vport, did); in lpfc_els_unsol_buffer()
10336 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE); in lpfc_els_unsol_buffer()
10341 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE); in lpfc_els_unsol_buffer()
10360 elsiocb->vport = vport; in lpfc_els_unsol_buffer()
10366 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_unsol_buffer()
10369 cmd, did, kref_read(&ndlp->kref), vport->port_state, in lpfc_els_unsol_buffer()
10370 vport->fc_flag, vport->fc_myDID, vport->fc_prevDID); in lpfc_els_unsol_buffer()
10373 if ((vport->port_state < LPFC_FABRIC_CFG_LINK) && in lpfc_els_unsol_buffer()
10375 !((cmd == ELS_CMD_PLOGI) && test_bit(FC_PT2PT, &vport->fc_flag))) { in lpfc_els_unsol_buffer()
10383 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_unsol_buffer()
10385 did, vport->port_state, ndlp->nlp_flag); in lpfc_els_unsol_buffer()
10391 vport->fc_prevDID = vport->fc_myDID; in lpfc_els_unsol_buffer()
10396 vport->fc_myDID = in lpfc_els_unsol_buffer()
10399 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_els_unsol_buffer()
10401 "%x\n", vport->fc_myDID, in lpfc_els_unsol_buffer()
10402 vport->fc_prevDID); in lpfc_els_unsol_buffer()
10405 lpfc_send_els_event(vport, ndlp, payload); in lpfc_els_unsol_buffer()
10408 if (test_bit(FC_DISC_DELAYED, &vport->fc_flag)) { in lpfc_els_unsol_buffer()
10414 if (vport->port_state < LPFC_DISC_AUTH) { in lpfc_els_unsol_buffer()
10423 lpfc_disc_state_machine(vport, ndlp, elsiocb, in lpfc_els_unsol_buffer()
10428 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_unsol_buffer()
10430 did, vport->port_state, ndlp->nlp_flag); in lpfc_els_unsol_buffer()
10437 if (vport->port_state >= LPFC_LOCAL_CFG_LINK && in lpfc_els_unsol_buffer()
10438 test_bit(FC_PT2PT, &vport->fc_flag) && in lpfc_els_unsol_buffer()
10439 vport->rcv_flogi_cnt >= 1) { in lpfc_els_unsol_buffer()
10446 lpfc_els_rcv_flogi(vport, elsiocb, ndlp); in lpfc_els_unsol_buffer()
10451 lpfc_disc_state_machine(vport, ndlp, NULL, in lpfc_els_unsol_buffer()
10455 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_unsol_buffer()
10457 did, vport->port_state, ndlp->nlp_flag); in lpfc_els_unsol_buffer()
10460 lpfc_send_els_event(vport, ndlp, payload); in lpfc_els_unsol_buffer()
10461 if (vport->port_state < LPFC_DISC_AUTH) { in lpfc_els_unsol_buffer()
10466 lpfc_disc_state_machine(vport, ndlp, elsiocb, NLP_EVT_RCV_LOGO); in lpfc_els_unsol_buffer()
10468 lpfc_disc_state_machine(vport, ndlp, NULL, in lpfc_els_unsol_buffer()
10472 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_unsol_buffer()
10474 did, vport->port_state, ndlp->nlp_flag); in lpfc_els_unsol_buffer()
10477 lpfc_send_els_event(vport, ndlp, payload); in lpfc_els_unsol_buffer()
10478 if (vport->port_state < LPFC_DISC_AUTH) { in lpfc_els_unsol_buffer()
10483 lpfc_disc_state_machine(vport, ndlp, elsiocb, NLP_EVT_RCV_PRLO); in lpfc_els_unsol_buffer()
10487 lpfc_els_rcv_lcb(vport, elsiocb, ndlp); in lpfc_els_unsol_buffer()
10491 lpfc_els_rcv_rdp(vport, elsiocb, ndlp); in lpfc_els_unsol_buffer()
10495 lpfc_els_rcv_rscn(vport, elsiocb, ndlp); in lpfc_els_unsol_buffer()
10497 lpfc_disc_state_machine(vport, ndlp, NULL, in lpfc_els_unsol_buffer()
10501 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_unsol_buffer()
10503 did, vport->port_state, ndlp->nlp_flag); in lpfc_els_unsol_buffer()
10505 lpfc_send_els_event(vport, ndlp, payload); in lpfc_els_unsol_buffer()
10507 if (vport->port_state < LPFC_DISC_AUTH) { in lpfc_els_unsol_buffer()
10512 lpfc_disc_state_machine(vport, ndlp, elsiocb, in lpfc_els_unsol_buffer()
10516 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_unsol_buffer()
10518 did, vport->port_state, ndlp->nlp_flag); in lpfc_els_unsol_buffer()
10521 if (vport->port_state < LPFC_DISC_AUTH) { in lpfc_els_unsol_buffer()
10526 lpfc_disc_state_machine(vport, ndlp, elsiocb, in lpfc_els_unsol_buffer()
10530 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_unsol_buffer()
10532 did, vport->port_state, ndlp->nlp_flag); in lpfc_els_unsol_buffer()
10535 lpfc_els_rcv_farpr(vport, elsiocb, ndlp); in lpfc_els_unsol_buffer()
10538 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_unsol_buffer()
10540 did, vport->port_state, ndlp->nlp_flag); in lpfc_els_unsol_buffer()
10543 lpfc_els_rcv_farp(vport, elsiocb, ndlp); in lpfc_els_unsol_buffer()
10546 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_unsol_buffer()
10548 did, vport->port_state, ndlp->nlp_flag); in lpfc_els_unsol_buffer()
10551 lpfc_els_rcv_fan(vport, elsiocb, ndlp); in lpfc_els_unsol_buffer()
10555 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_unsol_buffer()
10557 did, vport->port_state, ndlp->nlp_flag); in lpfc_els_unsol_buffer()
10560 if ((vport->port_state < LPFC_DISC_AUTH) && in lpfc_els_unsol_buffer()
10561 test_bit(FC_FABRIC, &vport->fc_flag)) { in lpfc_els_unsol_buffer()
10566 lpfc_disc_state_machine(vport, ndlp, elsiocb, NLP_EVT_RCV_PRLI); in lpfc_els_unsol_buffer()
10569 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_unsol_buffer()
10571 did, vport->port_state, ndlp->nlp_flag); in lpfc_els_unsol_buffer()
10574 lpfc_els_rcv_lirr(vport, elsiocb, ndlp); in lpfc_els_unsol_buffer()
10576 lpfc_disc_state_machine(vport, ndlp, NULL, in lpfc_els_unsol_buffer()
10580 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_unsol_buffer()
10582 did, vport->port_state, ndlp->nlp_flag); in lpfc_els_unsol_buffer()
10585 lpfc_els_rcv_rls(vport, elsiocb, ndlp); in lpfc_els_unsol_buffer()
10587 lpfc_disc_state_machine(vport, ndlp, NULL, in lpfc_els_unsol_buffer()
10591 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_unsol_buffer()
10593 did, vport->port_state, ndlp->nlp_flag); in lpfc_els_unsol_buffer()
10596 lpfc_els_rcv_rpl(vport, elsiocb, ndlp); in lpfc_els_unsol_buffer()
10598 lpfc_disc_state_machine(vport, ndlp, NULL, in lpfc_els_unsol_buffer()
10602 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_unsol_buffer()
10604 did, vport->port_state, ndlp->nlp_flag); in lpfc_els_unsol_buffer()
10607 lpfc_els_rcv_rnid(vport, elsiocb, ndlp); in lpfc_els_unsol_buffer()
10609 lpfc_disc_state_machine(vport, ndlp, NULL, in lpfc_els_unsol_buffer()
10613 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_unsol_buffer()
10615 did, vport->port_state, ndlp->nlp_flag); in lpfc_els_unsol_buffer()
10617 lpfc_els_rcv_rtv(vport, elsiocb, ndlp); in lpfc_els_unsol_buffer()
10619 lpfc_disc_state_machine(vport, ndlp, NULL, in lpfc_els_unsol_buffer()
10623 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_unsol_buffer()
10625 did, vport->port_state, ndlp->nlp_flag); in lpfc_els_unsol_buffer()
10628 lpfc_els_rcv_rrq(vport, elsiocb, ndlp); in lpfc_els_unsol_buffer()
10630 lpfc_disc_state_machine(vport, ndlp, NULL, in lpfc_els_unsol_buffer()
10634 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_unsol_buffer()
10636 did, vport->port_state, ndlp->nlp_flag); in lpfc_els_unsol_buffer()
10639 lpfc_els_rcv_echo(vport, elsiocb, ndlp); in lpfc_els_unsol_buffer()
10641 lpfc_disc_state_machine(vport, ndlp, NULL, in lpfc_els_unsol_buffer()
10650 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_unsol_buffer()
10653 did, vport->port_state, ndlp->nlp_flag); in lpfc_els_unsol_buffer()
10655 lpfc_els_rcv_fpin(vport, (struct fc_els_fpin *)payload, in lpfc_els_unsol_buffer()
10661 lpfc_els_rcv_edc(vport, elsiocb, ndlp); in lpfc_els_unsol_buffer()
10667 lpfc_printf_vlog(vport, KERN_WARNING, LOG_ELS, in lpfc_els_unsol_buffer()
10675 lpfc_els_rcv_rdf(vport, elsiocb, ndlp); in lpfc_els_unsol_buffer()
10678 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_UNSOL, in lpfc_els_unsol_buffer()
10680 cmd, did, vport->port_state); in lpfc_els_unsol_buffer()
10687 lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS, in lpfc_els_unsol_buffer()
10691 lpfc_disc_state_machine(vport, ndlp, NULL, in lpfc_els_unsol_buffer()
10702 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, elsiocb, ndlp, in lpfc_els_unsol_buffer()
10706 lpfc_disc_state_machine(vport, ndlp, NULL, in lpfc_els_unsol_buffer()
10728 mbox->vport = vport; in lpfc_els_unsol_buffer()
10737 if (vport && !test_bit(FC_UNLOADING, &vport->load_flag)) in lpfc_els_unsol_buffer()
10738 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_els_unsol_buffer()
10762 struct lpfc_vport *vport = elsiocb->vport; in lpfc_els_unsol_event() local
10801 vport = phba->pport; in lpfc_els_unsol_event()
10803 vport = lpfc_find_vport_by_vpid(phba, in lpfc_els_unsol_event()
10834 lpfc_els_unsol_buffer(phba, pring, vport, elsiocb); in lpfc_els_unsol_event()
10852 lpfc_start_fdmi(struct lpfc_vport *vport) in lpfc_start_fdmi() argument
10860 ndlp = lpfc_findnode_did(vport, FDMI_DID); in lpfc_start_fdmi()
10862 ndlp = lpfc_nlp_init(vport, FDMI_DID); in lpfc_start_fdmi()
10870 lpfc_nlp_set_state(vport, ndlp, NLP_STE_PLOGI_ISSUE); in lpfc_start_fdmi()
10871 lpfc_issue_els_plogi(vport, ndlp->nlp_DID, 0); in lpfc_start_fdmi()
10877 * @vport: pointer to a virtual N_Port data structure.
10880 * State Change Request (SCR) for a @vport. This routine will create an
10881 * ndlp for the Name Server associated to the @vport if such node does
10884 * (FDMI) is configured to the @vport, a FDMI node will be created and
10888 lpfc_do_scr_ns_plogi(struct lpfc_hba *phba, struct lpfc_vport *vport) in lpfc_do_scr_ns_plogi() argument
10897 if (test_bit(FC_DISC_DELAYED, &vport->fc_flag)) { in lpfc_do_scr_ns_plogi()
10898 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_do_scr_ns_plogi()
10901 mod_timer(&vport->delayed_disc_tmo, in lpfc_do_scr_ns_plogi()
10906 ndlp = lpfc_findnode_did(vport, NameServer_DID); in lpfc_do_scr_ns_plogi()
10908 ndlp = lpfc_nlp_init(vport, NameServer_DID); in lpfc_do_scr_ns_plogi()
10911 lpfc_disc_start(vport); in lpfc_do_scr_ns_plogi()
10914 lpfc_vport_set_state(vport, FC_VPORT_FAILED); in lpfc_do_scr_ns_plogi()
10915 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_do_scr_ns_plogi()
10923 lpfc_nlp_set_state(vport, ndlp, NLP_STE_PLOGI_ISSUE); in lpfc_do_scr_ns_plogi()
10925 if (lpfc_issue_els_plogi(vport, ndlp->nlp_DID, 0)) { in lpfc_do_scr_ns_plogi()
10926 lpfc_vport_set_state(vport, FC_VPORT_FAILED); in lpfc_do_scr_ns_plogi()
10927 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_do_scr_ns_plogi()
10934 test_bit(FC_ALLOW_FDMI, &vport->load_flag)) in lpfc_do_scr_ns_plogi()
10935 lpfc_start_fdmi(vport); in lpfc_do_scr_ns_plogi()
10939 * lpfc_cmpl_reg_new_vport - Completion callback function to register new vport
10943 * This routine is the completion callback function to register new vport
10944 * mailbox command. If the new vport mailbox command completes successfully,
10946 * new vport created is actually a physical port, with VPI 0) or the port
10953 struct lpfc_vport *vport = pmb->vport; in lpfc_cmpl_reg_new_vport() local
10954 struct Scsi_Host *shost = lpfc_shost_from_vport(vport); in lpfc_cmpl_reg_new_vport()
10959 clear_bit(FC_VPORT_NEEDS_REG_VPI, &vport->fc_flag); in lpfc_cmpl_reg_new_vport()
10962 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_cmpl_reg_new_vport()
10974 /* giving up on vport registration */ in lpfc_cmpl_reg_new_vport()
10975 lpfc_vport_set_state(vport, FC_VPORT_FAILED); in lpfc_cmpl_reg_new_vport()
10976 clear_bit(FC_FABRIC, &vport->fc_flag); in lpfc_cmpl_reg_new_vport()
10977 clear_bit(FC_PUBLIC_LOOP, &vport->fc_flag); in lpfc_cmpl_reg_new_vport()
10978 lpfc_can_disctmo(vport); in lpfc_cmpl_reg_new_vport()
10982 set_bit(FC_VPORT_NEEDS_REG_VPI, &vport->fc_flag); in lpfc_cmpl_reg_new_vport()
10983 lpfc_init_vpi(phba, pmb, vport->vpi); in lpfc_cmpl_reg_new_vport()
10984 pmb->vport = vport; in lpfc_cmpl_reg_new_vport()
10989 lpfc_printf_vlog(vport, KERN_ERR, in lpfc_cmpl_reg_new_vport()
11001 lpfc_sli4_unreg_all_rpis(vport); in lpfc_cmpl_reg_new_vport()
11002 lpfc_mbx_unreg_vpi(vport); in lpfc_cmpl_reg_new_vport()
11003 set_bit(FC_VPORT_NEEDS_REG_VPI, &vport->fc_flag); in lpfc_cmpl_reg_new_vport()
11006 if ((vport->port_type == LPFC_PHYSICAL_PORT) && in lpfc_cmpl_reg_new_vport()
11007 !test_bit(FC_LOGO_RCVD_DID_CHNG, &vport->fc_flag)) { in lpfc_cmpl_reg_new_vport()
11009 lpfc_issue_init_vfi(vport); in lpfc_cmpl_reg_new_vport()
11011 lpfc_initial_flogi(vport); in lpfc_cmpl_reg_new_vport()
11013 lpfc_initial_fdisc(vport); in lpfc_cmpl_reg_new_vport()
11019 vport->vpi_state |= LPFC_VPI_REGISTERED; in lpfc_cmpl_reg_new_vport()
11021 if (vport == phba->pport) { in lpfc_cmpl_reg_new_vport()
11023 lpfc_issue_fabric_reglogin(vport); in lpfc_cmpl_reg_new_vport()
11027 * FDISC, do not start vport discovery. in lpfc_cmpl_reg_new_vport()
11029 if (vport->port_state != LPFC_FDISC) in lpfc_cmpl_reg_new_vport()
11031 lpfc_do_scr_ns_plogi(phba, vport); in lpfc_cmpl_reg_new_vport()
11034 lpfc_do_scr_ns_plogi(phba, vport); in lpfc_cmpl_reg_new_vport()
11046 * this is specifically for vport in lpfc_cmpl_reg_new_vport()
11049 lpfc_reinit_vmid(vport); in lpfc_cmpl_reg_new_vport()
11050 vport->vmid_flag = vport->phba->pport->vmid_flag; in lpfc_cmpl_reg_new_vport()
11056 * lpfc_register_new_vport - Register a new vport with a HBA
11058 * @vport: pointer to a host virtual N_Port data structure.
11061 * This routine registers the @vport as a new virtual port with a HBA.
11065 lpfc_register_new_vport(struct lpfc_hba *phba, struct lpfc_vport *vport, in lpfc_register_new_vport() argument
11072 lpfc_reg_vpi(vport, mbox); in lpfc_register_new_vport()
11073 mbox->vport = vport; in lpfc_register_new_vport()
11089 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_register_new_vport()
11094 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_register_new_vport()
11101 lpfc_vport_set_state(vport, FC_VPORT_FAILED); in lpfc_register_new_vport()
11102 clear_bit(FC_VPORT_NEEDS_REG_VPI, &vport->fc_flag); in lpfc_register_new_vport()
11107 * lpfc_cancel_all_vport_retry_delay_timer - Cancel all vport retry delay timer
11201 * detected, the vport will be set to FC_VPORT_FAILED state. Otherwise,the
11202 * vport will set to FC_VPORT_ACTIVE state. It then checks whether the DID
11203 * assigned to the vport has been changed with the completion of the FDISC
11206 * routine is invoked to register new vport with the HBA. Otherwise, the
11214 struct lpfc_vport *vport = cmdiocb->vport; in lpfc_cmpl_els_fdisc() local
11227 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_cmpl_els_fdisc()
11230 vport->fc_prevDID); in lpfc_cmpl_els_fdisc()
11236 lpfc_set_disctmo(piocb->vport); in lpfc_cmpl_els_fdisc()
11239 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_cmpl_els_fdisc()
11241 ulp_status, ulp_word4, vport->fc_prevDID); in lpfc_cmpl_els_fdisc()
11254 lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS, in lpfc_cmpl_els_fdisc()
11260 lpfc_check_nlp_post_devloss(vport, ndlp); in lpfc_cmpl_els_fdisc()
11262 clear_bit(FC_VPORT_CVL_RCVD, &vport->fc_flag); in lpfc_cmpl_els_fdisc()
11263 clear_bit(FC_VPORT_LOGO_RCVD, &vport->fc_flag); in lpfc_cmpl_els_fdisc()
11264 set_bit(FC_FABRIC, &vport->fc_flag); in lpfc_cmpl_els_fdisc()
11265 if (vport->phba->fc_topology == LPFC_TOPOLOGY_LOOP) in lpfc_cmpl_els_fdisc()
11266 set_bit(FC_PUBLIC_LOOP, &vport->fc_flag); in lpfc_cmpl_els_fdisc()
11268 vport->fc_myDID = ulp_word4 & Mask_DID; in lpfc_cmpl_els_fdisc()
11269 lpfc_vport_set_state(vport, FC_VPORT_ACTIVE); in lpfc_cmpl_els_fdisc()
11277 fabric_param_changed = lpfc_check_clean_addr_bit(vport, sp); in lpfc_cmpl_els_fdisc()
11278 memcpy(&vport->fabric_portname, &sp->portName, in lpfc_cmpl_els_fdisc()
11280 memcpy(&vport->fabric_nodename, &sp->nodeName, in lpfc_cmpl_els_fdisc()
11283 !test_bit(FC_VPORT_NEEDS_REG_VPI, &vport->fc_flag)) { in lpfc_cmpl_els_fdisc()
11289 &vport->fc_nodes, nlp_listp) { in lpfc_cmpl_els_fdisc()
11294 lpfc_unreg_rpi(vport, np); in lpfc_cmpl_els_fdisc()
11296 lpfc_cleanup_pending_mbox(vport); in lpfc_cmpl_els_fdisc()
11299 lpfc_sli4_unreg_all_rpis(vport); in lpfc_cmpl_els_fdisc()
11301 lpfc_mbx_unreg_vpi(vport); in lpfc_cmpl_els_fdisc()
11302 set_bit(FC_VPORT_NEEDS_REG_VPI, &vport->fc_flag); in lpfc_cmpl_els_fdisc()
11304 set_bit(FC_VPORT_NEEDS_INIT_VPI, &vport->fc_flag); in lpfc_cmpl_els_fdisc()
11306 set_bit(FC_LOGO_RCVD_DID_CHNG, &vport->fc_flag); in lpfc_cmpl_els_fdisc()
11308 !test_bit(FC_VPORT_NEEDS_REG_VPI, &vport->fc_flag)) { in lpfc_cmpl_els_fdisc()
11313 lpfc_register_new_vport(phba, vport, ndlp); in lpfc_cmpl_els_fdisc()
11314 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE); in lpfc_cmpl_els_fdisc()
11318 if (test_bit(FC_VPORT_NEEDS_INIT_VPI, &vport->fc_flag)) in lpfc_cmpl_els_fdisc()
11319 lpfc_issue_init_vpi(vport); in lpfc_cmpl_els_fdisc()
11320 else if (test_bit(FC_VPORT_NEEDS_REG_VPI, &vport->fc_flag)) in lpfc_cmpl_els_fdisc()
11321 lpfc_register_new_vport(phba, vport, ndlp); in lpfc_cmpl_els_fdisc()
11323 lpfc_do_scr_ns_plogi(phba, vport); in lpfc_cmpl_els_fdisc()
11328 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE); in lpfc_cmpl_els_fdisc()
11332 if (vport->fc_vport && in lpfc_cmpl_els_fdisc()
11333 (vport->fc_vport->vport_state != FC_VPORT_NO_FABRIC_RSCS)) in lpfc_cmpl_els_fdisc()
11334 lpfc_vport_set_state(vport, FC_VPORT_FAILED); in lpfc_cmpl_els_fdisc()
11336 lpfc_can_disctmo(vport); in lpfc_cmpl_els_fdisc()
11344 * @vport: pointer to a virtual N_Port data structure.
11349 * a remote node (@ndlp) off a @vport. It uses the lpfc_issue_fabric_iocb()
11362 lpfc_issue_els_fdisc(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, in lpfc_issue_els_fdisc() argument
11365 struct lpfc_hba *phba = vport->phba; in lpfc_issue_els_fdisc()
11375 vport->port_state = LPFC_FDISC; in lpfc_issue_els_fdisc()
11376 vport->fc_myDID = 0; in lpfc_issue_els_fdisc()
11378 elsiocb = lpfc_prep_els_iocb(vport, 1, cmdsize, retry, ndlp, did, in lpfc_issue_els_fdisc()
11381 lpfc_vport_set_state(vport, FC_VPORT_FAILED); in lpfc_issue_els_fdisc()
11382 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_issue_els_fdisc()
11402 memcpy(pcmd, &vport->phba->pport->fc_sparam, sizeof(struct serv_parm)); in lpfc_issue_els_fdisc()
11416 memcpy(pcmd, &vport->fc_portname, 8); in lpfc_issue_els_fdisc()
11419 memcpy(pcmd, &vport->fc_nodename, 8); in lpfc_issue_els_fdisc()
11422 lpfc_set_disctmo(vport); in lpfc_issue_els_fdisc()
11427 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_issue_els_fdisc()
11441 lpfc_vport_set_state(vport, FC_VPORT_INITIALIZING); in lpfc_issue_els_fdisc()
11446 lpfc_vport_set_state(vport, FC_VPORT_FAILED); in lpfc_issue_els_fdisc()
11447 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, in lpfc_issue_els_fdisc()
11453 * lpfc_cmpl_els_npiv_logo - Completion function with vport logo
11459 * ELS command off a vport. It frees the command IOCB and then decrement the
11470 struct lpfc_vport *vport = cmdiocb->vport; in lpfc_cmpl_els_npiv_logo() local
11489 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_cmpl_els_npiv_logo()
11494 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, in lpfc_cmpl_els_npiv_logo()
11498 tmo, vport->num_disc_nodes, in lpfc_cmpl_els_npiv_logo()
11503 clear_bit(FC_NDISC_ACTIVE, &vport->fc_flag); in lpfc_cmpl_els_npiv_logo()
11504 clear_bit(FC_FABRIC, &vport->fc_flag); in lpfc_cmpl_els_npiv_logo()
11505 lpfc_can_disctmo(vport); in lpfc_cmpl_els_npiv_logo()
11523 * lpfc_issue_els_npiv_logo - Issue a logo off a vport
11524 * @vport: pointer to a virtual N_Port data structure.
11527 * This routine issues a LOGO ELS command to an @ndlp off a @vport.
11534 * 0 - Successfully issued logo off the @vport
11535 * 1 - Failed to issue logo off the @vport
11538 lpfc_issue_els_npiv_logo(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) in lpfc_issue_els_npiv_logo() argument
11541 struct lpfc_hba *phba = vport->phba; in lpfc_issue_els_npiv_logo()
11547 elsiocb = lpfc_prep_els_iocb(vport, 1, cmdsize, 0, ndlp, ndlp->nlp_DID, in lpfc_issue_els_npiv_logo()
11557 *((uint32_t *) (pcmd)) = be32_to_cpu(vport->fc_myDID); in lpfc_issue_els_npiv_logo()
11559 memcpy(pcmd, &vport->fc_portname, sizeof(struct lpfc_name)); in lpfc_issue_els_npiv_logo()
11561 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_issue_els_npiv_logo()
11649 lpfc_debugfs_disc_trc(iocb->vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_resume_fabric_iocbs()
11651 iocb->vport->port_state, 0, 0); in lpfc_resume_fabric_iocbs()
11814 lpfc_debugfs_disc_trc(iocb->vport, LPFC_DISC_TRC_ELS_CMD, in lpfc_issue_fabric_iocb()
11816 iocb->vport->port_state, 0, 0); in lpfc_issue_fabric_iocb()
11836 * lpfc_fabric_abort_vport - Abort a vport's iocbs from driver fabric iocb list
11837 * @vport: pointer to a virtual N_Port data structure.
11839 * This routine aborts all the IOCBs associated with a @vport from the
11842 * list, removes each IOCB associated with the @vport off the list, set the
11846 static void lpfc_fabric_abort_vport(struct lpfc_vport *vport) in lpfc_fabric_abort_vport() argument
11849 struct lpfc_hba *phba = vport->phba; in lpfc_fabric_abort_vport()
11856 if (piocb->vport != vport) in lpfc_fabric_abort_vport()
11931 * lpfc_sli4_vport_delete_els_xri_aborted -Remove all ndlp references for vport
11932 * @vport: pointer to lpfc vport data structure.
11934 * This routine is invoked by the vport cleanup for deletions and the cleanup
11938 lpfc_sli4_vport_delete_els_xri_aborted(struct lpfc_vport *vport) in lpfc_sli4_vport_delete_els_xri_aborted() argument
11940 struct lpfc_hba *phba = vport->phba; in lpfc_sli4_vport_delete_els_xri_aborted()
11948 if (sglq_entry->ndlp && sglq_entry->ndlp->vport == vport) { in lpfc_sli4_vport_delete_els_xri_aborted()
11954 * node and the vport is unloading, the xri aborted wcqe in lpfc_sli4_vport_delete_els_xri_aborted()
11957 if (test_bit(FC_UNLOADING, &vport->load_flag) && in lpfc_sli4_vport_delete_els_xri_aborted()
12036 * @vport: pointer to virtual port object.
12045 lpfc_sli_abts_recover_port(struct lpfc_vport *vport, in lpfc_sli_abts_recover_port() argument
12052 shost = lpfc_shost_from_vport(vport); in lpfc_sli_abts_recover_port()
12053 phba = vport->phba; in lpfc_sli_abts_recover_port()
12065 vport->vpi, ndlp->nlp_rpi, ndlp->nlp_state, in lpfc_sli_abts_recover_port()
12075 lpfc_unreg_rpi(vport, ndlp); in lpfc_sli_abts_recover_port()
12078 static void lpfc_init_cs_ctl_bitmap(struct lpfc_vport *vport) in lpfc_init_cs_ctl_bitmap() argument
12080 bitmap_zero(vport->vmid_priority_range, LPFC_VMID_MAX_PRIORITY_RANGE); in lpfc_init_cs_ctl_bitmap()
12084 lpfc_vmid_set_cs_ctl_range(struct lpfc_vport *vport, u32 min, u32 max) in lpfc_vmid_set_cs_ctl_range() argument
12092 set_bit(i, vport->vmid_priority_range); in lpfc_vmid_set_cs_ctl_range()
12095 static void lpfc_vmid_put_cs_ctl(struct lpfc_vport *vport, u32 ctcl_vmid) in lpfc_vmid_put_cs_ctl() argument
12097 set_bit(ctcl_vmid, vport->vmid_priority_range); in lpfc_vmid_put_cs_ctl()
12100 u32 lpfc_vmid_get_cs_ctl(struct lpfc_vport *vport) in lpfc_vmid_get_cs_ctl() argument
12104 i = find_first_bit(vport->vmid_priority_range, in lpfc_vmid_get_cs_ctl()
12110 clear_bit(i, vport->vmid_priority_range); in lpfc_vmid_get_cs_ctl()
12120 struct lpfc_vport *vport = cmdiocb->vport; in lpfc_cmpl_els_qfpa() local
12139 lpfc_printf_vlog(vport, KERN_WARNING, LOG_SLI, in lpfc_cmpl_els_qfpa()
12145 lpfc_printf_vlog(vport, KERN_ERR, LOG_SLI, in lpfc_cmpl_els_qfpa()
12151 if (!vport->qfpa_res) { in lpfc_cmpl_els_qfpa()
12152 max_desc = FCELSSIZE / sizeof(*vport->qfpa_res); in lpfc_cmpl_els_qfpa()
12153 vport->qfpa_res = kcalloc(max_desc, sizeof(*vport->qfpa_res), in lpfc_cmpl_els_qfpa()
12155 if (!vport->qfpa_res) in lpfc_cmpl_els_qfpa()
12161 memcpy(vport->qfpa_res, pcmd, len + 8); in lpfc_cmpl_els_qfpa()
12165 vmid_range = vport->vmid_priority.vmid_range; in lpfc_cmpl_els_qfpa()
12170 kfree(vport->qfpa_res); in lpfc_cmpl_els_qfpa()
12173 vport->vmid_priority.vmid_range = vmid_range; in lpfc_cmpl_els_qfpa()
12175 vport->vmid_priority.num_descriptors = len; in lpfc_cmpl_els_qfpa()
12178 lpfc_printf_vlog(vport, KERN_DEBUG, LOG_ELS, in lpfc_cmpl_els_qfpa()
12188 vport->vmid_flag |= LPFC_VMID_QOS_ENABLED; in lpfc_cmpl_els_qfpa()
12196 lpfc_init_cs_ctl_bitmap(vport); in lpfc_cmpl_els_qfpa()
12197 for (i = 0; i < vport->vmid_priority.num_descriptors; i++) { in lpfc_cmpl_els_qfpa()
12198 lpfc_vmid_set_cs_ctl_range(vport, in lpfc_cmpl_els_qfpa()
12199 vport->vmid_priority.vmid_range[i].low, in lpfc_cmpl_els_qfpa()
12200 vport->vmid_priority.vmid_range[i].high); in lpfc_cmpl_els_qfpa()
12203 vport->vmid_flag |= LPFC_VMID_QFPA_CMPL; in lpfc_cmpl_els_qfpa()
12209 int lpfc_issue_els_qfpa(struct lpfc_vport *vport) in lpfc_issue_els_qfpa() argument
12211 struct lpfc_hba *phba = vport->phba; in lpfc_issue_els_qfpa()
12221 elsiocb = lpfc_prep_els_iocb(vport, 1, LPFC_QFPA_SIZE, 2, ndlp, in lpfc_issue_els_qfpa()
12235 lpfc_els_free_iocb(vport->phba, elsiocb); in lpfc_issue_els_qfpa()
12245 vport->vmid_flag &= ~LPFC_VMID_QOS_ENABLED; in lpfc_issue_els_qfpa()
12250 lpfc_vmid_uvem(struct lpfc_vport *vport, in lpfc_vmid_uvem() argument
12262 ndlp = lpfc_findnode_did(vport, Fabric_DID); in lpfc_vmid_uvem()
12269 elsiocb = lpfc_prep_els_iocb(vport, 1, LPFC_UVEM_SIZE, 2, in lpfc_vmid_uvem()
12274 lpfc_printf_vlog(vport, KERN_DEBUG, LOG_ELS, in lpfc_vmid_uvem()
12283 if (!memchr_inv(vport->lpfc_vmid_host_uuid, 0, in lpfc_vmid_uvem()
12284 sizeof(vport->lpfc_vmid_host_uuid))) in lpfc_vmid_uvem()
12285 memcpy(vport->lpfc_vmid_host_uuid, vmid->host_vmid, in lpfc_vmid_uvem()
12286 sizeof(vport->lpfc_vmid_host_uuid)); in lpfc_vmid_uvem()
12295 memcpy(vem_id_desc->vem_id, vport->lpfc_vmid_host_uuid, in lpfc_vmid_uvem()
12304 bf_set(lpfc_instantiated_nport_id, inst_desc, vport->fc_myDID); in lpfc_vmid_uvem()
12311 lpfc_vmid_put_cs_ctl(vport, vmid->un.cs_ctl_vmid); in lpfc_vmid_uvem()
12319 lpfc_els_free_iocb(vport->phba, elsiocb); in lpfc_vmid_uvem()
12323 ret = lpfc_sli_issue_iocb(vport->phba, LPFC_ELS_RING, elsiocb, 0); in lpfc_vmid_uvem()
12325 lpfc_els_free_iocb(vport->phba, elsiocb); in lpfc_vmid_uvem()
12340 struct lpfc_vport *vport = icmdiocb->vport; in lpfc_cmpl_els_uvem() local
12362 lpfc_printf_vlog(vport, KERN_WARNING, LOG_SLI, in lpfc_cmpl_els_uvem()
12367 lpfc_printf_vlog(vport, KERN_WARNING, LOG_SLI, in lpfc_cmpl_els_uvem()
12374 vport->vmid_flag |= LPFC_VMID_IN_USE; in lpfc_cmpl_els_uvem()
12379 write_lock(&vport->vmid_lock); in lpfc_cmpl_els_uvem()
12382 write_unlock(&vport->vmid_lock); in lpfc_cmpl_els_uvem()