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

Commit 6a5a3d6a authored by Linus Torvalds's avatar Linus Torvalds
Browse files


Pull misc SCSI updates from James Bottomley:
 "This is an assorted set of stragglers into the merge window with
  driver updates for megaraid_sas, lpfc, bfi and mvumi.  It also
  includes some fairly major fixes for virtio-scsi (scatterlist init),
  scsi_debug (off by one error), storvsc (use after free) and qla2xxx
  (potential deadlock).

  Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com&gt;">

* tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (49 commits)
  [SCSI] storvsc: Account for in-transit packets in the RESET path
  [SCSI] qla2xxx: fix potential deadlock on ha->hardware_lock
  [SCSI] scsi_debug: Fix off-by-one bug when unmapping region
  [SCSI] Shorten the path length of scsi_cmd_to_driver()
  [SCSI] virtio-scsi: support online resizing of disks
  [SCSI] virtio-scsi: fix LUNs greater than 255
  [SCSI] virtio-scsi: initialize scatterlist structure
  [SCSI] megaraid_sas: Version, Changelog, Copyright update
  [SCSI] megaraid_sas: Remove duplicate code
  [SCSI] megaraid_sas: Add SystemPD FastPath support
  [SCSI] megaraid_sas: Add array boundary check for SystemPD
  [SCSI] megaraid_sas: Load io_request DataLength in bytes
  [SCSI] megaraid_sas: Add module param for configurable MSI-X vector count
  [SCSI] megaraid_sas: Remove un-needed completion_lock spinlock calls
  [SCSI] lpfc 8.3.35: Update lpfc version for 8.3.35 driver release
  [SCSI] lpfc 8.3.35: Fixed not reporting logical link speed to SCSI midlayer when QoS not on
  [SCSI] lpfc 8.3.35: Fix error with fabric service parameters causing performance issues
  [SCSI] lpfc 8.3.35: Fixed SCSI host create showing wrong link speed on SLI3 HBA ports
  [SCSI] lpfc 8.3.35: Fixed not checking solicition in progress bit when verifying FCF record for use
  [SCSI] lpfc 8.3.35: Fixed messages for misconfigured port errors
  ...
parents 8bbbfa70 5c1b10ab
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -9,19 +9,19 @@ Attributes:
			  this value will change the dev_loss_tmo for all
			  FCFs discovered by this controller.

	lesb_link_fail:   Link Error Status Block (LESB) link failure count.
	lesb/link_fail:   Link Error Status Block (LESB) link failure count.

	lesb_vlink_fail:  Link Error Status Block (LESB) virtual link
	lesb/vlink_fail:  Link Error Status Block (LESB) virtual link
			  failure count.

	lesb_miss_fka:    Link Error Status Block (LESB) missed FCoE
	lesb/miss_fka:    Link Error Status Block (LESB) missed FCoE
			  Initialization Protocol (FIP) Keep-Alives (FKA).

	lesb_symb_err:    Link Error Status Block (LESB) symbolic error count.
	lesb/symb_err:    Link Error Status Block (LESB) symbolic error count.

	lesb_err_block:   Link Error Status Block (LESB) block error count.
	lesb/err_block:   Link Error Status Block (LESB) block error count.

	lesb_fcs_error:   Link Error Status Block (LESB) Fibre Channel
	lesb/fcs_error:   Link Error Status Block (LESB) Fibre Channel
			  Serivces error count.

Notes: ctlr_X (global increment starting at 0)
+13 −0
Original line number Diff line number Diff line
Release Date    : Mon. Oct 1, 2012 17:00:00 PST 2012 -
			(emaild-id:megaraidlinux@lsi.com)
			Adam Radford
Current Version : 06.504.01.00-rc1
Old Version     : 00.00.06.18-rc1
    1. Removed un-needed completion_lock spinlock calls.
    2. Add module param for configurable MSI-X vector count.
    3. Load io_request DataLength in bytes.
    4. Add array boundary check for SystemPD.
    5. Add SystemPD FastPath support.
    6. Remove duplicate code.
    7. Version, Changelog, Copyright update.
