Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 07b28386 authored by Jing Huang's avatar Jing Huang Committed by James Bottomley
Browse files

[SCSI] bfa: update to support BOFM



Update bfa driver API and data structure to support BOFM (IBM BladeCenter
Open Fabric Manager).

Signed-off-by: default avatarJing Huang <huangj@brocade.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent 56d218fc
Loading
Loading
Loading
Loading
+19 −25
Original line number Original line Diff line number Diff line
@@ -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_poll(struct bfa_ioc_s *ioc);
static void     bfa_ioc_mbox_hbfail(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_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_disable_comp(struct bfa_ioc_s *ioc);
static void     bfa_ioc_lpu_stop(struct bfa_ioc_s *ioc);
static void     bfa_ioc_lpu_stop(struct bfa_ioc_s *ioc);


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


@@ -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,
	 * If IOC function is disabled and firmware version is same,
	 * just re-enable IOC.
	 * 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);
		bfa_trc(ioc, ioc_fwstate);


		/**
		/**
@@ -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_reg_write((rb + BFA_IOC1_STATE_REG), BFI_IOC_INITING);
	}
	}


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


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


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


	ioc_attr = ioc->attr;
	ioc_attr = ioc->attr;


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

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


enum bfa_ioc_state
enum bfa_ioc_state
@@ -2048,19 +2045,16 @@ bfa_ioc_recover(struct bfa_ioc_s *ioc)
	bfa_fsm_send_event(ioc, IOC_E_HBFAIL);
	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
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
#endif

+2 −0
Original line number Original line Diff line number Diff line
@@ -126,6 +126,8 @@ struct bfa_sge_s {
	bfa_ioc_get_type(&(__bfa)->ioc)
	bfa_ioc_get_type(&(__bfa)->ioc)
#define bfa_get_mac(__bfa)  \
#define bfa_get_mac(__bfa)  \
	bfa_ioc_get_mac(&(__bfa)->ioc)
	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)    \
#define bfa_get_fw_clock_res(__bfa)    \
	((__bfa)->iocfc.cfgrsp->fwcfg.fw_tick_res)
	((__bfa)->iocfc.cfgrsp->fwcfg.fw_tick_res)


+1 −1
Original line number Original line Diff line number Diff line
@@ -50,7 +50,7 @@ struct bfi_ioc_getattr_req_s {
struct bfi_ioc_attr_s {
struct bfi_ioc_attr_s {
	wwn_t           mfg_pwwn;       /* Mfg port wwn */
	wwn_t           mfg_pwwn;       /* Mfg port wwn */
	wwn_t           mfg_nwwn;       /* Mfg node wwn */
	wwn_t           mfg_nwwn;       /* Mfg node wwn */
	mac_t		mfg_mac;
	mac_t		mfg_mac;	/* Mfg mac      */
	u16		rsvd_a;
	u16		rsvd_a;
	wwn_t           pwwn;
	wwn_t           pwwn;
	wwn_t           nwwn;
	wwn_t           nwwn;
+14 −2
Original line number Original line Diff line number Diff line
@@ -257,6 +257,18 @@ enum bfa_status {
	BFA_STATUS_DEVID_MISSING = 155, /* Boot image is not for the adapter(s)
	BFA_STATUS_DEVID_MISSING = 155, /* Boot image is not for the adapter(s)
					 * installed */
					 * installed */
	BFA_STATUS_BAD_FWCFG = 156, /* Bad firmware configuration */
	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 */
	BFA_STATUS_MAX_VAL              /* Unknown error code */
};
};
#define bfa_status_t enum bfa_status
#define bfa_status_t enum bfa_status