Lines Matching defs:ndlp
52 lpfc_check_adisc(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
56 if (!(ndlp->nlp_flag & NLP_RPI_REGISTERED))
62 if (memcmp(nn, &ndlp->nlp_nodename, sizeof (struct lpfc_name)))
65 if (memcmp(pn, &ndlp->nlp_portname, sizeof (struct lpfc_name)))
73 lpfc_check_sparm(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
151 memcpy(&ndlp->nlp_nodename, &sp->nodeName, sizeof (struct lpfc_name));
152 memcpy(&ndlp->nlp_portname, &sp->portName, sizeof (struct lpfc_name));
159 ndlp->nlp_DID,
213 lpfc_els_abort(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp)
226 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_DISCOVERY,
229 ndlp->nlp_DID, ndlp->nlp_flag, ndlp->nlp_state,
230 ndlp->nlp_rpi);
232 lpfc_fabric_abort_nport(ndlp);
244 if (lpfc_check_sli_ndlp(phba, pring, iocb, ndlp))
270 if (lpfc_check_sli_ndlp(phba, pring, iocb, ndlp)) {
284 lpfc_cancel_retry_delay_tmo(phba->pport, ndlp);
297 struct lpfc_nodelist *ndlp;
302 ndlp = login_mbox->ctx_ndlp;
310 save_iocb, ndlp, NULL);
314 "DID %x Data: %x\n", ndlp->nlp_DID, rc);
320 ndlp->nlp_flag &= ~NLP_ACC_REGLOGIN;
325 lpfc_rcv_plogi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
353 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp,
362 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp,
367 nlp_portwwn = wwn_to_u64(ndlp->nlp_portname.u.wwn);
368 if ((lpfc_check_sparm(vport, ndlp, sp, CLASS3, 0) == 0)) {
372 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp,
386 ndlp->nlp_DID, ndlp->nlp_state, ndlp->nlp_flag,
387 ndlp->nlp_rpi, vport->port_state,
391 ndlp->nlp_fcp_info |= CLASS2;
393 ndlp->nlp_fcp_info |= CLASS3;
395 ndlp->nlp_class_sup = 0;
397 ndlp->nlp_class_sup |= FC_COS_CLASS1;
399 ndlp->nlp_class_sup |= FC_COS_CLASS2;
401 ndlp->nlp_class_sup |= FC_COS_CLASS3;
403 ndlp->nlp_class_sup |= FC_COS_CLASS4;
404 ndlp->nlp_maxframe =
407 switch (ndlp->nlp_state) {
409 if (!(ndlp->nlp_flag & NLP_NPR_ADISC))
420 if (!(ndlp->nlp_type & NLP_FABRIC) &&
422 /* Clear ndlp info, since follow up PRLI may have
423 * updated ndlp information
425 ndlp->nlp_type &= ~(NLP_FCP_TARGET | NLP_FCP_INITIATOR);
426 ndlp->nlp_type &= ~(NLP_NVME_TARGET | NLP_NVME_INITIATOR);
427 ndlp->nlp_fcp_info &= ~NLP_FCP_2_DEVICE;
428 ndlp->nlp_nvme_info &= ~NLP_NVME_NSLER;
429 ndlp->nlp_flag &= ~NLP_FIRSTBURST;
432 ndlp, NULL);
440 ndlp->nlp_DID,
447 ndlp->nlp_state == NLP_STE_UNMAPPED_NODE)
448 lpfc_nvmet_invalidate_host(phba, ndlp);
450 ndlp->nlp_prev_state = ndlp->nlp_state;
452 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
456 ndlp->nlp_type &= ~(NLP_FCP_TARGET | NLP_FCP_INITIATOR);
457 ndlp->nlp_type &= ~(NLP_NVME_TARGET | NLP_NVME_INITIATOR);
458 ndlp->nlp_fcp_info &= ~NLP_FCP_2_DEVICE;
459 ndlp->nlp_nvme_info &= ~NLP_NVME_NSLER;
460 ndlp->nlp_flag &= ~NLP_FIRSTBURST;
518 * does not require the ndlp so no reference is needed.
520 link_mbox->ctx_ndlp = ndlp;
532 ndlp->nlp_flag &= ~NLP_SUPPRESS_RSP;
538 ndlp->nlp_flag |= NLP_SUPPRESS_RSP;
555 lpfc_unreg_rpi(vport, ndlp);
565 (uint8_t *)sp, login_mbox, ndlp->nlp_rpi);
582 if ((ndlp->nlp_state == NLP_STE_PLOGI_ISSUE) &&
585 lpfc_els_abort(phba, ndlp);
607 spin_lock_irq(&ndlp->lock);
608 ndlp->nlp_flag |= (NLP_RM_DFLT_RPI | NLP_ACC_REGLOGIN |
610 spin_unlock_irq(&ndlp->lock);
616 ndlp, login_mbox);
639 login_mbox->ctx_ndlp = lpfc_nlp_get(ndlp);
645 spin_lock_irq(&ndlp->lock);
646 ndlp->nlp_flag |= (NLP_ACC_REGLOGIN | NLP_RCV_PLOGI);
647 spin_unlock_irq(&ndlp->lock);
652 lpfc_nlp_put(ndlp);
655 lpfc_nlp_set_state(vport, ndlp, NLP_STE_REG_LOGIN_ISSUE);
665 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp, NULL);
682 struct lpfc_nodelist *ndlp;
686 ndlp = (struct lpfc_nodelist *)mboxq->ctx_ndlp;
691 lpfc_els_rsp_adisc_acc(vport, elsiocb, ndlp);
694 ndlp, NULL);
698 lpfc_nlp_put(ndlp);
705 lpfc_rcv_padisc(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
733 lpfc_check_adisc(vport, ndlp, pnn, ppn)) {
751 lpfc_sli4_resume_rpi(ndlp,
758 lpfc_els_rsp_adisc_acc(vport, cmdiocb, ndlp);
761 ndlp, NULL);
773 if (ndlp->nlp_type & (NLP_FCP_TARGET | NLP_NVME_TARGET)) {
774 if ((ndlp->nlp_state != NLP_STE_MAPPED_NODE) &&
775 !(ndlp->nlp_flag & NLP_NPR_ADISC))
776 lpfc_nlp_set_state(vport, ndlp,
787 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp, NULL);
790 mod_timer(&ndlp->nlp_delayfunc, jiffies + msecs_to_jiffies(1000));
792 spin_lock_irq(&ndlp->lock);
793 ndlp->nlp_flag |= NLP_DELAY_TMO;
794 spin_unlock_irq(&ndlp->lock);
795 ndlp->nlp_last_elscmd = ELS_CMD_PLOGI;
796 ndlp->nlp_prev_state = ndlp->nlp_state;
797 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
802 lpfc_rcv_logo(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
810 /* Put ndlp in NPR state with 1 sec timeout for plogi, ACC logo */
814 spin_lock_irq(&ndlp->lock);
815 ndlp->nlp_flag |= NLP_LOGO_ACC;
816 spin_unlock_irq(&ndlp->lock);
818 lpfc_els_rsp_acc(vport, ELS_CMD_PRLO, cmdiocb, ndlp, NULL);
820 lpfc_els_rsp_acc(vport, ELS_CMD_ACC, cmdiocb, ndlp, NULL);
827 if (ndlp->nlp_type & NLP_FABRIC &&
828 ((ndlp->nlp_DID & WELL_KNOWN_DID_MASK) != WELL_KNOWN_DID_MASK))
833 ndlp->nlp_state == NLP_STE_UNMAPPED_NODE)
834 lpfc_nvmet_invalidate_host(phba, ndlp);
836 if (ndlp->nlp_DID == Fabric_DID) {
869 mod_timer(&ndlp->nlp_delayfunc,
871 spin_lock_irq(&ndlp->lock);
872 ndlp->nlp_flag |= NLP_DELAY_TMO;
873 spin_unlock_irq(&ndlp->lock);
874 ndlp->nlp_last_elscmd = ELS_CMD_FDISC;
887 ndlp->nlp_DID, ndlp->nlp_state,
888 ndlp->nlp_type, vport->fc_flag);
891 if ((!(ndlp->nlp_type == NLP_FABRIC) &&
892 (ndlp->nlp_type & (NLP_FCP_TARGET | NLP_NVME_TARGET) ||
894 (ndlp->nlp_state >= NLP_STE_ADISC_ISSUE ||
895 ndlp->nlp_state <= NLP_STE_PRLI_ISSUE)) {
896 mod_timer(&ndlp->nlp_delayfunc,
898 spin_lock_irq(&ndlp->lock);
899 ndlp->nlp_flag |= NLP_DELAY_TMO;
900 spin_unlock_irq(&ndlp->lock);
901 ndlp->nlp_last_elscmd = ELS_CMD_PLOGI;
906 ndlp->nlp_DID, ndlp->nlp_flag,
907 ndlp->nlp_last_elscmd,
908 kref_read(&ndlp->kref));
913 lpfc_nlp_unreg_node(vport, ndlp);
915 ndlp->nlp_prev_state = ndlp->nlp_state;
916 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
918 spin_lock_irq(&ndlp->lock);
919 ndlp->nlp_flag &= ~NLP_NPR_ADISC;
920 spin_unlock_irq(&ndlp->lock);
931 struct lpfc_nodelist *ndlp,
952 "6115 Rcv PRLI (%x) check failed: ndlp rpi %d "
954 cmd, ndlp->nlp_rpi, ndlp->nlp_state,
955 ndlp->nlp_flag);
960 ndlp, NULL);
965 lpfc_rcv_prli(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
972 struct fc_rport *rport = ndlp->rport;
983 ndlp->nlp_type |= NLP_FCP_INITIATOR;
985 ndlp->nlp_type |= NLP_NVME_INITIATOR;
989 ndlp->nlp_type |= NLP_FCP_TARGET;
991 ndlp->nlp_type |= NLP_NVME_TARGET;
993 ndlp->nlp_flag |= NLP_FIRSTBURST;
995 if (npr->Retry && ndlp->nlp_type &
997 ndlp->nlp_fcp_info |= NLP_FCP_2_DEVICE;
1000 ndlp->nlp_type & (NLP_NVME_INITIATOR | NLP_NVME_TARGET))
1001 ndlp->nlp_nvme_info |= NLP_NVME_NSLER;
1004 /* If this driver is in nvme target mode, set the ndlp's fc4
1010 ndlp->nlp_fc4_type |= NLP_FC4_NVME;
1011 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE);
1018 !(ndlp->nlp_type & NLP_FABRIC))
1019 ndlp->nlp_fc4_type |= NLP_FC4_FCP;
1024 if (ndlp->nlp_type & NLP_FCP_INITIATOR)
1026 if (ndlp->nlp_type & NLP_FCP_TARGET)
1031 roles, ndlp->nlp_DID, ndlp->nlp_flag);
1039 lpfc_disc_set_adisc(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
1041 if (!(ndlp->nlp_flag & NLP_RPI_REGISTERED)) {
1042 spin_lock_irq(&ndlp->lock);
1043 ndlp->nlp_flag &= ~NLP_NPR_ADISC;
1044 spin_unlock_irq(&ndlp->lock);
1051 ((ndlp->nlp_fcp_info & NLP_FCP_2_DEVICE) &&
1052 (ndlp->nlp_type & NLP_FCP_TARGET)))) {
1053 spin_lock_irq(&ndlp->lock);
1054 ndlp->nlp_flag |= NLP_NPR_ADISC;
1055 spin_unlock_irq(&ndlp->lock);
1060 spin_lock_irq(&ndlp->lock);
1061 ndlp->nlp_flag &= ~NLP_NPR_ADISC;
1062 spin_unlock_irq(&ndlp->lock);
1063 lpfc_unreg_rpi(vport, ndlp);
1071 * @ndlp: Pointer to lpfc_nodelist structure.
1079 struct lpfc_nodelist *ndlp, uint16_t rpi)
1084 /* If there is already an UNREG in progress for this ndlp,
1087 if (ndlp->nlp_flag & NLP_UNREG_INP) {
1092 ndlp->nlp_rpi, ndlp->nlp_DID,
1093 ndlp->nlp_defer_did,
1094 ndlp->nlp_flag, ndlp);
1107 pmb->ctx_ndlp = lpfc_nlp_get(ndlp);
1113 if (((ndlp->nlp_DID & Fabric_DID_MASK) != Fabric_DID_MASK) &&
1115 ndlp->nlp_flag |= NLP_UNREG_INP;
1120 ndlp->nlp_rpi, ndlp->nlp_DID, ndlp->nlp_flag);
1124 lpfc_nlp_put(ndlp);
1131 lpfc_disc_illegal(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1144 lpfc_release_rpi(phba, vport, ndlp, rpi);
1149 ndlp->nlp_DID, evt, ndlp->nlp_state, ndlp->nlp_rpi,
1150 ndlp->nlp_flag);
1151 return ndlp->nlp_state;
1155 lpfc_cmpl_plogi_illegal(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1163 if (!(ndlp->nlp_flag & NLP_RCV_PLOGI)) {
1167 ndlp->nlp_DID, evt, ndlp->nlp_state,
1168 ndlp->nlp_rpi, ndlp->nlp_flag);
1170 return ndlp->nlp_state;
1176 lpfc_rcv_plogi_unused_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1183 if (lpfc_rcv_plogi(vport, ndlp, cmdiocb)) {
1184 return ndlp->nlp_state;
1190 lpfc_rcv_els_unused_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1193 lpfc_issue_els_logo(vport, ndlp, 0);
1194 return ndlp->nlp_state;
1198 lpfc_rcv_logo_unused_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1203 spin_lock_irq(&ndlp->lock);
1204 ndlp->nlp_flag |= NLP_LOGO_ACC;
1205 spin_unlock_irq(&ndlp->lock);
1206 lpfc_els_rsp_acc(vport, ELS_CMD_ACC, cmdiocb, ndlp, NULL);
1208 return ndlp->nlp_state;
1212 lpfc_cmpl_logo_unused_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1219 lpfc_device_rm_unused_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1227 struct lpfc_nodelist *ndlp,
1230 return ndlp->nlp_state;
1234 lpfc_rcv_plogi_plogi_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1260 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp,
1263 if (lpfc_rcv_plogi(vport, ndlp, cmdiocb) &&
1264 (ndlp->nlp_flag & NLP_NPR_2B_DISC) &&
1266 spin_lock_irq(&ndlp->lock);
1267 ndlp->nlp_flag &= ~NLP_NPR_2B_DISC;
1268 spin_unlock_irq(&ndlp->lock);
1281 return ndlp->nlp_state;
1285 lpfc_rcv_prli_plogi_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1294 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp, NULL);
1295 return ndlp->nlp_state;
1299 lpfc_rcv_logo_plogi_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1306 ndlp->nlp_rpi = cmdiocb->iocb.ulpIoTag;
1308 lpfc_els_abort(vport->phba, ndlp);
1310 lpfc_rcv_logo(vport, ndlp, cmdiocb, ELS_CMD_LOGO);
1311 return ndlp->nlp_state;
1315 lpfc_rcv_els_plogi_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1322 lpfc_els_abort(phba, ndlp);
1325 lpfc_els_rsp_acc(vport, ELS_CMD_ACC, cmdiocb, ndlp, NULL);
1327 lpfc_issue_els_logo(vport, ndlp, 0);
1330 /* Put ndlp in npr state set plogi timer for 1 sec */
1331 mod_timer(&ndlp->nlp_delayfunc, jiffies + msecs_to_jiffies(1000 * 1));
1332 spin_lock_irq(&ndlp->lock);
1333 ndlp->nlp_flag |= NLP_DELAY_TMO;
1334 spin_unlock_irq(&ndlp->lock);
1335 ndlp->nlp_last_elscmd = ELS_CMD_PLOGI;
1336 ndlp->nlp_prev_state = NLP_STE_PLOGI_ISSUE;
1337 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
1339 return ndlp->nlp_state;
1344 struct lpfc_nodelist *ndlp,
1365 if (ndlp->nlp_flag & NLP_ACC_REGLOGIN) {
1367 return ndlp->nlp_state;
1383 if ((ndlp->nlp_DID != FDMI_DID) &&
1390 if (!lpfc_check_sparm(vport, ndlp, sp, CLASS3, 0))
1395 ndlp->nlp_DID, ndlp->nlp_state,
1396 ndlp->nlp_flag, ndlp->nlp_rpi);
1398 ndlp->nlp_fcp_info |= CLASS2;
1400 ndlp->nlp_fcp_info |= CLASS3;
1402 ndlp->nlp_class_sup = 0;
1404 ndlp->nlp_class_sup |= FC_COS_CLASS1;
1406 ndlp->nlp_class_sup |= FC_COS_CLASS2;
1408 ndlp->nlp_class_sup |= FC_COS_CLASS3;
1410 ndlp->nlp_class_sup |= FC_COS_CLASS4;
1411 ndlp->nlp_maxframe =
1422 ndlp->nlp_flag &= ~NLP_SUPPRESS_RSP;
1429 ndlp->nlp_flag |= NLP_SUPPRESS_RSP;
1453 ndlp->nlp_DID, ndlp->nlp_state,
1454 ndlp->nlp_flag, ndlp->nlp_rpi);
1470 lpfc_unreg_rpi(vport, ndlp);
1477 ndlp->nlp_DID, ndlp->nlp_state,
1478 ndlp->nlp_flag, ndlp->nlp_rpi);
1485 (uint8_t *) sp, mbox, ndlp->nlp_rpi) == 0) {
1486 switch (ndlp->nlp_DID) {
1490 memcpy(&ndlp->fc_sparam, sp, sizeof(struct serv_parm));
1496 ndlp->nlp_flag |= NLP_REG_LOGIN_SEND;
1500 mbox->ctx_ndlp = lpfc_nlp_get(ndlp);
1507 lpfc_nlp_set_state(vport, ndlp,
1509 return ndlp->nlp_state;
1511 if (ndlp->nlp_flag & NLP_REG_LOGIN_SEND)
1512 ndlp->nlp_flag &= ~NLP_REG_LOGIN_SEND;
1516 lpfc_nlp_put(ndlp);
1521 ndlp->nlp_DID, ndlp->nlp_state,
1522 ndlp->nlp_flag, ndlp->nlp_rpi);
1529 ndlp->nlp_DID, ndlp->nlp_state,
1530 ndlp->nlp_flag, ndlp->nlp_rpi);
1535 if (ndlp->nlp_DID == NameServer_DID) {
1546 ndlp->nlp_prev_state = ndlp->nlp_state;
1547 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
1552 lpfc_cmpl_logo_plogi_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1555 return ndlp->nlp_state;
1560 struct lpfc_nodelist *ndlp, void *arg, uint32_t evt)
1572 lpfc_release_rpi(phba, vport, ndlp, rpi);
1574 return ndlp->nlp_state;
1578 lpfc_device_rm_plogi_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1581 if (ndlp->nlp_flag & NLP_NPR_2B_DISC) {
1582 spin_lock_irq(&ndlp->lock);
1583 ndlp->nlp_flag |= NLP_NODEV_REMOVE;
1584 spin_unlock_irq(&ndlp->lock);
1585 return ndlp->nlp_state;
1588 lpfc_els_abort(vport->phba, ndlp);
1590 lpfc_drop_node(vport, ndlp);
1597 struct lpfc_nodelist *ndlp,
1607 return ndlp->nlp_state;
1610 lpfc_els_abort(phba, ndlp);
1612 ndlp->nlp_prev_state = NLP_STE_PLOGI_ISSUE;
1613 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
1614 spin_lock_irq(&ndlp->lock);
1615 ndlp->nlp_flag &= ~(NLP_NODEV_REMOVE | NLP_NPR_2B_DISC);
1616 spin_unlock_irq(&ndlp->lock);
1618 return ndlp->nlp_state;
1622 lpfc_rcv_plogi_adisc_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1629 lpfc_els_abort(phba, ndlp);
1633 if (lpfc_rcv_plogi(vport, ndlp, cmdiocb)) {
1634 if (ndlp->nlp_flag & NLP_NPR_2B_DISC) {
1635 spin_lock_irq(&ndlp->lock);
1636 ndlp->nlp_flag &= ~NLP_NPR_2B_DISC;
1637 spin_unlock_irq(&ndlp->lock);
1641 return ndlp->nlp_state;
1643 ndlp->nlp_prev_state = NLP_STE_ADISC_ISSUE;
1644 lpfc_issue_els_plogi(vport, ndlp->nlp_DID, 0);
1645 lpfc_nlp_set_state(vport, ndlp, NLP_STE_PLOGI_ISSUE);
1647 return ndlp->nlp_state;
1651 lpfc_rcv_prli_adisc_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1656 if (lpfc_rcv_prli_support_check(vport, ndlp, cmdiocb))
1657 lpfc_els_rsp_prli_acc(vport, cmdiocb, ndlp);
1658 return ndlp->nlp_state;
1662 lpfc_rcv_logo_adisc_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1671 lpfc_els_abort(phba, ndlp);
1673 lpfc_rcv_logo(vport, ndlp, cmdiocb, ELS_CMD_LOGO);
1674 return ndlp->nlp_state;
1679 struct lpfc_nodelist *ndlp,
1686 lpfc_rcv_padisc(vport, ndlp, cmdiocb);
1687 return ndlp->nlp_state;
1691 lpfc_rcv_prlo_adisc_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1699 lpfc_rcv_logo(vport, ndlp, cmdiocb, ELS_CMD_PRLO);
1700 return ndlp->nlp_state;
1705 struct lpfc_nodelist *ndlp,
1722 (!lpfc_check_adisc(vport, ndlp, &ap->nodeName, &ap->portName))) {
1724 mod_timer(&ndlp->nlp_delayfunc,
1726 spin_lock_irq(&ndlp->lock);
1727 ndlp->nlp_flag |= NLP_DELAY_TMO;
1728 spin_unlock_irq(&ndlp->lock);
1729 ndlp->nlp_last_elscmd = ELS_CMD_PLOGI;
1731 ndlp->nlp_prev_state = NLP_STE_ADISC_ISSUE;
1732 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
1733 lpfc_unreg_rpi(vport, ndlp);
1734 return ndlp->nlp_state;
1738 rc = lpfc_sli4_resume_rpi(ndlp, NULL, NULL);
1741 ndlp->nlp_prev_state = NLP_STE_ADISC_ISSUE;
1742 return ndlp->nlp_state;
1746 if (ndlp->nlp_type & NLP_FCP_TARGET)
1747 ndlp->nlp_fc4_type |= NLP_FC4_FCP;
1749 if (ndlp->nlp_type & NLP_NVME_TARGET)
1750 ndlp->nlp_fc4_type |= NLP_FC4_NVME;
1752 if (ndlp->nlp_type & (NLP_FCP_TARGET | NLP_NVME_TARGET)) {
1753 ndlp->nlp_prev_state = NLP_STE_ADISC_ISSUE;
1754 lpfc_nlp_set_state(vport, ndlp, NLP_STE_MAPPED_NODE);
1756 ndlp->nlp_prev_state = NLP_STE_ADISC_ISSUE;
1757 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE);
1760 return ndlp->nlp_state;
1764 lpfc_device_rm_adisc_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1767 if (ndlp->nlp_flag & NLP_NPR_2B_DISC) {
1768 spin_lock_irq(&ndlp->lock);
1769 ndlp->nlp_flag |= NLP_NODEV_REMOVE;
1770 spin_unlock_irq(&ndlp->lock);
1771 return ndlp->nlp_state;
1774 lpfc_els_abort(vport->phba, ndlp);
1776 lpfc_drop_node(vport, ndlp);
1783 struct lpfc_nodelist *ndlp,
1793 return ndlp->nlp_state;
1796 lpfc_els_abort(phba, ndlp);
1798 ndlp->nlp_prev_state = NLP_STE_ADISC_ISSUE;
1799 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
1800 spin_lock_irq(&ndlp->lock);
1801 ndlp->nlp_flag &= ~(NLP_NODEV_REMOVE | NLP_NPR_2B_DISC);
1802 spin_unlock_irq(&ndlp->lock);
1803 lpfc_disc_set_adisc(vport, ndlp);
1804 return ndlp->nlp_state;
1809 struct lpfc_nodelist *ndlp,
1815 lpfc_rcv_plogi(vport, ndlp, cmdiocb);
1816 return ndlp->nlp_state;
1821 struct lpfc_nodelist *ndlp,
1828 if (!lpfc_rcv_prli_support_check(vport, ndlp, cmdiocb)) {
1829 return ndlp->nlp_state;
1836 if (ndlp->nlp_flag & NLP_RPI_REGISTERED) {
1837 lpfc_rcv_prli(vport, ndlp, cmdiocb);
1838 lpfc_els_rsp_prli_acc(vport, cmdiocb, ndlp);
1848 ndlp, NULL);
1849 return ndlp->nlp_state;
1853 lpfc_els_rsp_prli_acc(vport, cmdiocb, ndlp);
1855 return ndlp->nlp_state;
1860 struct lpfc_nodelist *ndlp,
1871 /* cleanup any ndlp on mbox q waiting for reglogin cmpl */
1874 (ndlp == (struct lpfc_nodelist *)mb->ctx_ndlp)) {
1875 ndlp->nlp_flag &= ~NLP_REG_LOGIN_SEND;
1876 lpfc_nlp_put(ndlp);
1885 (ndlp == (struct lpfc_nodelist *)mb->ctx_ndlp)) {
1886 ndlp->nlp_flag &= ~NLP_REG_LOGIN_SEND;
1887 lpfc_nlp_put(ndlp);
1895 lpfc_rcv_logo(vport, ndlp, cmdiocb, ELS_CMD_LOGO);
1896 return ndlp->nlp_state;
1901 struct lpfc_nodelist *ndlp,
1907 lpfc_rcv_padisc(vport, ndlp, cmdiocb);
1908 return ndlp->nlp_state;
1913 struct lpfc_nodelist *ndlp,
1920 lpfc_els_rsp_acc(vport, ELS_CMD_PRLO, cmdiocb, ndlp, NULL);
1921 return ndlp->nlp_state;
1926 struct lpfc_nodelist *ndlp,
1948 ndlp->nlp_prev_state = NLP_STE_REG_LOGIN_ISSUE;
1949 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
1950 return ndlp->nlp_state;
1953 /* Put ndlp in npr state set plogi timer for 1 sec */
1954 mod_timer(&ndlp->nlp_delayfunc,
1956 spin_lock_irq(&ndlp->lock);
1957 ndlp->nlp_flag |= NLP_DELAY_TMO;
1958 spin_unlock_irq(&ndlp->lock);
1959 ndlp->nlp_last_elscmd = ELS_CMD_PLOGI;
1961 lpfc_issue_els_logo(vport, ndlp, 0);
1962 return ndlp->nlp_state;
1967 ndlp->nlp_rpi = mb->un.varWords[0];
1969 ndlp->nlp_flag |= NLP_RPI_REGISTERED;
1974 did, ndlp->nlp_type, ndlp->nlp_fc4_type);
1975 if (!(ndlp->nlp_type & NLP_FABRIC) &&
1978 * ndlp's nlp_fc4_type is still zero, the driver doesn't
1987 ndlp->nlp_fc4_type |= NLP_FC4_FCP;
1991 ndlp->nlp_fc4_type |= NLP_FC4_NVME;
1997 ndlp->nlp_fc4_type |= NLP_FC4_FCP;
1999 } else if (ndlp->nlp_fc4_type == 0) {
2006 ndlp->nlp_DID);
2007 return ndlp->nlp_state;
2009 ndlp->nlp_fc4_type = NLP_FC4_FCP;
2012 ndlp->nlp_prev_state = NLP_STE_REG_LOGIN_ISSUE;
2013 lpfc_nlp_set_state(vport, ndlp, NLP_STE_PRLI_ISSUE);
2014 if (lpfc_issue_els_prli(vport, ndlp, 0)) {
2015 lpfc_issue_els_logo(vport, ndlp, 0);
2016 ndlp->nlp_prev_state = NLP_STE_REG_LOGIN_ISSUE;
2017 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
2026 if (ndlp->nlp_type & NLP_FABRIC) {
2027 ndlp->nlp_fc4_type &= ~NLP_FC4_FCP;
2028 ndlp->nlp_prev_state = NLP_STE_REG_LOGIN_ISSUE;
2029 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE);
2032 return ndlp->nlp_state;
2037 struct lpfc_nodelist *ndlp,
2041 if (ndlp->nlp_flag & NLP_NPR_2B_DISC) {
2042 spin_lock_irq(&ndlp->lock);
2043 ndlp->nlp_flag |= NLP_NODEV_REMOVE;
2044 spin_unlock_irq(&ndlp->lock);
2045 return ndlp->nlp_state;
2047 lpfc_drop_node(vport, ndlp);
2054 struct lpfc_nodelist *ndlp,
2062 return ndlp->nlp_state;
2064 ndlp->nlp_prev_state = NLP_STE_REG_LOGIN_ISSUE;
2065 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
2066 spin_lock_irq(&ndlp->lock);
2071 if (!(ndlp->nlp_flag & NLP_RPI_REGISTERED) ||
2073 ndlp->nlp_flag |= NLP_IGNR_REG_CMPL;
2075 ndlp->nlp_flag &= ~(NLP_NODEV_REMOVE | NLP_NPR_2B_DISC);
2076 spin_unlock_irq(&ndlp->lock);
2077 lpfc_disc_set_adisc(vport, ndlp);
2078 return ndlp->nlp_state;
2082 lpfc_rcv_plogi_prli_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2089 lpfc_rcv_plogi(vport, ndlp, cmdiocb);
2090 return ndlp->nlp_state;
2094 lpfc_rcv_prli_prli_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2099 if (!lpfc_rcv_prli_support_check(vport, ndlp, cmdiocb))
2100 return ndlp->nlp_state;
2101 lpfc_rcv_prli(vport, ndlp, cmdiocb);
2102 lpfc_els_rsp_prli_acc(vport, cmdiocb, ndlp);
2103 return ndlp->nlp_state;
2107 lpfc_rcv_logo_prli_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2113 lpfc_els_abort(vport->phba, ndlp);
2115 lpfc_rcv_logo(vport, ndlp, cmdiocb, ELS_CMD_LOGO);
2116 return ndlp->nlp_state;
2120 lpfc_rcv_padisc_prli_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2125 lpfc_rcv_padisc(vport, ndlp, cmdiocb);
2126 return ndlp->nlp_state;
2135 lpfc_rcv_prlo_prli_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2140 lpfc_els_rsp_acc(vport, ELS_CMD_PRLO, cmdiocb, ndlp, NULL);
2141 return ndlp->nlp_state;
2145 lpfc_cmpl_prli_prli_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2181 ndlp->nlp_fc4_type &= ~NLP_FC4_FCP;
2183 ndlp->nlp_fc4_type &= ~NLP_FC4_NVME;
2206 ndlp->nlp_type |= NLP_FCP_INITIATOR;
2208 ndlp->nlp_type |= NLP_FCP_TARGET;
2210 ndlp->nlp_flag |= NLP_FIRSTBURST;
2213 ndlp->nlp_fcp_info |= NLP_FCP_2_DEVICE;
2221 /* Complete setting up the remote ndlp personality. */
2223 ndlp->nlp_type |= NLP_NVME_INITIATOR;
2228 ndlp->nlp_nvme_info |= NLP_NVME_NSLER;
2230 ndlp->nlp_nvme_info &= ~NLP_NVME_NSLER;
2238 ndlp->nlp_type |= NLP_NVME_TARGET;
2240 ndlp->nlp_type |= NLP_NVME_DISCOVERY;
2254 ndlp->nlp_flag |= NLP_FIRSTBURST;
2255 ndlp->nvme_fb_size = bf_get_be32(prli_fb_sz,
2259 if (ndlp->nvme_fb_size)
2260 ndlp->nvme_fb_size <<=
2263 ndlp->nvme_fb_size = LPFC_NVME_MAX_FB;
2274 ndlp->nlp_flag, ndlp->nlp_fcp_info,
2275 ndlp->nlp_type);
2277 if (!(ndlp->nlp_type & NLP_FCP_TARGET) &&
2281 spin_lock_irq(&ndlp->lock);
2282 ndlp->nlp_flag |= NLP_TARGET_REMOVE;
2283 spin_unlock_irq(&ndlp->lock);
2284 lpfc_issue_els_logo(vport, ndlp, 0);
2286 ndlp->nlp_prev_state = NLP_STE_PRLI_ISSUE;
2287 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
2288 return ndlp->nlp_state;
2292 /* The ndlp state cannot move to MAPPED or UNMAPPED before all PRLIs
2295 if (ndlp->fc4_prli_sent == 0) {
2296 ndlp->nlp_prev_state = NLP_STE_PRLI_ISSUE;
2297 if (ndlp->nlp_type & (NLP_FCP_TARGET | NLP_NVME_TARGET))
2298 lpfc_nlp_set_state(vport, ndlp, NLP_STE_MAPPED_NODE);
2299 else if (ndlp->nlp_type &
2301 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE);
2308 ndlp->nlp_DID, ndlp->fc4_prli_sent);
2310 return ndlp->nlp_state;
2318 * \param ndlp
2332 lpfc_device_rm_prli_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2335 if (ndlp->nlp_flag & NLP_NPR_2B_DISC) {
2336 spin_lock_irq(&ndlp->lock);
2337 ndlp->nlp_flag |= NLP_NODEV_REMOVE;
2338 spin_unlock_irq(&ndlp->lock);
2339 return ndlp->nlp_state;
2342 lpfc_els_abort(vport->phba, ndlp);
2344 lpfc_drop_node(vport, ndlp);
2355 * \param ndlp
2368 struct lpfc_nodelist *ndlp,
2378 return ndlp->nlp_state;
2381 lpfc_els_abort(phba, ndlp);
2383 ndlp->nlp_prev_state = NLP_STE_PRLI_ISSUE;
2384 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
2385 spin_lock_irq(&ndlp->lock);
2386 ndlp->nlp_flag &= ~(NLP_NODEV_REMOVE | NLP_NPR_2B_DISC);
2387 spin_unlock_irq(&ndlp->lock);
2388 lpfc_disc_set_adisc(vport, ndlp);
2389 return ndlp->nlp_state;
2393 lpfc_rcv_plogi_logo_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2402 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp, NULL);
2403 return ndlp->nlp_state;
2407 lpfc_rcv_prli_logo_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2416 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp, NULL);
2417 return ndlp->nlp_state;
2421 lpfc_rcv_logo_logo_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2426 spin_lock_irq(&ndlp->lock);
2427 ndlp->nlp_flag |= NLP_LOGO_ACC;
2428 spin_unlock_irq(&ndlp->lock);
2429 lpfc_els_rsp_acc(vport, ELS_CMD_ACC, cmdiocb, ndlp, NULL);
2430 return ndlp->nlp_state;
2434 lpfc_rcv_padisc_logo_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2443 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp, NULL);
2444 return ndlp->nlp_state;
2448 lpfc_rcv_prlo_logo_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2457 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp, NULL);
2458 return ndlp->nlp_state;
2462 lpfc_cmpl_logo_logo_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2465 ndlp->nlp_prev_state = NLP_STE_LOGO_ISSUE;
2466 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
2467 spin_lock_irq(&ndlp->lock);
2468 ndlp->nlp_flag &= ~(NLP_NODEV_REMOVE | NLP_NPR_2B_DISC);
2469 spin_unlock_irq(&ndlp->lock);
2470 lpfc_disc_set_adisc(vport, ndlp);
2471 return ndlp->nlp_state;
2475 lpfc_device_rm_logo_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2480 * In this case, abort the LOGO and cleanup the ndlp
2483 lpfc_unreg_rpi(vport, ndlp);
2485 lpfc_els_abort(vport->phba, ndlp);
2486 lpfc_drop_node(vport, ndlp);
2492 struct lpfc_nodelist *ndlp,
2500 return ndlp->nlp_state;
2504 lpfc_rcv_plogi_unmap_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2509 lpfc_rcv_plogi(vport, ndlp, cmdiocb);
2510 return ndlp->nlp_state;
2514 lpfc_rcv_prli_unmap_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2519 if (!lpfc_rcv_prli_support_check(vport, ndlp, cmdiocb))
2520 return ndlp->nlp_state;
2522 lpfc_rcv_prli(vport, ndlp, cmdiocb);
2523 lpfc_els_rsp_prli_acc(vport, cmdiocb, ndlp);
2524 return ndlp->nlp_state;
2528 lpfc_rcv_logo_unmap_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2533 lpfc_rcv_logo(vport, ndlp, cmdiocb, ELS_CMD_LOGO);
2534 return ndlp->nlp_state;
2538 lpfc_rcv_padisc_unmap_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2543 lpfc_rcv_padisc(vport, ndlp, cmdiocb);
2544 return ndlp->nlp_state;
2548 lpfc_rcv_prlo_unmap_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2553 lpfc_els_rsp_acc(vport, ELS_CMD_PRLO, cmdiocb, ndlp, NULL);
2554 return ndlp->nlp_state;
2559 struct lpfc_nodelist *ndlp,
2563 lpfc_drop_node(vport, ndlp);
2569 struct lpfc_nodelist *ndlp,
2573 ndlp->nlp_prev_state = NLP_STE_UNMAPPED_NODE;
2574 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
2575 spin_lock_irq(&ndlp->lock);
2576 ndlp->nlp_flag &= ~(NLP_NODEV_REMOVE | NLP_NPR_2B_DISC);
2577 ndlp->nlp_fc4_type &= ~(NLP_FC4_FCP | NLP_FC4_NVME);
2578 spin_unlock_irq(&ndlp->lock);
2579 lpfc_disc_set_adisc(vport, ndlp);
2581 return ndlp->nlp_state;
2585 lpfc_rcv_plogi_mapped_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2590 lpfc_rcv_plogi(vport, ndlp, cmdiocb);
2591 return ndlp->nlp_state;
2595 lpfc_rcv_prli_mapped_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2600 if (!lpfc_rcv_prli_support_check(vport, ndlp, cmdiocb))
2601 return ndlp->nlp_state;
2602 lpfc_els_rsp_prli_acc(vport, cmdiocb, ndlp);
2603 return ndlp->nlp_state;
2607 lpfc_rcv_logo_mapped_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2612 lpfc_rcv_logo(vport, ndlp, cmdiocb, ELS_CMD_LOGO);
2613 return ndlp->nlp_state;
2618 struct lpfc_nodelist *ndlp,
2623 lpfc_rcv_padisc(vport, ndlp, cmdiocb);
2624 return ndlp->nlp_state;
2628 lpfc_rcv_prlo_mapped_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2634 lpfc_sli_abort_iocb(vport, ndlp->nlp_sid, 0, LPFC_CTX_TGT);
2637 lpfc_rcv_logo(vport, ndlp, cmdiocb, ELS_CMD_PRLO);
2638 return ndlp->nlp_state;
2643 struct lpfc_nodelist *ndlp,
2647 lpfc_disc_set_adisc(vport, ndlp);
2649 ndlp->nlp_prev_state = NLP_STE_MAPPED_NODE;
2650 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
2651 spin_lock_irq(&ndlp->lock);
2652 ndlp->nlp_flag &= ~(NLP_NODEV_REMOVE | NLP_NPR_2B_DISC);
2653 ndlp->nlp_fc4_type &= ~(NLP_FC4_FCP | NLP_FC4_NVME);
2654 spin_unlock_irq(&ndlp->lock);
2655 return ndlp->nlp_state;
2659 lpfc_rcv_plogi_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2665 if (ndlp->nlp_flag & (NLP_LOGO_SND | NLP_LOGO_ACC))
2666 return ndlp->nlp_state;
2667 if (lpfc_rcv_plogi(vport, ndlp, cmdiocb)) {
2668 lpfc_cancel_retry_delay_tmo(vport, ndlp);
2669 spin_lock_irq(&ndlp->lock);
2670 ndlp->nlp_flag &= ~(NLP_NPR_ADISC | NLP_NPR_2B_DISC);
2671 spin_unlock_irq(&ndlp->lock);
2672 } else if (!(ndlp->nlp_flag & NLP_NPR_2B_DISC)) {
2674 if (!(ndlp->nlp_flag & NLP_DELAY_TMO)) {
2675 ndlp->nlp_prev_state = NLP_STE_NPR_NODE;
2676 lpfc_nlp_set_state(vport, ndlp, NLP_STE_PLOGI_ISSUE);
2677 lpfc_issue_els_plogi(vport, ndlp->nlp_DID, 0);
2680 return ndlp->nlp_state;
2684 lpfc_rcv_prli_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2693 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp, NULL);
2695 if (!(ndlp->nlp_flag & NLP_DELAY_TMO)) {
2702 if (!(ndlp->nlp_flag & NLP_NPR_ADISC)) {
2703 ndlp->nlp_prev_state = NLP_STE_NPR_NODE;
2704 lpfc_nlp_set_state(vport, ndlp, NLP_STE_PLOGI_ISSUE);
2705 lpfc_issue_els_plogi(vport, ndlp->nlp_DID, 0);
2708 return ndlp->nlp_state;
2712 lpfc_rcv_logo_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2717 lpfc_rcv_logo(vport, ndlp, cmdiocb, ELS_CMD_LOGO);
2718 return ndlp->nlp_state;
2722 lpfc_rcv_padisc_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2727 lpfc_rcv_padisc(vport, ndlp, cmdiocb);
2733 if (!(ndlp->nlp_flag & NLP_DELAY_TMO) &&
2734 !(ndlp->nlp_flag & NLP_NPR_2B_DISC)) {
2741 if (!(ndlp->nlp_flag & NLP_NPR_ADISC)) {
2742 ndlp->nlp_prev_state = NLP_STE_NPR_NODE;
2743 lpfc_nlp_set_state(vport, ndlp, NLP_STE_PLOGI_ISSUE);
2744 lpfc_issue_els_plogi(vport, ndlp->nlp_DID, 0);
2747 return ndlp->nlp_state;
2751 lpfc_rcv_prlo_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2756 spin_lock_irq(&ndlp->lock);
2757 ndlp->nlp_flag |= NLP_LOGO_ACC;
2758 spin_unlock_irq(&ndlp->lock);
2760 lpfc_els_rsp_acc(vport, ELS_CMD_ACC, cmdiocb, ndlp, NULL);
2762 if ((ndlp->nlp_flag & NLP_DELAY_TMO) == 0) {
2763 mod_timer(&ndlp->nlp_delayfunc,
2765 spin_lock_irq(&ndlp->lock);
2766 ndlp->nlp_flag |= NLP_DELAY_TMO;
2767 ndlp->nlp_flag &= ~NLP_NPR_ADISC;
2768 spin_unlock_irq(&ndlp->lock);
2769 ndlp->nlp_last_elscmd = ELS_CMD_PLOGI;
2771 spin_lock_irq(&ndlp->lock);
2772 ndlp->nlp_flag &= ~NLP_NPR_ADISC;
2773 spin_unlock_irq(&ndlp->lock);
2775 return ndlp->nlp_state;
2779 lpfc_cmpl_plogi_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2794 return ndlp->nlp_state;
2798 lpfc_cmpl_prli_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2810 if (ulp_status && (ndlp->nlp_flag & NLP_NODEV_REMOVE)) {
2811 lpfc_drop_node(vport, ndlp);
2814 return ndlp->nlp_state;
2818 lpfc_cmpl_logo_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2824 if (ndlp->nlp_DID == Fabric_DID) {
2829 lpfc_unreg_rpi(vport, ndlp);
2830 return ndlp->nlp_state;
2834 lpfc_cmpl_adisc_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2846 if (ulp_status && (ndlp->nlp_flag & NLP_NODEV_REMOVE)) {
2847 lpfc_drop_node(vport, ndlp);
2850 return ndlp->nlp_state;
2855 struct lpfc_nodelist *ndlp,
2864 ndlp->nlp_rpi = mb->un.varWords[0];
2865 ndlp->nlp_flag |= NLP_RPI_REGISTERED;
2866 if (ndlp->nlp_flag & NLP_LOGO_ACC) {
2867 lpfc_unreg_rpi(vport, ndlp);
2870 if (ndlp->nlp_flag & NLP_NODEV_REMOVE) {
2871 lpfc_drop_node(vport, ndlp);
2875 return ndlp->nlp_state;
2879 lpfc_device_rm_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2882 if (ndlp->nlp_flag & NLP_NPR_2B_DISC) {
2883 spin_lock_irq(&ndlp->lock);
2884 ndlp->nlp_flag |= NLP_NODEV_REMOVE;
2885 spin_unlock_irq(&ndlp->lock);
2886 return ndlp->nlp_state;
2888 lpfc_drop_node(vport, ndlp);
2893 lpfc_device_recov_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2900 return ndlp->nlp_state;
2902 lpfc_cancel_retry_delay_tmo(vport, ndlp);
2903 spin_lock_irq(&ndlp->lock);
2904 ndlp->nlp_flag &= ~(NLP_NODEV_REMOVE | NLP_NPR_2B_DISC);
2905 ndlp->nlp_fc4_type &= ~(NLP_FC4_FCP | NLP_FC4_NVME);
2906 spin_unlock_irq(&ndlp->lock);
2907 return ndlp->nlp_state;
3098 lpfc_disc_state_machine(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
3107 if (lpfc_nlp_get(ndlp))
3110 cur_state = ndlp->nlp_state;
3112 data1 = (((uint32_t)ndlp->nlp_fc4_type << 16) |
3113 ((uint32_t)ndlp->nlp_type));
3118 evt, ndlp->nlp_DID, cur_state, ndlp->nlp_rpi,
3119 ndlp->nlp_flag, data1);
3123 evt, cur_state, ndlp->nlp_DID);
3126 rc = (func) (vport, ndlp, arg, evt);
3130 data1 = (((uint32_t)ndlp->nlp_fc4_type << 16) |
3131 ((uint32_t)ndlp->nlp_type));
3135 rc, ndlp->nlp_DID, ndlp->nlp_rpi, ndlp->nlp_flag,
3140 rc, ndlp->nlp_DID, ndlp->nlp_flag);
3141 /* Decrement the ndlp reference count held for this function */
3142 lpfc_nlp_put(ndlp);