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

Lines Matching refs:ndlp

48 lpfc_check_adisc(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
54 if (memcmp(nn, &ndlp->nlp_nodename, sizeof (struct lpfc_name)))
57 if (memcmp(pn, &ndlp->nlp_portname, sizeof (struct lpfc_name)))
65 lpfc_check_sparm(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
143 memcpy(&ndlp->nlp_nodename, &sp->nodeName, sizeof (struct lpfc_name));
144 memcpy(&ndlp->nlp_portname, &sp->portName, sizeof (struct lpfc_name));
151 ndlp->nlp_DID,
200 lpfc_els_abort(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp)
210 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_DISCOVERY,
213 ndlp->nlp_DID, ndlp->nlp_flag, ndlp->nlp_state,
214 ndlp->nlp_rpi);
216 lpfc_fabric_abort_nport(ndlp);
222 if (lpfc_check_sli_ndlp(phba, pring, iocb, ndlp)) {
235 if (lpfc_check_sli_ndlp(phba, pring, iocb, ndlp))
253 lpfc_cancel_retry_delay_tmo(phba->pport, ndlp);
258 lpfc_rcv_plogi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
295 ndlp, NULL);
307 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp,
316 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp,
320 if ((lpfc_check_sparm(vport, ndlp, sp, CLASS3, 0) == 0)) {
324 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp,
333 ndlp->nlp_DID, ndlp->nlp_state, ndlp->nlp_flag,
334 ndlp->nlp_rpi);
337 ndlp->nlp_fcp_info |= CLASS2;
339 ndlp->nlp_fcp_info |= CLASS3;
341 ndlp->nlp_class_sup = 0;
343 ndlp->nlp_class_sup |= FC_COS_CLASS1;
345 ndlp->nlp_class_sup |= FC_COS_CLASS2;
347 ndlp->nlp_class_sup |= FC_COS_CLASS3;
349 ndlp->nlp_class_sup |= FC_COS_CLASS4;
350 ndlp->nlp_maxframe =
354 switch (ndlp->nlp_state) {
356 if (!(ndlp->nlp_flag & NLP_NPR_ADISC))
362 lpfc_els_rsp_acc(vport, ELS_CMD_PLOGI, cmdiocb, ndlp, NULL);
400 * mbox->context2 = lpfc_nlp_get(ndlp) deferred until mailbox
405 ndlp->nlp_flag |= (NLP_ACC_REGLOGIN | NLP_RCV_PLOGI);
417 if (ndlp->nlp_state == NLP_STE_PLOGI_ISSUE) {
419 lpfc_els_abort(phba, ndlp);
431 ndlp->nlp_flag |= NLP_RM_DFLT_RPI;
436 ndlp, mbox);
439 lpfc_els_rsp_acc(vport, ELS_CMD_PLOGI, cmdiocb, ndlp, mbox);
444 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp, NULL);
449 lpfc_rcv_padisc(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
477 if (icmd->ulpStatus == 0 && lpfc_check_adisc(vport, ndlp, pnn, ppn)) {
479 lpfc_els_rsp_adisc_acc(vport, cmdiocb, ndlp);
481 lpfc_els_rsp_acc(vport, ELS_CMD_PLOGI, cmdiocb, ndlp,
491 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp, NULL);
494 mod_timer(&ndlp->nlp_delayfunc, jiffies + HZ);
497 ndlp->nlp_flag |= NLP_DELAY_TMO;
499 ndlp->nlp_last_elscmd = ELS_CMD_PLOGI;
500 ndlp->nlp_prev_state = ndlp->nlp_state;
501 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
506 lpfc_rcv_logo(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
514 /* Put ndlp in NPR state with 1 sec timeout for plogi, ACC logo */
519 ndlp->nlp_flag |= NLP_LOGO_ACC;
522 lpfc_els_rsp_acc(vport, ELS_CMD_PRLO, cmdiocb, ndlp, NULL);
524 lpfc_els_rsp_acc(vport, ELS_CMD_ACC, cmdiocb, ndlp, NULL);
525 if (ndlp->nlp_DID == Fabric_DID) {
551 mod_timer(&ndlp->nlp_delayfunc, jiffies + HZ);
553 ndlp->nlp_flag |= NLP_DELAY_TMO;
555 ndlp->nlp_last_elscmd = ELS_CMD_FDISC;
563 } else if ((!(ndlp->nlp_type & NLP_FABRIC) &&
564 ((ndlp->nlp_type & NLP_FCP_TARGET) ||
565 !(ndlp->nlp_type & NLP_FCP_INITIATOR))) ||
566 (ndlp->nlp_state == NLP_STE_ADISC_ISSUE)) {
568 mod_timer(&ndlp->nlp_delayfunc, jiffies + HZ * 1);
570 ndlp->nlp_flag |= NLP_DELAY_TMO;
573 ndlp->nlp_last_elscmd = ELS_CMD_PLOGI;
576 ndlp->nlp_prev_state = ndlp->nlp_state;
577 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
580 ndlp->nlp_flag &= ~NLP_NPR_ADISC;
591 lpfc_rcv_prli(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
597 struct fc_rport *rport = ndlp->rport;
604 ndlp->nlp_type &= ~(NLP_FCP_TARGET | NLP_FCP_INITIATOR);
605 ndlp->nlp_fcp_info &= ~NLP_FCP_2_DEVICE;
608 ndlp->nlp_type |= NLP_FCP_INITIATOR;
610 ndlp->nlp_type |= NLP_FCP_TARGET;
612 ndlp->nlp_fcp_info |= NLP_FCP_2_DEVICE;
617 if (ndlp->nlp_type & NLP_FCP_INITIATOR)
619 if (ndlp->nlp_type & NLP_FCP_TARGET)
624 roles, ndlp->nlp_DID, ndlp->nlp_flag);
631 lpfc_disc_set_adisc(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
635 if (!(ndlp->nlp_flag & NLP_RPI_VALID)) {
636 ndlp->nlp_flag &= ~NLP_NPR_ADISC;
643 ((ndlp->nlp_fcp_info & NLP_FCP_2_DEVICE) &&
644 (ndlp->nlp_type & NLP_FCP_TARGET))) {
646 ndlp->nlp_flag |= NLP_NPR_ADISC;
651 ndlp->nlp_flag &= ~NLP_NPR_ADISC;
652 lpfc_unreg_rpi(vport, ndlp);
687 lpfc_disc_illegal(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
707 ndlp->nlp_DID, evt, ndlp->nlp_state, ndlp->nlp_rpi,
708 ndlp->nlp_flag);
709 return ndlp->nlp_state;
713 lpfc_cmpl_plogi_illegal(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
721 if (!(ndlp->nlp_flag & NLP_RCV_PLOGI)) {
725 ndlp->nlp_DID, evt, ndlp->nlp_state, ndlp->nlp_rpi,
726 ndlp->nlp_flag);
728 return ndlp->nlp_state;
734 lpfc_rcv_plogi_unused_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
741 if (lpfc_rcv_plogi(vport, ndlp, cmdiocb)) {
742 return ndlp->nlp_state;
748 lpfc_rcv_els_unused_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
751 lpfc_issue_els_logo(vport, ndlp, 0);
752 return ndlp->nlp_state;
756 lpfc_rcv_logo_unused_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
763 ndlp->nlp_flag |= NLP_LOGO_ACC;
765 lpfc_els_rsp_acc(vport, ELS_CMD_ACC, cmdiocb, ndlp, NULL);
767 return ndlp->nlp_state;
771 lpfc_cmpl_logo_unused_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
778 lpfc_device_rm_unused_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
785 lpfc_rcv_plogi_plogi_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
811 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp,
814 if (lpfc_rcv_plogi(vport, ndlp, cmdiocb) &&
815 (ndlp->nlp_flag & NLP_NPR_2B_DISC) &&
818 ndlp->nlp_flag &= ~NLP_NPR_2B_DISC;
832 return ndlp->nlp_state;
836 lpfc_rcv_prli_plogi_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
845 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp, NULL);
846 return ndlp->nlp_state;
850 lpfc_rcv_logo_plogi_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
856 lpfc_els_abort(vport->phba, ndlp);
858 lpfc_rcv_logo(vport, ndlp, cmdiocb, ELS_CMD_LOGO);
859 return ndlp->nlp_state;
863 lpfc_rcv_els_plogi_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
871 lpfc_els_abort(phba, ndlp);
874 lpfc_els_rsp_acc(vport, ELS_CMD_ACC, cmdiocb, ndlp, NULL);
876 lpfc_issue_els_logo(vport, ndlp, 0);
879 /* Put ndlp in npr state set plogi timer for 1 sec */
880 mod_timer(&ndlp->nlp_delayfunc, jiffies + HZ * 1);
882 ndlp->nlp_flag |= NLP_DELAY_TMO;
884 ndlp->nlp_last_elscmd = ELS_CMD_PLOGI;
885 ndlp->nlp_prev_state = NLP_STE_PLOGI_ISSUE;
886 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
888 return ndlp->nlp_state;
893 struct lpfc_nodelist *ndlp,
909 if (ndlp->nlp_flag & NLP_ACC_REGLOGIN) {
911 return ndlp->nlp_state;
927 if ((ndlp->nlp_DID != FDMI_DID) &&
934 if (!lpfc_check_sparm(vport, ndlp, sp, CLASS3, 0))
939 ndlp->nlp_DID, ndlp->nlp_state,
940 ndlp->nlp_flag, ndlp->nlp_rpi);
942 ndlp->nlp_fcp_info |= CLASS2;
944 ndlp->nlp_fcp_info |= CLASS3;
946 ndlp->nlp_class_sup = 0;
948 ndlp->nlp_class_sup |= FC_COS_CLASS1;
950 ndlp->nlp_class_sup |= FC_COS_CLASS2;
952 ndlp->nlp_class_sup |= FC_COS_CLASS3;
954 ndlp->nlp_class_sup |= FC_COS_CLASS4;
955 ndlp->nlp_maxframe =
963 ndlp->nlp_DID, ndlp->nlp_state,
964 ndlp->nlp_flag, ndlp->nlp_rpi);
968 lpfc_unreg_rpi(vport, ndlp);
972 switch (ndlp->nlp_DID) {
980 ndlp->nlp_flag |= NLP_REG_LOGIN_SEND;
983 mbox->context2 = lpfc_nlp_get(ndlp);
987 lpfc_nlp_set_state(vport, ndlp,
989 return ndlp->nlp_state;
991 if (ndlp->nlp_flag & NLP_REG_LOGIN_SEND)
992 ndlp->nlp_flag &= ~NLP_REG_LOGIN_SEND;
996 lpfc_nlp_put(ndlp);
1005 ndlp->nlp_DID, ndlp->nlp_state,
1006 ndlp->nlp_flag, ndlp->nlp_rpi);
1013 ndlp->nlp_DID, ndlp->nlp_state,
1014 ndlp->nlp_flag, ndlp->nlp_rpi);
1019 if (ndlp->nlp_DID == NameServer_DID) {
1026 ndlp->nlp_flag |= NLP_DEFER_RM;
1032 lpfc_cmpl_logo_plogi_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1035 return ndlp->nlp_state;
1040 struct lpfc_nodelist *ndlp, void *arg, uint32_t evt)
1054 return ndlp->nlp_state;
1058 lpfc_device_rm_plogi_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1063 if (ndlp->nlp_flag & NLP_NPR_2B_DISC) {
1065 ndlp->nlp_flag |= NLP_NODEV_REMOVE;
1067 return ndlp->nlp_state;
1070 lpfc_els_abort(vport->phba, ndlp);
1072 lpfc_drop_node(vport, ndlp);
1079 struct lpfc_nodelist *ndlp,
1090 return ndlp->nlp_state;
1093 lpfc_els_abort(phba, ndlp);
1095 ndlp->nlp_prev_state = NLP_STE_PLOGI_ISSUE;
1096 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
1098 ndlp->nlp_flag &= ~(NLP_NODEV_REMOVE | NLP_NPR_2B_DISC);
1101 return ndlp->nlp_state;
1105 lpfc_rcv_plogi_adisc_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1113 lpfc_els_abort(phba, ndlp);
1117 if (lpfc_rcv_plogi(vport, ndlp, cmdiocb)) {
1118 if (ndlp->nlp_flag & NLP_NPR_2B_DISC) {
1120 ndlp->nlp_flag &= ~NLP_NPR_2B_DISC;
1125 return ndlp->nlp_state;
1127 ndlp->nlp_prev_state = NLP_STE_ADISC_ISSUE;
1128 lpfc_issue_els_plogi(vport, ndlp->nlp_DID, 0);
1129 lpfc_nlp_set_state(vport, ndlp, NLP_STE_PLOGI_ISSUE);
1131 return ndlp->nlp_state;
1135 lpfc_rcv_prli_adisc_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1140 lpfc_els_rsp_prli_acc(vport, cmdiocb, ndlp);
1141 return ndlp->nlp_state;
1145 lpfc_rcv_logo_adisc_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1154 lpfc_els_abort(phba, ndlp);
1156 lpfc_rcv_logo(vport, ndlp, cmdiocb, ELS_CMD_LOGO);
1157 return ndlp->nlp_state;
1162 struct lpfc_nodelist *ndlp,
1169 lpfc_rcv_padisc(vport, ndlp, cmdiocb);
1170 return ndlp->nlp_state;
1174 lpfc_rcv_prlo_adisc_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1182 lpfc_rcv_logo(vport, ndlp, cmdiocb, ELS_CMD_PRLO);
1183 return ndlp->nlp_state;
1188 struct lpfc_nodelist *ndlp,
1205 (!lpfc_check_adisc(vport, ndlp, &ap->nodeName, &ap->portName))) {
1207 mod_timer(&ndlp->nlp_delayfunc, jiffies + HZ);
1209 ndlp->nlp_flag |= NLP_DELAY_TMO;
1211 ndlp->nlp_last_elscmd = ELS_CMD_PLOGI;
1213 memset(&ndlp->nlp_nodename, 0, sizeof(struct lpfc_name));
1214 memset(&ndlp->nlp_portname, 0, sizeof(struct lpfc_name));
1216 ndlp->nlp_prev_state = NLP_STE_ADISC_ISSUE;
1217 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
1218 lpfc_unreg_rpi(vport, ndlp);
1219 return ndlp->nlp_state;
1223 rc = lpfc_sli4_resume_rpi(ndlp);
1226 ndlp->nlp_prev_state = NLP_STE_ADISC_ISSUE;
1227 return ndlp->nlp_state;
1231 if (ndlp->nlp_type & NLP_FCP_TARGET) {
1232 ndlp->nlp_prev_state = NLP_STE_ADISC_ISSUE;
1233 lpfc_nlp_set_state(vport, ndlp, NLP_STE_MAPPED_NODE);
1235 ndlp->nlp_prev_state = NLP_STE_ADISC_ISSUE;
1236 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE);
1239 return ndlp->nlp_state;
1243 lpfc_device_rm_adisc_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1248 if (ndlp->nlp_flag & NLP_NPR_2B_DISC) {
1250 ndlp->nlp_flag |= NLP_NODEV_REMOVE;
1252 return ndlp->nlp_state;
1255 lpfc_els_abort(vport->phba, ndlp);
1257 lpfc_drop_node(vport, ndlp);
1264 struct lpfc_nodelist *ndlp,
1275 return ndlp->nlp_state;
1278 lpfc_els_abort(phba, ndlp);
1280 ndlp->nlp_prev_state = NLP_STE_ADISC_ISSUE;
1281 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
1283 ndlp->nlp_flag &= ~(NLP_NODEV_REMOVE | NLP_NPR_2B_DISC);
1285 lpfc_disc_set_adisc(vport, ndlp);
1286 return ndlp->nlp_state;
1291 struct lpfc_nodelist *ndlp,
1297 lpfc_rcv_plogi(vport, ndlp, cmdiocb);
1298 return ndlp->nlp_state;
1303 struct lpfc_nodelist *ndlp,
1309 lpfc_els_rsp_prli_acc(vport, cmdiocb, ndlp);
1310 return ndlp->nlp_state;
1315 struct lpfc_nodelist *ndlp,
1327 /* cleanup any ndlp on mbox q waiting for reglogin cmpl */
1330 (ndlp == (struct lpfc_nodelist *) mb->context2)) {
1331 lpfc_nlp_put(ndlp);
1340 (ndlp == (struct lpfc_nodelist *) mb->context2)) {
1352 lpfc_nlp_put(ndlp);
1360 lpfc_rcv_logo(vport, ndlp, cmdiocb, ELS_CMD_LOGO);
1361 return ndlp->nlp_state;
1366 struct lpfc_nodelist *ndlp,
1372 lpfc_rcv_padisc(vport, ndlp, cmdiocb);
1373 return ndlp->nlp_state;
1378 struct lpfc_nodelist *ndlp,
1385 lpfc_els_rsp_acc(vport, ELS_CMD_PRLO, cmdiocb, ndlp, NULL);
1386 return ndlp->nlp_state;
1391 struct lpfc_nodelist *ndlp,
1410 ndlp->nlp_prev_state = NLP_STE_REG_LOGIN_ISSUE;
1411 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
1412 return ndlp->nlp_state;
1415 /* Put ndlp in npr state set plogi timer for 1 sec */
1416 mod_timer(&ndlp->nlp_delayfunc, jiffies + HZ * 1);
1418 ndlp->nlp_flag |= NLP_DELAY_TMO;
1420 ndlp->nlp_last_elscmd = ELS_CMD_PLOGI;
1422 lpfc_issue_els_logo(vport, ndlp, 0);
1423 ndlp->nlp_prev_state = NLP_STE_REG_LOGIN_ISSUE;
1424 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
1425 return ndlp->nlp_state;
1428 ndlp->nlp_rpi = mb->un.varWords[0];
1429 ndlp->nlp_flag |= NLP_RPI_VALID;
1432 if (!(ndlp->nlp_type & NLP_FABRIC)) {
1433 ndlp->nlp_prev_state = NLP_STE_REG_LOGIN_ISSUE;
1434 lpfc_nlp_set_state(vport, ndlp, NLP_STE_PRLI_ISSUE);
1435 lpfc_issue_els_prli(vport, ndlp, 0);
1437 ndlp->nlp_prev_state = NLP_STE_REG_LOGIN_ISSUE;
1438 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE);
1440 return ndlp->nlp_state;
1445 struct lpfc_nodelist *ndlp,
1451 if (ndlp->nlp_flag & NLP_NPR_2B_DISC) {
1453 ndlp->nlp_flag |= NLP_NODEV_REMOVE;
1455 return ndlp->nlp_state;
1457 lpfc_drop_node(vport, ndlp);
1464 struct lpfc_nodelist *ndlp,
1474 return ndlp->nlp_state;
1476 ndlp->nlp_prev_state = NLP_STE_REG_LOGIN_ISSUE;
1477 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
1479 ndlp->nlp_flag |= NLP_IGNR_REG_CMPL;
1480 ndlp->nlp_flag &= ~(NLP_NODEV_REMOVE | NLP_NPR_2B_DISC);
1482 lpfc_disc_set_adisc(vport, ndlp);
1483 return ndlp->nlp_state;
1487 lpfc_rcv_plogi_prli_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1494 lpfc_rcv_plogi(vport, ndlp, cmdiocb);
1495 return ndlp->nlp_state;
1499 lpfc_rcv_prli_prli_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1504 lpfc_els_rsp_prli_acc(vport, cmdiocb, ndlp);
1505 return ndlp->nlp_state;
1509 lpfc_rcv_logo_prli_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1515 lpfc_els_abort(vport->phba, ndlp);
1517 lpfc_rcv_logo(vport, ndlp, cmdiocb, ELS_CMD_LOGO);
1518 return ndlp->nlp_state;
1522 lpfc_rcv_padisc_prli_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1527 lpfc_rcv_padisc(vport, ndlp, cmdiocb);
1528 return ndlp->nlp_state;
1537 lpfc_rcv_prlo_prli_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1542 lpfc_els_rsp_acc(vport, ELS_CMD_PRLO, cmdiocb, ndlp, NULL);
1543 return ndlp->nlp_state;
1547 lpfc_cmpl_prli_prli_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1566 ndlp->nlp_prev_state = NLP_STE_PRLI_ISSUE;
1567 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE);
1568 return ndlp->nlp_state;
1572 ndlp->nlp_type &= ~(NLP_FCP_TARGET | NLP_FCP_INITIATOR);
1573 ndlp->nlp_fcp_info &= ~NLP_FCP_2_DEVICE;
1577 ndlp->nlp_type |= NLP_FCP_INITIATOR;
1579 ndlp->nlp_type |= NLP_FCP_TARGET;
1581 ndlp->nlp_fcp_info |= NLP_FCP_2_DEVICE;
1583 if (!(ndlp->nlp_type & NLP_FCP_TARGET) &&
1588 ndlp->nlp_flag |= NLP_TARGET_REMOVE;
1590 lpfc_issue_els_logo(vport, ndlp, 0);
1592 ndlp->nlp_prev_state = NLP_STE_PRLI_ISSUE;
1593 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
1594 return ndlp->nlp_state;
1597 ndlp->nlp_prev_state = NLP_STE_PRLI_ISSUE;
1598 if (ndlp->nlp_type & NLP_FCP_TARGET)
1599 lpfc_nlp_set_state(vport, ndlp, NLP_STE_MAPPED_NODE);
1601 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE);
1602 return ndlp->nlp_state;
1610 * \param ndlp
1624 lpfc_device_rm_prli_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1629 if (ndlp->nlp_flag & NLP_NPR_2B_DISC) {
1631 ndlp->nlp_flag |= NLP_NODEV_REMOVE;
1633 return ndlp->nlp_state;
1636 lpfc_els_abort(vport->phba, ndlp);
1638 lpfc_drop_node(vport, ndlp);
1649 * \param ndlp
1662 struct lpfc_nodelist *ndlp,
1673 return ndlp->nlp_state;
1676 lpfc_els_abort(phba, ndlp);
1678 ndlp->nlp_prev_state = NLP_STE_PRLI_ISSUE;
1679 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
1681 ndlp->nlp_flag &= ~(NLP_NODEV_REMOVE | NLP_NPR_2B_DISC);
1683 lpfc_disc_set_adisc(vport, ndlp);
1684 return ndlp->nlp_state;
1688 lpfc_rcv_plogi_unmap_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1693 lpfc_rcv_plogi(vport, ndlp, cmdiocb);
1694 return ndlp->nlp_state;
1698 lpfc_rcv_prli_unmap_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1703 lpfc_rcv_prli(vport, ndlp, cmdiocb);
1704 lpfc_els_rsp_prli_acc(vport, cmdiocb, ndlp);
1705 return ndlp->nlp_state;
1709 lpfc_rcv_logo_unmap_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1714 lpfc_rcv_logo(vport, ndlp, cmdiocb, ELS_CMD_LOGO);
1715 return ndlp->nlp_state;
1719 lpfc_rcv_padisc_unmap_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1724 lpfc_rcv_padisc(vport, ndlp, cmdiocb);
1725 return ndlp->nlp_state;
1729 lpfc_rcv_prlo_unmap_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1734 lpfc_els_rsp_acc(vport, ELS_CMD_PRLO, cmdiocb, ndlp, NULL);
1735 return ndlp->nlp_state;
1740 struct lpfc_nodelist *ndlp,
1746 ndlp->nlp_prev_state = NLP_STE_UNMAPPED_NODE;
1747 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
1749 ndlp->nlp_flag &= ~(NLP_NODEV_REMOVE | NLP_NPR_2B_DISC);
1751 lpfc_disc_set_adisc(vport, ndlp);
1753 return ndlp->nlp_state;
1757 lpfc_rcv_plogi_mapped_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1762 lpfc_rcv_plogi(vport, ndlp, cmdiocb);
1763 return ndlp->nlp_state;
1767 lpfc_rcv_prli_mapped_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1772 lpfc_els_rsp_prli_acc(vport, cmdiocb, ndlp);
1773 return ndlp->nlp_state;
1777 lpfc_rcv_logo_mapped_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1782 lpfc_rcv_logo(vport, ndlp, cmdiocb, ELS_CMD_LOGO);
1783 return ndlp->nlp_state;
1788 struct lpfc_nodelist *ndlp,
1793 lpfc_rcv_padisc(vport, ndlp, cmdiocb);
1794 return ndlp->nlp_state;
1798 lpfc_rcv_prlo_mapped_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1806 ndlp->nlp_sid, 0, LPFC_CTX_TGT);
1809 lpfc_rcv_logo(vport, ndlp, cmdiocb, ELS_CMD_PRLO);
1810 return ndlp->nlp_state;
1815 struct lpfc_nodelist *ndlp,
1821 ndlp->nlp_prev_state = NLP_STE_MAPPED_NODE;
1822 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
1824 ndlp->nlp_flag &= ~(NLP_NODEV_REMOVE | NLP_NPR_2B_DISC);
1826 lpfc_disc_set_adisc(vport, ndlp);
1827 return ndlp->nlp_state;
1831 lpfc_rcv_plogi_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1838 if (ndlp->nlp_flag & (NLP_LOGO_SND | NLP_LOGO_ACC))
1839 return ndlp->nlp_state;
1840 if (lpfc_rcv_plogi(vport, ndlp, cmdiocb)) {
1841 lpfc_cancel_retry_delay_tmo(vport, ndlp);
1843 ndlp->nlp_flag &= ~(NLP_NPR_ADISC | NLP_NPR_2B_DISC);
1845 } else if (!(ndlp->nlp_flag & NLP_NPR_2B_DISC)) {
1847 if (!(ndlp->nlp_flag & NLP_DELAY_TMO)) {
1848 ndlp->nlp_prev_state = NLP_STE_NPR_NODE;
1849 lpfc_nlp_set_state(vport, ndlp, NLP_STE_PLOGI_ISSUE);
1850 lpfc_issue_els_plogi(vport, ndlp->nlp_DID, 0);
1853 return ndlp->nlp_state;
1857 lpfc_rcv_prli_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1867 lpfc_els_rsp_reject(vport, stat.un.lsRjtError, cmdiocb, ndlp, NULL);
1869 if (!(ndlp->nlp_flag & NLP_DELAY_TMO)) {
1870 if (ndlp->nlp_flag & NLP_NPR_ADISC) {
1872 ndlp->nlp_flag &= ~NLP_NPR_ADISC;
1873 ndlp->nlp_prev_state = NLP_STE_NPR_NODE;
1875 lpfc_nlp_set_state(vport, ndlp, NLP_STE_ADISC_ISSUE);
1876 lpfc_issue_els_adisc(vport, ndlp, 0);
1878 ndlp->nlp_prev_state = NLP_STE_NPR_NODE;
1879 lpfc_nlp_set_state(vport, ndlp, NLP_STE_PLOGI_ISSUE);
1880 lpfc_issue_els_plogi(vport, ndlp->nlp_DID, 0);
1883 return ndlp->nlp_state;
1887 lpfc_rcv_logo_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1892 lpfc_rcv_logo(vport, ndlp, cmdiocb, ELS_CMD_LOGO);
1893 return ndlp->nlp_state;
1897 lpfc_rcv_padisc_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1902 lpfc_rcv_padisc(vport, ndlp, cmdiocb);
1908 if (!(ndlp->nlp_flag & NLP_DELAY_TMO) &&
1909 !(ndlp->nlp_flag & NLP_NPR_2B_DISC)) {
1910 if (ndlp->nlp_flag & NLP_NPR_ADISC) {
1911 ndlp->nlp_flag &= ~NLP_NPR_ADISC;
1912 ndlp->nlp_prev_state = NLP_STE_NPR_NODE;
1913 lpfc_nlp_set_state(vport, ndlp, NLP_STE_ADISC_ISSUE);
1914 lpfc_issue_els_adisc(vport, ndlp, 0);
1916 ndlp->nlp_prev_state = NLP_STE_NPR_NODE;
1917 lpfc_nlp_set_state(vport, ndlp, NLP_STE_PLOGI_ISSUE);
1918 lpfc_issue_els_plogi(vport, ndlp->nlp_DID, 0);
1921 return ndlp->nlp_state;
1925 lpfc_rcv_prlo_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1932 ndlp->nlp_flag |= NLP_LOGO_ACC;
1935 lpfc_els_rsp_acc(vport, ELS_CMD_ACC, cmdiocb, ndlp, NULL);
1937 if ((ndlp->nlp_flag & NLP_DELAY_TMO) == 0) {
1938 mod_timer(&ndlp->nlp_delayfunc, jiffies + HZ * 1);
1940 ndlp->nlp_flag |= NLP_DELAY_TMO;
1941 ndlp->nlp_flag &= ~NLP_NPR_ADISC;
1943 ndlp->nlp_last_elscmd = ELS_CMD_PLOGI;
1946 ndlp->nlp_flag &= ~NLP_NPR_ADISC;
1949 return ndlp->nlp_state;
1953 lpfc_cmpl_plogi_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1964 ndlp->nlp_flag |= NLP_DEFER_RM;
1967 return ndlp->nlp_state;
1971 lpfc_cmpl_prli_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1981 if (irsp->ulpStatus && (ndlp->nlp_flag & NLP_NODEV_REMOVE)) {
1982 lpfc_drop_node(vport, ndlp);
1985 return ndlp->nlp_state;
1989 lpfc_cmpl_logo_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1993 if (ndlp->nlp_DID == Fabric_DID) {
1998 lpfc_unreg_rpi(vport, ndlp);
1999 return ndlp->nlp_state;
2003 lpfc_cmpl_adisc_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2013 if (irsp->ulpStatus && (ndlp->nlp_flag & NLP_NODEV_REMOVE)) {
2014 lpfc_drop_node(vport, ndlp);
2017 return ndlp->nlp_state;
2022 struct lpfc_nodelist *ndlp,
2029 ndlp->nlp_rpi = mb->un.varWords[0];
2030 ndlp->nlp_flag |= NLP_RPI_VALID;
2032 if (ndlp->nlp_flag & NLP_NODEV_REMOVE) {
2033 lpfc_drop_node(vport, ndlp);
2037 return ndlp->nlp_state;
2041 lpfc_device_rm_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2046 if (ndlp->nlp_flag & NLP_NPR_2B_DISC) {
2048 ndlp->nlp_flag |= NLP_NODEV_REMOVE;
2050 return ndlp->nlp_state;
2052 lpfc_drop_node(vport, ndlp);
2057 lpfc_device_recov_npr_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2066 return ndlp->nlp_state;
2068 lpfc_cancel_retry_delay_tmo(vport, ndlp);
2070 ndlp->nlp_flag &= ~(NLP_NODEV_REMOVE | NLP_NPR_2B_DISC);
2072 return ndlp->nlp_state;
2249 lpfc_disc_state_machine(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
2257 if (lpfc_nlp_get(ndlp))
2260 cur_state = ndlp->nlp_state;
2266 evt, ndlp->nlp_DID, cur_state, ndlp->nlp_flag);
2270 evt, cur_state, ndlp->nlp_DID);
2273 rc = (func) (vport, ndlp, arg, evt);
2279 rc, ndlp->nlp_DID, ndlp->nlp_flag);
2283 rc, ndlp->nlp_DID, ndlp->nlp_flag);
2284 /* Decrement the ndlp reference count held for this function */
2285 lpfc_nlp_put(ndlp);