diff options
author | Mahesh Bandewar | 2011-05-13 15:08:49 +0000 |
---|---|---|
committer | David S. Miller | 2011-05-16 13:51:45 -0400 |
commit | 538dd2e3976a7c572ee927d6bbebe01bf4d6f128 (patch) | |
tree | f65529f5de1bf3c3edece04684311e78f2fcd8ab /drivers/net/bnx2x | |
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')
-rw-r--r-- | drivers/net/bnx2x/bnx2x_cmn.c | 16 | ||||
-rw-r--r-- | drivers/net/bnx2x/bnx2x_main.c | 3 |
2 files changed, 19 insertions, 0 deletions
diff --git a/drivers/net/bnx2x/bnx2x_cmn.c b/drivers/net/bnx2x/bnx2x_cmn.c index 6ee6601b5176..ca2bbc0e5d48 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) { struct bnx2x *bp = netdev_priv(dev); u32 flags = bp->flags; + bool bnx2x_reload = false; if (features & NETIF_F_LRO) flags |= TPA_ENABLE_FLAG; else flags &= ~TPA_ENABLE_FLAG; + if (features & NETIF_F_LOOPBACK) { + if (bp->link_params.loopback_mode != LOOPBACK_BMAC) { + bp->link_params.loopback_mode = LOOPBACK_BMAC; + bnx2x_reload = true; + } + } else { + if (bp->link_params.loopback_mode != LOOPBACK_NONE) { + bp->link_params.loopback_mode = LOOPBACK_NONE; + bnx2x_reload = true; + } + } + if (flags ^ bp->flags) { bp->flags = flags; + bnx2x_reload = true; + } + if (bnx2x_reload) { if (bp->recovery_state == BNX2X_RECOVERY_DONE) return bnx2x_reload_if_running(dev); /* else: bnx2x_nic_load() will be called at end of recovery */ diff --git a/drivers/net/bnx2x/bnx2x_main.c b/drivers/net/bnx2x/bnx2x_main.c index 2762edf956e9..f45c0caf3240 100644 --- a/drivers/net/bnx2x/bnx2x_main.c +++ b/drivers/net/bnx2x/bnx2x_main.c @@ -9273,6 +9273,9 @@ static int __devinit bnx2x_init_dev(struct pci_dev *pdev, if (bp->flags & USING_DAC_FLAG) dev->features |= NETIF_F_HIGHDMA; + /* Add Loopback capability to the device */ + dev->hw_features |= NETIF_F_LOOPBACK; + #ifdef BCM_DCBNL dev->dcbnl_ops = &bnx2x_dcbnl_ops; #endif |