diff options
author | Mahesh Bandewar <maheshb@google.com> | 2011-05-13 11:08:49 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-05-16 13:51:45 -0400 |
commit | 538dd2e3976a7c572ee927d6bbebe01bf4d6f128 (patch) | |
tree | f65529f5de1bf3c3edece04684311e78f2fcd8ab /drivers/net/bnx2x/bnx2x_cmn.c | |
parent | c5be24ff62d238a3fdd5d15461b420cd72e78a14 (diff) |
bnx2x: Allow ethtool to enable/disable loopback.
This patch updates the bnx2x_set_features() to handle loopback mode.
When enabled; it sets internal-MAC loopback.
Signed-off-by: Mahesh Bandewar <maheshb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bnx2x/bnx2x_cmn.c')
-rw-r--r-- | drivers/net/bnx2x/bnx2x_cmn.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/net/bnx2x/bnx2x_cmn.c b/drivers/net/bnx2x/bnx2x_cmn.c index 6ee6601b517..ca2bbc0e5d4 100644 --- a/drivers/net/bnx2x/bnx2x_cmn.c +++ b/drivers/net/bnx2x/bnx2x_cmn.c | |||
@@ -2840,15 +2840,31 @@ int bnx2x_set_features(struct net_device *dev, u32 features) | |||
2840 | { | 2840 | { |
2841 | struct bnx2x *bp = netdev_priv(dev); | 2841 | struct bnx2x *bp = netdev_priv(dev); |
2842 | u32 flags = bp->flags; | 2842 | u32 flags = bp->flags; |
2843 | bool bnx2x_reload = false; | ||
2843 | 2844 | ||
2844 | if (features & NETIF_F_LRO) | 2845 | if (features & NETIF_F_LRO) |
2845 | flags |= TPA_ENABLE_FLAG; | 2846 | flags |= TPA_ENABLE_FLAG; |
2846 | else | 2847 | else |
2847 | flags &= ~TPA_ENABLE_FLAG; | 2848 | flags &= ~TPA_ENABLE_FLAG; |
2848 | 2849 | ||
2850 | if (features & NETIF_F_LOOPBACK) { | ||
2851 | if (bp->link_params.loopback_mode != LOOPBACK_BMAC) { | ||
2852 | bp->link_params.loopback_mode = LOOPBACK_BMAC; | ||
2853 | bnx2x_reload = true; | ||
2854 | } | ||
2855 | } else { | ||
2856 | if (bp->link_params.loopback_mode != LOOPBACK_NONE) { | ||
2857 | bp->link_params.loopback_mode = LOOPBACK_NONE; | ||
2858 | bnx2x_reload = true; | ||
2859 | } | ||
2860 | } | ||
2861 | |||
2849 | if (flags ^ bp->flags) { | 2862 | if (flags ^ bp->flags) { |
2850 | bp->flags = flags; | 2863 | bp->flags = flags; |
2864 | bnx2x_reload = true; | ||
2865 | } | ||
2851 | 2866 | ||
2867 | if (bnx2x_reload) { | ||
2852 | if (bp->recovery_state == BNX2X_RECOVERY_DONE) | 2868 | if (bp->recovery_state == BNX2X_RECOVERY_DONE) |
2853 | return bnx2x_reload_if_running(dev); | 2869 | return bnx2x_reload_if_running(dev); |
2854 | /* else: bnx2x_nic_load() will be called at end of recovery */ | 2870 | /* else: bnx2x_nic_load() will be called at end of recovery */ |