Lines Matching defs:itnim

26 static void	bfa_fcs_itnim_free(struct bfa_fcs_itnim_s *itnim);
33 static void bfa_fcs_itnim_aen_post(struct bfa_fcs_itnim_s *itnim,
36 static void bfa_fcs_itnim_sm_offline(struct bfa_fcs_itnim_s *itnim,
38 static void bfa_fcs_itnim_sm_prli_send(struct bfa_fcs_itnim_s *itnim,
40 static void bfa_fcs_itnim_sm_prli(struct bfa_fcs_itnim_s *itnim,
42 static void bfa_fcs_itnim_sm_prli_retry(struct bfa_fcs_itnim_s *itnim,
44 static void bfa_fcs_itnim_sm_hcb_online(struct bfa_fcs_itnim_s *itnim,
46 static void bfa_fcs_itnim_sm_hal_rport_online(struct bfa_fcs_itnim_s *itnim,
48 static void bfa_fcs_itnim_sm_online(struct bfa_fcs_itnim_s *itnim,
50 static void bfa_fcs_itnim_sm_hcb_offline(struct bfa_fcs_itnim_s *itnim,
52 static void bfa_fcs_itnim_sm_initiator(struct bfa_fcs_itnim_s *itnim,
67 * fcs_itnim_sm FCS itnim state machine
71 bfa_fcs_itnim_sm_offline(struct bfa_fcs_itnim_s *itnim,
74 bfa_trc(itnim->fcs, itnim->rport->pwwn);
75 bfa_trc(itnim->fcs, event);
79 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_prli_send);
80 itnim->prli_retries = 0;
81 bfa_fcs_itnim_send_prli(itnim, NULL);
85 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_OFFLINE);
89 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_initiator);
93 bfa_fcs_itnim_free(itnim);
97 bfa_sm_fault(itnim->fcs, event);
103 bfa_fcs_itnim_sm_prli_send(struct bfa_fcs_itnim_s *itnim,
106 bfa_trc(itnim->fcs, itnim->rport->pwwn);
107 bfa_trc(itnim->fcs, event);
111 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_prli);
115 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_initiator);
116 bfa_fcxp_walloc_cancel(itnim->fcs->bfa, &itnim->fcxp_wqe);
117 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_FCS_ONLINE);
121 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
122 bfa_fcxp_walloc_cancel(itnim->fcs->bfa, &itnim->fcxp_wqe);
123 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_OFFLINE);
127 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
128 bfa_fcxp_walloc_cancel(itnim->fcs->bfa, &itnim->fcxp_wqe);
129 bfa_fcs_itnim_free(itnim);
133 bfa_sm_fault(itnim->fcs, event);
138 bfa_fcs_itnim_sm_prli(struct bfa_fcs_itnim_s *itnim,
141 bfa_trc(itnim->fcs, itnim->rport->pwwn);
142 bfa_trc(itnim->fcs, event);
146 if (itnim->rport->scsi_function == BFA_RPORT_INITIATOR)
147 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_initiator);
149 bfa_sm_set_state(itnim,
152 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_FCS_ONLINE);
156 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_prli_retry);
157 bfa_timer_start(itnim->fcs->bfa, &itnim->timer,
158 bfa_fcs_itnim_timeout, itnim,
163 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
167 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
168 bfa_fcxp_discard(itnim->fcxp);
169 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_OFFLINE);
173 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_initiator);
174 bfa_fcxp_discard(itnim->fcxp);
175 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_FCS_ONLINE);
179 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
180 bfa_fcxp_discard(itnim->fcxp);
181 bfa_fcs_itnim_free(itnim);
185 bfa_sm_fault(itnim->fcs, event);
190 bfa_fcs_itnim_sm_hal_rport_online(struct bfa_fcs_itnim_s *itnim,
193 bfa_trc(itnim->fcs, itnim->rport->pwwn);
194 bfa_trc(itnim->fcs, event);
198 if (!itnim->bfa_itnim)
199 itnim->bfa_itnim = bfa_itnim_create(itnim->fcs->bfa,
200 itnim->rport->bfa_rport, itnim);
202 if (itnim->bfa_itnim) {
203 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_hcb_online);
204 bfa_itnim_online(itnim->bfa_itnim, itnim->seq_rec);
206 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
207 bfa_sm_send_event(itnim->rport, RPSM_EVENT_DELETE);
213 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
214 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_OFFLINE);
218 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
219 bfa_fcs_itnim_free(itnim);
223 bfa_sm_fault(itnim->fcs, event);
228 bfa_fcs_itnim_sm_prli_retry(struct bfa_fcs_itnim_s *itnim,
231 bfa_trc(itnim->fcs, itnim->rport->pwwn);
232 bfa_trc(itnim->fcs, event);
236 if (itnim->prli_retries < BFA_FCS_RPORT_MAX_RETRIES) {
237 itnim->prli_retries++;
238 bfa_trc(itnim->fcs, itnim->prli_retries);
239 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_prli_send);
240 bfa_fcs_itnim_send_prli(itnim, NULL);
243 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
244 bfa_sm_send_event(itnim->rport, RPSM_EVENT_LOGO_IMP);
250 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
251 bfa_timer_stop(&itnim->timer);
252 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_OFFLINE);
256 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_initiator);
257 bfa_timer_stop(&itnim->timer);
258 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_FCS_ONLINE);
262 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
263 bfa_timer_stop(&itnim->timer);
264 bfa_fcs_itnim_free(itnim);
268 bfa_sm_fault(itnim->fcs, event);
273 bfa_fcs_itnim_sm_hcb_online(struct bfa_fcs_itnim_s *itnim,
276 struct bfad_s *bfad = (struct bfad_s *)itnim->fcs->bfad;
280 bfa_trc(itnim->fcs, itnim->rport->pwwn);
281 bfa_trc(itnim->fcs, event);
285 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_online);
286 bfa_fcb_itnim_online(itnim->itnim_drv);
287 wwn2str(lpwwn_buf, bfa_fcs_lport_get_pwwn(itnim->rport->port));
288 wwn2str(rpwwn_buf, itnim->rport->pwwn);
292 bfa_fcs_itnim_aen_post(itnim, BFA_ITNIM_AEN_ONLINE);
296 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_hcb_offline);
297 bfa_itnim_offline(itnim->bfa_itnim);
301 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
302 bfa_fcs_itnim_free(itnim);
306 bfa_sm_fault(itnim->fcs, event);
311 bfa_fcs_itnim_sm_online(struct bfa_fcs_itnim_s *itnim,
314 struct bfad_s *bfad = (struct bfad_s *)itnim->fcs->bfad;
318 bfa_trc(itnim->fcs, itnim->rport->pwwn);
319 bfa_trc(itnim->fcs, event);
323 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_hcb_offline);
324 bfa_fcb_itnim_offline(itnim->itnim_drv);
325 bfa_itnim_offline(itnim->bfa_itnim);
326 wwn2str(lpwwn_buf, bfa_fcs_lport_get_pwwn(itnim->rport->port));
327 wwn2str(rpwwn_buf, itnim->rport->pwwn);
328 if (bfa_fcs_lport_is_online(itnim->rport->port) == BFA_TRUE) {
332 bfa_fcs_itnim_aen_post(itnim, BFA_ITNIM_AEN_DISCONNECT);
337 bfa_fcs_itnim_aen_post(itnim, BFA_ITNIM_AEN_OFFLINE);
342 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
343 bfa_fcs_itnim_free(itnim);
347 bfa_sm_fault(itnim->fcs, event);
352 bfa_fcs_itnim_sm_hcb_offline(struct bfa_fcs_itnim_s *itnim,
355 bfa_trc(itnim->fcs, itnim->rport->pwwn);
356 bfa_trc(itnim->fcs, event);
360 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
361 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_OFFLINE);
365 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
366 bfa_fcs_itnim_free(itnim);
370 bfa_sm_fault(itnim->fcs, event);
380 bfa_fcs_itnim_sm_initiator(struct bfa_fcs_itnim_s *itnim,
383 bfa_trc(itnim->fcs, itnim->rport->pwwn);
384 bfa_trc(itnim->fcs, event);
388 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
389 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_OFFLINE);
396 bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_FCS_ONLINE);
404 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
405 bfa_fcs_itnim_free(itnim);
409 bfa_sm_fault(itnim->fcs, event);
414 bfa_fcs_itnim_aen_post(struct bfa_fcs_itnim_s *itnim,
417 struct bfa_fcs_rport_s *rport = itnim->rport;
418 struct bfad_s *bfad = (struct bfad_s *)itnim->fcs->bfad;
429 aen_entry->aen_data.itnim.vf_id = rport->port->fabric->vf_id;
430 aen_entry->aen_data.itnim.ppwwn = bfa_fcs_lport_get_pwwn(
431 bfa_fcs_get_base_port(itnim->fcs));
432 aen_entry->aen_data.itnim.lpwwn = bfa_fcs_lport_get_pwwn(rport->port);
433 aen_entry->aen_data.itnim.rpwwn = rport->pwwn;
443 struct bfa_fcs_itnim_s *itnim = itnim_cbarg;
444 struct bfa_fcs_rport_s *rport = itnim->rport;
450 bfa_trc(itnim->fcs, itnim->rport->pwwn);
455 itnim->stats.fcxp_alloc_wait++;
456 bfa_fcs_fcxp_alloc_wait(port->fcs->bfa, &itnim->fcxp_wqe,
457 bfa_fcs_itnim_send_prli, itnim, BFA_TRUE);
460 itnim->fcxp = fcxp;
463 itnim->rport->pid, bfa_fcs_lport_get_fcid(port), 0);
467 bfa_fcs_itnim_prli_response, (void *)itnim,
470 itnim->stats.prli_sent++;
471 bfa_sm_send_event(itnim, BFA_FCS_ITNIM_SM_FRMSENT);
479 struct bfa_fcs_itnim_s *itnim = (struct bfa_fcs_itnim_s *) cbarg;
485 bfa_trc(itnim->fcs, req_status);
491 itnim->stats.prli_rsp_err++;
492 bfa_sm_send_event(itnim, BFA_FCS_ITNIM_SM_RSP_ERROR);
502 bfa_trc(itnim->fcs, rsp_len);
508 bfa_trc(itnim->fcs, prli_resp->parampage.type);
509 itnim->rport->scsi_function =
511 itnim->stats.prli_rsp_acc++;
512 itnim->stats.initiator++;
513 bfa_sm_send_event(itnim,
518 itnim->stats.prli_rsp_parse_err++;
521 itnim->rport->scsi_function = BFA_RPORT_TARGET;
524 itnim->seq_rec = sparams->retry;
525 itnim->rec_support = sparams->rec_support;
526 itnim->task_retry_id = sparams->task_retry_id;
527 itnim->conf_comp = sparams->confirm;
529 itnim->stats.prli_rsp_acc++;
530 bfa_sm_send_event(itnim, BFA_FCS_ITNIM_SM_RSP_OK);
534 bfa_trc(itnim->fcs, ls_rjt->reason_code);
535 bfa_trc(itnim->fcs, ls_rjt->reason_code_expl);
537 itnim->stats.prli_rsp_rjt++;
539 bfa_sm_send_event(itnim, BFA_FCS_ITNIM_SM_RSP_NOT_SUPP);
542 bfa_sm_send_event(itnim, BFA_FCS_ITNIM_SM_RSP_ERROR);
549 struct bfa_fcs_itnim_s *itnim = (struct bfa_fcs_itnim_s *) arg;
551 itnim->stats.timeout++;
552 bfa_sm_send_event(itnim, BFA_FCS_ITNIM_SM_TIMEOUT);
556 bfa_fcs_itnim_free(struct bfa_fcs_itnim_s *itnim)
558 if (itnim->bfa_itnim) {
559 bfa_itnim_delete(itnim->bfa_itnim);
560 itnim->bfa_itnim = NULL;
563 bfa_fcb_itnim_free(itnim->fcs->bfad, itnim->itnim_drv);
581 struct bfa_fcs_itnim_s *itnim;
586 * call bfad to allocate the itnim
588 ret = bfa_fcb_itnim_alloc(port->fcs->bfad, &itnim, &itnim_drv);
595 * Initialize itnim
597 itnim->rport = rport;
598 itnim->fcs = rport->fcs;
599 itnim->itnim_drv = itnim_drv;
601 itnim->bfa_itnim = NULL;
602 itnim->seq_rec = BFA_FALSE;
603 itnim->rec_support = BFA_FALSE;
604 itnim->conf_comp = BFA_FALSE;
605 itnim->task_retry_id = BFA_FALSE;
610 bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
612 return itnim;
621 bfa_fcs_itnim_delete(struct bfa_fcs_itnim_s *itnim)
623 bfa_trc(itnim->fcs, itnim->rport->pid);
624 bfa_sm_send_event(itnim, BFA_FCS_ITNIM_SM_DELETE);
631 bfa_fcs_itnim_brp_online(struct bfa_fcs_itnim_s *itnim)
633 itnim->stats.onlines++;
635 if (!BFA_FCS_PID_IS_WKA(itnim->rport->pid))
636 bfa_sm_send_event(itnim, BFA_FCS_ITNIM_SM_HAL_ONLINE);
643 bfa_fcs_itnim_rport_offline(struct bfa_fcs_itnim_s *itnim)
645 itnim->stats.offlines++;
646 bfa_sm_send_event(itnim, BFA_FCS_ITNIM_SM_OFFLINE);
654 bfa_fcs_itnim_is_initiator(struct bfa_fcs_itnim_s *itnim)
656 bfa_trc(itnim->fcs, itnim->rport->pid);
657 itnim->stats.initiator++;
658 bfa_sm_send_event(itnim, BFA_FCS_ITNIM_SM_INITIATOR);
662 * Called by rport to check if the itnim is online.
665 bfa_fcs_itnim_get_online_state(struct bfa_fcs_itnim_s *itnim)
667 bfa_trc(itnim->fcs, itnim->rport->pid);
668 switch (bfa_sm_to_state(itnim_sm_table, itnim->sm)) {
684 struct bfa_fcs_itnim_s *itnim = (struct bfa_fcs_itnim_s *) cbarg;
686 bfa_trc(itnim->fcs, itnim->rport->pwwn);
687 bfa_sm_send_event(itnim, BFA_FCS_ITNIM_SM_HCB_ONLINE);
696 struct bfa_fcs_itnim_s *itnim = (struct bfa_fcs_itnim_s *) cb_arg;
698 bfa_trc(itnim->fcs, itnim->rport->pwwn);
699 bfa_sm_send_event(itnim, BFA_FCS_ITNIM_SM_HCB_OFFLINE);
709 struct bfa_fcs_itnim_s *itnim = (struct bfa_fcs_itnim_s *) cb_arg;
711 bfa_trc(itnim->fcs, itnim->rport->pwwn);
720 struct bfa_fcs_itnim_s *itnim = (struct bfa_fcs_itnim_s *) cb_arg;
721 struct bfad_itnim_s *itnim_drv = itnim->itnim_drv;
723 bfa_trc(itnim->fcs, itnim->rport->pwwn);
737 struct bfa_fcs_itnim_s *itnim = (struct bfa_fcs_itnim_s *) cb_arg;
739 itnim->stats.sler++;
740 bfa_trc(itnim->fcs, itnim->rport->pwwn);
741 bfa_sm_send_event(itnim->rport, RPSM_EVENT_LOGO_IMP);
753 WARN_ON(rport->itnim == NULL);
754 return rport->itnim;
761 struct bfa_fcs_itnim_s *itnim = NULL;
763 itnim = bfa_fcs_itnim_lookup(port, rpwwn);
765 if (itnim == NULL)
768 attr->state = bfa_sm_to_state(itnim_sm_table, itnim->sm);
769 attr->retry = itnim->seq_rec;
770 attr->rec_support = itnim->rec_support;
771 attr->conf_comp = itnim->conf_comp;
772 attr->task_retry_id = itnim->task_retry_id;
780 struct bfa_fcs_itnim_s *itnim = NULL;
784 itnim = bfa_fcs_itnim_lookup(port, rpwwn);
786 if (itnim == NULL)
789 memcpy(stats, &itnim->stats, sizeof(struct bfa_itnim_stats_s));
797 struct bfa_fcs_itnim_s *itnim = NULL;
801 itnim = bfa_fcs_itnim_lookup(port, rpwwn);
803 if (itnim == NULL)
806 memset(&itnim->stats, 0, sizeof(struct bfa_itnim_stats_s));
811 bfa_fcs_fcpim_uf_recv(struct bfa_fcs_itnim_s *itnim,
816 bfa_trc(itnim->fcs, fchs->type);
823 bfa_trc(itnim->fcs, els_cmd->els_code);
827 bfa_fcs_rport_prlo(itnim->rport, fchs->ox_id);