Lines Matching defs:rn

89 csio_is_rnode_ready(struct csio_rnode *rn)
91 return csio_match_state(rn, csio_rns_ready);
95 csio_is_rnode_uninit(struct csio_rnode *rn)
97 return csio_match_state(rn, csio_rns_uninit);
125 struct csio_rnode *rn;
128 rn = (struct csio_rnode *) tmp;
129 if (rn->flowid == flowid)
130 return rn;
149 struct csio_rnode *rn;
152 rn = (struct csio_rnode *) tmp;
153 if (!memcmp(csio_rn_wwpn(rn), wwpn, 8))
154 return rn;
173 struct csio_rnode *rn;
176 rn = (struct csio_rnode *) tmp;
177 if (rn->nport_id == portid)
178 return rn;
190 struct csio_rnode *rn;
202 rn = (struct csio_rnode *) tmp;
203 if (csio_is_rnode_ready(rn)) {
204 if (rn->flowid == rdev_flowid) {
220 struct csio_rnode *rn = mempool_alloc(hw->rnode_mempool, GFP_ATOMIC);
221 if (!rn)
224 memset(rn, 0, sizeof(struct csio_rnode));
225 if (csio_rnode_init(rn, ln))
230 return rn;
233 mempool_free(rn, hw->rnode_mempool);
240 csio_free_rnode(struct csio_rnode *rn)
242 struct csio_hw *hw = csio_lnode_to_hw(csio_rnode_to_lnode(rn));
244 csio_rnode_exit(rn);
245 CSIO_INC_STATS(rn->lnp, n_rnode_free);
246 mempool_free(rn, hw->rnode_mempool);
260 struct csio_rnode *rn;
262 rn = csio_rn_lookup(ln, flowid);
263 if (!rn) {
264 rn = csio_alloc_rnode(ln);
265 if (!rn)
268 rn->flowid = flowid;
271 return rn;
283 csio_put_rnode(struct csio_lnode *ln, struct csio_rnode *rn)
285 CSIO_DB_ASSERT(csio_is_rnode_uninit(rn) != 0);
286 csio_free_rnode(rn);
304 struct csio_rnode *rn, *match_rn;
321 rn = csio_rn_lookup(ln, rdev_flowid);
322 if (!rn) {
333 rn = csio_rn_lookup_wwpn(ln, rdevp->wwpn);
334 if (!rn)
343 csio_rn_flowid(rn) = CSIO_INVALID_IDX;
349 * same port relogged in. If so update the matched rn.
353 if (rn == match_rn)
358 rn->nport_id,
361 if (csio_is_rnode_ready(rn)) {
368 csio_rn_flowid(rn) = CSIO_INVALID_IDX;
369 rn = match_rn;
371 /* Update rn */
374 csio_rn_flowid(rn) = CSIO_INVALID_IDX;
379 if (!memcmp(csio_rn_wwpn(rn), rdevp->wwpn, 8))
390 csio_rn_flowid(rn) = CSIO_INVALID_IDX;
391 rn = match_rn;
397 wwn_to_u64(csio_rn_wwpn(rn)));
398 if (csio_is_rnode_ready(rn)) {
402 wwn_to_u64(csio_rn_wwpn(rn)),
406 csio_rn_flowid(rn) = CSIO_INVALID_IDX;
413 rn, rdev_flowid, wwn_to_u64(rdevp->wwpn));
416 csio_rn_flowid(rn) = rdev_flowid;
419 rn->rdev_entry = rdevp;
421 return rn;
424 rn = csio_get_rnode(ln, rdev_flowid);
425 if (!rn)
429 rn, rdev_flowid, wwn_to_u64(rdevp->wwpn));
432 rn->rdev_entry = rdevp;
433 return rn;
439 * @rn: rnode
444 csio_rn_verify_rparams(struct csio_lnode *ln, struct csio_rnode *rn,
457 rn->role = CSIO_RNFR_FABRIC;
460 csio_rn_flowid(rn));
470 rn->role = CSIO_RNFR_NS;
473 csio_rn_flowid(rn));
480 rn->role = CSIO_RNFR_NPORT;
485 rn->fcp_flags |= FCP_SPPF_OVLY_ALLOW;
488 rn->fcp_flags |= FCP_SPPF_RETRY;
491 rn->fcp_flags |= FCP_SPPF_CONF_COMPL;
494 rn->role |= CSIO_RNFR_TARGET;
497 rn->role |= CSIO_RNFR_INITIATOR;
504 rn->role = 0;
509 csio_rn_flowid(rn), rport_type);
520 csio_rn_flowid(rn),
529 csio_rn_flowid(rn),
537 rn->nport_id = (ntohl(*did) >> 8) & CSIO_DID_MASK;
538 memcpy(csio_rn_wwnn(rn), rdevp->wwnn, 8);
539 memcpy(csio_rn_wwpn(rn), rdevp->wwpn, 8);
540 rn->rn_sparm.csp.sp_bb_data = rdevp->rcv_fr_sz;
542 rn->rn_sparm.clsp[fc_class - 1].cp_class = htons(FC_CPC_VALID);
548 __csio_reg_rnode(struct csio_rnode *rn)
550 struct csio_lnode *ln = csio_rnode_to_lnode(rn);
554 csio_reg_rnode(rn);
557 if (rn->role & CSIO_RNFR_TARGET)
560 if (rn->nport_id == FC_FID_MGMT_SERV)
561 csio_ln_fdmi_start(ln, (void *) rn);
565 __csio_unreg_rnode(struct csio_rnode *rn)
567 struct csio_lnode *ln = csio_rnode_to_lnode(rn);
572 if (!list_empty(&rn->host_cmpl_q)) {
574 list_splice_tail_init(&rn->host_cmpl_q, &tmp_q);
578 if (rn->role & CSIO_RNFR_TARGET) {
584 csio_unreg_rnode(rn);
599 * @rn - rnode
604 csio_rns_uninit(struct csio_rnode *rn, enum csio_rn_ev evt)
606 struct csio_lnode *ln = csio_rnode_to_lnode(rn);
609 CSIO_INC_STATS(rn, n_evt_sm[evt]);
614 ret = csio_rn_verify_rparams(ln, rn, rn->rdev_entry);
616 csio_set_state(&rn->sm, csio_rns_ready);
617 __csio_reg_rnode(rn);
619 CSIO_INC_STATS(rn, n_err_inval);
625 "in rn state[uninit]\n", csio_rn_flowid(rn), evt);
626 CSIO_INC_STATS(rn, n_evt_drop);
631 "in rn state[uninit]\n", csio_rn_flowid(rn), evt);
632 CSIO_INC_STATS(rn, n_evt_unexp);
639 * @rn - rnode
644 csio_rns_ready(struct csio_rnode *rn, enum csio_rn_ev evt)
646 struct csio_lnode *ln = csio_rnode_to_lnode(rn);
649 CSIO_INC_STATS(rn, n_evt_sm[evt]);
656 "in rn state[ready]\n", csio_rn_flowid(rn), evt,
657 rn->nport_id);
658 CSIO_INC_STATS(rn, n_evt_drop);
663 ret = csio_rn_verify_rparams(ln, rn, rn->rdev_entry);
665 __csio_reg_rnode(rn);
667 CSIO_INC_STATS(rn, n_err_inval);
671 csio_set_state(&rn->sm, csio_rns_offline);
672 __csio_unreg_rnode(rn);
680 csio_set_state(&rn->sm, csio_rns_offline);
682 __csio_unreg_rnode(rn);
697 csio_set_state(&rn->sm, csio_rns_uninit);
698 __csio_unreg_rnode(rn);
702 csio_set_state(&rn->sm, csio_rns_disappeared);
703 __csio_unreg_rnode(rn);
715 "in rn state[uninit]\n", csio_rn_flowid(rn), evt,
716 rn->nport_id);
717 CSIO_INC_STATS(rn, n_evt_unexp);
724 * @rn - rnode
729 csio_rns_offline(struct csio_rnode *rn, enum csio_rn_ev evt)
731 struct csio_lnode *ln = csio_rnode_to_lnode(rn);
734 CSIO_INC_STATS(rn, n_evt_sm[evt]);
739 ret = csio_rn_verify_rparams(ln, rn, rn->rdev_entry);
741 csio_set_state(&rn->sm, csio_rns_ready);
742 __csio_reg_rnode(rn);
744 CSIO_INC_STATS(rn, n_err_inval);
745 csio_post_event(&rn->sm, CSIO_RNFE_CLOSE);
752 "in rn state[offline]\n", csio_rn_flowid(rn), evt,
753 rn->nport_id);
754 CSIO_INC_STATS(rn, n_evt_drop);
764 csio_set_state(&rn->sm, csio_rns_uninit);
768 csio_set_state(&rn->sm, csio_rns_disappeared);
774 "in rn state[offline]\n", csio_rn_flowid(rn), evt,
775 rn->nport_id);
776 CSIO_INC_STATS(rn, n_evt_unexp);
783 * @rn - rnode
788 csio_rns_disappeared(struct csio_rnode *rn, enum csio_rn_ev evt)
790 struct csio_lnode *ln = csio_rnode_to_lnode(rn);
793 CSIO_INC_STATS(rn, n_evt_sm[evt]);
798 ret = csio_rn_verify_rparams(ln, rn, rn->rdev_entry);
800 csio_set_state(&rn->sm, csio_rns_ready);
801 __csio_reg_rnode(rn);
803 CSIO_INC_STATS(rn, n_err_inval);
804 csio_post_event(&rn->sm, CSIO_RNFE_CLOSE);
815 csio_set_state(&rn->sm, csio_rns_uninit);
822 "in rn state[disappeared]\n", csio_rn_flowid(rn),
823 evt, rn->nport_id);
829 "in rn state[disappeared]\n", csio_rn_flowid(rn),
830 evt, rn->nport_id);
831 CSIO_INC_STATS(rn, n_evt_unexp);
842 * @rn: rnode
847 csio_rnode_devloss_handler(struct csio_rnode *rn)
849 struct csio_lnode *ln = csio_rnode_to_lnode(rn);
852 if (csio_is_rnode_ready(rn))
855 csio_post_event(&rn->sm, CSIO_RNFE_CLOSE);
857 /* Free rn if in uninit state */
858 if (csio_is_rnode_uninit(rn))
859 csio_put_rnode(ln, rn);
864 * @rn: rnode
868 csio_rnode_fwevt_handler(struct csio_rnode *rn, uint8_t fwevt)
870 struct csio_lnode *ln = csio_rnode_to_lnode(rn);
876 csio_rn_flowid(rn), fwevt);
877 CSIO_INC_STATS(rn, n_evt_unexp);
880 CSIO_INC_STATS(rn, n_evt_fw[fwevt]);
883 rn->prev_evt = rn->cur_evt;
884 rn->cur_evt = fwevt;
887 csio_post_event(&rn->sm, evt);
889 /* Free rn if in uninit state */
890 if (csio_is_rnode_uninit(rn))
891 csio_put_rnode(ln, rn);
896 * @rn: RNode
903 csio_rnode_init(struct csio_rnode *rn, struct csio_lnode *ln)
905 csio_rnode_to_lnode(rn) = ln;
906 csio_init_state(&rn->sm, csio_rns_uninit);
907 INIT_LIST_HEAD(&rn->host_cmpl_q);
908 csio_rn_flowid(rn) = CSIO_INVALID_IDX;
911 list_add_tail(&rn->sm.sm_list, &ln->rnhead);
917 csio_rnode_exit(struct csio_rnode *rn)
919 list_del_init(&rn->sm.sm_list);
920 CSIO_DB_ASSERT(list_empty(&rn->host_cmpl_q));