[BNX2]: Add bnx2_set_default_link().
authorMichael Chan <mchan@broadcom.com>
Sun, 8 Jul 2007 05:48:00 +0000 (22:48 -0700)
committerDavid S. Miller <davem@sunset.davemloft.net>
Wed, 11 Jul 2007 05:18:30 +0000 (22:18 -0700)
Put existing code to setup the default link settings in this new
function.  This makes it easier to support the remote PHY feature in
the next few patches.

Also change ETHTOOL_ALL_FIBRE_SPEED to include 2500Mbps if supported.

Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/bnx2.c

index 0f4f76fda26fbd79a264d9081a5e5125fcdd2d1e..56bc41ee9a4703998360a204405a03c16ddf7c3d 100644 (file)
@@ -1323,7 +1323,9 @@ bnx2_setup_serdes_phy(struct bnx2 *bp)
 }
 
 #define ETHTOOL_ALL_FIBRE_SPEED                                                \
-       (ADVERTISED_1000baseT_Full)
+       (bp->phy_flags & PHY_2_5G_CAPABLE_FLAG) ?                       \
+               (ADVERTISED_2500baseX_Full | ADVERTISED_1000baseT_Full) :\
+               (ADVERTISED_1000baseT_Full)
 
 #define ETHTOOL_ALL_COPPER_SPEED                                       \
        (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full |            \
@@ -1335,6 +1337,27 @@ bnx2_setup_serdes_phy(struct bnx2 *bp)
 
 #define PHY_ALL_1000_SPEED (ADVERTISE_1000HALF | ADVERTISE_1000FULL)
 
+static void
+bnx2_set_default_link(struct bnx2 *bp)
+{
+       bp->autoneg = AUTONEG_SPEED | AUTONEG_FLOW_CTRL;
+       bp->req_line_speed = 0;
+       if (bp->phy_flags & PHY_SERDES_FLAG) {
+               u32 reg;
+
+               bp->advertising = ETHTOOL_ALL_FIBRE_SPEED | ADVERTISED_Autoneg;
+
+               reg = REG_RD_IND(bp, bp->shmem_base + BNX2_PORT_HW_CFG_CONFIG);
+               reg &= BNX2_PORT_HW_CFG_CFG_DFLT_LINK_MASK;
+               if (reg == BNX2_PORT_HW_CFG_CFG_DFLT_LINK_1G) {
+                       bp->autoneg = 0;
+                       bp->req_line_speed = bp->line_speed = SPEED_1000;
+                       bp->req_duplex = DUPLEX_FULL;
+               }
+       } else
+               bp->advertising = ETHTOOL_ALL_COPPER_SPEED | ADVERTISED_Autoneg;
+}
+
 static int
 bnx2_setup_copper_phy(struct bnx2 *bp)
 {
@@ -6374,23 +6397,7 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
                }
        }
 
-       bp->autoneg = AUTONEG_SPEED | AUTONEG_FLOW_CTRL;
-       bp->req_line_speed = 0;
-       if (bp->phy_flags & PHY_SERDES_FLAG) {
-               bp->advertising = ETHTOOL_ALL_FIBRE_SPEED | ADVERTISED_Autoneg;
-
-               reg = REG_RD_IND(bp, bp->shmem_base + BNX2_PORT_HW_CFG_CONFIG);
-               reg &= BNX2_PORT_HW_CFG_CFG_DFLT_LINK_MASK;
-               if (reg == BNX2_PORT_HW_CFG_CFG_DFLT_LINK_1G) {
-                       bp->autoneg = 0;
-                       bp->req_line_speed = bp->line_speed = SPEED_1000;
-                       bp->req_duplex = DUPLEX_FULL;
-               }
-       }
-       else {
-               bp->advertising = ETHTOOL_ALL_COPPER_SPEED | ADVERTISED_Autoneg;
-       }
-
+       bnx2_set_default_link(bp);
        bp->req_flow_ctrl = FLOW_CTRL_RX | FLOW_CTRL_TX;
 
        init_timer(&bp->timer);