-------------------------------------------------------------------------------
Release Date    : Tue. Jun 17, 2012 17:00:00 PST 2012 -
			(emaild-id:megaraidlinux@lsi.com)
			Adam Radford/Kashyap Desai
+79 −6
Original line number Diff line number Diff line
@@ -165,6 +165,16 @@ bfa_com_phy_attach(struct bfa_s *bfa, bfa_boolean_t mincfg)
	bfa_phy_memclaim(phy, phy_dma->kva_curp, phy_dma->dma_curp, mincfg);
}

static void
bfa_com_fru_attach(struct bfa_s *bfa, bfa_boolean_t mincfg)
{
	struct bfa_fru_s	*fru = BFA_FRU(bfa);
	struct bfa_mem_dma_s	*fru_dma = BFA_MEM_FRU_DMA(bfa);

	bfa_fru_attach(fru, &bfa->ioc, bfa, bfa->trcmod, mincfg);
	bfa_fru_memclaim(fru, fru_dma->kva_curp, fru_dma->dma_curp, mincfg);
}

/*
 * BFA IOC FC related definitions
 */
@@ -274,6 +284,15 @@ bfa_iocfc_sm_initing(struct bfa_iocfc_s *iocfc, enum iocfc_event event)
	case IOCFC_E_IOC_ENABLED:
		bfa_fsm_set_state(iocfc, bfa_iocfc_sm_dconf_read);
		break;

	case IOCFC_E_DISABLE:
		bfa_fsm_set_state(iocfc, bfa_iocfc_sm_disabling);
		break;

	case IOCFC_E_STOP:
		bfa_fsm_set_state(iocfc, bfa_iocfc_sm_stopping);
		break;

	case IOCFC_E_IOC_FAILED:
		bfa_fsm_set_state(iocfc, bfa_iocfc_sm_init_failed);
		break;
@@ -298,6 +317,15 @@ bfa_iocfc_sm_dconf_read(struct bfa_iocfc_s *iocfc, enum iocfc_event event)
	case IOCFC_E_DCONF_DONE:
		bfa_fsm_set_state(iocfc, bfa_iocfc_sm_init_cfg_wait);
		break;

	case IOCFC_E_DISABLE:
		bfa_fsm_set_state(iocfc, bfa_iocfc_sm_disabling);
		break;

	case IOCFC_E_STOP:
		bfa_fsm_set_state(iocfc, bfa_iocfc_sm_stopping);
		break;

	case IOCFC_E_IOC_FAILED:
		bfa_fsm_set_state(iocfc, bfa_iocfc_sm_init_failed);
		break;
@@ -322,6 +350,15 @@ bfa_iocfc_sm_init_cfg_wait(struct bfa_iocfc_s *iocfc, enum iocfc_event event)
	case IOCFC_E_CFG_DONE:
		bfa_fsm_set_state(iocfc, bfa_iocfc_sm_init_cfg_done);
		break;

	case IOCFC_E_DISABLE:
		bfa_fsm_set_state(iocfc, bfa_iocfc_sm_disabling);
		break;

	case IOCFC_E_STOP:
		bfa_fsm_set_state(iocfc, bfa_iocfc_sm_stopping);
		break;

	case IOCFC_E_IOC_FAILED:
		bfa_fsm_set_state(iocfc, bfa_iocfc_sm_init_failed);
		break;
@@ -433,6 +470,12 @@ bfa_iocfc_sm_stopping(struct bfa_iocfc_s *iocfc, enum iocfc_event event)
		bfa_cb_queue(iocfc->bfa, &iocfc->bfa->iocfc.stop_hcb_qe,
			     bfa_iocfc_stop_cb, iocfc->bfa);
		break;

	case IOCFC_E_IOC_ENABLED:
	case IOCFC_E_DCONF_DONE:
	case IOCFC_E_CFG_DONE:
		break;

	default:
		bfa_sm_fault(iocfc->bfa, event);
		break;
