Skip to content

Commit

Permalink
[SCSI] bfa: update to support BOFM
Browse files Browse the repository at this point in the history
Update bfa driver API and data structure to support BOFM (IBM BladeCenter
Open Fabric Manager).

Signed-off-by: Jing Huang <huangj@brocade.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
  • Loading branch information
Jing Huang authored and James Bottomley committed Jul 27, 2010
1 parent 56d218f commit 07b2838
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 28 deletions.
44 changes: 19 additions & 25 deletions drivers/scsi/bfa/bfa_ioc.c
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ static void bfa_ioc_reset(struct bfa_ioc_s *ioc, bfa_boolean_t force);
static void bfa_ioc_mbox_poll(struct bfa_ioc_s *ioc);
static void bfa_ioc_mbox_hbfail(struct bfa_ioc_s *ioc);
static void bfa_ioc_recover(struct bfa_ioc_s *ioc);
static void bfa_ioc_check_attr_wwns(struct bfa_ioc_s *ioc);
static void bfa_ioc_disable_comp(struct bfa_ioc_s *ioc);
static void bfa_ioc_lpu_stop(struct bfa_ioc_s *ioc);

Expand Down Expand Up @@ -429,6 +430,7 @@ bfa_ioc_sm_getattr(struct bfa_ioc_s *ioc, enum ioc_event event)
switch (event) {
case IOC_E_FWRSP_GETATTR:
bfa_ioc_timer_stop(ioc);
bfa_ioc_check_attr_wwns(ioc);
bfa_fsm_set_state(ioc, bfa_ioc_sm_op);
break;

Expand Down Expand Up @@ -977,8 +979,13 @@ bfa_ioc_hwinit(struct bfa_ioc_s *ioc, bfa_boolean_t force)
/**
* If IOC function is disabled and firmware version is same,
* just re-enable IOC.
*
* If option rom, IOC must not be in operational state. With
* convergence, IOC will be in operational state when 2nd driver
* is loaded.
*/
if (ioc_fwstate == BFI_IOC_DISABLED || ioc_fwstate == BFI_IOC_OP) {
if (ioc_fwstate == BFI_IOC_DISABLED ||
(!bfa_ioc_is_optrom(ioc) && ioc_fwstate == BFI_IOC_OP)) {
bfa_trc(ioc, ioc_fwstate);

/**
Expand Down Expand Up @@ -1281,6 +1288,7 @@ bfa_ioc_boot(struct bfa_ioc_s *ioc, u32 boot_type, u32 boot_param)
bfa_reg_write((rb + BFA_IOC1_STATE_REG), BFI_IOC_INITING);
}

bfa_ioc_msgflush(ioc);
bfa_ioc_download_fw(ioc, boot_type, boot_param);

/**
Expand Down Expand Up @@ -1788,28 +1796,17 @@ void
bfa_ioc_get_adapter_model(struct bfa_ioc_s *ioc, char *model)
{
struct bfi_ioc_attr_s *ioc_attr;
u8 nports;
u8 max_speed;

bfa_assert(model);
bfa_os_memset((void *)model, 0, BFA_ADAPTER_MODEL_NAME_LEN);

ioc_attr = ioc->attr;

nports = bfa_ioc_get_nports(ioc);
max_speed = bfa_ioc_speed_sup(ioc);

/**
* model name
*/
if (max_speed == 10) {
strcpy(model, "BR-10?0");
model[5] = '0' + nports;
} else {
strcpy(model, "Brocade-??5");
model[8] = '0' + max_speed;
model[9] = '0' + nports;
}
snprintf(model, BFA_ADAPTER_MODEL_NAME_LEN, "%s-%u",
BFA_MFG_NAME, ioc_attr->card_type);
}

enum bfa_ioc_state
Expand Down Expand Up @@ -2048,19 +2045,16 @@ bfa_ioc_recover(struct bfa_ioc_s *ioc)
bfa_fsm_send_event(ioc, IOC_E_HBFAIL);
}

#else

void
bfa_ioc_aen_post(struct bfa_ioc_s *ioc, enum bfa_ioc_aen_event event)
{
}

static void
bfa_ioc_recover(struct bfa_ioc_s *ioc)
bfa_ioc_check_attr_wwns(struct bfa_ioc_s *ioc)
{
bfa_assert(0);
if (bfa_ioc_get_type(ioc) == BFA_IOC_TYPE_LL)
return;

if (ioc->attr->nwwn == 0)
bfa_ioc_aen_post(ioc, BFA_IOC_AEN_INVALID_NWWN);
if (ioc->attr->pwwn == 0)
bfa_ioc_aen_post(ioc, BFA_IOC_AEN_INVALID_PWWN);
}

#endif


2 changes: 2 additions & 0 deletions drivers/scsi/bfa/include/bfa.h
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,8 @@ struct bfa_sge_s {
bfa_ioc_get_type(&(__bfa)->ioc)
#define bfa_get_mac(__bfa) \
bfa_ioc_get_mac(&(__bfa)->ioc)
#define bfa_get_mfg_mac(__bfa) \
bfa_ioc_get_mfg_mac(&(__bfa)->ioc)
#define bfa_get_fw_clock_res(__bfa) \
((__bfa)->iocfc.cfgrsp->fwcfg.fw_tick_res)

Expand Down
2 changes: 1 addition & 1 deletion drivers/scsi/bfa/include/bfi/bfi_ioc.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ struct bfi_ioc_getattr_req_s {
struct bfi_ioc_attr_s {
wwn_t mfg_pwwn; /* Mfg port wwn */
wwn_t mfg_nwwn; /* Mfg node wwn */
mac_t mfg_mac;
mac_t mfg_mac; /* Mfg mac */
u16 rsvd_a;
wwn_t pwwn;
wwn_t nwwn;
Expand Down
16 changes: 14 additions & 2 deletions drivers/scsi/bfa/include/defs/bfa_defs_status.h
Original file line number Diff line number Diff line change
Expand Up @@ -256,8 +256,20 @@ enum bfa_status {
* configuration */
BFA_STATUS_DEVID_MISSING = 155, /* Boot image is not for the adapter(s)
* installed */
BFA_STATUS_BAD_FWCFG = 156, /* Bad firmware configuration */
BFA_STATUS_MAX_VAL /* Unknown error code */
BFA_STATUS_BAD_FWCFG = 156, /* Bad firmware configuration */
BFA_STATUS_CREATE_FILE = 157, /* Failed to create temporary file */
BFA_STATUS_INVALID_VENDOR = 158, /* Invalid switch vendor */
BFA_STATUS_SFP_NOT_READY = 159, /* SFP info is not ready. Retry */
BFA_STATUS_NO_TOPOLOGY_FOR_CNA = 160, /* Topology command not
* applicable to CNA */
BFA_STATUS_BOOT_CODE_UPDATED = 161, /* reboot -- -r is needed after
* boot code updated */
BFA_STATUS_BOOT_VERSION = 162, /* Boot code version not compatible with
* the driver installed */
BFA_STATUS_CARDTYPE_MISSING = 163, /* Boot image is not for the
* adapter(s) installed */
BFA_STATUS_INVALID_CARDTYPE = 164, /* Invalid card type provided */
BFA_STATUS_MAX_VAL /* Unknown error code */
};
#define bfa_status_t enum bfa_status

Expand Down

0 comments on commit 07b2838

Please sign in to comment.