Skip to content

Commit

Permalink
[SCSI] bfa: New interface to handle firmware upgrade scenario
Browse files Browse the repository at this point in the history
Split bfa_fcs_init() into bfa_fcs_attach() and bfa_fcs_init().

Removed empty function definitions in FCS modules

Modified driver to call bfa_fcs_attach() and bfa_fcs_init() as needed.

Signed-off-by: Krishna Gudipati <kgudipat@brocade.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
  • Loading branch information
Krishna Gudipati authored and James Bottomley committed Mar 4, 2010
1 parent 5b09808 commit 82794a2
Show file tree
Hide file tree
Showing 15 changed files with 47 additions and 110 deletions.
46 changes: 29 additions & 17 deletions drivers/scsi/bfa/bfa_fcs.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,19 +36,18 @@
* 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_MODULE(bfa_fcs_pport),
BFA_FCS_MODULE(bfa_fcs_uf),
BFA_FCS_MODULE(bfa_fcs_fabric),
BFA_FCS_MODULE(bfa_fcs_vport),
BFA_FCS_MODULE(bfa_fcs_rport),
BFA_FCS_MODULE(bfa_fcs_fcpim),
{ bfa_fcs_pport_attach, NULL, NULL },
{ bfa_fcs_uf_attach, NULL, NULL },
{ bfa_fcs_fabric_attach, bfa_fcs_fabric_modinit,
bfa_fcs_fabric_modexit },
};

/**
Expand All @@ -71,16 +70,10 @@ bfa_fcs_exit_comp(void *fcs_cbarg)
*/

/**
* FCS instance initialization.
*
* param[in] fcs FCS instance
* param[in] bfa BFA instance
* param[in] bfad BFA driver instance
*
* return None
* fcs attach -- called once to initialize data structures at driver attach time
*/
void
bfa_fcs_init(struct bfa_fcs_s *fcs, struct bfa_s *bfa, struct bfad_s *bfad,
bfa_fcs_attach(struct bfa_fcs_s *fcs, struct bfa_s *bfa, struct bfad_s *bfad,
bfa_boolean_t min_cfg)
{
int i;
Expand All @@ -95,7 +88,24 @@ bfa_fcs_init(struct bfa_fcs_s *fcs, struct bfa_s *bfa, struct bfad_s *bfad,

for (i = 0; i < sizeof(fcs_modules) / sizeof(fcs_modules[0]); i++) {
mod = &fcs_modules[i];
mod->modinit(fcs);
if (mod->attach)
mod->attach(fcs);
}
}

/**
* fcs initialization, called once after bfa initialization is complete
*/
void
bfa_fcs_init(struct bfa_fcs_s *fcs)
{
int i;
struct bfa_fcs_mod_s *mod;

for (i = 0; i < sizeof(fcs_modules) / sizeof(fcs_modules[0]); i++) {
mod = &fcs_modules[i];
if (mod->modinit)
mod->modinit(fcs);
}
}

Expand Down Expand Up @@ -160,10 +170,12 @@ bfa_fcs_exit(struct bfa_fcs_s *fcs)
nmods = sizeof(fcs_modules) / sizeof(fcs_modules[0]);

for (i = 0; i < nmods; i++) {
bfa_wc_up(&fcs->wc);

mod = &fcs_modules[i];
mod->modexit(fcs);
if (mod->modexit) {
bfa_wc_up(&fcs->wc);
mod->modexit(fcs);
}
}

bfa_wc_wait(&fcs->wc);
Expand Down
11 changes: 2 additions & 9 deletions drivers/scsi/bfa/bfa_fcs_port.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,14 +55,7 @@ bfa_fcs_pport_event_handler(void *cbarg, bfa_pport_event_t event)
}

void
bfa_fcs_pport_modinit(struct bfa_fcs_s *fcs)
bfa_fcs_pport_attach(struct bfa_fcs_s *fcs)
{
bfa_pport_event_register(fcs->bfa, bfa_fcs_pport_event_handler,
fcs);
}

void
bfa_fcs_pport_modexit(struct bfa_fcs_s *fcs)
{
bfa_fcs_modexit_comp(fcs);
bfa_pport_event_register(fcs->bfa, bfa_fcs_pport_event_handler, fcs);
}
8 changes: 1 addition & 7 deletions drivers/scsi/bfa/bfa_fcs_uf.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,13 +93,7 @@ bfa_fcs_uf_recv(void *cbarg, struct bfa_uf_s *uf)
}