@@ -454,6 +497,15 @@ bfa_iocfc_sm_enabling(struct bfa_iocfc_s *iocfc, enum iocfc_event event)
	case IOCFC_E_IOC_ENABLED:
		bfa_fsm_set_state(iocfc, bfa_iocfc_sm_cfg_wait);
		break;

	case IOCFC_E_DISABLE:
		bfa_fsm_set_state(iocfc, bfa_iocfc_sm_disabling);
		break;

	case IOCFC_E_STOP:
		bfa_fsm_set_state(iocfc, bfa_iocfc_sm_dconf_write);
		break;

	case IOCFC_E_IOC_FAILED:
		bfa_fsm_set_state(iocfc, bfa_iocfc_sm_failed);

@@ -493,6 +545,13 @@ bfa_iocfc_sm_cfg_wait(struct bfa_iocfc_s *iocfc, enum iocfc_event event)
			     bfa_iocfc_enable_cb, iocfc->bfa);
		iocfc->bfa->iocfc.cb_reqd = BFA_FALSE;
		break;
	case IOCFC_E_DISABLE:
		bfa_fsm_set_state(iocfc, bfa_iocfc_sm_disabling);
		break;

	case IOCFC_E_STOP:
		bfa_fsm_set_state(iocfc, bfa_iocfc_sm_dconf_write);
		break;
	case IOCFC_E_IOC_FAILED:
		bfa_fsm_set_state(iocfc, bfa_iocfc_sm_failed);
		if (iocfc->bfa->iocfc.cb_reqd == BFA_FALSE)
@@ -524,6 +583,10 @@ bfa_iocfc_sm_disabling(struct bfa_iocfc_s *iocfc, enum iocfc_event event)
	case IOCFC_E_IOC_DISABLED:
		bfa_fsm_set_state(iocfc, bfa_iocfc_sm_disabled);
		break;
	case IOCFC_E_IOC_ENABLED:
	case IOCFC_E_DCONF_DONE:
	case IOCFC_E_CFG_DONE:
		break;
	default:
		bfa_sm_fault(iocfc->bfa, event);
		break;
