Commit 785b9b1a authored by Shmulik Ravid's avatar Shmulik Ravid Committed by David S. Miller

bnx2x: adding dcbnl support

Adding dcbnl implementation to bnx2x allowing users to manage the
embedded DCBX engine.

This patch is dependent on the following patches:
[net-next-2.6 PATCH 1/3] dcbnl: add support for ieee8021Qaz attributes
[net-next-2.6 PATCH 2/3] dcbnl: add appliction tlv handlers
[net-next-2.6 PATCH 3/3] net_dcb: add application notifiers
Signed-off-by: default avatarShmulik Ravid <shmulikr@broadcom.com>
Signed-off-by: default avatarEilon Greenstein <eilong@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ea45fe4e
...@@ -22,15 +22,17 @@ ...@@ -22,15 +22,17 @@
* (you will need to reboot afterwards) */ * (you will need to reboot afterwards) */
/* #define BNX2X_STOP_ON_ERROR */ /* #define BNX2X_STOP_ON_ERROR */
#define DRV_MODULE_VERSION "1.62.00-2" #define DRV_MODULE_VERSION "1.62.00-3"
#define DRV_MODULE_RELDATE "2010/12/13" #define DRV_MODULE_RELDATE "2010/12/21"
#define BNX2X_BC_VER 0x040200 #define BNX2X_BC_VER 0x040200
#define BNX2X_MULTI_QUEUE #define BNX2X_MULTI_QUEUE
#define BNX2X_NEW_NAPI #define BNX2X_NEW_NAPI
#if defined(CONFIG_DCB)
#define BCM_DCB
#endif
#if defined(CONFIG_CNIC) || defined(CONFIG_CNIC_MODULE) #if defined(CONFIG_CNIC) || defined(CONFIG_CNIC_MODULE)
#define BCM_CNIC 1 #define BCM_CNIC 1
#include "../cnic_if.h" #include "../cnic_if.h"
...@@ -1186,7 +1188,20 @@ struct bnx2x { ...@@ -1186,7 +1188,20 @@ struct bnx2x {
/* LLDP params */ /* LLDP params */
struct bnx2x_config_lldp_params lldp_config_params; struct bnx2x_config_lldp_params lldp_config_params;
/* DCBX params */ /* DCB support on/off */
u16 dcb_state;
#define BNX2X_DCB_STATE_OFF 0
#define BNX2X_DCB_STATE_ON 1
/* DCBX engine mode */
int dcbx_enabled;
#define BNX2X_DCBX_ENABLED_OFF 0
#define BNX2X_DCBX_ENABLED_ON_NEG_OFF 1
#define BNX2X_DCBX_ENABLED_ON_NEG_ON 2
#define BNX2X_DCBX_ENABLED_INVALID (-1)
bool dcbx_mode_uset;
struct bnx2x_config_dcbx_params dcbx_config_params; struct bnx2x_config_dcbx_params dcbx_config_params;
struct bnx2x_dcbx_port_params dcbx_port_params; struct bnx2x_dcbx_port_params dcbx_port_params;
......
This diff is collapsed.
...@@ -51,7 +51,6 @@ struct bnx2x_dcbx_pfc_params { ...@@ -51,7 +51,6 @@ struct bnx2x_dcbx_pfc_params {
}; };
struct bnx2x_dcbx_port_params { struct bnx2x_dcbx_port_params {
u32 dcbx_enabled;
struct bnx2x_dcbx_pfc_params pfc; struct bnx2x_dcbx_pfc_params pfc;
struct bnx2x_dcbx_pg_params ets; struct bnx2x_dcbx_pg_params ets;
struct bnx2x_dcbx_app_params app; struct bnx2x_dcbx_app_params app;
...@@ -88,8 +87,6 @@ struct bnx2x_admin_priority_app_table { ...@@ -88,8 +87,6 @@ struct bnx2x_admin_priority_app_table {
* DCBX protocol configuration parameters. * DCBX protocol configuration parameters.
******************************************************************************/ ******************************************************************************/
struct bnx2x_config_dcbx_params { struct bnx2x_config_dcbx_params {
u32 dcb_enable;
u32 admin_dcbx_enable;
u32 overwrite_settings; u32 overwrite_settings;
u32 admin_dcbx_version; u32 admin_dcbx_version;
u32 admin_ets_enable; u32 admin_ets_enable;
...@@ -182,6 +179,7 @@ struct bnx2x; ...@@ -182,6 +179,7 @@ struct bnx2x;
void bnx2x_dcb_init_intmem_pfc(struct bnx2x *bp); void bnx2x_dcb_init_intmem_pfc(struct bnx2x *bp);
void bnx2x_dcbx_update(struct work_struct *work); void bnx2x_dcbx_update(struct work_struct *work);
void bnx2x_dcbx_init_params(struct bnx2x *bp); void bnx2x_dcbx_init_params(struct bnx2x *bp);
void bnx2x_dcbx_set_state(struct bnx2x *bp, bool dcb_on, u32 dcbx_enabled);
enum { enum {
BNX2X_DCBX_STATE_NEG_RECEIVED = 0x1, BNX2X_DCBX_STATE_NEG_RECEIVED = 0x1,
...@@ -190,4 +188,9 @@ enum { ...@@ -190,4 +188,9 @@ enum {
}; };
void bnx2x_dcbx_set_params(struct bnx2x *bp, u32 state); void bnx2x_dcbx_set_params(struct bnx2x *bp, u32 state);
/* DCB netlink */
#ifdef BCM_DCB
extern const struct dcbnl_rtnl_ops bnx2x_dcbnl_ops;
#endif /* BCM_DCB */
#endif /* BNX2X_DCB_H */ #endif /* BNX2X_DCB_H */
...@@ -3107,7 +3107,8 @@ static inline void bnx2x_attn_int_deasserted3(struct bnx2x *bp, u32 attn) ...@@ -3107,7 +3107,8 @@ static inline void bnx2x_attn_int_deasserted3(struct bnx2x *bp, u32 attn)
bnx2x_pmf_update(bp); bnx2x_pmf_update(bp);
if (bp->port.pmf && if (bp->port.pmf &&
(val & DRV_STATUS_DCBX_NEGOTIATION_RESULTS)) (val & DRV_STATUS_DCBX_NEGOTIATION_RESULTS) &&
bp->dcbx_enabled > 0)
/* start dcbx state machine */ /* start dcbx state machine */
bnx2x_dcbx_set_params(bp, bnx2x_dcbx_set_params(bp,
BNX2X_DCBX_STATE_NEG_RECEIVED); BNX2X_DCBX_STATE_NEG_RECEIVED);
...@@ -8795,6 +8796,7 @@ static int __devinit bnx2x_init_bp(struct bnx2x *bp) ...@@ -8795,6 +8796,7 @@ static int __devinit bnx2x_init_bp(struct bnx2x *bp)
bp->timer.data = (unsigned long) bp; bp->timer.data = (unsigned long) bp;
bp->timer.function = bnx2x_timer; bp->timer.function = bnx2x_timer;
bnx2x_dcbx_set_state(bp, true, BNX2X_DCBX_ENABLED_ON_NEG_ON);
bnx2x_dcbx_init_params(bp); bnx2x_dcbx_init_params(bp);
return rc; return rc;
...@@ -9146,6 +9148,10 @@ static int __devinit bnx2x_init_dev(struct pci_dev *pdev, ...@@ -9146,6 +9148,10 @@ static int __devinit bnx2x_init_dev(struct pci_dev *pdev,
dev->vlan_features |= (NETIF_F_TSO | NETIF_F_TSO_ECN); dev->vlan_features |= (NETIF_F_TSO | NETIF_F_TSO_ECN);
dev->vlan_features |= NETIF_F_TSO6; dev->vlan_features |= NETIF_F_TSO6;
#ifdef BCM_DCB
dev->dcbnl_ops = &bnx2x_dcbnl_ops;
#endif
/* get_port_hwinfo() will set prtad and mmds properly */ /* get_port_hwinfo() will set prtad and mmds properly */
bp->mdio.prtad = MDIO_PRTAD_NONE; bp->mdio.prtad = MDIO_PRTAD_NONE;
bp->mdio.mmds = 0; bp->mdio.mmds = 0;
......
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