bnx2: Allow user-specified multiple advertisement speed values.
authorMichael Chan <mchan@broadcom.com>
Mon, 15 Feb 2010 19:42:10 +0000 (19:42 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 16 Feb 2010 23:19:04 +0000 (15:19 -0800)
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>
drivers/net/bnx2.c

index dbe487f2915dddd51c1cb23252ad607c8dbb558e..d1e5e5d9e98677622ceb62ec8fed00e47d4d9c19 100644 (file)
@@ -6751,32 +6751,15 @@ bnx2_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
        if (cmd->autoneg == AUTONEG_ENABLE) {
                autoneg |= AUTONEG_SPEED;
 
-               cmd->advertising &= ETHTOOL_ALL_COPPER_SPEED;
-
-               /* allow advertising 1 speed */
-               if ((cmd->advertising == ADVERTISED_10baseT_Half) ||
-                       (cmd->advertising == ADVERTISED_10baseT_Full) ||
-                       (cmd->advertising == ADVERTISED_100baseT_Half) ||
-                       (cmd->advertising == ADVERTISED_100baseT_Full)) {
-
-                       if (cmd->port == PORT_FIBRE)
-                               goto err_out_unlock;
-
-                       advertising = cmd->advertising;
-
-               } else if (cmd->advertising == ADVERTISED_2500baseX_Full) {
-                       if (!(bp->phy_flags & BNX2_PHY_FLAG_2_5G_CAPABLE) ||
-                           (cmd->port == PORT_TP))
-                               goto err_out_unlock;
-               } else if (cmd->advertising == ADVERTISED_1000baseT_Full)
-                       advertising = cmd->advertising;
-               else if (cmd->advertising == ADVERTISED_1000baseT_Half)
-                       goto err_out_unlock;
-               else {
-                       if (cmd->port == PORT_FIBRE)
-                               advertising = ETHTOOL_ALL_FIBRE_SPEED;
-                       else
+               advertising = cmd->advertising;
+               if (cmd->port == PORT_TP) {
+                       advertising &= ETHTOOL_ALL_COPPER_SPEED;
+                       if (!advertising)
                                advertising = ETHTOOL_ALL_COPPER_SPEED;
+               } else {
+                       advertising &= ETHTOOL_ALL_FIBRE_SPEED;
+                       if (!advertising)
+                               advertising = ETHTOOL_ALL_FIBRE_SPEED;
                }
                advertising |= ADVERTISED_Autoneg;
        }