Lines Matching +full:remote +full:- +full:pid
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2005-2014 Brocade Communications Systems, Inc.
4 * Copyright (c) 2014- QLogic Corporation.
8 * Linux driver for QLogic BR-series Fibre Channel Host Bus Adapter.
12 * fcpim.c - FCP initiator mode i-t nexus state machine
91 bfa_trc(itnim->fcs, itnim->rport->pwwn); in bfa_fcs_itnim_sm_offline()
92 bfa_trc(itnim->fcs, event); in bfa_fcs_itnim_sm_offline()
97 itnim->prli_retries = 0; in bfa_fcs_itnim_sm_offline()
102 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_OFFLINE); in bfa_fcs_itnim_sm_offline()
114 bfa_sm_fault(itnim->fcs, event); in bfa_fcs_itnim_sm_offline()
123 bfa_trc(itnim->fcs, itnim->rport->pwwn); in bfa_fcs_itnim_sm_prli_send()
124 bfa_trc(itnim->fcs, event); in bfa_fcs_itnim_sm_prli_send()
133 bfa_fcxp_walloc_cancel(itnim->fcs->bfa, &itnim->fcxp_wqe); in bfa_fcs_itnim_sm_prli_send()
134 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_FCS_ONLINE); in bfa_fcs_itnim_sm_prli_send()
139 bfa_fcxp_walloc_cancel(itnim->fcs->bfa, &itnim->fcxp_wqe); in bfa_fcs_itnim_sm_prli_send()
140 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_OFFLINE); in bfa_fcs_itnim_sm_prli_send()
145 bfa_fcxp_walloc_cancel(itnim->fcs->bfa, &itnim->fcxp_wqe); in bfa_fcs_itnim_sm_prli_send()
150 bfa_sm_fault(itnim->fcs, event); in bfa_fcs_itnim_sm_prli_send()
158 bfa_trc(itnim->fcs, itnim->rport->pwwn); in bfa_fcs_itnim_sm_prli()
159 bfa_trc(itnim->fcs, event); in bfa_fcs_itnim_sm_prli()
163 if (itnim->rport->scsi_function == BFA_RPORT_INITIATOR) in bfa_fcs_itnim_sm_prli()
169 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_FCS_ONLINE); in bfa_fcs_itnim_sm_prli()
174 bfa_timer_start(itnim->fcs->bfa, &itnim->timer, in bfa_fcs_itnim_sm_prli()
185 bfa_fcxp_discard(itnim->fcxp); in bfa_fcs_itnim_sm_prli()
186 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_OFFLINE); in bfa_fcs_itnim_sm_prli()
191 bfa_fcxp_discard(itnim->fcxp); in bfa_fcs_itnim_sm_prli()
192 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_FCS_ONLINE); in bfa_fcs_itnim_sm_prli()
197 bfa_fcxp_discard(itnim->fcxp); in bfa_fcs_itnim_sm_prli()
202 bfa_sm_fault(itnim->fcs, event); in bfa_fcs_itnim_sm_prli()
210 bfa_trc(itnim->fcs, itnim->rport->pwwn); in bfa_fcs_itnim_sm_hal_rport_online()
211 bfa_trc(itnim->fcs, event); in bfa_fcs_itnim_sm_hal_rport_online()
215 if (!itnim->bfa_itnim) in bfa_fcs_itnim_sm_hal_rport_online()
216 itnim->bfa_itnim = bfa_itnim_create(itnim->fcs->bfa, in bfa_fcs_itnim_sm_hal_rport_online()
217 itnim->rport->bfa_rport, itnim); in bfa_fcs_itnim_sm_hal_rport_online()
219 if (itnim->bfa_itnim) { in bfa_fcs_itnim_sm_hal_rport_online()
221 bfa_itnim_online(itnim->bfa_itnim, itnim->seq_rec); in bfa_fcs_itnim_sm_hal_rport_online()
224 bfa_sm_send_event(itnim->rport, RPSM_EVENT_DELETE); in bfa_fcs_itnim_sm_hal_rport_online()
231 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_OFFLINE); in bfa_fcs_itnim_sm_hal_rport_online()
240 bfa_sm_fault(itnim->fcs, event); in bfa_fcs_itnim_sm_hal_rport_online()
248 bfa_trc(itnim->fcs, itnim->rport->pwwn); in bfa_fcs_itnim_sm_prli_retry()
249 bfa_trc(itnim->fcs, event); in bfa_fcs_itnim_sm_prli_retry()
253 if (itnim->prli_retries < BFA_FCS_RPORT_MAX_RETRIES) { in bfa_fcs_itnim_sm_prli_retry()
254 itnim->prli_retries++; in bfa_fcs_itnim_sm_prli_retry()
255 bfa_trc(itnim->fcs, itnim->prli_retries); in bfa_fcs_itnim_sm_prli_retry()
261 bfa_sm_send_event(itnim->rport, RPSM_EVENT_LOGO_IMP); in bfa_fcs_itnim_sm_prli_retry()
268 bfa_timer_stop(&itnim->timer); in bfa_fcs_itnim_sm_prli_retry()
269 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_OFFLINE); in bfa_fcs_itnim_sm_prli_retry()
274 bfa_timer_stop(&itnim->timer); in bfa_fcs_itnim_sm_prli_retry()
275 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_FCS_ONLINE); in bfa_fcs_itnim_sm_prli_retry()
280 bfa_timer_stop(&itnim->timer); in bfa_fcs_itnim_sm_prli_retry()
285 bfa_sm_fault(itnim->fcs, event); in bfa_fcs_itnim_sm_prli_retry()
293 struct bfad_s *bfad = (struct bfad_s *)itnim->fcs->bfad; in bfa_fcs_itnim_sm_hcb_online()
297 bfa_trc(itnim->fcs, itnim->rport->pwwn); in bfa_fcs_itnim_sm_hcb_online()
298 bfa_trc(itnim->fcs, event); in bfa_fcs_itnim_sm_hcb_online()
303 bfa_fcb_itnim_online(itnim->itnim_drv); in bfa_fcs_itnim_sm_hcb_online()
304 wwn2str(lpwwn_buf, bfa_fcs_lport_get_pwwn(itnim->rport->port)); in bfa_fcs_itnim_sm_hcb_online()
305 wwn2str(rpwwn_buf, itnim->rport->pwwn); in bfa_fcs_itnim_sm_hcb_online()
314 bfa_itnim_offline(itnim->bfa_itnim); in bfa_fcs_itnim_sm_hcb_online()
323 bfa_sm_fault(itnim->fcs, event); in bfa_fcs_itnim_sm_hcb_online()
331 struct bfad_s *bfad = (struct bfad_s *)itnim->fcs->bfad; in bfa_fcs_itnim_sm_online()
335 bfa_trc(itnim->fcs, itnim->rport->pwwn); in bfa_fcs_itnim_sm_online()
336 bfa_trc(itnim->fcs, event); in bfa_fcs_itnim_sm_online()
341 bfa_fcb_itnim_offline(itnim->itnim_drv); in bfa_fcs_itnim_sm_online()
342 bfa_itnim_offline(itnim->bfa_itnim); in bfa_fcs_itnim_sm_online()
343 wwn2str(lpwwn_buf, bfa_fcs_lport_get_pwwn(itnim->rport->port)); in bfa_fcs_itnim_sm_online()
344 wwn2str(rpwwn_buf, itnim->rport->pwwn); in bfa_fcs_itnim_sm_online()
345 if (bfa_fcs_lport_is_online(itnim->rport->port) == BFA_TRUE) { in bfa_fcs_itnim_sm_online()
364 bfa_sm_fault(itnim->fcs, event); in bfa_fcs_itnim_sm_online()
372 bfa_trc(itnim->fcs, itnim->rport->pwwn); in bfa_fcs_itnim_sm_hcb_offline()
373 bfa_trc(itnim->fcs, event); in bfa_fcs_itnim_sm_hcb_offline()
378 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_OFFLINE); in bfa_fcs_itnim_sm_hcb_offline()
387 bfa_sm_fault(itnim->fcs, event); in bfa_fcs_itnim_sm_hcb_offline()
400 bfa_trc(itnim->fcs, itnim->rport->pwwn); in bfa_fcs_itnim_sm_initiator()
401 bfa_trc(itnim->fcs, event); in bfa_fcs_itnim_sm_initiator()
406 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_OFFLINE); in bfa_fcs_itnim_sm_initiator()
413 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_FCS_ONLINE); in bfa_fcs_itnim_sm_initiator()
426 bfa_sm_fault(itnim->fcs, event); in bfa_fcs_itnim_sm_initiator()
434 struct bfa_fcs_rport_s *rport = itnim->rport; in bfa_fcs_itnim_aen_post()
435 struct bfad_s *bfad = (struct bfad_s *)itnim->fcs->bfad; in bfa_fcs_itnim_aen_post()
439 if (BFA_FCS_PID_IS_WKA(rport->pid)) in bfa_fcs_itnim_aen_post()
446 aen_entry->aen_data.itnim.vf_id = rport->port->fabric->vf_id; in bfa_fcs_itnim_aen_post()
447 aen_entry->aen_data.itnim.ppwwn = bfa_fcs_lport_get_pwwn( in bfa_fcs_itnim_aen_post()
448 bfa_fcs_get_base_port(itnim->fcs)); in bfa_fcs_itnim_aen_post()
449 aen_entry->aen_data.itnim.lpwwn = bfa_fcs_lport_get_pwwn(rport->port); in bfa_fcs_itnim_aen_post()
450 aen_entry->aen_data.itnim.rpwwn = rport->pwwn; in bfa_fcs_itnim_aen_post()
453 bfad_im_post_vendor_event(aen_entry, bfad, ++rport->fcs->fcs_aen_seq, in bfa_fcs_itnim_aen_post()
461 struct bfa_fcs_rport_s *rport = itnim->rport; in bfa_fcs_itnim_send_prli()
462 struct bfa_fcs_lport_s *port = rport->port; in bfa_fcs_itnim_send_prli()
467 bfa_trc(itnim->fcs, itnim->rport->pwwn); in bfa_fcs_itnim_send_prli()
470 bfa_fcs_fcxp_alloc(port->fcs, BFA_TRUE); in bfa_fcs_itnim_send_prli()
472 itnim->stats.fcxp_alloc_wait++; in bfa_fcs_itnim_send_prli()
473 bfa_fcs_fcxp_alloc_wait(port->fcs->bfa, &itnim->fcxp_wqe, in bfa_fcs_itnim_send_prli()
477 itnim->fcxp = fcxp; in bfa_fcs_itnim_send_prli()
480 itnim->rport->pid, bfa_fcs_lport_get_fcid(port), 0); in bfa_fcs_itnim_send_prli()
482 bfa_fcxp_send(fcxp, rport->bfa_rport, port->fabric->vf_id, port->lp_tag, in bfa_fcs_itnim_send_prli()
487 itnim->stats.prli_sent++; in bfa_fcs_itnim_send_prli()
502 bfa_trc(itnim->fcs, req_status); in bfa_fcs_itnim_prli_response()
508 itnim->stats.prli_rsp_err++; in bfa_fcs_itnim_prli_response()
515 if (els_cmd->els_code == FC_ELS_ACC) { in bfa_fcs_itnim_prli_response()
519 bfa_trc(itnim->fcs, rsp_len); in bfa_fcs_itnim_prli_response()
521 * Check if this r-port is also in Initiator mode. in bfa_fcs_itnim_prli_response()
522 * If so, we need to set this ITN as a no-op. in bfa_fcs_itnim_prli_response()
524 if (prli_resp->parampage.servparams.initiator) { in bfa_fcs_itnim_prli_response()
525 bfa_trc(itnim->fcs, prli_resp->parampage.type); in bfa_fcs_itnim_prli_response()
526 itnim->rport->scsi_function = in bfa_fcs_itnim_prli_response()
528 itnim->stats.prli_rsp_acc++; in bfa_fcs_itnim_prli_response()
529 itnim->stats.initiator++; in bfa_fcs_itnim_prli_response()
535 itnim->stats.prli_rsp_parse_err++; in bfa_fcs_itnim_prli_response()
538 itnim->rport->scsi_function = BFA_RPORT_TARGET; in bfa_fcs_itnim_prli_response()
540 sparams = &prli_resp->parampage.servparams; in bfa_fcs_itnim_prli_response()
541 itnim->seq_rec = sparams->retry; in bfa_fcs_itnim_prli_response()
542 itnim->rec_support = sparams->rec_support; in bfa_fcs_itnim_prli_response()
543 itnim->task_retry_id = sparams->task_retry_id; in bfa_fcs_itnim_prli_response()
544 itnim->conf_comp = sparams->confirm; in bfa_fcs_itnim_prli_response()
546 itnim->stats.prli_rsp_acc++; in bfa_fcs_itnim_prli_response()
551 bfa_trc(itnim->fcs, ls_rjt->reason_code); in bfa_fcs_itnim_prli_response()
552 bfa_trc(itnim->fcs, ls_rjt->reason_code_expl); in bfa_fcs_itnim_prli_response()
554 itnim->stats.prli_rsp_rjt++; in bfa_fcs_itnim_prli_response()
555 if (ls_rjt->reason_code == FC_LS_RJT_RSN_CMD_NOT_SUPP) { in bfa_fcs_itnim_prli_response()
568 itnim->stats.timeout++; in bfa_fcs_itnim_timeout()
575 if (itnim->bfa_itnim) { in bfa_fcs_itnim_free()
576 bfa_itnim_delete(itnim->bfa_itnim); in bfa_fcs_itnim_free()
577 itnim->bfa_itnim = NULL; in bfa_fcs_itnim_free()
580 bfa_fcb_itnim_free(itnim->fcs->bfad, itnim->itnim_drv); in bfa_fcs_itnim_free()
592 * @param[in] rport - remote port.
597 struct bfa_fcs_lport_s *port = rport->port; in bfa_fcs_itnim_create()
605 ret = bfa_fcb_itnim_alloc(port->fcs->bfad, &itnim, &itnim_drv); in bfa_fcs_itnim_create()
607 bfa_trc(port->fcs, rport->pwwn); in bfa_fcs_itnim_create()
614 itnim->rport = rport; in bfa_fcs_itnim_create()
615 itnim->fcs = rport->fcs; in bfa_fcs_itnim_create()
616 itnim->itnim_drv = itnim_drv; in bfa_fcs_itnim_create()
618 itnim->bfa_itnim = NULL; in bfa_fcs_itnim_create()
619 itnim->seq_rec = BFA_FALSE; in bfa_fcs_itnim_create()
620 itnim->rec_support = BFA_FALSE; in bfa_fcs_itnim_create()
621 itnim->conf_comp = BFA_FALSE; in bfa_fcs_itnim_create()
622 itnim->task_retry_id = BFA_FALSE; in bfa_fcs_itnim_create()
635 * @param[in] rport - remote port.
640 bfa_trc(itnim->fcs, itnim->rport->pid); in bfa_fcs_itnim_delete()
645 * Notification from rport that PLOGI is complete to initiate FC-4 session.
650 itnim->stats.onlines++; in bfa_fcs_itnim_brp_online()
652 if (!BFA_FCS_PID_IS_WKA(itnim->rport->pid)) in bfa_fcs_itnim_brp_online()
657 * Called by rport to handle a remote device offline.
662 itnim->stats.offlines++; in bfa_fcs_itnim_rport_offline()
667 * Called by rport when remote port is known to be an initiator from
673 bfa_trc(itnim->fcs, itnim->rport->pid); in bfa_fcs_itnim_is_initiator()
674 itnim->stats.initiator++; in bfa_fcs_itnim_is_initiator()
684 bfa_trc(itnim->fcs, itnim->rport->pid); in bfa_fcs_itnim_get_online_state()
685 switch (bfa_fcs_itnim_sm_to_state(itnim_sm_table, itnim->sm)) { in bfa_fcs_itnim_get_online_state()
703 bfa_trc(itnim->fcs, itnim->rport->pwwn); in bfa_cb_itnim_online()
715 bfa_trc(itnim->fcs, itnim->rport->pwwn); in bfa_cb_itnim_offline()
728 bfa_trc(itnim->fcs, itnim->rport->pwwn); in bfa_cb_itnim_tov_begin()
738 struct bfad_itnim_s *itnim_drv = itnim->itnim_drv; in bfa_cb_itnim_tov()
740 bfa_trc(itnim->fcs, itnim->rport->pwwn); in bfa_cb_itnim_tov()
741 itnim_drv->state = ITNIM_STATE_TIMEOUT; in bfa_cb_itnim_tov()
756 itnim->stats.sler++; in bfa_cb_itnim_sler()
757 bfa_trc(itnim->fcs, itnim->rport->pwwn); in bfa_cb_itnim_sler()
758 bfa_sm_send_event(itnim->rport, RPSM_EVENT_LOGO_IMP); in bfa_cb_itnim_sler()
770 WARN_ON(rport->itnim == NULL); in bfa_fcs_itnim_lookup()
771 return rport->itnim; in bfa_fcs_itnim_lookup()
785 attr->state = bfa_fcs_itnim_sm_to_state(itnim_sm_table, itnim->sm); in bfa_fcs_itnim_attr_get()
786 attr->retry = itnim->seq_rec; in bfa_fcs_itnim_attr_get()
787 attr->rec_support = itnim->rec_support; in bfa_fcs_itnim_attr_get()
788 attr->conf_comp = itnim->conf_comp; in bfa_fcs_itnim_attr_get()
789 attr->task_retry_id = itnim->task_retry_id; in bfa_fcs_itnim_attr_get()
806 memcpy(stats, &itnim->stats, sizeof(struct bfa_itnim_stats_s)); in bfa_fcs_itnim_stats_get()
823 memset(&itnim->stats, 0, sizeof(struct bfa_itnim_stats_s)); in bfa_fcs_itnim_stats_clear()
833 bfa_trc(itnim->fcs, fchs->type); in bfa_fcs_fcpim_uf_recv()
835 if (fchs->type != FC_TYPE_ELS) in bfa_fcs_fcpim_uf_recv()
840 bfa_trc(itnim->fcs, els_cmd->els_code); in bfa_fcs_fcpim_uf_recv()
842 switch (els_cmd->els_code) { in bfa_fcs_fcpim_uf_recv()
844 bfa_fcs_rport_prlo(itnim->rport, fchs->ox_id); in bfa_fcs_fcpim_uf_recv()