Lines Matching refs:port

47 static void     bfa_fcs_lport_send_ls_rjt(struct bfa_fcs_lport_s *port,
50 static void bfa_fcs_lport_plogi(struct bfa_fcs_lport_s *port,
52 static void bfa_fcs_lport_online_actions(struct bfa_fcs_lport_s *port);
53 static void bfa_fcs_lport_offline_actions(struct bfa_fcs_lport_s *port);
54 static void bfa_fcs_lport_unknown_init(struct bfa_fcs_lport_s *port);
55 static void bfa_fcs_lport_unknown_online(struct bfa_fcs_lport_s *port);
56 static void bfa_fcs_lport_unknown_offline(struct bfa_fcs_lport_s *port);
57 static void bfa_fcs_lport_deleted(struct bfa_fcs_lport_s *port);
58 static void bfa_fcs_lport_echo(struct bfa_fcs_lport_s *port,
61 static void bfa_fcs_lport_rnid(struct bfa_fcs_lport_s *port,
64 static void bfa_fs_port_get_gen_topo_data(struct bfa_fcs_lport_s *port,
67 static void bfa_fcs_lport_fab_init(struct bfa_fcs_lport_s *port);
68 static void bfa_fcs_lport_fab_online(struct bfa_fcs_lport_s *port);
69 static void bfa_fcs_lport_fab_offline(struct bfa_fcs_lport_s *port);
71 static void bfa_fcs_lport_n2n_init(struct bfa_fcs_lport_s *port);
72 static void bfa_fcs_lport_n2n_online(struct bfa_fcs_lport_s *port);
73 static void bfa_fcs_lport_n2n_offline(struct bfa_fcs_lport_s *port);
75 static void bfa_fcs_lport_loop_init(struct bfa_fcs_lport_s *port);
76 static void bfa_fcs_lport_loop_online(struct bfa_fcs_lport_s *port);
77 static void bfa_fcs_lport_loop_offline(struct bfa_fcs_lport_s *port);
80 void (*init) (struct bfa_fcs_lport_s *port);
81 void (*online) (struct bfa_fcs_lport_s *port);
82 void (*offline) (struct bfa_fcs_lport_s *port);
106 static void bfa_fcs_lport_sm_uninit(struct bfa_fcs_lport_s *port,
108 static void bfa_fcs_lport_sm_init(struct bfa_fcs_lport_s *port,
110 static void bfa_fcs_lport_sm_online(struct bfa_fcs_lport_s *port,
112 static void bfa_fcs_lport_sm_offline(struct bfa_fcs_lport_s *port,
114 static void bfa_fcs_lport_sm_deleting(struct bfa_fcs_lport_s *port,
116 static void bfa_fcs_lport_sm_stopping(struct bfa_fcs_lport_s *port,
121 struct bfa_fcs_lport_s *port,
124 bfa_trc(port->fcs, port->port_cfg.pwwn);
125 bfa_trc(port->fcs, event);
129 bfa_sm_set_state(port, bfa_fcs_lport_sm_init);
133 bfa_sm_fault(port->fcs, event);
138 bfa_fcs_lport_sm_init(struct bfa_fcs_lport_s *port,
141 bfa_trc(port->fcs, port->port_cfg.pwwn);
142 bfa_trc(port->fcs, event);
146 bfa_sm_set_state(port, bfa_fcs_lport_sm_online);
147 bfa_fcs_lport_online_actions(port);
151 bfa_sm_set_state(port, bfa_fcs_lport_sm_uninit);
152 bfa_fcs_lport_deleted(port);
157 if (port->vport)
158 bfa_fcs_vport_stop_comp(port->vport);
160 bfa_wc_down(&(port->fabric->stop_wc));
167 bfa_sm_fault(port->fcs, event);
173 struct bfa_fcs_lport_s *port,
179 bfa_trc(port->fcs, port->port_cfg.pwwn);
180 bfa_trc(port->fcs, event);
184 bfa_sm_set_state(port, bfa_fcs_lport_sm_offline);
185 bfa_fcs_lport_offline_actions(port);
189 __port_action[port->fabric->fab_type].offline(port);
191 if (port->num_rports == 0) {
192 bfa_sm_set_state(port, bfa_fcs_lport_sm_init);
194 if (port->vport)
195 bfa_fcs_vport_stop_comp(port->vport);
197 bfa_wc_down(&(port->fabric->stop_wc));
199 bfa_sm_set_state(port, bfa_fcs_lport_sm_stopping);
200 list_for_each_safe(qe, qen, &port->rport_q) {
209 __port_action[port->fabric->fab_type].offline(port);
211 if (port->num_rports == 0) {
212 bfa_sm_set_state(port, bfa_fcs_lport_sm_uninit);
213 bfa_fcs_lport_deleted(port);
215 bfa_sm_set_state(port, bfa_fcs_lport_sm_deleting);
216 list_for_each_safe(qe, qen, &port->rport_q) {
227 bfa_sm_fault(port->fcs, event);
233 struct bfa_fcs_lport_s *port,
239 bfa_trc(port->fcs, port->port_cfg.pwwn);
240 bfa_trc(port->fcs, event);
244 bfa_sm_set_state(port, bfa_fcs_lport_sm_online);
245 bfa_fcs_lport_online_actions(port);
249 if (port->num_rports == 0) {
250 bfa_sm_set_state(port, bfa_fcs_lport_sm_init);
252 if (port->vport)
253 bfa_fcs_vport_stop_comp(port->vport);
255 bfa_wc_down(&(port->fabric->stop_wc));
257 bfa_sm_set_state(port, bfa_fcs_lport_sm_stopping);
258 list_for_each_safe(qe, qen, &port->rport_q) {
266 if (port->num_rports == 0) {
267 bfa_sm_set_state(port, bfa_fcs_lport_sm_uninit);
268 bfa_fcs_lport_deleted(port);
270 bfa_sm_set_state(port, bfa_fcs_lport_sm_deleting);
271 list_for_each_safe(qe, qen, &port->rport_q) {
283 bfa_sm_fault(port->fcs, event);
288 bfa_fcs_lport_sm_stopping(struct bfa_fcs_lport_s *port,
291 bfa_trc(port->fcs, port->port_cfg.pwwn);
292 bfa_trc(port->fcs, event);
296 if (port->num_rports == 0) {
297 bfa_sm_set_state(port, bfa_fcs_lport_sm_init);
299 if (port->vport)
300 bfa_fcs_vport_stop_comp(port->vport);
302 bfa_wc_down(&(port->fabric->stop_wc));
307 bfa_sm_fault(port->fcs, event);
313 struct bfa_fcs_lport_s *port,
316 bfa_trc(port->fcs, port->port_cfg.pwwn);
317 bfa_trc(port->fcs, event);
321 if (port->num_rports == 0) {
322 bfa_sm_set_state(port, bfa_fcs_lport_sm_uninit);
323 bfa_fcs_lport_deleted(port);
328 bfa_sm_fault(port->fcs, event);
340 bfa_fcs_lport_aen_post(struct bfa_fcs_lport_s *port,
343 struct bfad_s *bfad = (struct bfad_s *)port->fabric->fcs->bfad;
350 aen_entry->aen_data.lport.vf_id = port->fabric->vf_id;
351 aen_entry->aen_data.lport.roles = port->port_cfg.roles;
353 bfa_fcs_get_base_port(port->fcs));
354 aen_entry->aen_data.lport.lpwwn = bfa_fcs_lport_get_pwwn(port);
357 bfad_im_post_vendor_event(aen_entry, bfad, ++port->fcs->fcs_aen_seq,
365 bfa_fcs_lport_send_ls_rjt(struct bfa_fcs_lport_s *port, struct fchs_s *rx_fchs,
373 bfa_trc(port->fcs, rx_fchs->d_id);
374 bfa_trc(port->fcs, rx_fchs->s_id);
376 fcxp = bfa_fcs_fcxp_alloc(port->fcs, BFA_FALSE);
381 rx_fchs->s_id, bfa_fcs_lport_get_fcid(port),
384 bfa_fcxp_send(fcxp, bfa_rport, port->fabric->vf_id, port->lp_tag,
393 bfa_fcs_lport_send_fcgs_rjt(struct bfa_fcs_lport_s *port,
403 bfa_trc(port->fcs, rx_fchs->d_id);
404 bfa_trc(port->fcs, rx_fchs->s_id);
406 fcxp = bfa_fcs_fcxp_alloc(port->fcs, BFA_FALSE);
415 bfa_fcs_lport_get_fcid(port),
418 bfa_fcxp_send(fcxp, bfa_rport, port->fabric->vf_id, port->lp_tag,
424 * Process incoming plogi from a remote port.
427 bfa_fcs_lport_plogi(struct bfa_fcs_lport_s *port,
432 bfa_trc(port->fcs, rx_fchs->d_id);
433 bfa_trc(port->fcs, rx_fchs->s_id);
438 if (__fcs_min_cfg(port->fcs)) {
439 bfa_trc(port->fcs, rx_fchs->s_id);
444 bfa_trc(port->fcs, rx_fchs->s_id);
448 bfa_fcs_lport_send_ls_rjt(port, rx_fchs,
455 * Direct Attach P2P mode : verify address assigned by the r-port.
457 if ((!bfa_fcs_fabric_is_switched(port->fabric)) &&
458 (memcmp((void *)&bfa_fcs_lport_get_pwwn(port),
462 bfa_fcs_lport_send_ls_rjt(port, rx_fchs,
467 port->pid = rx_fchs->d_id;
468 bfa_lps_set_n2n_pid(port->fabric->lps, rx_fchs->d_id);
474 rport = bfa_fcs_lport_get_rport_by_pwwn(port, plogi->port_name);
477 * Direct Attach P2P mode : handle address assigned by r-port.
479 if ((!bfa_fcs_fabric_is_switched(port->fabric)) &&
480 (memcmp((void *)&bfa_fcs_lport_get_pwwn(port),
482 port->pid = rx_fchs->d_id;
483 bfa_lps_set_n2n_pid(port->fabric->lps, rx_fchs->d_id);
493 rport = bfa_fcs_lport_get_rport_by_pid(port, rx_fchs->s_id);
498 bfa_fcs_rport_plogi_create(port, rx_fchs, plogi);
516 bfa_fcs_rport_plogi_create(port, rx_fchs, plogi);
532 bfa_fcs_lport_echo(struct bfa_fcs_lport_s *port, struct fchs_s *rx_fchs,
540 bfa_trc(port->fcs, rx_fchs->s_id);
541 bfa_trc(port->fcs, rx_fchs->d_id);
543 fcxp = bfa_fcs_fcxp_alloc(port->fcs, BFA_FALSE);
548 rx_fchs->s_id, bfa_fcs_lport_get_fcid(port),
555 bfa_trc(port->fcs, rx_len);
556 bfa_trc(port->fcs, pyld_len);
563 bfa_fcxp_send(fcxp, bfa_rport, port->fabric->vf_id, port->lp_tag,
573 bfa_fcs_lport_rnid(struct bfa_fcs_lport_s *port, struct fchs_s *rx_fchs,
584 bfa_trc(port->fcs, rx_fchs->s_id);
585 bfa_trc(port->fcs, rx_fchs->d_id);
586 bfa_trc(port->fcs, rx_len);
588 fcxp = bfa_fcs_fcxp_alloc(port->fcs, BFA_FALSE);
598 bfa_trc(port->fcs, rnid->node_id_data_format);
602 * Get General topology data for this port
604 bfa_fs_port_get_gen_topo_data(port, &gen_topo_data);
612 common_id_data.port_name = bfa_fcs_lport_get_pwwn(port);
613 common_id_data.node_name = bfa_fcs_lport_get_nwwn(port);
616 rx_fchs->s_id, bfa_fcs_lport_get_fcid(port),
620 bfa_fcxp_send(fcxp, bfa_rport, port->fabric->vf_id, port->lp_tag,
629 bfa_fs_port_get_gen_topo_data(struct bfa_fcs_lport_s *port,
641 bfa_fcs_lport_online_actions(struct bfa_fcs_lport_s *port)
643 struct bfad_s *bfad = (struct bfad_s *)port->fcs->bfad;
646 bfa_trc(port->fcs, port->fabric->oper_type);
648 __port_action[port->fabric->fab_type].init(port);
649 __port_action[port->fabric->fab_type].online(port);
651 wwn2str(lpwwn_buf, bfa_fcs_lport_get_pwwn(port));
653 "Logical port online: WWN = %s Role = %s\n",
655 bfa_fcs_lport_aen_post(port, BFA_LPORT_AEN_ONLINE);
661 bfa_fcs_lport_offline_actions(struct bfa_fcs_lport_s *port)
665 struct bfad_s *bfad = (struct bfad_s *)port->fcs->bfad;
668 bfa_trc(port->fcs, port->fabric->oper_type);
670 __port_action[port->fabric->fab_type].offline(port);
672 wwn2str(lpwwn_buf, bfa_fcs_lport_get_pwwn(port));
673 if (bfa_sm_cmp_state(port->fabric,
676 "Logical port lost fabric connectivity: WWN = %s Role = %s\n",
678 bfa_fcs_lport_aen_post(port, BFA_LPORT_AEN_DISCONNECT);
681 "Logical port taken offline: WWN = %s Role = %s\n",
683 bfa_fcs_lport_aen_post(port, BFA_LPORT_AEN_OFFLINE);
686 list_for_each_safe(qe, qen, &port->rport_q) {
693 bfa_fcs_lport_unknown_init(struct bfa_fcs_lport_s *port)
699 bfa_fcs_lport_unknown_online(struct bfa_fcs_lport_s *port)
705 bfa_fcs_lport_unknown_offline(struct bfa_fcs_lport_s *port)
711 bfa_fcs_lport_abts_acc(struct bfa_fcs_lport_s *port, struct fchs_s *rx_fchs)
717 bfa_trc(port->fcs, rx_fchs->d_id);
718 bfa_trc(port->fcs, rx_fchs->s_id);
720 fcxp = bfa_fcs_fcxp_alloc(port->fcs, BFA_FALSE);
725 rx_fchs->s_id, bfa_fcs_lport_get_fcid(port),
728 bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag,
733 bfa_fcs_lport_deleted(struct bfa_fcs_lport_s *port)
735 struct bfad_s *bfad = (struct bfad_s *)port->fcs->bfad;
738 wwn2str(lpwwn_buf, bfa_fcs_lport_get_pwwn(port));
740 "Logical port deleted: WWN = %s Role = %s\n",
742 bfa_fcs_lport_aen_post(port, BFA_LPORT_AEN_DELETE);
744 /* Base port will be deleted by the OS driver */
745 if (port->vport)
746 bfa_fcs_vport_delete_comp(port->vport);
748 bfa_wc_down(&port->fabric->wc);
769 * before the lport is online due to port feature
831 * look for a matching remote port ID
887 bfa_fcs_lport_get_rport_by_pid(struct bfa_fcs_lport_s *port, u32 pid)
892 list_for_each(qe, &port->rport_q) {
898 bfa_trc(port->fcs, pid);
906 bfa_fcs_lport_get_rport_by_old_pid(struct bfa_fcs_lport_s *port, u32 pid)
911 list_for_each(qe, &port->rport_q) {
917 bfa_trc(port->fcs, pid);
925 bfa_fcs_lport_get_rport_by_pwwn(struct bfa_fcs_lport_s *port, wwn_t pwwn)
930 list_for_each(qe, &port->rport_q) {
936 bfa_trc(port->fcs, pwwn);
944 bfa_fcs_lport_get_rport_by_nwwn(struct bfa_fcs_lport_s *port, wwn_t nwwn)
949 list_for_each(qe, &port->rport_q) {
955 bfa_trc(port->fcs, nwwn);
963 bfa_fcs_lport_get_rport_by_qualifier(struct bfa_fcs_lport_s *port,
969 list_for_each(qe, &port->rport_q) {
975 bfa_trc(port->fcs, pwwn);
984 struct bfa_fcs_lport_s *port,
987 list_add_tail(&rport->qe, &port->rport_q);
988 port->num_rports++;
996 struct bfa_fcs_lport_s *port,
999 WARN_ON(!bfa_q_is_on_q(&port->rport_q, rport));
1001 port->num_rports--;
1003 bfa_sm_send_event(port, BFA_FCS_PORT_SM_DELRPORT);
1007 * Called by fabric for base port when fabric login is complete.
1011 bfa_fcs_lport_online(struct bfa_fcs_lport_s *port)
1013 bfa_sm_send_event(port, BFA_FCS_PORT_SM_ONLINE);
1017 * Called by fabric for base port when fabric goes offline.
1018 * Called by vport for virtual ports when virtual port becomes offline.
1021 bfa_fcs_lport_offline(struct bfa_fcs_lport_s *port)
1023 bfa_sm_send_event(port, BFA_FCS_PORT_SM_OFFLINE);
1027 * Called by fabric for base port and by vport for virtual ports
1031 bfa_fcs_lport_stop(struct bfa_fcs_lport_s *port)
1033 bfa_sm_send_event(port, BFA_FCS_PORT_SM_STOP);
1043 bfa_fcs_lport_delete(struct bfa_fcs_lport_s *port)
1045 bfa_sm_send_event(port, BFA_FCS_PORT_SM_DELETE);
1049 * Return TRUE if port is online, else return FALSE
1052 bfa_fcs_lport_is_online(struct bfa_fcs_lport_s *port)
1054 return bfa_sm_cmp_state(port, bfa_fcs_lport_sm_online);
1075 * Logical port initialization of base or virtual port.
1076 * Called by fabric for base port or by vport for virtual ports.
1096 "New logical port created: WWN = %s Role = %s\n",
1105 bfa_fcs_lport_set_symname(struct bfa_fcs_lport_s *port,
1108 strcpy(port->port_cfg.sym_name.symname, symname);
1110 if (bfa_sm_cmp_state(port, bfa_fcs_lport_sm_online))
1112 BFA_FCS_GET_NS_FROM_PORT(port), NULL);
1121 struct bfa_fcs_lport_s *port,
1124 if (bfa_sm_cmp_state(port, bfa_fcs_lport_sm_online))
1125 port_attr->pid = port->pid;
1129 port_attr->port_cfg = port->port_cfg;
1131 if (port->fabric) {
1132 port_attr->port_type = port->fabric->oper_type;
1133 port_attr->loopback = bfa_sm_cmp_state(port->fabric,
1136 bfa_sm_cmp_state(port->fabric,
1138 port_attr->fabric_name = bfa_fcs_lport_get_fabric_name(port);
1140 bfa_fcs_lport_get_fabric_ipaddr(port),
1143 if (port->vport != NULL) {
1146 port->vport->lps->lp_mac;
1149 port->fabric->lps->lp_mac;
1158 * bfa_fcs_lport_fab port fab functions
1162 * Called by port to initialize fabric services of the base port.
1165 bfa_fcs_lport_fab_init(struct bfa_fcs_lport_s *port)
1167 bfa_fcs_lport_ns_init(port);
1168 bfa_fcs_lport_scn_init(port);
1169 bfa_fcs_lport_ms_init(port);
1173 * Called by port to notify transition to online state.
1176 bfa_fcs_lport_fab_online(struct bfa_fcs_lport_s *port)
1178 bfa_fcs_lport_ns_online(port);
1179 bfa_fcs_lport_fab_scn_online(port);
1183 * Called by port to notify transition to offline state.
1186 bfa_fcs_lport_fab_offline(struct bfa_fcs_lport_s *port)
1188 bfa_fcs_lport_ns_offline(port);
1189 bfa_fcs_lport_scn_offline(port);
1190 bfa_fcs_lport_ms_offline(port);
1198 * Called by fcs/port to initialize N2N topology.
1201 bfa_fcs_lport_n2n_init(struct bfa_fcs_lport_s *port)
1206 * Called by fcs/port to notify transition to online state.
1209 bfa_fcs_lport_n2n_online(struct bfa_fcs_lport_s *port)
1211 struct bfa_fcs_lport_n2n_s *n2n_port = &port->port_topo.pn2n;
1212 struct bfa_lport_cfg_s *pcfg = &port->port_cfg;
1215 bfa_trc(port->fcs, pcfg->pwwn);
1218 * If our PWWN is > than that of the r-port, we have to initiate PLOGI
1221 * If our PWWN is < than that of the remote port, it will send a PLOGI
1228 port->pid = N2N_LOCAL_PID;
1229 bfa_lps_set_n2n_pid(port->fabric->lps, N2N_LOCAL_PID);
1233 rport = bfa_fcs_lport_get_rport_by_pwwn(port,
1236 bfa_trc(port->fcs, rport->pid);
1237 bfa_trc(port->fcs, rport->pwwn);
1247 if (port->num_rports > 0) {
1248 rport = bfa_fcs_lport_get_rport_by_pid(port, 0);
1251 bfa_trc(port->fcs, rport->pwwn);
1255 bfa_fcs_rport_create(port, N2N_REMOTE_PID);
1260 * Called by fcs/port to notify transition to offline state.
1263 bfa_fcs_lport_n2n_offline(struct bfa_fcs_lport_s *port)
1265 struct bfa_fcs_lport_n2n_s *n2n_port = &port->port_topo.pn2n;
1267 bfa_trc(port->fcs, port->pid);
1268 port->pid = 0;
1274 bfa_fcport_get_loop_attr(struct bfa_fcs_lport_s *port)
1278 struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(port->fcs->bfa);
1280 port->port_topo.ploop.alpabm_valid = fcport->alpabm_valid;
1281 port->pid = fcport->myalpa;
1282 port->pid = bfa_hton3b(port->pid);
1286 bfa_trc(port->fcs->bfa, fcport->alpabm.alpa_bm[i]);
1289 port->port_topo.ploop.alpa_pos_map[k] =
1292 bfa_trc(port->fcs->bfa, k);
1293 bfa_trc(port->fcs->bfa,
1294 port->port_topo.ploop.alpa_pos_map[k]);
1298 port->port_topo.ploop.num_alpa = k;
1302 * Called by fcs/port to initialize Loop topology.
1305 bfa_fcs_lport_loop_init(struct bfa_fcs_lport_s *port)
1310 * Called by fcs/port to notify transition to online state.
1313 bfa_fcs_lport_loop_online(struct bfa_fcs_lport_s *port)
1321 bfa_fcport_get_loop_attr(port);
1323 num_alpa = port->port_topo.ploop.num_alpa;
1324 alpabm_valid = port->port_topo.ploop.alpabm_valid;
1325 alpa_map = port->port_topo.ploop.alpa_pos_map;
1327 bfa_trc(port->fcs->bfa, port->pid);
1328 bfa_trc(port->fcs->bfa, num_alpa);
1331 bfa_trc(port->fcs->bfa, alpa_map[i]);
1332 if (alpa_map[i] != bfa_hton3b(port->pid)) {
1334 bfa_trc(port->fcs->bfa, pid);
1335 rport = bfa_fcs_lport_get_rport_by_pid(port,
1338 rport = bfa_fcs_rport_create(port,
1344 if (alpa_map[i] != port->pid) {
1346 bfa_trc(port->fcs->bfa, pid);
1347 rport = bfa_fcs_lport_get_rport_by_pid(port,
1350 rport = bfa_fcs_rport_create(port,
1358 * Called by fcs/port to notify transition to offline state.
1361 bfa_fcs_lport_loop_offline(struct bfa_fcs_lport_s *port)
1454 struct bfa_fcs_lport_s *port = fdmi->ms->port;
1456 bfa_trc(port->fcs, port->port_cfg.pwwn);
1457 bfa_trc(port->fcs, event);
1463 if (port->vport) {
1465 * For Vports, register a new port.
1472 * For a base port, we should first register the HBA
1474 * port registration.
1486 bfa_sm_fault(port->fcs, event);
1494 struct bfa_fcs_lport_s *port = fdmi->ms->port;
1496 bfa_trc(port->fcs, port->port_cfg.pwwn);
1497 bfa_trc(port->fcs, event);
1506 bfa_fcxp_walloc_cancel(BFA_FCS_GET_HAL_FROM_PORT(port),
1511 bfa_sm_fault(port->fcs, event);
1519 struct bfa_fcs_lport_s *port = fdmi->ms->port;
1521 bfa_trc(port->fcs, port->port_cfg.pwwn);
1522 bfa_trc(port->fcs, event);
1533 bfa_timer_start(BFA_FCS_GET_HAL_FROM_PORT(port),
1560 bfa_sm_fault(port->fcs, event);
1568 struct bfa_fcs_lport_s *port = fdmi->ms->port;
1570 bfa_trc(port->fcs, port->port_cfg.pwwn);
1571 bfa_trc(port->fcs, event);
1588 bfa_sm_fault(port->fcs, event);
1599 struct bfa_fcs_lport_s *port = fdmi->ms->port;
1601 bfa_trc(port->fcs, port->port_cfg.pwwn);
1602 bfa_trc(port->fcs, event);
1611 bfa_fcxp_walloc_cancel(BFA_FCS_GET_HAL_FROM_PORT(port),
1616 bfa_sm_fault(port->fcs, event);
1624 struct bfa_fcs_lport_s *port = fdmi->ms->port;
1626 bfa_trc(port->fcs, port->port_cfg.pwwn);
1627 bfa_trc(port->fcs, event);
1638 bfa_timer_start(BFA_FCS_GET_HAL_FROM_PORT(port),
1663 bfa_sm_fault(port->fcs, event);
1671 struct bfa_fcs_lport_s *port = fdmi->ms->port;
1673 bfa_trc(port->fcs, port->port_cfg.pwwn);
1674 bfa_trc(port->fcs, event);
1691 bfa_sm_fault(port->fcs, event);
1702 struct bfa_fcs_lport_s *port = fdmi->ms->port;
1704 bfa_trc(port->fcs, port->port_cfg.pwwn);
1705 bfa_trc(port->fcs, event);
1714 bfa_fcxp_walloc_cancel(BFA_FCS_GET_HAL_FROM_PORT(port),
1719 bfa_sm_fault(port->fcs, event);
1727 struct bfa_fcs_lport_s *port = fdmi->ms->port;
1729 bfa_trc(port->fcs, port->port_cfg.pwwn);
1730 bfa_trc(port->fcs, event);
1740 bfa_timer_start(BFA_FCS_GET_HAL_FROM_PORT(port),
1764 bfa_sm_fault(port->fcs, event);
1772 struct bfa_fcs_lport_s *port = fdmi->ms->port;
1774 bfa_trc(port->fcs, port->port_cfg.pwwn);
1775 bfa_trc(port->fcs, event);
1792 bfa_sm_fault(port->fcs, event);
1800 struct bfa_fcs_lport_s *port = fdmi->ms->port;
1802 bfa_trc(port->fcs, port->port_cfg.pwwn);
1803 bfa_trc(port->fcs, event);
1811 bfa_sm_fault(port->fcs, event);
1821 struct bfa_fcs_lport_s *port = fdmi->ms->port;
1823 bfa_trc(port->fcs, port->port_cfg.pwwn);
1824 bfa_trc(port->fcs, event);
1836 struct bfa_fcs_lport_s *port = fdmi->ms->port;
1842 bfa_trc(port->fcs, port->port_cfg.pwwn);
1845 bfa_fcs_fcxp_alloc(port->fcs, BFA_TRUE);
1847 bfa_fcs_fcxp_alloc_wait(port->fcs->bfa, &fdmi->fcxp_wqe,
1856 len = fc_fdmi_reqhdr_build(&fchs, pyld, bfa_fcs_lport_get_fcid(port),
1866 bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag, BFA_FALSE,
1877 struct bfa_fcs_lport_s *port = fdmi->ms->port;
1894 rhba->hba_id = bfa_fcs_lport_get_pwwn(port);
1896 rhba->port_list.port_entry = bfa_fcs_lport_get_pwwn(port);
1914 memcpy(attr->value, &bfa_fcs_lport_get_nwwn(port), templen);
2143 struct bfa_fcs_lport_s *port = fdmi->ms->port;
2146 bfa_trc(port->fcs, port->port_cfg.pwwn);
2152 bfa_trc(port->fcs, req_status);
2165 bfa_trc(port->fcs, cthdr->reason_code);
2166 bfa_trc(port->fcs, cthdr->exp_code);
2177 struct bfa_fcs_lport_s *port = fdmi->ms->port;
2183 bfa_trc(port->fcs, port->port_cfg.pwwn);
2186 bfa_fcs_fcxp_alloc(port->fcs, BFA_TRUE);
2188 bfa_fcs_fcxp_alloc_wait(port->fcs->bfa, &fdmi->fcxp_wqe,
2197 len = fc_fdmi_reqhdr_build(&fchs, pyld, bfa_fcs_lport_get_fcid(port),
2205 bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag, BFA_FALSE,
2229 * get port attributes
2443 struct bfa_fcs_lport_s *port = fdmi->ms->port;
2447 rprt->hba_id = bfa_fcs_lport_get_pwwn(bfa_fcs_get_base_port(port->fcs));
2448 rprt->port_name = bfa_fcs_lport_get_pwwn(port);
2466 struct bfa_fcs_lport_s *port = fdmi->ms->port;
2469 bfa_trc(port->fcs, port->port_cfg.pwwn);
2475 bfa_trc(port->fcs, req_status);
2488 bfa_trc(port->fcs, cthdr->reason_code);
2489 bfa_trc(port->fcs, cthdr->exp_code);
2500 struct bfa_fcs_lport_s *port = fdmi->ms->port;
2506 bfa_trc(port->fcs, port->port_cfg.pwwn);
2509 bfa_fcs_fcxp_alloc(port->fcs, BFA_TRUE);
2511 bfa_fcs_fcxp_alloc_wait(port->fcs->bfa, &fdmi->fcxp_wqe,
2520 len = fc_fdmi_reqhdr_build(&fchs, pyld, bfa_fcs_lport_get_fcid(port),
2526 bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag, BFA_FALSE,
2537 struct bfa_fcs_lport_s *port = fdmi->ms->port;
2541 rpa->port_name = bfa_fcs_lport_get_pwwn(port);
2558 struct bfa_fcs_lport_s *port = fdmi->ms->port;
2561 bfa_trc(port->fcs, port->port_cfg.pwwn);
2567 bfa_trc(port->fcs, req_status);
2580 bfa_trc(port->fcs, cthdr->reason_code);
2581 bfa_trc(port->fcs, cthdr->exp_code);
2597 struct bfa_fcs_lport_s *port = fdmi->ms->port;
2598 struct bfa_fcs_driver_info_s *driver_info = &port->fcs->driver_info;
2603 bfa_ioc_get_adapter_manufacturer(&port->fcs->bfa->ioc,
2605 bfa_ioc_get_adapter_serial_num(&port->fcs->bfa->ioc,
2607 bfa_ioc_get_adapter_model(&port->fcs->bfa->ioc,
2609 bfa_ioc_get_adapter_model(&port->fcs->bfa->ioc,
2611 bfa_ioc_get_pci_chip_rev(&port->fcs->bfa->ioc,
2613 bfa_ioc_get_adapter_optrom_ver(&port->fcs->bfa->ioc,
2615 bfa_ioc_get_adapter_fw_ver(&port->fcs->bfa->ioc,
2635 /* Retrieve the max frame size from the port attr */
2640 port->port_cfg.node_sym_name.symname, BFA_SYMNAME_MAXLEN);
2643 cpu_to_be32(bfa_ioc_get_nports(&port->fcs->bfa->ioc));
2644 hba_attr->fabric_name = port->fabric->lps->pr_nwwn;
2653 struct bfa_fcs_lport_s *port = fdmi->ms->port;
2654 struct bfa_fcs_driver_info_s *driver_info = &port->fcs->driver_info;
2663 bfa_fcport_get_attr(port->fcs->bfa, &pport_attr);
2695 bfa_sm_fault(port->fcs, pport_attr.speed_supported);
2721 port_attr->node_name = bfa_fcs_lport_get_nwwn(port);
2722 port_attr->port_name = bfa_fcs_lport_get_pwwn(port);
2725 bfa_fcs_lport_get_psym_name(port).symname, BFA_SYMNAME_MAXLEN);
2726 bfa_fcs_lport_get_attr(port, &lport_attr);
2729 port_attr->port_fabric_name = port->fabric->lps->pr_nwwn;
2732 port_attr->num_ports = cpu_to_be32(port->num_rports);
2777 if (ms->port->fcs->fdmi_enabled)
2868 bfa_trc(ms->port->fcs, ms->port->port_cfg.pwwn);
2869 bfa_trc(ms->port->fcs, event);
2881 bfa_sm_fault(ms->port->fcs, event);
2889 bfa_trc(ms->port->fcs, ms->port->port_cfg.pwwn);
2890 bfa_trc(ms->port->fcs, event);
2899 bfa_fcxp_walloc_cancel(BFA_FCS_GET_HAL_FROM_PORT(ms->port),
2904 bfa_sm_fault(ms->port->fcs, event);
2912 bfa_trc(ms->port->fcs, ms->port->port_cfg.pwwn);
2913 bfa_trc(ms->port->fcs, event);
2921 ms->port->stats.ms_retries++;
2922 bfa_timer_start(BFA_FCS_GET_HAL_FROM_PORT(ms->port),
2936 if (ms->port->vport) {
2942 * For a base port we need to get the
2955 bfa_sm_fault(ms->port->fcs, event);
2963 bfa_trc(ms->port->fcs, ms->port->port_cfg.pwwn);
2964 bfa_trc(ms->port->fcs, event);
2981 bfa_sm_fault(ms->port->fcs, event);
2989 bfa_trc(ms->port->fcs, ms->port->port_cfg.pwwn);
2990 bfa_trc(ms->port->fcs, event);
3004 bfa_sm_fault(ms->port->fcs, event);
3012 bfa_trc(ms->port->fcs, ms->port->port_cfg.pwwn);
3013 bfa_trc(ms->port->fcs, event);
3022 bfa_fcxp_walloc_cancel(BFA_FCS_GET_HAL_FROM_PORT(ms->port),
3027 bfa_sm_fault(ms->port->fcs, event);
3035 bfa_trc(ms->port->fcs, ms->port->port_cfg.pwwn);
3036 bfa_trc(ms->port->fcs, event);
3045 ms->port->stats.ms_retries++;
3046 bfa_timer_start(BFA_FCS_GET_HAL_FROM_PORT(ms->port),
3067 bfa_sm_fault(ms->port->fcs, event);
3075 bfa_trc(ms->port->fcs, ms->port->port_cfg.pwwn);
3076 bfa_trc(ms->port->fcs, event);
3093 bfa_sm_fault(ms->port->fcs, event);
3104 bfa_fcs_lport_t *port = ms->port;
3109 bfa_trc(port->fcs, port->pid);
3112 bfa_fcs_fcxp_alloc(port->fcs, BFA_TRUE);
3114 bfa_fcs_fcxp_alloc_wait(port->fcs->bfa, &ms->fcxp_wqe,
3121 bfa_fcs_lport_get_fcid(port),
3122 port->fabric->lps->pr_nwwn);
3124 bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag, BFA_FALSE,
3139 bfa_fcs_lport_t *port = ms->port;
3146 bfa_trc(port->fcs, req_status);
3147 bfa_trc(port->fcs, port->port_cfg.pwwn);
3153 bfa_trc(port->fcs, req_status);
3192 strscpy(bfa_fcs_lport_get_fabric_ipaddr(port),
3206 bfa_trc(port->fcs, cthdr->reason_code);
3207 bfa_trc(port->fcs, cthdr->exp_code);
3215 bfa_trc(ms->port->fcs, ms->port->port_cfg.pwwn);
3216 bfa_trc(ms->port->fcs, event);
3225 bfa_fcxp_walloc_cancel(BFA_FCS_GET_HAL_FROM_PORT(ms->port),
3230 bfa_sm_fault(ms->port->fcs, event);
3238 bfa_trc(ms->port->fcs, ms->port->port_cfg.pwwn);
3239 bfa_trc(ms->port->fcs, event);
3248 ms->port->stats.ms_retries++;
3249 bfa_timer_start(BFA_FCS_GET_HAL_FROM_PORT(ms->port),
3268 bfa_sm_fault(ms->port->fcs, event);
3276 bfa_trc(ms->port->fcs, ms->port->port_cfg.pwwn);
3277 bfa_trc(ms->port->fcs, event);
3294 bfa_sm_fault(ms->port->fcs, event);
3305 bfa_fcs_lport_t *port = ms->port;
3310 bfa_trc(port->fcs, port->pid);
3313 bfa_fcs_fcxp_alloc(port->fcs, BFA_TRUE);
3315 bfa_fcs_fcxp_alloc_wait(port->fcs->bfa, &ms->fcxp_wqe,
3322 bfa_fcs_lport_get_fcid(port),
3323 port->fabric->lps->pr_nwwn);
3325 bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag, BFA_FALSE,
3339 bfa_fcs_lport_t *port = ms->port;
3343 bfa_trc(port->fcs, req_status);
3344 bfa_trc(port->fcs, port->port_cfg.pwwn);
3350 bfa_trc(port->fcs, req_status);
3361 if ((memcmp((void *)&bfa_fcs_lport_get_fabric_name(port),
3363 bfa_fcs_fabric_set_fabric_name(port->fabric, *gfn_resp);
3369 bfa_trc(port->fcs, cthdr->reason_code);
3370 bfa_trc(port->fcs, cthdr->exp_code);
3382 struct bfa_fcs_lport_s *port = ms->port;
3387 bfa_trc(port->fcs, port->pid);
3390 bfa_fcs_fcxp_alloc(port->fcs, BFA_TRUE);
3392 port->stats.ms_plogi_alloc_wait++;
3393 bfa_fcs_fcxp_alloc_wait(port->fcs->bfa, &ms->fcxp_wqe,
3401 bfa_fcs_lport_get_fcid(port), 0,
3402 port->port_cfg.pwwn, port->port_cfg.nwwn,
3403 bfa_fcport_get_maxfrsize(port->fcs->bfa),
3404 bfa_fcport_get_rx_bbcredit(port->fcs->bfa));
3406 bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag, BFA_FALSE,
3411 port->stats.ms_plogi_sent++;
3421 struct bfa_fcs_lport_s *port = ms->port;
3425 bfa_trc(port->fcs, req_status);
3426 bfa_trc(port->fcs, port->port_cfg.pwwn);
3432 port->stats.ms_plogi_rsp_err++;
3433 bfa_trc(port->fcs, req_status);
3444 bfa_trc(port->fcs, rsp_len);
3445 port->stats.ms_plogi_acc_err++;
3449 port->stats.ms_plogi_accepts++;
3456 bfa_trc(port->fcs, ls_rjt->reason_code);
3457 bfa_trc(port->fcs, ls_rjt->reason_code_expl);
3459 port->stats.ms_rejects++;
3464 port->stats.ms_plogi_unknown_rsp++;
3465 bfa_trc(port->fcs, els_cmd->els_code);
3475 ms->port->stats.ms_timeouts++;
3481 bfa_fcs_lport_ms_init(struct bfa_fcs_lport_s *port)
3483 struct bfa_fcs_lport_ms_s *ms = BFA_FCS_GET_MS_FROM_PORT(port);
3485 ms->port = port;
3495 bfa_fcs_lport_ms_offline(struct bfa_fcs_lport_s *port)
3497 struct bfa_fcs_lport_ms_s *ms = BFA_FCS_GET_MS_FROM_PORT(port);
3499 ms->port = port;
3505 bfa_fcs_lport_ms_online(struct bfa_fcs_lport_s *port)
3507 struct bfa_fcs_lport_ms_s *ms = BFA_FCS_GET_MS_FROM_PORT(port);
3509 ms->port = port;
3513 bfa_fcs_lport_ms_fabric_rscn(struct bfa_fcs_lport_s *port)
3515 struct bfa_fcs_lport_ms_s *ms = BFA_FCS_GET_MS_FROM_PORT(port);
3599 struct bfa_fcs_lport_s *port,
3602 static void bfa_fcs_lport_ns_boot_target_disc(bfa_fcs_lport_t *port);
3667 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
3668 bfa_trc(ns->port->fcs, event);
3680 bfa_sm_fault(ns->port->fcs, event);
3688 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
3689 bfa_trc(ns->port->fcs, event);
3698 bfa_fcxp_walloc_cancel(BFA_FCS_GET_HAL_FROM_PORT(ns->port),
3703 bfa_sm_fault(ns->port->fcs, event);
3711 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
3712 bfa_trc(ns->port->fcs, event);
3720 ns->port->stats.ns_retries++;
3721 bfa_timer_start(BFA_FCS_GET_HAL_FROM_PORT(ns->port),
3738 bfa_sm_fault(ns->port->fcs, event);
3746 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
3747 bfa_trc(ns->port->fcs, event);
3764 bfa_sm_fault(ns->port->fcs, event);
3772 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
3773 bfa_trc(ns->port->fcs, event);
3782 bfa_fcxp_walloc_cancel(BFA_FCS_GET_HAL_FROM_PORT(ns->port),
3786 bfa_sm_fault(ns->port->fcs, event);
3794 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
3795 bfa_trc(ns->port->fcs, event);
3808 ns->port->stats.ns_retries++;
3810 bfa_timer_start(BFA_FCS_GET_HAL_FROM_PORT(ns->port),
3826 bfa_sm_fault(ns->port->fcs, event);
3834 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
3835 bfa_trc(ns->port->fcs, event);
3849 bfa_sm_fault(ns->port->fcs, event);
3857 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
3858 bfa_trc(ns->port->fcs, event);
3867 bfa_fcxp_walloc_cancel(BFA_FCS_GET_HAL_FROM_PORT(ns->port),
3872 bfa_sm_fault(ns->port->fcs, event);
3880 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
3881 bfa_trc(ns->port->fcs, event);
3893 ns->port->stats.ns_retries++;
3895 bfa_timer_start(BFA_FCS_GET_HAL_FROM_PORT(ns->port),
3911 bfa_sm_fault(ns->port->fcs, event);
3919 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
3920 bfa_trc(ns->port->fcs, event);
3934 bfa_sm_fault(ns->port->fcs, event);
3942 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
3943 bfa_trc(ns->port->fcs, event);
3952 bfa_fcxp_walloc_cancel(BFA_FCS_GET_HAL_FROM_PORT(ns->port),
3957 bfa_sm_fault(ns->port->fcs, event);
3965 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
3966 bfa_trc(ns->port->fcs, event);
3974 ns->port->stats.ns_retries++;
3975 bfa_timer_start(BFA_FCS_GET_HAL_FROM_PORT(ns->port),
3991 bfa_sm_fault(ns->port->fcs, event);
3999 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
4000 bfa_trc(ns->port->fcs, event);
4017 bfa_sm_fault(ns->port->fcs, event);
4025 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
4026 bfa_trc(ns->port->fcs, event);
4035 bfa_fcxp_walloc_cancel(BFA_FCS_GET_HAL_FROM_PORT(ns->port),
4040 bfa_sm_fault(ns->port->fcs, event);
4048 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
4049 bfa_trc(ns->port->fcs, event);
4063 ns->port->stats.ns_retries++;
4064 bfa_timer_start(BFA_FCS_GET_HAL_FROM_PORT(ns->port),
4075 bfa_sm_fault(ns->port->fcs, event);
4083 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
4084 bfa_trc(ns->port->fcs, event);
4098 bfa_sm_fault(ns->port->fcs, event);
4106 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
4107 bfa_trc(ns->port->fcs, event);
4116 bfa_fcxp_walloc_cancel(BFA_FCS_GET_HAL_FROM_PORT(ns->port),
4121 bfa_sm_fault(ns->port->fcs, event);
4129 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
4130 bfa_trc(ns->port->fcs, event);
4140 if (__fcs_min_cfg(ns->port->fcs)) {
4141 bfa_fcs_lport_ns_boot_target_disc(ns->port);
4147 * If the port role is Initiator Mode issue NS query.
4150 if (BFA_FCS_VPORT_IS_INITIATOR_MODE(ns->port)) {
4158 bfa_fcs_lport_ms_online(ns->port);
4166 ns->port->stats.ns_retries++;
4167 bfa_timer_start(BFA_FCS_GET_HAL_FROM_PORT(ns->port),
4178 bfa_sm_fault(ns->port->fcs, event);
4186 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
4187 bfa_trc(ns->port->fcs, event);
4201 bfa_sm_fault(ns->port->fcs, event);
4208 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
4209 bfa_trc(ns->port->fcs, event);
4218 bfa_fcxp_walloc_cancel(BFA_FCS_GET_HAL_FROM_PORT(ns->port),
4223 bfa_sm_fault(ns->port->fcs, event);
4231 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
4232 bfa_trc(ns->port->fcs, event);
4247 ns->port->stats.ns_retries++;
4248 bfa_timer_start(BFA_FCS_GET_HAL_FROM_PORT(ns->port),
4262 bfa_sm_fault(ns->port->fcs, event);
4270 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
4271 bfa_trc(ns->port->fcs, event);
4285 bfa_sm_fault(ns->port->fcs, event);
4293 bfa_trc(ns->port->fcs, ns->port->port_cfg.pwwn);
4294 bfa_trc(ns->port->fcs, event);
4303 * If the port role is Initiator Mode issue NS query.
4306 if (BFA_FCS_VPORT_IS_INITIATOR_MODE(ns->port)) {
4314 bfa_sm_fault(ns->port->fcs, event);
4328 struct bfa_fcs_lport_s *port = ns->port;
4333 bfa_trc(port->fcs, port->pid);
4336 bfa_fcs_fcxp_alloc(port->fcs, BFA_TRUE);
4338 port->stats.ns_plogi_alloc_wait++;
4339 bfa_fcs_fcxp_alloc_wait(port->fcs->bfa, &ns->fcxp_wqe,
4347 bfa_fcs_lport_get_fcid(port), 0,
4348 port->port_cfg.pwwn, port->port_cfg.nwwn,
4349 bfa_fcport_get_maxfrsize(port->fcs->bfa),
4350 bfa_fcport_get_rx_bbcredit(port->fcs->bfa));
4352 bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag, BFA_FALSE,
4356 port->stats.ns_plogi_sent++;
4367 struct bfa_fcs_lport_s *port = ns->port;
4372 bfa_trc(port->fcs, req_status);
4373 bfa_trc(port->fcs, port->port_cfg.pwwn);
4379 bfa_trc(port->fcs, req_status);
4380 port->stats.ns_plogi_rsp_err++;
4391 bfa_trc(port->fcs, rsp_len);
4392 port->stats.ns_plogi_acc_err++;
4396 port->stats.ns_plogi_accepts++;
4403 bfa_trc(port->fcs, ls_rjt->reason_code);
4404 bfa_trc(port->fcs, ls_rjt->reason_code_expl);
4406 port->stats.ns_rejects++;
4412 port->stats.ns_plogi_unknown_rsp++;
4413 bfa_trc(port->fcs, els_cmd->els_code);
4425 struct bfa_fcs_lport_s *port = ns->port;
4430 bfa_trc(port->fcs, port->port_cfg.pwwn);
4433 bfa_fcs_fcxp_alloc(port->fcs, BFA_TRUE);
4435 port->stats.ns_rnnid_alloc_wait++;
4436 bfa_fcs_fcxp_alloc_wait(port->fcs->bfa, &ns->fcxp_wqe,
4444 bfa_fcs_lport_get_fcid(port),
4445 bfa_fcs_lport_get_fcid(port),
4446 bfa_fcs_lport_get_nwwn(port));
4448 bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag, BFA_FALSE,
4453 port->stats.ns_rnnid_sent++;
4465 struct bfa_fcs_lport_s *port = ns->port;
4468 bfa_trc(port->fcs, port->port_cfg.pwwn);
4474 bfa_trc(port->fcs, req_status);
4475 port->stats.ns_rnnid_rsp_err++;
4484 port->stats.ns_rnnid_accepts++;
4489 port->stats.ns_rnnid_rejects++;
4490 bfa_trc(port->fcs, cthdr->reason_code);
4491 bfa_trc(port->fcs, cthdr->exp_code);
4502 struct bfa_fcs_lport_s *port = ns->port;
4508 bfa_trc(port->fcs, port->port_cfg.pwwn);
4511 bfa_fcs_fcxp_alloc(port->fcs, BFA_TRUE);
4513 port->stats.ns_rsnn_nn_alloc_wait++;
4514 bfa_fcs_fcxp_alloc_wait(port->fcs->bfa, &ns->fcxp_wqe,
4521 bfa_fcs_get_base_port(port->fcs)));
4524 bfa_fcs_lport_get_fcid(port),
4525 bfa_fcs_lport_get_nwwn(port), nsymbl);
4527 bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag, BFA_FALSE,
4532 port->stats.ns_rsnn_nn_sent++;
4544 struct bfa_fcs_lport_s *port = ns->port;
4547 bfa_trc(port->fcs, port->port_cfg.pwwn);
4553 bfa_trc(port->fcs, req_status);
4554 port->stats.ns_rsnn_nn_rsp_err++;
4563 port->stats.ns_rsnn_nn_accepts++;
4568 port->stats.ns_rsnn_nn_rejects++;
4569 bfa_trc(port->fcs, cthdr->reason_code);
4570 bfa_trc(port->fcs, cthdr->exp_code);
4575 * Register the symbolic port name.
4581 struct bfa_fcs_lport_s *port = ns->port;
4590 bfa_trc(port->fcs, port->port_cfg.pwwn);
4593 bfa_fcs_fcxp_alloc(port->fcs, BFA_TRUE);
4595 port->stats.ns_rspnid_alloc_wait++;
4596 bfa_fcs_fcxp_alloc_wait(port->fcs->bfa, &ns->fcxp_wqe,
4605 if (port->vport) {
4607 * For Vports, we append the vport's port symbolic name
4608 * to that of the base port.
4613 (bfa_fcs_get_base_port(port->fcs))),
4616 strlcat(symbl, (char *)&(bfa_fcs_lport_get_psym_name(port)),
4619 psymbl = (u8 *) &(bfa_fcs_lport_get_psym_name(port));
4623 bfa_fcs_lport_get_fcid(port), 0, psymbl);
4625 bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag, BFA_FALSE,
4630 port->stats.ns_rspnid_sent++;
4642 struct bfa_fcs_lport_s *port = ns->port;
4645 bfa_trc(port->fcs, port->port_cfg.pwwn);
4651 bfa_trc(port->fcs, req_status);
4652 port->stats.ns_rspnid_rsp_err++;
4661 port->stats.ns_rspnid_accepts++;
4666 port->stats.ns_rspnid_rejects++;
4667 bfa_trc(port->fcs, cthdr->reason_code);
4668 bfa_trc(port->fcs, cthdr->exp_code);
4679 struct bfa_fcs_lport_s *port = ns->port;
4684 bfa_trc(port->fcs, port->port_cfg.pwwn);
4687 bfa_fcs_fcxp_alloc(port->fcs, BFA_TRUE);
4689 port->stats.ns_rftid_alloc_wait++;
4690 bfa_fcs_fcxp_alloc_wait(port->fcs->bfa, &ns->fcxp_wqe,
4697 bfa_fcs_lport_get_fcid(port), 0, port->port_cfg.roles);
4699 bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag, BFA_FALSE,
4704 port->stats.ns_rftid_sent++;
4715 struct bfa_fcs_lport_s *port = ns->port;
4718 bfa_trc(port->fcs, port->port_cfg.pwwn);
4724 bfa_trc(port->fcs, req_status);
4725 port->stats.ns_rftid_rsp_err++;
4734 port->stats.ns_rftid_accepts++;
4739 port->stats.ns_rftid_rejects++;
4740 bfa_trc(port->fcs, cthdr->reason_code);
4741 bfa_trc(port->fcs, cthdr->exp_code);
4752 struct bfa_fcs_lport_s *port = ns->port;
4758 bfa_trc(port->fcs, port->port_cfg.pwwn);
4761 bfa_fcs_fcxp_alloc(port->fcs, BFA_TRUE);
4763 port->stats.ns_rffid_alloc_wait++;
4764 bfa_fcs_fcxp_alloc_wait(port->fcs->bfa, &ns->fcxp_wqe,
4770 if (BFA_FCS_VPORT_IS_INITIATOR_MODE(ns->port))
4774 bfa_fcs_lport_get_fcid(port), 0,
4777 bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag, BFA_FALSE,
4782 port->stats.ns_rffid_sent++;
4793 struct bfa_fcs_lport_s *port = ns->port;
4796 bfa_trc(port->fcs, port->port_cfg.pwwn);
4802 bfa_trc(port->fcs, req_status);
4803 port->stats.ns_rffid_rsp_err++;
4812 port->stats.ns_rffid_accepts++;
4817 port->stats.ns_rffid_rejects++;
4818 bfa_trc(port->fcs, cthdr->reason_code);
4819 bfa_trc(port->fcs, cthdr->exp_code);
4837 struct bfa_fcs_lport_s *port = ns->port;
4842 bfa_trc(port->fcs, port->pid);
4845 bfa_fcs_fcxp_alloc(port->fcs, BFA_TRUE);
4847 port->stats.ns_gidft_alloc_wait++;
4848 bfa_fcs_fcxp_alloc_wait(port->fcs->bfa, &ns->fcxp_wqe,
4858 ns->port->pid, FC_TYPE_FCP);
4860 bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag, BFA_FALSE,
4863 bfa_fcxp_get_maxrsp(port->fcs->bfa), FC_FCCT_TOV);
4865 port->stats.ns_gidft_sent++;
4877 struct bfa_fcs_lport_s *port = ns->port;
4881 bfa_trc(port->fcs, port->port_cfg.pwwn);
4887 bfa_trc(port->fcs, req_status);
4888 port->stats.ns_gidft_rsp_err++;
4898 bfa_trc(port->fcs, rsp_len);
4899 bfa_trc(port->fcs, resid_len);
4910 port->stats.ns_gidft_accepts++;
4912 bfa_trc(port->fcs, n_pids);
4913 bfa_fcs_lport_ns_process_gidft_pids(port,
4925 port->stats.ns_gidft_rejects++;
4926 bfa_trc(port->fcs, cthdr->reason_code);
4927 bfa_trc(port->fcs, cthdr->exp_code);
4942 port->stats.ns_gidft_unknown_rsp++;
4943 bfa_trc(port->fcs, cthdr->cmd_rsp_code);
4951 * param[in] port - pointer to bfa_fcs_lport_t.
4965 ns->port->stats.ns_timeouts++;
4973 bfa_fcs_lport_ns_process_gidft_pids(struct bfa_fcs_lport_s *port, u32 *pid_buf,
4979 struct bfa_fcs_fabric_s *fabric = port->fabric;
4987 if (gidft_entry->pid == port->pid)
4991 * Ignore PID if it is of base port
4992 * (Avoid vports discovering base port as remote port)
4998 * Ignore PID if it is of vport created on the same base port
5000 * same port as remote port)
5016 rport = bfa_fcs_lport_get_rport_by_pid(port, gidft_entry->pid);
5021 rport = bfa_fcs_rport_create(port, gidft_entry->pid);
5029 bfa_trc(port->fcs, gidft_entry->pid);
5044 * Functions called by port/fab.
5048 bfa_fcs_lport_ns_init(struct bfa_fcs_lport_s *port)
5050 struct bfa_fcs_lport_ns_s *ns = BFA_FCS_GET_NS_FROM_PORT(port);
5052 ns->port = port;
5057 bfa_fcs_lport_ns_offline(struct bfa_fcs_lport_s *port)
5059 struct bfa_fcs_lport_ns_s *ns = BFA_FCS_GET_NS_FROM_PORT(port);
5061 ns->port = port;
5066 bfa_fcs_lport_ns_online(struct bfa_fcs_lport_s *port)
5068 struct bfa_fcs_lport_ns_s *ns = BFA_FCS_GET_NS_FROM_PORT(port);
5070 ns->port = port;
5075 bfa_fcs_lport_ns_query(struct bfa_fcs_lport_s *port)
5077 struct bfa_fcs_lport_ns_s *ns = BFA_FCS_GET_NS_FROM_PORT(port);
5079 bfa_trc(port->fcs, port->pid);
5085 bfa_fcs_lport_ns_boot_target_disc(bfa_fcs_lport_t *port)
5093 bfa_iocfc_get_bootwwns(port->fcs->bfa, &nwwns, wwns);
5096 rport = bfa_fcs_rport_create_by_wwn(port, wwns[ii]);
5105 struct bfa_fcs_lport_s *port = ns->port;
5120 bfa_trc(port->fcs, port->port_cfg.pwwn);
5123 bfa_fcs_fcxp_alloc(port->fcs, BFA_FALSE);
5125 port->stats.ns_rspnid_alloc_wait++;
5126 bfa_fcs_fcxp_alloc_wait(port->fcs->bfa, &ns->fcxp_wqe,
5133 if (port->vport) {
5135 * For Vports, we append the vport's port symbolic name
5136 * to that of the base port.
5139 (bfa_fcs_get_base_port(port->fcs))),
5143 (char *)&(bfa_fcs_lport_get_psym_name(port)),
5148 bfa_fcs_lport_get_fcid(port), 0, symbl);
5150 bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag, BFA_FALSE,
5153 port->stats.ns_rspnid_sent++;
5175 static void bfa_fcs_lport_scn_send_ls_acc(struct bfa_fcs_lport_s *port,
5212 bfa_sm_fault(scn->port->fcs, event);
5227 bfa_fcxp_walloc_cancel(scn->port->fcs->bfa, &scn->fcxp_wqe);
5231 bfa_sm_fault(scn->port->fcs, event);
5239 struct bfa_fcs_lport_s *port = scn->port;
5248 bfa_timer_start(port->fcs->bfa, &scn->timer,
5259 bfa_sm_fault(port->fcs, event);
5279 bfa_sm_fault(scn->port->fcs, event);
5293 bfa_sm_fault(scn->port->fcs, event);
5310 struct bfa_fcs_lport_s *port = scn->port;
5315 bfa_trc(port->fcs, port->pid);
5316 bfa_trc(port->fcs, port->port_cfg.pwwn);
5319 bfa_fcs_fcxp_alloc(port->fcs, BFA_TRUE);
5321 bfa_fcs_fcxp_alloc_wait(port->fcs->bfa, &scn->fcxp_wqe,
5327 /* Handle VU registrations for Base port only */
5328 if ((!port->vport) && bfa_ioc_get_fcmode(&port->fcs->bfa->ioc)) {
5330 port->fabric->lps->brcd_switch,
5331 port->pid, 0);
5335 port->pid, 0);
5338 bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag, BFA_FALSE,
5352 struct bfa_fcs_lport_s *port = scn->port;
5356 bfa_trc(port->fcs, port->port_cfg.pwwn);
5362 bfa_trc(port->fcs, req_status);
5379 bfa_trc(port->fcs, ls_rjt->reason_code);
5380 bfa_trc(port->fcs, ls_rjt->reason_code_expl);
5394 bfa_fcs_lport_scn_send_ls_acc(struct bfa_fcs_lport_s *port,
5402 bfa_trc(port->fcs, rx_fchs->s_id);
5404 fcxp = bfa_fcs_fcxp_alloc(port->fcs, BFA_FALSE);
5409 rx_fchs->s_id, bfa_fcs_lport_get_fcid(port),
5412 bfa_fcxp_send(fcxp, bfa_rport, port->fabric->vf_id, port->lp_tag,
5445 * Functions called by port/fab
5448 bfa_fcs_lport_scn_init(struct bfa_fcs_lport_s *port)
5450 struct bfa_fcs_lport_scn_s *scn = BFA_FCS_GET_SCN_FROM_PORT(port);
5452 scn->port = port;
5457 bfa_fcs_lport_scn_offline(struct bfa_fcs_lport_s *port)
5459 struct bfa_fcs_lport_scn_s *scn = BFA_FCS_GET_SCN_FROM_PORT(port);
5461 scn->port = port;
5466 bfa_fcs_lport_fab_scn_online(struct bfa_fcs_lport_s *port)
5468 struct bfa_fcs_lport_scn_s *scn = BFA_FCS_GET_SCN_FROM_PORT(port);
5470 scn->port = port;
5475 bfa_fcs_lport_scn_portid_rscn(struct bfa_fcs_lport_s *port, u32 rpid)
5478 struct bfa_fcs_fabric_s *fabric = port->fabric;
5482 bfa_trc(port->fcs, rpid);
5485 * Ignore PID if it is of base port or of vports created on the
5486 * same base port. It is to avoid vports discovering base port or
5487 * other vports created on same base port as remote port
5501 rport = bfa_fcs_lport_get_rport_by_pid(port, rpid);
5503 rport = bfa_fcs_lport_get_rport_by_old_pid(port, rpid);
5510 if (!__fcs_min_cfg(port->fcs))
5511 rport = bfa_fcs_rport_create(port, rpid);
5528 bfa_fcs_lport_scn_multiport_rscn(struct bfa_fcs_lport_s *port,
5536 bfa_trc(port->fcs, format);
5537 bfa_trc(port->fcs, rscn_pid);
5541 list_for_each_safe(qe, qe_next, &port->rport_q) {
5551 bfa_fcs_lport_scn_process_rscn(struct bfa_fcs_lport_s *port,
5564 bfa_trc(port->fcs, num_entries);
5566 port->stats.num_rscn++;
5568 bfa_fcs_lport_scn_send_ls_acc(port, fchs);
5573 bfa_trc(port->fcs, rscn->event[i].format);
5574 bfa_trc(port->fcs, rscn_pid);
5587 bfa_trc(port->fcs, rscn_pid);
5598 bfa_trc(port->fcs, rscn_pid);
5600 port->stats.num_portid_rscn++;
5601 bfa_fcs_lport_scn_portid_rscn(port, rscn_pid);
5608 bfa_fcs_lport_ms_fabric_rscn(port);
5616 bfa_fcs_lport_scn_multiport_rscn(port,
5633 bfa_fcs_lport_ns_query(port);
5637 * BFA FCS port
5640 * fcs_port_api BFA FCS port API
5649 bfa_fcs_lport_get_rport(struct bfa_fcs_lport_s *port, wwn_t wwn, int index,
5657 if (port == NULL || nrports == 0)
5660 fcs = port->fcs;
5664 qh = &port->rport_q;
5697 bfa_fcs_lport_get_rport_quals(struct bfa_fcs_lport_s *port,
5705 if (port == NULL || rports == NULL || *nrports == 0)
5708 fcs = port->fcs;
5712 qh = &port->rport_q;
5742 * Iterate's through all the rport's in the given port to
5748 bfa_fcs_lport_get_rport_max_speed(bfa_fcs_lport_t *port)
5758 if (port == NULL)
5761 fcs = port->fcs;
5762 trl_enabled = bfa_fcport_is_ratelim(port->fcs->bfa);
5764 /* Get Physical port's current speed */
5765 bfa_fcport_get_attr(port->fcs->bfa, &port_attr);
5769 qh = &port->rport_q;
5786 bfa_fcport_get_ratelim_speed(port->fcs->bfa);
5830 bfa_fcs_lport_get_info(struct bfa_fcs_lport_s *port,
5834 bfa_trc(port->fcs, port->fabric->fabric_name);
5836 if (port->vport == NULL) {
5838 * This is a Physical port
5848 port_info->port_wwn = bfa_fcs_lport_get_pwwn(port);
5849 port_info->node_wwn = bfa_fcs_lport_get_nwwn(port);
5852 bfa_lps_get_max_vport(port->fcs->bfa);
5854 port->fabric->num_vports;
5856 port_info->num_rports_inuse = port->num_rports;
5859 * This is a virtual port
5869 port_info->port_wwn = bfa_fcs_lport_get_pwwn(port);
5870 port_info->node_wwn = bfa_fcs_lport_get_nwwn(port);
5891 bfa_fcs_lport_lip_scn_online(struct bfa_fcs_lport_s *port)
5893 bfa_fcs_lport_loop_online(port);
5897 * FCS virtual port state machine
5918 * fcs_vport_sm FCS virtual port state machine
6402 * fcs_vport_private FCS virtual port private functions
6408 bfa_fcs_vport_aen_post(struct bfa_fcs_lport_s *port,
6411 struct bfad_s *bfad = (struct bfad_s *)port->fabric->fcs->bfad;
6418 aen_entry->aen_data.lport.vf_id = port->fabric->vf_id;
6419 aen_entry->aen_data.lport.roles = port->port_cfg.roles;
6421 bfa_fcs_get_base_port(port->fcs));
6422 aen_entry->aen_data.lport.lpwwn = bfa_fcs_lport_get_pwwn(port);
6425 bfad_im_post_vendor_event(aen_entry, bfad, ++port->fcs->fcs_aen_seq,
6465 * This means max logins per port/switch setting on the
6544 * fcs_vport_public FCS virtual port public interfaces
6618 * fcs_vport_api Virtual port API
6796 * Lookup a virtual port. Excludes base port from lookup.