void
bfa_fcs_uf_modinit(struct bfa_fcs_s *fcs)
bfa_fcs_uf_attach(struct bfa_fcs_s *fcs)
{
bfa_uf_recv_register(fcs->bfa, bfa_fcs_uf_recv, fcs);
}

void
bfa_fcs_uf_modexit(struct bfa_fcs_s *fcs)
{
bfa_fcs_modexit_comp(fcs);
}
3 changes: 2 additions & 1 deletion drivers/scsi/bfa/bfad.c
Original file line number Diff line number Diff line change
Expand Up @@ -748,7 +748,8 @@ bfad_drv_init(struct bfad_s *bfad)
bfa_fcs_log_init(&bfad->bfa_fcs, bfad->logmod);
bfa_fcs_trc_init(&bfad->bfa_fcs, bfad->trcmod);
bfa_fcs_aen_init(&bfad->bfa_fcs, bfad->aen);
bfa_fcs_init(&bfad->bfa_fcs, &bfad->bfa, bfad, BFA_FALSE);
bfa_fcs_attach(&bfad->bfa_fcs, &bfad->bfa, bfad, BFA_FALSE);
bfa_fcs_init(&bfad->bfa_fcs);
bfa_fcs_driver_info_init(&bfad->bfa_fcs, &driver_info);
bfa_fcs_set_fdmi_param(&bfad->bfa_fcs, fdmi_enable);
spin_unlock_irqrestore(&bfad->bfad_lock, flags);
Expand Down
11 changes: 8 additions & 3 deletions drivers/scsi/bfa/fabric.c
Original file line number Diff line number Diff line change
Expand Up @@ -814,10 +814,10 @@ bfa_fcs_fabric_delete_comp(void *cbarg)
*/

/**
* Module initialization
* Attach time initialization
*/
void
bfa_fcs_fabric_modinit(struct bfa_fcs_s *fcs)
bfa_fcs_fabric_attach(struct bfa_fcs_s *fcs)
{
struct bfa_fcs_fabric_s *fabric;

Expand All @@ -841,7 +841,12 @@ bfa_fcs_fabric_modinit(struct bfa_fcs_s *fcs)
bfa_wc_up(&fabric->wc); /* For the base port */

bfa_sm_set_state(fabric, bfa_fcs_fabric_sm_uninit);
bfa_sm_send_event(fabric, BFA_FCS_FABRIC_SM_CREATE);
}

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);
}

Expand Down
19 changes: 0 additions & 19 deletions drivers/scsi/bfa/fcpim.c
Original file line number Diff line number Diff line change
Expand Up @@ -822,22 +822,3 @@ void
bfa_fcs_itnim_resume(struct bfa_fcs_itnim_s *itnim)
{
}

/**
* Module initialization
*/
void
bfa_fcs_fcpim_modinit(struct bfa_fcs_s *fcs)
{
}

/**
* Module cleanup
*/
void
bfa_fcs_fcpim_modexit(struct bfa_fcs_s *fcs)
{
bfa_fcs_modexit_comp(fcs);
}


1 change: 1 addition & 0 deletions drivers/scsi/bfa/fcs_fabric.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
/*
* fcs friend functions: only between fcs modules
*/
void bfa_fcs_fabric_attach(struct bfa_fcs_s *fcs);
void bfa_fcs_fabric_modinit(struct bfa_fcs_s *fcs);
void bfa_fcs_fabric_modexit(struct bfa_fcs_s *fcs);
void bfa_fcs_fabric_modsusp(struct bfa_fcs_s *fcs);
Expand Down
5 changes: 0 additions & 5 deletions drivers/scsi/bfa/fcs_fcpim.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,6 @@ void bfa_fcs_itnim_is_initiator(struct bfa_fcs_itnim_s *itnim);
void bfa_fcs_itnim_pause(struct bfa_fcs_itnim_s *itnim);
void bfa_fcs_itnim_resume(struct bfa_fcs_itnim_s *itnim);

/*
* Modudle init/cleanup routines.
*/
void bfa_fcs_fcpim_modinit(struct bfa_fcs_s *fcs);
void bfa_fcs_fcpim_modexit(struct bfa_fcs_s *fcs);
void bfa_fcs_fcpim_uf_recv(struct bfa_fcs_itnim_s *itnim, struct fchs_s *fchs,
u16 len);
#endif /* __FCS_FCPIM_H__ */
3 changes: 1 addition & 2 deletions drivers/scsi/bfa/fcs_port.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
/*
* fcs friend functions: only between fcs modules
*/
void bfa_fcs_pport_modinit(struct bfa_fcs_s *fcs);
void bfa_fcs_pport_modexit(struct bfa_fcs_s *fcs);
void bfa_fcs_pport_attach(struct bfa_fcs_s *fcs);

