Commit 4e1e0d8d authored by Vijaya Mohan Guvva's avatar Vijaya Mohan Guvva Committed by James Bottomley

[SCSI] bfa: Forward Error Correction status query

This patch includes changes to get FC HBA feature Forward Error
Correction (FEC) (enabled at 16Gig speed) status from firmware and to
return to brocade HBA management utility.
Signed-off-by: default avatarVijaya Mohan Guvva <vmohan@brocade.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent bbe37a67
...@@ -882,6 +882,15 @@ enum bfa_lunmask_state_s { ...@@ -882,6 +882,15 @@ enum bfa_lunmask_state_s {
BFA_LUNMASK_UNINITIALIZED = 0xff, BFA_LUNMASK_UNINITIALIZED = 0xff,
}; };
/**
* FEC states
*/
enum bfa_fec_state_s {
BFA_FEC_ONLINE = 1, /*!< FEC is online */
BFA_FEC_OFFLINE = 2, /*!< FEC is offline */
BFA_FEC_OFFLINE_NOT_16G = 3, /*!< FEC is offline (speed not 16Gig) */
};
#pragma pack(1) #pragma pack(1)
/* /*
* LUN mask configuration * LUN mask configuration
...@@ -978,6 +987,7 @@ struct bfa_port_attr_s { ...@@ -978,6 +987,7 @@ struct bfa_port_attr_s {
bfa_boolean_t link_e2e_beacon; /* link beacon is on */ bfa_boolean_t link_e2e_beacon; /* link beacon is on */
bfa_boolean_t bbsc_op_status; /* fc credit recovery oper bfa_boolean_t bbsc_op_status; /* fc credit recovery oper
* state */ * state */
enum bfa_fec_state_s fec_state; /*!< current FEC state */
/* /*
* Dynamic field - info from FCS * Dynamic field - info from FCS
...@@ -989,7 +999,7 @@ struct bfa_port_attr_s { ...@@ -989,7 +999,7 @@ struct bfa_port_attr_s {
/* FCoE specific */ /* FCoE specific */
u16 fcoe_vlan; u16 fcoe_vlan;
u8 rsvd1[6]; u8 rsvd1[2];
}; };
/* /*
...@@ -1076,7 +1086,8 @@ struct bfa_port_link_s { ...@@ -1076,7 +1086,8 @@ struct bfa_port_link_s {
u8 speed; /* Link speed (1/2/4/8 G) */ u8 speed; /* Link speed (1/2/4/8 G) */
u32 linkstate_opt; /* Linkstate optional data (debug) */ u32 linkstate_opt; /* Linkstate optional data (debug) */
u8 trunked; /* Trunked or not (1 or 0) */ u8 trunked; /* Trunked or not (1 or 0) */
u8 resvd[7]; u8 fec_state; /*!< State of FEC */
u8 resvd[6];
struct bfa_qos_attr_s qos_attr; /* QoS Attributes */ struct bfa_qos_attr_s qos_attr; /* QoS Attributes */
union { union {
struct bfa_fcport_loop_info_s loop_info; struct bfa_fcport_loop_info_s loop_info;
......
...@@ -3079,6 +3079,8 @@ bfa_fcport_attach(struct bfa_s *bfa, void *bfad, struct bfa_iocfc_cfg_s *cfg, ...@@ -3079,6 +3079,8 @@ bfa_fcport_attach(struct bfa_s *bfa, void *bfad, struct bfa_iocfc_cfg_s *cfg,
port_cfg->qos_bw.med = BFA_QOS_BW_MED; port_cfg->qos_bw.med = BFA_QOS_BW_MED;
port_cfg->qos_bw.low = BFA_QOS_BW_LOW; port_cfg->qos_bw.low = BFA_QOS_BW_LOW;
fcport->fec_state = BFA_FEC_OFFLINE;
INIT_LIST_HEAD(&fcport->stats_pending_q); INIT_LIST_HEAD(&fcport->stats_pending_q);
INIT_LIST_HEAD(&fcport->statsclr_pending_q); INIT_LIST_HEAD(&fcport->statsclr_pending_q);
...@@ -3157,6 +3159,9 @@ bfa_fcport_update_linkinfo(struct bfa_fcport_s *fcport) ...@@ -3157,6 +3159,9 @@ bfa_fcport_update_linkinfo(struct bfa_fcport_s *fcport)
if (fcport->cfg.bb_cr_enabled) if (fcport->cfg.bb_cr_enabled)
fcport->bbcr_attr = pevent->link_state.attr.bbcr_attr; fcport->bbcr_attr = pevent->link_state.attr.bbcr_attr;
fcport->fec_state = pevent->link_state.fec_state;
/* /*
* update trunk state if applicable * update trunk state if applicable
*/ */
...@@ -3176,6 +3181,7 @@ bfa_fcport_reset_linkinfo(struct bfa_fcport_s *fcport) ...@@ -3176,6 +3181,7 @@ bfa_fcport_reset_linkinfo(struct bfa_fcport_s *fcport)
{ {
fcport->speed = BFA_PORT_SPEED_UNKNOWN; fcport->speed = BFA_PORT_SPEED_UNKNOWN;
fcport->topology = BFA_PORT_TOPOLOGY_NONE; fcport->topology = BFA_PORT_TOPOLOGY_NONE;
fcport->fec_state = BFA_FEC_OFFLINE;
} }
/* /*
...@@ -4027,6 +4033,8 @@ bfa_fcport_get_attr(struct bfa_s *bfa, struct bfa_port_attr_s *attr) ...@@ -4027,6 +4033,8 @@ bfa_fcport_get_attr(struct bfa_s *bfa, struct bfa_port_attr_s *attr)
attr->pport_cfg.q_depth = bfa_fcpim_qdepth_get(bfa); attr->pport_cfg.q_depth = bfa_fcpim_qdepth_get(bfa);
attr->port_state = bfa_sm_to_state(hal_port_sm_table, fcport->sm); attr->port_state = bfa_sm_to_state(hal_port_sm_table, fcport->sm);
attr->fec_state = fcport->fec_state;
/* PBC Disabled State */ /* PBC Disabled State */
if (bfa_fcport_is_pbcdisabled(bfa)) if (bfa_fcport_is_pbcdisabled(bfa))
attr->port_state = BFA_PORT_ST_PREBOOT_DISABLED; attr->port_state = BFA_PORT_ST_PREBOOT_DISABLED;
......
...@@ -513,6 +513,7 @@ struct bfa_fcport_s { ...@@ -513,6 +513,7 @@ struct bfa_fcport_s {
struct bfa_mem_dma_s fcport_dma; struct bfa_mem_dma_s fcport_dma;
bfa_boolean_t stats_dma_ready; bfa_boolean_t stats_dma_ready;
struct bfa_bbcr_attr_s bbcr_attr; struct bfa_bbcr_attr_s bbcr_attr;
enum bfa_fec_state_s fec_state;
}; };
#define BFA_FCPORT_MOD(__bfa) (&(__bfa)->modules.fcport) #define BFA_FCPORT_MOD(__bfa) (&(__bfa)->modules.fcport)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment