aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Chan <mchan@broadcom.com>2010-02-15 14:42:10 -0500
committerDavid S. Miller <davem@davemloft.net>2010-02-16 18:19:04 -0500
commitbeb499afe3c9c006bb2d66ceaff0f354d0405ff4 (patch)
tree466ad188870ef4a212e0c3116071c6e1dc363edf
parent5726026bfffa13e9b1098d7bc177618cbbaa9388 (diff)
bnx2: Allow user-specified multiple advertisement speed values.
Remove unnecessary code that works around older versions of ethtool that can pass down invalid advertisement speed values. This old code prevents the user from specifying multiple advertisement values. The new code uses simple masking to mask out invalid advertisment bits. Reported-by: Vlad Yasevich <vladislav.yasevich@hp.com> Signed-off-by: Michael Chan <mchan@broadcom.com> Signed-off-by: Benjamin Li <benli@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/bnx2.c33
1 files changed, 8 insertions, 25 deletions
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index dbe487f2915d..d1e5e5d9e986 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -6751,32 +6751,15 @@ bnx2_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
6751 if (cmd->autoneg == AUTONEG_ENABLE) { 6751 if (cmd->autoneg == AUTONEG_ENABLE) {
6752 autoneg |= AUTONEG_SPEED; 6752 autoneg |= AUTONEG_SPEED;
6753 6753
6754 cmd->advertising &= ETHTOOL_ALL_COPPER_SPEED; 6754 advertising = cmd->advertising;
6755 6755 if (cmd->port == PORT_TP) {
6756 /* allow advertising 1 speed */ 6756 advertising &= ETHTOOL_ALL_COPPER_SPEED;
6757 if ((cmd->advertising == ADVERTISED_10baseT_Half) || 6757 if (!advertising)
6758 (cmd->advertising == ADVERTISED_10baseT_Full) ||
6759 (cmd->advertising == ADVERTISED_100baseT_Half) ||
6760 (cmd->advertising == ADVERTISED_100baseT_Full)) {
6761
6762 if (cmd->port == PORT_FIBRE)
6763 goto err_out_unlock;
6764
6765 advertising = cmd->advertising;
6766
6767 } else if (cmd->advertising == ADVERTISED_2500baseX_Full) {
6768 if (!(bp->phy_flags & BNX2_PHY_FLAG_2_5G_CAPABLE) ||
6769 (cmd->port == PORT_TP))
6770 goto err_out_unlock;
6771 } else if (cmd->advertising == ADVERTISED_1000baseT_Full)
6772 advertising = cmd->advertising;
6773 else if (cmd->advertising == ADVERTISED_1000baseT_Half)
6774 goto err_out_unlock;
6775 else {
6776 if (cmd->port == PORT_FIBRE)
6777 advertising = ETHTOOL_ALL_FIBRE_SPEED;
6778 else
6779 advertising = ETHTOOL_ALL_COPPER_SPEED; 6758 advertising = ETHTOOL_ALL_COPPER_SPEED;
6759 } else {
6760 advertising &= ETHTOOL_ALL_FIBRE_SPEED;
6761 if (!advertising)
6762 advertising = ETHTOOL_ALL_FIBRE_SPEED;
6780 } 6763 }
6781 advertising |= ADVERTISED_Autoneg; 6764 advertising |= ADVERTISED_Autoneg;
6782 } 6765 }