@@ -785,19 +848,20 @@ void
bfa_isr_enable(struct bfa_s *bfa)
{
	u32 umsk;
	int pci_func = bfa_ioc_pcifn(&bfa->ioc);
	int port_id = bfa_ioc_portid(&bfa->ioc);

	bfa_trc(bfa, pci_func);
	bfa_trc(bfa, bfa_ioc_pcifn(&bfa->ioc));
	bfa_trc(bfa, port_id);

	bfa_msix_ctrl_install(bfa);

	if (bfa_asic_id_ct2(bfa->ioc.pcidev.device_id)) {
		umsk = __HFN_INT_ERR_MASK_CT2;
		umsk |= pci_func == 0 ?
		umsk |= port_id == 0 ?
			__HFN_INT_FN0_MASK_CT2 : __HFN_INT_FN1_MASK_CT2;
	} else {
		umsk = __HFN_INT_ERR_MASK;
		umsk |= pci_func == 0 ? __HFN_INT_FN0_MASK : __HFN_INT_FN1_MASK;
		umsk |= port_id == 0 ? __HFN_INT_FN0_MASK : __HFN_INT_FN1_MASK;
	}

	writel(umsk, bfa->iocfc.bfa_regs.intr_status);
@@ -930,7 +994,8 @@ bfa_iocfc_send_cfg(void *bfa_arg)
		cfg_info->single_msix_vec = 1;
	cfg_info->endian_sig = BFI_IOC_ENDIAN_SIG;
	cfg_info->num_cqs = cfg->fwcfg.num_cqs;
	cfg_info->num_ioim_reqs = cpu_to_be16(cfg->fwcfg.num_ioim_reqs);
	cfg_info->num_ioim_reqs = cpu_to_be16(bfa_fcpim_get_throttle_cfg(bfa,
					       cfg->fwcfg.num_ioim_reqs));
	cfg_info->num_fwtio_reqs = cpu_to_be16(cfg->fwcfg.num_fwtio_reqs);

	bfa_dma_be_addr_set(cfg_info->cfgrsp_addr, iocfc->cfgrsp_dma.pa);
@@ -1192,10 +1257,14 @@ bfa_iocfc_qreg(struct bfa_s *bfa, struct bfi_iocfc_qreg_s *qreg)
static void
bfa_iocfc_res_recfg(struct bfa_s *bfa, struct bfa_iocfc_fwcfg_s *fwcfg)
{
	struct bfa_iocfc_s	*iocfc   = &bfa->iocfc;
	struct bfi_iocfc_cfg_s	*cfg_info = iocfc->cfginfo;

	bfa_fcxp_res_recfg(bfa, fwcfg->num_fcxp_reqs);
	bfa_uf_res_recfg(bfa, fwcfg->num_uf_bufs);
	bfa_rport_res_recfg(bfa, fwcfg->num_rports);
	bfa_fcp_res_recfg(bfa, fwcfg->num_ioim_reqs);
	bfa_fcp_res_recfg(bfa, cpu_to_be16(cfg_info->num_ioim_reqs),
			  fwcfg->num_ioim_reqs);
	bfa_tskim_res_recfg(bfa, fwcfg->num_tskim_reqs);
}

@@ -1693,6 +1762,7 @@ bfa_cfg_get_meminfo(struct bfa_iocfc_cfg_s *cfg, struct bfa_meminfo_s *meminfo,
	struct bfa_mem_dma_s *flash_dma = BFA_MEM_FLASH_DMA(bfa);
	struct bfa_mem_dma_s *diag_dma = BFA_MEM_DIAG_DMA(bfa);
	struct bfa_mem_dma_s *phy_dma = BFA_MEM_PHY_DMA(bfa);
	struct bfa_mem_dma_s *fru_dma = BFA_MEM_FRU_DMA(bfa);

	WARN_ON((cfg == NULL) || (meminfo == NULL));

@@ -1717,6 +1787,8 @@ bfa_cfg_get_meminfo(struct bfa_iocfc_cfg_s *cfg, struct bfa_meminfo_s *meminfo,
	bfa_mem_dma_setup(meminfo, diag_dma, bfa_diag_meminfo());
	bfa_mem_dma_setup(meminfo, phy_dma,
			  bfa_phy_meminfo(cfg->drvcfg.min_cfg));
	bfa_mem_dma_setup(meminfo, fru_dma,
			  bfa_fru_meminfo(cfg->drvcfg.min_cfg));
}

/*
@@ -1789,6 +1861,7 @@ bfa_attach(struct bfa_s *bfa, void *bfad, struct bfa_iocfc_cfg_s *cfg,
	bfa_com_flash_attach(bfa, cfg->drvcfg.min_cfg);
	bfa_com_diag_attach(bfa);
	bfa_com_phy_attach(bfa, cfg->drvcfg.min_cfg);
	bfa_com_fru_attach(bfa, cfg->drvcfg.min_cfg);
}

/*
+60 −1
Original line number Diff line number Diff line
@@ -159,10 +159,13 @@ enum bfa_status {
	BFA_STATUS_BEACON_ON    = 72,   /* Port Beacon already on */
	BFA_STATUS_ENOFSAVE	= 78,	/*  No saved firmware trace */
	BFA_STATUS_IOC_DISABLED = 82,   /* IOC is already disabled */
	BFA_STATUS_ERROR_TRL_ENABLED  = 87,   /* TRL is enabled */
	BFA_STATUS_ERROR_QOS_ENABLED  = 88,   /* QoS is enabled */
	BFA_STATUS_NO_SFP_DEV = 89,	/* No SFP device check or replace SFP */
	BFA_STATUS_MEMTEST_FAILED = 90, /* Memory test failed contact support */
	BFA_STATUS_LEDTEST_OP = 109, /* LED test is operating */
	BFA_STATUS_INVALID_MAC  = 134, /*  Invalid MAC address */
	BFA_STATUS_CMD_NOTSUPP_CNA = 146, /* Command not supported for CNA */
	BFA_STATUS_PBC		= 154, /*  Operation not allowed for pre-boot
					*  configuration */
	BFA_STATUS_BAD_FWCFG = 156,	/* Bad firmware configuration */
@@ -184,6 +187,17 @@ enum bfa_status {
	BFA_STATUS_FAA_ACQ_ADDR = 200,	/* Acquiring addr */
	BFA_STATUS_ERROR_TRUNK_ENABLED = 203,	/* Trunk enabled on adapter */
	BFA_STATUS_MAX_ENTRY_REACHED = 212,	/* MAX entry reached */
	BFA_STATUS_TOPOLOGY_LOOP = 230, /* Topology is set to Loop */
	BFA_STATUS_LOOP_UNSUPP_MEZZ = 231, /* Loop topology is not supported
					    * on mezz cards */
	BFA_STATUS_INVALID_BW = 233,	/* Invalid bandwidth value */
	BFA_STATUS_QOS_BW_INVALID = 234,   /* Invalid QOS bandwidth
					    * configuration */
	BFA_STATUS_DPORT_ENABLED = 235, /* D-port mode is already enabled */
	BFA_STATUS_DPORT_DISABLED = 236, /* D-port mode is already disabled */
	BFA_STATUS_CMD_NOTSUPP_MEZZ = 239, /* Cmd not supported for MEZZ card */
	BFA_STATUS_FRU_NOT_PRESENT = 240, /* fru module not present */
	BFA_STATUS_DPORT_ERR = 245,	/* D-port mode is enabled */
	BFA_STATUS_MAX_VAL		/* Unknown error code */
};
#define bfa_status_t enum bfa_status
@@ -249,6 +263,10 @@ struct bfa_adapter_attr_s {

	u8		is_mezz;
	u8		trunk_capable;
	u8		mfg_day;	/* manufacturing day */
	u8		mfg_month;	/* manufacturing month */
	u16		mfg_year;	/* manufacturing year */
	u16		rsvd;
};

/*
@@ -498,6 +516,17 @@ struct bfa_ioc_aen_data_s {
	mac_t	mac;
};

/*
 *	D-port states
 *
*/
enum bfa_dport_state {
	BFA_DPORT_ST_DISABLED	= 0,	/* D-port is Disabled */
	BFA_DPORT_ST_DISABLING	= 1,	/* D-port is Disabling */
	BFA_DPORT_ST_ENABLING	= 2,	/* D-port is Enabling */
	BFA_DPORT_ST_ENABLED	= 3,	/* D-port is Enabled */
};

/*
 * ---------------------- mfg definitions ------------
 */
@@ -722,7 +751,8 @@ struct bfa_ablk_cfg_pf_s {
	u8	rsvd[1];
	u16	num_qpairs;
	u16	num_vectors;
	u32	bw;
	u16	bw_min;
	u16	bw_max;
};

struct bfa_ablk_cfg_port_s {
@@ -889,11 +919,40 @@ struct sfp_diag_ext_s {
	u8	ext_status_ctl[2];
};

/*
 * Diagnostic: Data Fields -- Address A2h
 * General Use Fields: User Writable Table - Features's Control Registers
 * Total 32 bytes
 */
struct sfp_usr_eeprom_s {
	u8	rsvd1[2];       /* 128-129 */
	u8	ewrap;          /* 130 */
	u8	rsvd2[2];       /*  */
	u8	owrap;          /* 133 */
	u8	rsvd3[2];       /*  */
	u8	prbs;           /* 136: PRBS 7 generator */
	u8	rsvd4[2];       /*  */
	u8	tx_eqz_16;      /* 139: TX Equalizer (16xFC) */
	u8	tx_eqz_8;       /* 140: TX Equalizer (8xFC) */
	u8	rsvd5[2];       /*  */
	u8	rx_emp_16;      /* 143: RX Emphasis (16xFC) */
	u8	rx_emp_8;       /* 144: RX Emphasis (8xFC) */
	u8	rsvd6[2];       /*  */
	u8	tx_eye_adj;     /* 147: TX eye Threshold Adjust */
	u8	rsvd7[3];       /*  */
	u8	tx_eye_qctl;    /* 151: TX eye Quality Control */
	u8	tx_eye_qres;    /* 152: TX eye Quality Result */
	u8	rsvd8[2];       /*  */
	u8	poh[3];         /* 155-157: Power On Hours */
	u8	rsvd9[2];       /*  */
};

struct sfp_mem_s {
	struct sfp_srlid_base_s	srlid_base;
	struct sfp_srlid_ext_s	srlid_ext;
	struct sfp_diag_base_s	diag_base;
	struct sfp_diag_ext_s	diag_ext;
	struct sfp_usr_eeprom_s usr_eeprom;
};

/*
+99 −20
Original line number Diff line number Diff line
@@ -258,6 +258,7 @@ struct bfa_fw_port_lksm_stats_s {
	u32    hwsm_lrr_rx;        /*  No. of times LRR rx-ed by HWSM      */
	u32    hwsm_lr_rx;         /*  No. of times LR rx-ed by HWSM       */
	u32    bbsc_lr;		   /* LKSM LR tx for credit recovery       */
	u32	rsvd;
};

struct bfa_fw_port_snsm_stats_s {
@@ -270,6 +271,9 @@ struct bfa_fw_port_snsm_stats_s {
	u32    sync_lost;          /*  Sync loss count                     */
	u32    sig_lost;           /*  Signal loss count                   */
	u32    asn8g_attempts;	   /* SNSM HWSM at 8Gbps attempts	   */
	u32    adapt_success;	   /* SNSM adaptation success	*/
	u32    adapt_fails;	   /* SNSM adaptation failures */
	u32    adapt_ign_fails;	   /* SNSM adaptation failures ignored */
};

struct bfa_fw_port_physm_stats_s {
@@ -324,12 +328,46 @@ struct bfa_fw_fcoe_port_stats_s {
	struct bfa_fw_fip_stats_s		fip_stats;
};

/**
 * @brief LPSM statistics
 */
struct bfa_fw_lpsm_stats_s {
	u32	cls_rx;		/* LPSM cls_rx			*/
	u32	cls_tx;		/* LPSM cls_tx			*/
	u32	arbf0_rx;	/* LPSM abrf0 rcvd		*/
	u32	arbf0_tx;	/* LPSM abrf0 xmit		*/
	u32	init_rx;	/* LPSM loop init start		*/
	u32	unexp_hwst;	/* LPSM unknown hw state	*/
	u32	unexp_frame;	/* LPSM unknown_frame		*/
	u32	unexp_prim;	/* LPSM unexpected primitive	*/
	u32	prev_alpa_unavail; /* LPSM prev alpa unavailable */
	u32	alpa_unavail;	/* LPSM alpa not available	*/
	u32	lip_rx;		/* LPSM lip rcvd		*/
	u32	lip_f7f7_rx;	/* LPSM lip f7f7 rcvd		*/
	u32	lip_f8_rx;	/* LPSM lip f8 rcvd		*/
	u32	lip_f8f7_rx;	/* LPSM lip f8f7 rcvd		*/
	u32	lip_other_rx;	/* LPSM lip other rcvd		*/
	u32	lip_tx;		/* LPSM lip xmit		*/
	u32	retry_tov;	/* LPSM retry TOV		*/
	u32	lip_tov;	/* LPSM LIP wait TOV		*/
	u32	idle_tov;	/* LPSM idle wait TOV		*/
	u32	arbf0_tov;	/* LPSM arbfo wait TOV		*/
	u32	stop_loop_tov;	/* LPSM stop loop wait TOV	*/
	u32	lixa_tov;	/* LPSM lisa wait TOV		*/
	u32	lixx_tov;	/* LPSM lilp/lirp wait TOV	*/
	u32	cls_tov;	/* LPSM cls wait TOV		*/
	u32	sler;		/* LPSM SLER recvd		*/
	u32	failed;		/* LPSM failed			*/
	u32	success;	/* LPSM online			*/
};

/*
 * IOC firmware FC uport stats
 */
struct bfa_fw_fc_uport_stats_s {
	struct bfa_fw_port_snsm_stats_s		snsm_stats;
	struct bfa_fw_port_lksm_stats_s		lksm_stats;
	struct bfa_fw_lpsm_stats_s		lpsm_stats;
};

/*
@@ -357,11 +395,6 @@ struct bfa_fw_fcxchg_stats_s {
	u32	ua_state_inv;
};

struct bfa_fw_lpsm_stats_s {
	u32	cls_rx;
	u32	cls_tx;
};

/*
 *  Trunk statistics
 */
@@ -454,7 +487,6 @@ struct bfa_fw_stats_s {
	struct bfa_fw_io_stats_s	io_stats;
	struct bfa_fw_port_stats_s	port_stats;
	struct bfa_fw_fcxchg_stats_s	fcxchg_stats;
	struct bfa_fw_lpsm_stats_s	lpsm_stats;
	struct bfa_fw_lps_stats_s	lps_stats;
	struct bfa_fw_trunk_stats_s	trunk_stats;
	struct bfa_fw_advsm_stats_s	advsm_stats;
@@ -494,13 +526,23 @@ enum bfa_qos_bw_alloc {
	BFA_QOS_BW_LOW  =  10,	/*  bandwidth allocation for Low */
};
#pragma pack(1)

struct bfa_qos_bw_s {
	u8	qos_bw_set;
	u8	high;
	u8	med;
	u8	low;
};

/*
 * QoS attribute returned in QoS Query
 */
struct bfa_qos_attr_s {
	u8	state;		/*  QoS current state */
	u8		rsvd[3];
	u8	rsvd1[3];
	u32	total_bb_cr;	/*  Total BB Credits */
	struct bfa_qos_bw_s qos_bw;	/* QOS bw cfg */
	struct bfa_qos_bw_s qos_bw_op;	/* QOS bw operational */
};

/*
@@ -692,7 +734,8 @@ enum bfa_port_states {
	BFA_PORT_ST_FWMISMATCH		= 12,
	BFA_PORT_ST_PREBOOT_DISABLED	= 13,
	BFA_PORT_ST_TOGGLING_QWAIT	= 14,
	BFA_PORT_ST_ACQ_ADDR		= 15,
	BFA_PORT_ST_FAA_MISCONFIG	= 15,
	BFA_PORT_ST_DPORT		= 16,
	BFA_PORT_ST_MAX_STATE,
};

@@ -714,9 +757,11 @@ enum bfa_port_type {
 */
enum bfa_port_topology {
	BFA_PORT_TOPOLOGY_NONE = 0,	/*  No valid topology */
	BFA_PORT_TOPOLOGY_P2P  = 1,	/*  P2P only */
	BFA_PORT_TOPOLOGY_P2P_OLD_VER = 1, /* P2P def for older ver */
	BFA_PORT_TOPOLOGY_LOOP = 2,	/* LOOP topology */
	BFA_PORT_TOPOLOGY_AUTO = 3,	/*  auto topology selection */
	BFA_PORT_TOPOLOGY_AUTO_OLD_VER = 3, /* auto def for older ver */
	BFA_PORT_TOPOLOGY_AUTO = 4,	/* auto topology selection */
	BFA_PORT_TOPOLOGY_P2P = 5,	/* P2P only */
};

/*
@@ -760,6 +805,7 @@ enum bfa_port_linkstate_rsn {
	BFA_PORT_LINKSTATE_RSN_LOCAL_FAULT	= 9,
	BFA_PORT_LINKSTATE_RSN_REMOTE_FAULT	= 10,
	BFA_PORT_LINKSTATE_RSN_TIMEOUT		= 11,
	BFA_PORT_LINKSTATE_RSN_FAA_MISCONFIG	= 12,



@@ -833,6 +879,19 @@ struct bfa_lunmask_cfg_s {
	struct bfa_lun_mask_s	lun_list[MAX_LUN_MASK_CFG];
};

struct bfa_throttle_cfg_s {
	u16	is_valid;
	u16	value;
	u32	rsvd;
};

struct bfa_defs_fcpim_throttle_s {
	u16	max_value;
	u16	cur_value;
	u16	cfg_value;
	u16	rsvd;
};

/*
 *      Physical port configuration
 */
@@ -851,9 +910,10 @@ struct bfa_port_cfg_s {
	u8	 bb_scn;	/*  BB_SCN value from FLOGI Exchg */
	u8	 bb_scn_state;	/*  Config state of BB_SCN */
	u8	 faa_state;	/*  FAA enabled/disabled        */
	u8	 rsvd[1];
	u8	 rsvd1;
	u16	 path_tov;	/*  device path timeout	*/
	u16	 q_depth;	/*  SCSI Queue depth		*/
	struct bfa_qos_bw_s qos_bw;	/* QOS bandwidth	*/
};
#pragma pack()

@@ -901,7 +961,7 @@ struct bfa_port_attr_s {

	/* FCoE specific  */
	u16			fcoe_vlan;
	u8			rsvd1[2];
	u8			rsvd1[6];
};

/*
@@ -971,6 +1031,13 @@ struct bfa_trunk_vc_attr_s {
	u16 vc_credits[8];
};

struct bfa_fcport_loop_info_s {
	u8	myalpa;		/* alpa claimed */
	u8	alpabm_val;	/* alpa bitmap valid or not (1 or 0) */
	u8	resvd[6];
	struct fc_alpabm_s alpabm;	/* alpa bitmap */
};

/*
 *	Link state information
 */
@@ -981,13 +1048,18 @@ struct bfa_port_link_s {
	u8	 speed;		/*  Link speed (1/2/4/8 G) */
	u32	 linkstate_opt; /*  Linkstate optional data (debug) */
	u8	 trunked;	/*  Trunked or not (1 or 0) */
	u8	 resvd[3];
	u8	 resvd[7];
	struct bfa_qos_attr_s  qos_attr;   /* QoS Attributes */
	union {
		struct bfa_qos_vc_attr_s qos_vc_attr;  /*  VC info from ELP */
		struct bfa_fcport_loop_info_s loop_info;
		union {
			struct bfa_qos_vc_attr_s qos_vc_attr;
					/*  VC info from ELP */
			struct bfa_trunk_vc_attr_s trunk_vc_attr;
		struct bfa_fcport_fcf_s fcf; /*  FCF information (for FCoE) */
			struct bfa_fcport_fcf_s fcf;
					/*  FCF information (for FCoE) */
		} vc_fcf;
	} attr;
};
#pragma pack()

@@ -1112,6 +1184,9 @@ struct bfa_port_fc_stats_s {
	u64     tx_frames;      /*  Tx frames                   */
	u64     tx_words;       /*  Tx words                    */
	u64     tx_lip;         /*  Tx LIP                      */
	u64	tx_lip_f7f7;	/*  Tx LIP_F7F7		*/
	u64	tx_lip_f8f7;	/*  Tx LIP_F8F7		*/
	u64	tx_arbf0;	/*  Tx ARB F0			*/
	u64     tx_nos;         /*  Tx NOS                      */
	u64     tx_ols;         /*  Tx OLS                      */
	u64     tx_lr;          /*  Tx LR                       */
@@ -1119,6 +1194,9 @@ struct bfa_port_fc_stats_s {
	u64     rx_frames;      /*  Rx frames                   */
	u64     rx_words;       /*  Rx words                    */
	u64     lip_count;      /*  Rx LIP                      */
	u64	rx_lip_f7f7;	/*  Rx LIP_F7F7		*/
	u64	rx_lip_f8f7;	/*  Rx LIP_F8F7		*/
	u64	rx_arbf0;	/*  Rx ARB F0			*/
	u64     nos_count;      /*  Rx NOS                      */
	u64     ols_count;      /*  Rx OLS                      */
	u64     lr_count;       /*  Rx LR                       */
@@ -1140,6 +1218,7 @@ struct bfa_port_fc_stats_s {
	u64	bbsc_frames_lost; /* Credit Recovery-Frames Lost  */
	u64	bbsc_credits_lost; /* Credit Recovery-Credits Lost */
	u64	bbsc_link_resets; /* Credit Recovery-Link Resets   */
	u64	loop_timeouts;	/*  Loop timeouts		*/
};

/*
Loading