bnx2x: Proper netdev->ndo_set_rx_mode() implementation.
Subsystems (2)
PATCH 1/1 bnx2x: Proper netdev->ndo_set_rx_mode() implementation.
Completed the bnx2x_set_rx_mode() to a proper netdev->ndo_set_rx_mode implementation:
- Added a missing configuration of a unicast MAC addresses list.
- Changed bp->dma_lock from being a mutex to a spinlock as long as it's taken
under netdev->addr_list_lock now.
Signed-off-by Vladislav Zolotarov <[email protected]>
Signed-off-by Eilon Greenstein <[email protected]>
--- drivers/net/bnx2x/bnx2x.h | 13 +- drivers/net/bnx2x/bnx2x_cmn.c | 17 +- drivers/net/bnx2x/bnx2x_main.c | 444 +++++++++++++++++++++++++++++++--------- 3 files changed, 369 insertions(+), 105 deletions(-)
drivers/net/bnx2x/bnx2x.h +11 -2
@@ -129,6 +129,7 @@ void bnx2x_panic_dump(struct bnx2x *bp);#endif #define bnx2x_mc_addr (ha) ((ha)->addr) +#define bnx2x_uc_addr (ha) ((ha)->addr)#define U64_LO (x) (u32)(((u64)(x)) & 0xffffffff)#define U64_HI (x) (u32)(((u64)(x)) >> 32)
@@ -810,6 +811,7 @@ struct bnx2x_slowpath {struct eth_stats_query fw_stats;struct mac_configuration_cmd mac_config;struct mac_configuration_cmd mcast_config; +struct mac_configuration_cmd uc_mac_config;struct client_init_ramrod_data client_init_data;/* used by dmae command executer */
@@ -939,7 +941,7 @@ struct bnx2x {struct eth_spe *spq_prod_bd;struct eth_spe *spq_last_bd;__le16 *dsb_sp_prod; -atomic_t spq_left;/* serialize spq */ +atomic_t cq_spq_left;/* ETH_XXX ramrods credit */ /* used to synchronize spq accesses */ spinlock_t spq_lock;
@@ -949,6 +951,7 @@ struct bnx2x {u16 eq_prod;u16 eq_cons;__le16 *eq_cons_sb; +atomic_t eq_spq_left;/* COMMON_XXX ramrods credit */ /* Flags for marking that there is a STAT_QUERY or SET_MAC ramrod pending */
@@ -1131,7 +1134,7 @@ struct bnx2x {int dmae_ready;/* used to synchronize dmae accesses */ -struct mutex dmae_mutex; +spinlock_t dmae_lock;/* used to protect the FW mail box */ struct mutex fw_mb_mutex;
@@ -1447,6 +1450,12 @@ u32 bnx2x_fw_command(struct bnx2x *bp, u32 command, u32 param);void bnx2x_calc_fc_adv (struct bnx2x *bp);int bnx2x_sp_post (struct bnx2x *bp,int command,int cid,u32 data_hi,u32 data_lo,int common); + +/* Clears multicast and unicast list configuration in the chip. */ +void bnx2x_invalidate_e1_mc_list (struct bnx2x *bp); +void bnx2x_invalidate_e1h_mc_list (struct bnx2x *bp); +void bnx2x_invalidate_uc_list (struct bnx2x *bp); +void bnx2x_update_coalesce (struct bnx2x *bp);int bnx2x_get_link_cfg_idx (struct bnx2x *bp);
drivers/net/bnx2x/bnx2x_cmn.c +12 -5
@@ -1427,28 +1427,35 @@ int bnx2x_nic_load(struct bnx2x *bp, int load_mode)bnx2x_set_eth_mac (bp,1 ); +/* Clear MC configuration */ +if (CHIP_IS_E1 (bp)) +bnx2x_invalidate_e1_mc_list (bp); +else +bnx2x_invalidate_e1h_mc_list (bp); + +/* Clear UC lists configuration */ +bnx2x_invalidate_uc_list (bp); +if (bp->port.pmf)bnx2x_initial_phy_init (bp, load_mode); +/* Initialize Rx filtering */ +bnx2x_set_rx_mode (bp->dev); +/* Start fast path */ switch (load_mode) {case LOAD_NORMAL :/* Tx queue should be only reenabled */ netif_tx_wake_all_queues (bp->dev);/* Initialize the receive filter. */ -bnx2x_set_rx_mode (bp->dev);break ;case LOAD_OPEN :netif_tx_start_all_queues (bp->dev);smp_mb__after_clear_bit (); -/* Initialize the receive filter. */ -bnx2x_set_rx_mode (bp->dev);break ;case LOAD_DIAG : -/* Initialize the receive filter. */ -bnx2x_set_rx_mode (bp->dev); bp->state =BNX2X_STATE_DIAG ;break ;
drivers/net/bnx2x/bnx2x_main.c +346 -98
644 lines not on this page · raw message
Signature · 1 line
1.7.0.4
From: "Vlad Zolotarov" <[email protected]>
Date: Sun, 6 Feb 2011 18:50:40 +0200
Quoted 8 lines
Completed the
bnx2x_set_rx_mode()to a propernetdev->ndo_set_rx_modeimplementation:
- Added a missing configuration of a unicast MAC addresses list.
- Changedbp->dma_lockfrom being a mutex to a spinlock as long as it's taken
undernetdev->addr_list_locknow.Signed-off-by Vladislav Zolotarov <[email protected]>Signed-off-by Eilon Greenstein <[email protected]>
Applied, thanks.