Lines Matching full:fabric

41 	bfa_sm_send_event(&fcs->fabric, BFA_FCS_FABRIC_SM_CREATE);
50 * FCS update cfg - reset the pwwn/nwwn of fabric base logical port
56 struct bfa_fcs_fabric_s *fabric = &fcs->fabric;
57 struct bfa_lport_cfg_s *port_cfg = &fabric->bport.port_cfg;
58 struct bfa_ioc_s *ioc = &fabric->fcs->bfa->ioc;
110 bfa_fcs_fabric_psymb_init(&fcs->fabric);
111 bfa_fcs_fabric_nsymb_init(&fcs->fabric);
127 bfa_lps_delete(fcs->fabric.lps);
128 bfa_sm_send_event(&fcs->fabric, BFA_FCS_FABRIC_SM_DELETE);
133 * Fabric module implementation.
142 if (fabric->fab_type == BFA_FCS_FABRIC_SWITCHED) \
153 static void bfa_fcs_fabric_init(struct bfa_fcs_fabric_s *fabric);
154 static void bfa_fcs_fabric_login(struct bfa_fcs_fabric_s *fabric);
155 static void bfa_fcs_fabric_notify_online(struct bfa_fcs_fabric_s *fabric);
156 static void bfa_fcs_fabric_notify_offline(struct bfa_fcs_fabric_s *fabric);
158 static void bfa_fcs_fabric_delete(struct bfa_fcs_fabric_s *fabric);
160 static void bfa_fcs_fabric_stop(struct bfa_fcs_fabric_s *fabric);
162 static void bfa_fcs_fabric_process_uf(struct bfa_fcs_fabric_s *fabric,
164 static void bfa_fcs_fabric_process_flogi(struct bfa_fcs_fabric_s *fabric,
166 static void bfa_fcs_fabric_send_flogi_acc(struct bfa_fcs_fabric_s *fabric);
174 static void bfa_fcs_fabric_sm_uninit(struct bfa_fcs_fabric_s *fabric,
176 static void bfa_fcs_fabric_sm_created(struct bfa_fcs_fabric_s *fabric,
178 static void bfa_fcs_fabric_sm_linkdown(struct bfa_fcs_fabric_s *fabric,
180 static void bfa_fcs_fabric_sm_flogi(struct bfa_fcs_fabric_s *fabric,
182 static void bfa_fcs_fabric_sm_flogi_retry(struct bfa_fcs_fabric_s *fabric,
184 static void bfa_fcs_fabric_sm_auth(struct bfa_fcs_fabric_s *fabric,
186 static void bfa_fcs_fabric_sm_nofabric(struct bfa_fcs_fabric_s *fabric,
188 static void bfa_fcs_fabric_sm_evfp(struct bfa_fcs_fabric_s *fabric,
190 static void bfa_fcs_fabric_sm_evfp_done(struct bfa_fcs_fabric_s *fabric,
192 static void bfa_fcs_fabric_sm_isolated(struct bfa_fcs_fabric_s *fabric,
194 static void bfa_fcs_fabric_sm_deleting(struct bfa_fcs_fabric_s *fabric,
196 static void bfa_fcs_fabric_sm_stopping(struct bfa_fcs_fabric_s *fabric,
198 static void bfa_fcs_fabric_sm_cleanup(struct bfa_fcs_fabric_s *fabric,
201 * Beginning state before fabric creation.
204 bfa_fcs_fabric_sm_uninit(struct bfa_fcs_fabric_s *fabric,
207 bfa_trc(fabric->fcs, fabric->bport.port_cfg.pwwn);
208 bfa_trc(fabric->fcs, event);
212 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_created);
213 bfa_fcs_fabric_init(fabric);
214 bfa_fcs_lport_init(&fabric->bport, &fabric->bport.port_cfg);
222 bfa_sm_fault(fabric->fcs, event);
227 * Beginning state before fabric creation.
230 bfa_fcs_fabric_sm_created(struct bfa_fcs_fabric_s *fabric,
233 struct bfa_s *bfa = fabric->fcs->bfa;
235 bfa_trc(fabric->fcs, fabric->bport.port_cfg.pwwn);
236 bfa_trc(fabric->fcs, event);
240 if (!bfa_fcport_is_linkup(fabric->fcs->bfa)) {
241 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_linkdown);
246 fabric->fab_type = BFA_FCS_FABRIC_LOOP;
247 fabric->bport.pid = bfa_fcport_get_myalpa(bfa);
248 fabric->bport.pid = bfa_hton3b(fabric->bport.pid);
249 bfa_sm_set_state(fabric,
251 bfa_fcs_fabric_set_opertype(fabric);
252 bfa_fcs_lport_online(&fabric->bport);
254 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_flogi);
255 bfa_fcs_fabric_login(fabric);
264 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_deleting);
265 bfa_fcs_fabric_delete(fabric);
269 bfa_sm_fault(fabric->fcs, event);
275 * first state at fabric creation.
278 bfa_fcs_fabric_sm_linkdown(struct bfa_fcs_fabric_s *fabric,
281 struct bfa_s *bfa = fabric->fcs->bfa;
283 bfa_trc(fabric->fcs, fabric->bport.port_cfg.pwwn);
284 bfa_trc(fabric->fcs, event);
289 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_flogi);
290 bfa_fcs_fabric_login(fabric);
293 fabric->fab_type = BFA_FCS_FABRIC_LOOP;
294 fabric->bport.pid = bfa_fcport_get_myalpa(bfa);
295 fabric->bport.pid = bfa_hton3b(fabric->bport.pid);
296 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_online);
297 bfa_fcs_fabric_set_opertype(fabric);
298 bfa_fcs_lport_online(&fabric->bport);
306 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_deleting);
307 bfa_fcs_fabric_delete(fabric);
311 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_cleanup);
312 bfa_fcs_fabric_stop(fabric);
316 bfa_sm_fault(fabric->fcs, event);
324 bfa_fcs_fabric_sm_flogi(struct bfa_fcs_fabric_s *fabric,
327 bfa_trc(fabric->fcs, fabric->bport.port_cfg.pwwn);
328 bfa_trc(fabric->fcs, event);
333 bfa_fcport_set_tx_bbcredit(fabric->fcs->bfa,
334 fabric->bb_credit);
335 fabric->fab_type = BFA_FCS_FABRIC_SWITCHED;
337 if (fabric->auth_reqd && fabric->is_auth) {
338 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_auth);
339 bfa_trc(fabric->fcs, event);
341 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_online);
342 bfa_fcs_fabric_notify_online(fabric);
347 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_flogi_retry);
348 bfa_timer_start(fabric->fcs->bfa, &fabric->delay_timer,
349 bfa_fcs_fabric_delay, fabric,
354 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_loopback);
355 bfa_sm_send_event(fabric->lps, BFA_LPS_SM_OFFLINE);
356 bfa_fcs_fabric_set_opertype(fabric);
360 fabric->fab_type = BFA_FCS_FABRIC_N2N;
361 bfa_fcport_set_tx_bbcredit(fabric->fcs->bfa,
362 fabric->bb_credit);
363 bfa_fcs_fabric_notify_online(fabric);
364 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_nofabric);
368 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_linkdown);
369 bfa_sm_send_event(fabric->lps, BFA_LPS_SM_OFFLINE);
373 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_deleting);
374 bfa_sm_send_event(fabric->lps, BFA_LPS_SM_OFFLINE);
375 bfa_fcs_fabric_delete(fabric);
379 bfa_sm_fault(fabric->fcs, event);
385 bfa_fcs_fabric_sm_flogi_retry(struct bfa_fcs_fabric_s *fabric,
388 bfa_trc(fabric->fcs, fabric->bport.port_cfg.pwwn);
389 bfa_trc(fabric->fcs, event);
393 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_flogi);
394 bfa_fcs_fabric_login(fabric);
398 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_linkdown);
399 bfa_timer_stop(&fabric->delay_timer);
403 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_deleting);
404 bfa_timer_stop(&fabric->delay_timer);
405 bfa_fcs_fabric_delete(fabric);
409 bfa_sm_fault(fabric->fcs, event);
417 bfa_fcs_fabric_sm_auth(struct bfa_fcs_fabric_s *fabric,
420 bfa_trc(fabric->fcs, fabric->bport.port_cfg.pwwn);
421 bfa_trc(fabric->fcs, event);
425 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_auth_failed);
426 bfa_sm_send_event(fabric->lps, BFA_LPS_SM_OFFLINE);
430 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_online);
431 bfa_fcs_fabric_notify_online(fabric);
435 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_evfp);
439 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_linkdown);
440 bfa_sm_send_event(fabric->lps, BFA_LPS_SM_OFFLINE);
444 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_deleting);
445 bfa_fcs_fabric_delete(fabric);
449 bfa_sm_fault(fabric->fcs, event);
457 bfa_fcs_fabric_sm_auth_failed(struct bfa_fcs_fabric_s *fabric,
460 bfa_trc(fabric->fcs, fabric->bport.port_cfg.pwwn);
461 bfa_trc(fabric->fcs, event);
465 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_linkdown);
466 bfa_fcs_fabric_notify_offline(fabric);
470 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_deleting);
471 bfa_fcs_fabric_delete(fabric);
475 bfa_sm_fault(fabric->fcs, event);
483 bfa_fcs_fabric_sm_loopback(struct bfa_fcs_fabric_s *fabric,
486 bfa_trc(fabric->fcs, fabric->bport.port_cfg.pwwn);
487 bfa_trc(fabric->fcs, event);
491 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_linkdown);
492 bfa_fcs_fabric_notify_offline(fabric);
496 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_deleting);
497 bfa_fcs_fabric_delete(fabric);
501 bfa_sm_fault(fabric->fcs, event);
506 * There is no attached fabric - private loop or NPort-to-NPort topology.
509 bfa_fcs_fabric_sm_nofabric(struct bfa_fcs_fabric_s *fabric,
512 bfa_trc(fabric->fcs, fabric->bport.port_cfg.pwwn);
513 bfa_trc(fabric->fcs, event);
517 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_linkdown);
518 bfa_sm_send_event(fabric->lps, BFA_LPS_SM_OFFLINE);
519 bfa_fcs_fabric_notify_offline(fabric);
523 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_deleting);
524 bfa_fcs_fabric_delete(fabric);
528 bfa_trc(fabric->fcs, fabric->bb_credit);
529 bfa_fcport_set_tx_bbcredit(fabric->fcs->bfa,
530 fabric->bb_credit);
537 bfa_sm_fault(fabric->fcs, event);
542 * Fabric is online - normal operating state.
545 bfa_fcs_fabric_sm_online(struct bfa_fcs_fabric_s *fabric,
548 struct bfa_s *bfa = fabric->fcs->bfa;
550 bfa_trc(fabric->fcs, fabric->bport.port_cfg.pwwn);
551 bfa_trc(fabric->fcs, event);
555 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_linkdown);
557 bfa_fcs_lport_offline(&fabric->bport);
559 bfa_sm_send_event(fabric->lps, BFA_LPS_SM_OFFLINE);
560 bfa_fcs_fabric_notify_offline(fabric);
565 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_deleting);
566 bfa_fcs_fabric_delete(fabric);
570 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_stopping);
571 bfa_fcs_fabric_stop(fabric);
575 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_auth_failed);
576 bfa_sm_send_event(fabric->lps, BFA_LPS_SM_OFFLINE);
583 bfa_sm_fault(fabric->fcs, event);
588 * Exchanging virtual fabric parameters.
591 bfa_fcs_fabric_sm_evfp(struct bfa_fcs_fabric_s *fabric,
594 bfa_trc(fabric->fcs, fabric->bport.port_cfg.pwwn);
595 bfa_trc(fabric->fcs, event);
599 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_evfp_done);
603 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_isolated);
607 bfa_sm_fault(fabric->fcs, event);
615 bfa_fcs_fabric_sm_evfp_done(struct bfa_fcs_fabric_s *fabric,
618 bfa_trc(fabric->fcs, fabric->bport.port_cfg.pwwn);
619 bfa_trc(fabric->fcs, event);
626 bfa_fcs_fabric_sm_isolated(struct bfa_fcs_fabric_s *fabric,
629 struct bfad_s *bfad = (struct bfad_s *)fabric->fcs->bfad;
632 bfa_trc(fabric->fcs, fabric->bport.port_cfg.pwwn);
633 bfa_trc(fabric->fcs, event);
634 wwn2str(pwwn_ptr, fabric->bport.port_cfg.pwwn);
639 pwwn_ptr, fabric->fcs->port_vfid,
640 fabric->event_arg.swp_vfid);
644 * Fabric is being deleted, awaiting vport delete completions.
647 bfa_fcs_fabric_sm_deleting(struct bfa_fcs_fabric_s *fabric,
650 bfa_trc(fabric->fcs, fabric->bport.port_cfg.pwwn);
651 bfa_trc(fabric->fcs, event);
655 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_uninit);
656 bfa_wc_down(&fabric->fcs->wc);
663 bfa_fcs_fabric_notify_offline(fabric);
667 bfa_sm_fault(fabric->fcs, event);
672 * Fabric is being stopped, awaiting vport stop completions.
675 bfa_fcs_fabric_sm_stopping(struct bfa_fcs_fabric_s *fabric,
678 struct bfa_s *bfa = fabric->fcs->bfa;
680 bfa_trc(fabric->fcs, fabric->bport.port_cfg.pwwn);
681 bfa_trc(fabric->fcs, event);
686 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_created);
688 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_cleanup);
689 bfa_sm_send_event(fabric->lps, BFA_LPS_SM_LOGOUT);
698 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_created);
700 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_cleanup);
704 bfa_sm_fault(fabric->fcs, event);
709 * Fabric is being stopped, cleanup without FLOGO
712 bfa_fcs_fabric_sm_cleanup(struct bfa_fcs_fabric_s *fabric,
715 bfa_trc(fabric->fcs, fabric->bport.port_cfg.pwwn);
716 bfa_trc(fabric->fcs, event);
721 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_created);
722 bfa_wc_down(&(fabric->fcs)->wc);
728 * before the fabric completion callbk is done.
733 bfa_sm_fault(fabric->fcs, event);
738 * fcs_fabric_private fabric private functions
742 bfa_fcs_fabric_init(struct bfa_fcs_fabric_s *fabric)
744 struct bfa_lport_cfg_s *port_cfg = &fabric->bport.port_cfg;
747 port_cfg->nwwn = fabric->fcs->bfa->ioc.attr->nwwn;
748 port_cfg->pwwn = fabric->fcs->bfa->ioc.attr->pwwn;
755 bfa_fcs_fabric_psymb_init(struct bfa_fcs_fabric_s *fabric)
757 struct bfa_lport_cfg_s *port_cfg = &fabric->bport.port_cfg;
759 struct bfa_fcs_driver_info_s *driver_info = &fabric->fcs->driver_info;
761 bfa_ioc_get_adapter_model(&fabric->fcs->bfa->ioc, model);
816 bfa_fcs_fabric_nsymb_init(struct bfa_fcs_fabric_s *fabric)
818 struct bfa_lport_cfg_s *port_cfg = &fabric->bport.port_cfg;
820 struct bfa_fcs_driver_info_s *driver_info = &fabric->fcs->driver_info;
822 bfa_ioc_get_adapter_model(&fabric->fcs->bfa->ioc, model);
856 struct bfa_fcs_fabric_s *fabric = uarg;
858 bfa_trc(fabric->fcs, fabric->bport.port_cfg.pwwn);
859 bfa_trc(fabric->fcs, status);
863 fabric->stats.flogi_accepts++;
868 fabric->stats.flogi_acc_err++;
869 bfa_sm_send_event(fabric, BFA_FCS_FABRIC_SM_RETRY_OP);
874 switch (fabric->lps->ext_status) {
876 fabric->stats.flogi_acc_err++;
880 fabric->stats.flogi_unknown_rsp++;
886 bfa_sm_send_event(fabric, BFA_FCS_FABRIC_SM_RETRY_OP);
891 fabric->stats.flogi_rejects++;
892 bfa_sm_send_event(fabric, BFA_FCS_FABRIC_SM_RETRY_OP);
896 fabric->stats.flogi_rsp_err++;
897 bfa_sm_send_event(fabric, BFA_FCS_FABRIC_SM_RETRY_OP);
901 fabric->bb_credit = fabric->lps->pr_bbcred;
902 bfa_trc(fabric->fcs, fabric->bb_credit);
904 if (!(fabric->lps->brcd_switch))
905 fabric->fabric_name = fabric->lps->pr_nwwn;
910 if (fabric->lps->fport) {
911 fabric->bport.pid = fabric->lps->lp_pid;
912 fabric->is_npiv = fabric->lps->npiv_en;
913 fabric->is_auth = fabric->lps->auth_req;
914 bfa_sm_send_event(fabric, BFA_FCS_FABRIC_SM_CONT_OP);
919 fabric->bport.port_topo.pn2n.rem_port_wwn =
920 fabric->lps->pr_pwwn;
921 fabric->fab_type = BFA_FCS_FABRIC_N2N;
922 bfa_sm_send_event(fabric, BFA_FCS_FABRIC_SM_NO_FABRIC);
925 bfa_trc(fabric->fcs, fabric->bport.pid);
926 bfa_trc(fabric->fcs, fabric->is_npiv);
927 bfa_trc(fabric->fcs, fabric->is_auth);
933 bfa_fcs_fabric_login(struct bfa_fcs_fabric_s *fabric)
935 struct bfa_s *bfa = fabric->fcs->bfa;
936 struct bfa_lport_cfg_s *pcfg = &fabric->bport.port_cfg;
940 bfa_lps_flogi(fabric->lps, fabric, alpa, bfa_fcport_get_maxfrsize(bfa),
941 pcfg->pwwn, pcfg->nwwn, fabric->auth_reqd);
943 fabric->stats.flogi_sent++;
947 bfa_fcs_fabric_notify_online(struct bfa_fcs_fabric_s *fabric)
952 bfa_trc(fabric->fcs, fabric->fabric_name);
954 bfa_fcs_fabric_set_opertype(fabric);
955 fabric->stats.fabric_onlines++;
960 bfa_fcs_lport_online(&fabric->bport);
962 list_for_each_safe(qe, qen, &fabric->vport_q) {
969 bfa_fcs_fabric_notify_offline(struct bfa_fcs_fabric_s *fabric)
974 bfa_trc(fabric->fcs, fabric->fabric_name);
975 fabric->stats.fabric_offlines++;
980 list_for_each_safe(qe, qen, &fabric->vport_q) {
985 bfa_fcs_lport_offline(&fabric->bport);
987 fabric->fabric_name = 0;
988 fabric->fabric_ip_addr[0] = 0;
994 struct bfa_fcs_fabric_s *fabric = cbarg;
996 bfa_sm_send_event(fabric, BFA_FCS_FABRIC_SM_DELAYED);
1003 bfa_fcs_fabric_stop(struct bfa_fcs_fabric_s *fabric)
1008 bfa_wc_init(&fabric->stop_wc, bfa_fcs_fabric_stop_comp, fabric);
1010 list_for_each_safe(qe, qen, &fabric->vport_q) {
1012 bfa_wc_up(&fabric->stop_wc);
1016 bfa_wc_up(&fabric->stop_wc);
1017 bfa_fcs_lport_stop(&fabric->bport);
1018 bfa_wc_wait(&fabric->stop_wc);
1025 bfa_fcs_fabric_delete(struct bfa_fcs_fabric_s *fabric)
1030 list_for_each_safe(qe, qen, &fabric->vport_q) {
1035 bfa_fcs_lport_delete(&fabric->bport);
1036 bfa_wc_wait(&fabric->wc);
1042 struct bfa_fcs_fabric_s *fabric = cbarg;
1044 bfa_sm_send_event(fabric, BFA_FCS_FABRIC_SM_DELCOMP);
1050 struct bfa_fcs_fabric_s *fabric = cbarg;
1052 bfa_sm_send_event(fabric, BFA_FCS_FABRIC_SM_STOPCOMP);
1056 * fcs_fabric_public fabric public functions
1060 * Fabric module stop -- stop FCS actions
1065 struct bfa_fcs_fabric_s *fabric;
1068 fabric = &fcs->fabric;
1069 bfa_sm_send_event(fabric, BFA_FCS_FABRIC_SM_STOP);
1073 * Fabric module start -- kick starts FCS actions
1078 struct bfa_fcs_fabric_s *fabric;
1081 fabric = &fcs->fabric;
1082 bfa_sm_send_event(fabric, BFA_FCS_FABRIC_SM_START);
1090 bfa_fcs_fabric_link_up(struct bfa_fcs_fabric_s *fabric)
1092 bfa_trc(fabric->fcs, fabric->bport.port_cfg.pwwn);
1093 bfa_sm_send_event(fabric, BFA_FCS_FABRIC_SM_LINK_UP);
1100 bfa_fcs_fabric_link_down(struct bfa_fcs_fabric_s *fabric)
1102 bfa_trc(fabric->fcs, fabric->bport.port_cfg.pwwn);
1103 bfa_sm_send_event(fabric, BFA_FCS_FABRIC_SM_LINK_DOWN);
1107 * A child vport is being created in the fabric.
1110 * belonging to a fabric is maintained to propagate link events.
1112 * param[in] fabric - Fabric instance. This can be a base fabric or vf.
1118 bfa_fcs_fabric_addvport(struct bfa_fcs_fabric_s *fabric,
1122 * - add vport to fabric's vport_q
1124 bfa_trc(fabric->fcs, fabric->vf_id);
1126 list_add_tail(&vport->qe, &fabric->vport_q);
1127 fabric->num_vports++;
1128 bfa_wc_up(&fabric->wc);
1132 * A child vport is being deleted from fabric.
1137 bfa_fcs_fabric_delvport(struct bfa_fcs_fabric_s *fabric,
1141 fabric->num_vports--;
1142 bfa_wc_down(&fabric->wc);
1147 * Lookup for a vport within a fabric given its pwwn
1150 bfa_fcs_fabric_vport_lookup(struct bfa_fcs_fabric_s *fabric, wwn_t pwwn)
1155 list_for_each(qe, &fabric->vport_q) {
1171 * To check if the attached fabric is a brocade fabric, use
1177 bfa_fcs_fabric_get_switch_oui(struct bfa_fcs_fabric_s *fabric)
1183 fab_nwwn = fabric->lps->pr_nwwn;
1194 bfa_fcs_fabric_uf_recv(struct bfa_fcs_fabric_s *fabric, struct fchs_s *fchs,
1203 bfa_trc(fabric->fcs, len);
1204 bfa_trc(fabric->fcs, pid);
1213 (flogi->port_name == bfa_fcs_lport_get_pwwn(&fabric->bport))) {
1214 bfa_sm_send_event(fabric, BFA_FCS_FABRIC_SM_LOOPBACK);
1219 * FLOGI/EVFP exchanges should be consumed by base fabric.
1222 bfa_trc(fabric->fcs, pid);
1223 bfa_fcs_fabric_process_uf(fabric, fchs, len);
1227 if (fabric->bport.pid == pid) {
1231 bfa_trc(fabric->fcs, els_cmd->els_code);
1233 bfa_trc(fabric->fcs, els_cmd->els_code);
1237 bfa_trc(fabric->fcs, *(u8 *) ((u8 *) fchs));
1238 bfa_fcs_lport_uf_recv(&fabric->bport, fchs, len);
1245 list_for_each(qe, &fabric->vport_q) {
1253 if (!bfa_fcs_fabric_is_switched(fabric))
1254 bfa_fcs_lport_uf_recv(&fabric->bport, fchs, len);
1256 bfa_trc(fabric->fcs, fchs->type);
1260 * Unsolicited frames to be processed by fabric.
1263 bfa_fcs_fabric_process_uf(struct bfa_fcs_fabric_s *fabric, struct fchs_s *fchs,
1268 bfa_trc(fabric->fcs, els_cmd->els_code);
1272 bfa_fcs_fabric_process_flogi(fabric, fchs, len);
1287 bfa_fcs_fabric_process_flogi(struct bfa_fcs_fabric_s *fabric,
1291 struct bfa_fcs_lport_s *bport = &fabric->bport;
1293 bfa_trc(fabric->fcs, fchs->s_id);
1295 fabric->stats.flogi_rcvd++;
1303 bfa_trc(fabric->fcs, flogi->port_name);
1304 fabric->stats.flogi_rejected++;
1308 fabric->bb_credit = be16_to_cpu(flogi->csp.bbcred);
1315 bfa_fcs_fabric_send_flogi_acc(fabric);
1316 bfa_sm_send_event(fabric, BFA_FCS_FABRIC_SM_NO_FABRIC);
1320 bfa_fcs_fabric_send_flogi_acc(struct bfa_fcs_fabric_s *fabric)
1322 struct bfa_lport_cfg_s *pcfg = &fabric->bport.port_cfg;
1323 struct bfa_fcs_lport_n2n_s *n2n_port = &fabric->bport.port_topo.pn2n;
1324 struct bfa_s *bfa = fabric->fcs->bfa;
1329 fcxp = bfa_fcs_fcxp_alloc(fabric->fcs, BFA_FALSE);
1343 bfa_fcxp_send(fcxp, NULL, fabric->vf_id, fabric->lps->bfa_tag,
1345 reqlen, &fchs, bfa_fcs_fabric_flogiacc_comp, fabric,
1357 struct bfa_fcs_fabric_s *fabric = cbarg;
1359 bfa_trc(fabric->fcs, status);
1370 struct bfad_s *bfad = (struct bfad_s *)port->fabric->fcs->bfad;
1387 * @param[in] fabric - fabric
1388 * @param[in] wwn_t - new fabric name
1393 bfa_fcs_fabric_set_fabric_name(struct bfa_fcs_fabric_s *fabric,
1396 struct bfad_s *bfad = (struct bfad_s *)fabric->fcs->bfad;
1400 bfa_trc(fabric->fcs, fabric_name);
1402 if (fabric->fabric_name == 0) {
1404 * With BRCD switches, we don't get Fabric Name in FLOGI.
1405 * Don't generate a fabric name change event in this case.
1407 fabric->fabric_name = fabric_name;
1409 fabric->fabric_name = fabric_name;
1410 wwn2str(pwwn_ptr, bfa_fcs_lport_get_pwwn(&fabric->bport));
1412 bfa_fcs_lport_get_fabric_name(&fabric->bport));
1414 "Base port WWN = %s Fabric WWN = %s\n",
1416 bfa_fcs_fabric_aen_post(&fabric->bport,
1424 struct bfa_fcs_fabric_s *fabric = uarg;
1425 bfa_sm_send_event(fabric, BFA_FCS_FABRIC_SM_LOGOCOMP);
1441 return &fcs->fabric;
1497 bfa_fcs_fabric_link_up(&fcs->fabric);
1501 bfa_fcs_fabric_link_down(&fcs->fabric);
1528 struct bfa_fcs_fabric_s *fabric;
1538 fabric = &fcs->fabric;
1540 fabric = bfa_fcs_vf_lookup(fcs, (u16) vft->vf_id);
1545 if (!fabric) {
1561 fabric = &fcs->fabric;
1572 bfa_fcs_fabric_uf_recv(fabric, fchs, len);
1583 struct bfa_fcs_fabric_s *fabric = &fcs->fabric;
1596 memset(fabric, 0, sizeof(struct bfa_fcs_fabric_s));
1599 * Initialize base fabric.
1601 fabric->fcs = fcs;
1602 INIT_LIST_HEAD(&fabric->vport_q);
1603 INIT_LIST_HEAD(&fabric->vf_q);
1604 fabric->lps = bfa_lps_alloc(fcs->bfa);
1605 WARN_ON(!fabric->lps);
1608 * Initialize fabric delete completion handler. Fabric deletion is
1611 bfa_wc_init(&fabric->wc, bfa_fcs_fabric_delete_comp, fabric);
1612 bfa_wc_up(&fabric->wc); /* For the base port */
1614 bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_uninit);
1615 bfa_fcs_lport_attach(&fabric->bport, fabric->fcs, FC_VF_ID_NULL, NULL);