|
@@ -27,24 +27,6 @@
|
|
|
|
|
|
BFA_TRC_FILE(FCS, FCS);
|
|
BFA_TRC_FILE(FCS, FCS);
|
|
|
|
|
|
-/*
|
|
|
|
- * FCS sub-modules
|
|
|
|
- */
|
|
|
|
-struct bfa_fcs_mod_s {
|
|
|
|
- void (*attach) (struct bfa_fcs_s *fcs);
|
|
|
|
- void (*modinit) (struct bfa_fcs_s *fcs);
|
|
|
|
- void (*modexit) (struct bfa_fcs_s *fcs);
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-#define BFA_FCS_MODULE(_mod) { _mod ## _modinit, _mod ## _modexit }
|
|
|
|
-
|
|
|
|
-static struct bfa_fcs_mod_s fcs_modules[] = {
|
|
|
|
- { bfa_fcs_port_attach, NULL, NULL },
|
|
|
|
- { bfa_fcs_uf_attach, NULL, NULL },
|
|
|
|
- { bfa_fcs_fabric_attach, bfa_fcs_fabric_modinit,
|
|
|
|
- bfa_fcs_fabric_modexit },
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* fcs_api BFA FCS API
|
|
* fcs_api BFA FCS API
|
|
*/
|
|
*/
|
|
@@ -58,52 +40,19 @@ bfa_fcs_exit_comp(void *fcs_cbarg)
|
|
complete(&bfad->comp);
|
|
complete(&bfad->comp);
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
- * fcs_api BFA FCS API
|
|
|
|
- */
|
|
|
|
-
|
|
|
|
-/*
|
|
|
|
- * fcs attach -- called once to initialize data structures at driver attach time
|
|
|
|
|
|
+ * fcs initialization, called once after bfa initialization is complete
|
|
*/
|
|
*/
|
|
void
|
|
void
|
|
-bfa_fcs_attach(struct bfa_fcs_s *fcs, struct bfa_s *bfa, struct bfad_s *bfad,
|
|
|
|
- bfa_boolean_t min_cfg)
|
|
|
|
|
|
+bfa_fcs_init(struct bfa_fcs_s *fcs)
|
|
{
|
|
{
|
|
- int i;
|
|
|
|
- struct bfa_fcs_mod_s *mod;
|
|
|
|
-
|
|
|
|
- fcs->bfa = bfa;
|
|
|
|
- fcs->bfad = bfad;
|
|
|
|
- fcs->min_cfg = min_cfg;
|
|
|
|
- fcs->num_rport_logins = 0;
|
|
|
|
-
|
|
|
|
- bfa->fcs = BFA_TRUE;
|
|
|
|
- fcbuild_init();
|
|
|
|
-
|
|
|
|
- for (i = 0; i < ARRAY_SIZE(fcs_modules); i++) {
|
|
|
|
- mod = &fcs_modules[i];
|
|
|
|
- if (mod->attach)
|
|
|
|
- mod->attach(fcs);
|
|
|
|
- }
|
|
|
|
|
|
+ bfa_sm_send_event(&fcs->fabric, BFA_FCS_FABRIC_SM_CREATE);
|
|
|
|
+ bfa_trc(fcs, 0);
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
- * fcs initialization, called once after bfa initialization is complete
|
|
|
|
|
|
+ * fcs_api BFA FCS API
|
|
*/
|
|
*/
|
|
-void
|
|
|
|
-bfa_fcs_init(struct bfa_fcs_s *fcs)
|
|
|
|
-{
|
|
|
|
- int i;
|
|
|
|
- struct bfa_fcs_mod_s *mod;
|
|
|
|
-
|
|
|
|
- for (i = 0; i < ARRAY_SIZE(fcs_modules); i++) {
|
|
|
|
- mod = &fcs_modules[i];
|
|
|
|
- if (mod->modinit)
|
|
|
|
- mod->modinit(fcs);
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
* FCS update cfg - reset the pwwn/nwwn of fabric base logical port
|
|
* FCS update cfg - reset the pwwn/nwwn of fabric base logical port
|
|
@@ -180,26 +129,14 @@ bfa_fcs_driver_info_init(struct bfa_fcs_s *fcs,
|
|
void
|
|
void
|
|
bfa_fcs_exit(struct bfa_fcs_s *fcs)
|
|
bfa_fcs_exit(struct bfa_fcs_s *fcs)
|
|
{
|
|
{
|
|
- struct bfa_fcs_mod_s *mod;
|
|
|
|
- int nmods, i;
|
|
|
|
-
|
|
|
|
bfa_wc_init(&fcs->wc, bfa_fcs_exit_comp, fcs);
|
|
bfa_wc_init(&fcs->wc, bfa_fcs_exit_comp, fcs);
|
|
-
|
|
|
|
- nmods = ARRAY_SIZE(fcs_modules);
|
|
|
|
-
|
|
|
|
- for (i = 0; i < nmods; i++) {
|
|
|
|
-
|
|
|
|
- mod = &fcs_modules[i];
|
|
|
|
- if (mod->modexit) {
|
|
|
|
- bfa_wc_up(&fcs->wc);
|
|
|
|
- mod->modexit(fcs);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ bfa_wc_up(&fcs->wc);
|
|
|
|
+ bfa_trc(fcs, 0);
|
|
|
|
+ bfa_lps_delete(fcs->fabric.lps);
|
|
|
|
+ bfa_sm_send_event(&fcs->fabric, BFA_FCS_FABRIC_SM_DELETE);
|
|
bfa_wc_wait(&fcs->wc);
|
|
bfa_wc_wait(&fcs->wc);
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* Fabric module implementation.
|
|
* Fabric module implementation.
|
|
*/
|
|
*/
|
|
@@ -1127,62 +1064,6 @@ bfa_fcs_fabric_stop_comp(void *cbarg)
|
|
* fcs_fabric_public fabric public functions
|
|
* fcs_fabric_public fabric public functions
|
|
*/
|
|
*/
|
|
|
|
|
|
-/*
|
|
|
|
- * Attach time initialization.
|
|
|
|
- */
|
|
|
|
-void
|
|
|
|
-bfa_fcs_fabric_attach(struct bfa_fcs_s *fcs)
|
|
|
|
-{
|
|
|
|
- struct bfa_fcs_fabric_s *fabric;
|
|
|
|
-
|
|
|
|
- fabric = &fcs->fabric;
|
|
|
|
- memset(fabric, 0, sizeof(struct bfa_fcs_fabric_s));
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
- * Initialize base fabric.
|
|
|
|
- */
|
|
|
|
- fabric->fcs = fcs;
|
|
|
|
- INIT_LIST_HEAD(&fabric->vport_q);
|
|
|
|
- INIT_LIST_HEAD(&fabric->vf_q);
|
|
|
|
- fabric->lps = bfa_lps_alloc(fcs->bfa);
|
|
|
|
- WARN_ON(!fabric->lps);
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
- * Initialize fabric delete completion handler. Fabric deletion is
|
|
|
|
- * complete when the last vport delete is complete.
|
|
|
|
- */
|
|
|
|
- bfa_wc_init(&fabric->wc, bfa_fcs_fabric_delete_comp, fabric);
|
|
|
|
- bfa_wc_up(&fabric->wc); /* For the base port */
|
|
|
|
-
|
|
|
|
- bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_uninit);
|
|
|
|
- bfa_fcs_lport_attach(&fabric->bport, fabric->fcs, FC_VF_ID_NULL, NULL);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void
|
|
|
|
-bfa_fcs_fabric_modinit(struct bfa_fcs_s *fcs)
|
|
|
|
-{
|
|
|
|
- bfa_sm_send_event(&fcs->fabric, BFA_FCS_FABRIC_SM_CREATE);
|
|
|
|
- bfa_trc(fcs, 0);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/*
|
|
|
|
- * Module cleanup
|
|
|
|
- */
|
|
|
|
-void
|
|
|
|
-bfa_fcs_fabric_modexit(struct bfa_fcs_s *fcs)
|
|
|
|
-{
|
|
|
|
- struct bfa_fcs_fabric_s *fabric;
|
|
|
|
-
|
|
|
|
- bfa_trc(fcs, 0);
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
- * Cleanup base fabric.
|
|
|
|
- */
|
|
|
|
- fabric = &fcs->fabric;
|
|
|
|
- bfa_lps_delete(fabric->lps);
|
|
|
|
- bfa_sm_send_event(fabric, BFA_FCS_FABRIC_SM_DELETE);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* Fabric module stop -- stop FCS actions
|
|
* Fabric module stop -- stop FCS actions
|
|
*/
|
|
*/
|
|
@@ -1633,12 +1514,6 @@ bfa_fcs_port_event_handler(void *cbarg, enum bfa_port_linkstate event)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-void
|
|
|
|
-bfa_fcs_port_attach(struct bfa_fcs_s *fcs)
|
|
|
|
-{
|
|
|
|
- bfa_fcport_event_register(fcs->bfa, bfa_fcs_port_event_handler, fcs);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* BFA FCS UF ( Unsolicited Frames)
|
|
* BFA FCS UF ( Unsolicited Frames)
|
|
*/
|
|
*/
|
|
@@ -1706,8 +1581,44 @@ bfa_fcs_uf_recv(void *cbarg, struct bfa_uf_s *uf)
|
|
bfa_uf_free(uf);
|
|
bfa_uf_free(uf);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * fcs attach -- called once to initialize data structures at driver attach time
|
|
|
|
+ */
|
|
void
|
|
void
|
|
-bfa_fcs_uf_attach(struct bfa_fcs_s *fcs)
|
|
|
|
|
|
+bfa_fcs_attach(struct bfa_fcs_s *fcs, struct bfa_s *bfa, struct bfad_s *bfad,
|
|
|
|
+ bfa_boolean_t min_cfg)
|
|
{
|
|
{
|
|
|
|
+ struct bfa_fcs_fabric_s *fabric = &fcs->fabric;
|
|
|
|
+
|
|
|
|
+ fcs->bfa = bfa;
|
|
|
|
+ fcs->bfad = bfad;
|
|
|
|
+ fcs->min_cfg = min_cfg;
|
|
|
|
+ fcs->num_rport_logins = 0;
|
|
|
|
+
|
|
|
|
+ bfa->fcs = BFA_TRUE;
|
|
|
|
+ fcbuild_init();
|
|
|
|
+
|
|
|
|
+ bfa_fcport_event_register(fcs->bfa, bfa_fcs_port_event_handler, fcs);
|
|
bfa_uf_recv_register(fcs->bfa, bfa_fcs_uf_recv, fcs);
|
|
bfa_uf_recv_register(fcs->bfa, bfa_fcs_uf_recv, fcs);
|
|
|
|
+
|
|
|
|
+ memset(fabric, 0, sizeof(struct bfa_fcs_fabric_s));
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Initialize base fabric.
|
|
|
|
+ */
|
|
|
|
+ fabric->fcs = fcs;
|
|
|
|
+ INIT_LIST_HEAD(&fabric->vport_q);
|
|
|
|
+ INIT_LIST_HEAD(&fabric->vf_q);
|
|
|
|
+ fabric->lps = bfa_lps_alloc(fcs->bfa);
|
|
|
|
+ WARN_ON(!fabric->lps);
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Initialize fabric delete completion handler. Fabric deletion is
|
|
|
|
+ * complete when the last vport delete is complete.
|
|
|
|
+ */
|
|
|
|
+ bfa_wc_init(&fabric->wc, bfa_fcs_fabric_delete_comp, fabric);
|
|
|
|
+ bfa_wc_up(&fabric->wc); /* For the base port */
|
|
|
|
+
|
|
|
|
+ bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_uninit);
|
|
|
|
+ bfa_fcs_lport_attach(&fabric->bport, fabric->fcs, FC_VF_ID_NULL, NULL);
|
|
}
|
|
}
|