#endif /* __FCS_PPORT_H__ */
3 changes: 0 additions & 3 deletions drivers/scsi/bfa/fcs_rport.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,6 @@

#include <fcs/bfa_fcs_rport.h>

void bfa_fcs_rport_modinit(struct bfa_fcs_s *fcs);
void bfa_fcs_rport_modexit(struct bfa_fcs_s *fcs);

void bfa_fcs_rport_uf_recv(struct bfa_fcs_rport_s *rport, struct fchs_s *fchs,
u16 len);
void bfa_fcs_rport_scn(struct bfa_fcs_rport_s *rport);
Expand Down
3 changes: 1 addition & 2 deletions drivers/scsi/bfa/fcs_uf.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
/*
* fcs friend functions: only between fcs modules
*/
void bfa_fcs_uf_modinit(struct bfa_fcs_s *fcs);
void bfa_fcs_uf_modexit(struct bfa_fcs_s *fcs);
void bfa_fcs_uf_attach(struct bfa_fcs_s *fcs);

#endif /* __FCS_UF_H__ */
7 changes: 0 additions & 7 deletions drivers/scsi/bfa/fcs_vport.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,6 @@
#include <fcs/bfa_fcs_vport.h>
#include <defs/bfa_defs_pci.h>

/*
* Modudle init/cleanup routines.
*/

void bfa_fcs_vport_modinit(struct bfa_fcs_s *fcs);
void bfa_fcs_vport_modexit(struct bfa_fcs_s *fcs);

void bfa_fcs_vport_cleanup(struct bfa_fcs_vport_s *vport);
void bfa_fcs_vport_online(struct bfa_fcs_vport_s *vport);
void bfa_fcs_vport_offline(struct bfa_fcs_vport_s *vport);
Expand Down
3 changes: 2 additions & 1 deletion drivers/scsi/bfa/include/fcs/bfa_fcs.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,9 @@ struct bfa_fcs_s {
/*
* bfa fcs API functions
*/
void bfa_fcs_init(struct bfa_fcs_s *fcs, struct bfa_s *bfa, struct bfad_s *bfad,
void bfa_fcs_attach(struct bfa_fcs_s *fcs, struct bfa_s *bfa, struct bfad_s *bfad,
bfa_boolean_t min_cfg);
void bfa_fcs_init(struct bfa_fcs_s *fcs);
void bfa_fcs_driver_info_init(struct bfa_fcs_s *fcs,
struct bfa_fcs_driver_info_s *driver_info);
void bfa_fcs_set_fdmi_param(struct bfa_fcs_s *fcs, bfa_boolean_t fdmi_enable);
Expand Down
17 changes: 0 additions & 17 deletions drivers/scsi/bfa/rport.c
Original file line number Diff line number Diff line change
Expand Up @@ -2574,23 +2574,6 @@ bfa_fcs_rport_send_ls_rjt(struct bfa_fcs_rport_s *rport, struct fchs_s *rx_fchs,
FC_CLASS_3, len, &fchs, NULL, NULL, FC_MAX_PDUSZ, 0);
}

/**
* Module initialization
*/
void
bfa_fcs_rport_modinit(struct bfa_fcs_s *fcs)
{
}

/**
* Module cleanup
*/
void
bfa_fcs_rport_modexit(struct bfa_fcs_s *fcs)
{
bfa_fcs_modexit_comp(fcs);
}

/**
* Return state of rport.
*/
Expand Down
17 changes: 0 additions & 17 deletions drivers/scsi/bfa/vport.c
Original file line number Diff line number Diff line change
Expand Up @@ -616,23 +616,6 @@ bfa_fcs_vport_delete_comp(struct bfa_fcs_vport_s *vport)
bfa_sm_send_event(vport, BFA_FCS_VPORT_SM_DELCOMP);
}

/**
* Module initialization
*/
void
bfa_fcs_vport_modinit(struct bfa_fcs_s *fcs)
{
}

/**
* Module cleanup
*/
void
bfa_fcs_vport_modexit(struct bfa_fcs_s *fcs)
{
bfa_fcs_modexit_comp(fcs);
}

u32
bfa_fcs_vport_get_max(struct bfa_fcs_s *fcs)
{
Expand Down

0 comments on commit 82794a2

Please sign in to comment.