bnx2: convert to set_phys_id
authorstephen hemminger <shemminger@vyatta.com>
Mon, 4 Apr 2011 11:06:36 +0000 (11:06 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 6 Apr 2011 21:35:21 +0000 (14:35 -0700)
In this case, need to add element to device private to hold
original led state.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/bnx2.c
drivers/net/bnx2.h

index 8e6d618..05ddfb1 100644 (file)
@@ -7495,41 +7495,39 @@ bnx2_get_ethtool_stats(struct net_device *dev,
 }
 
 static int
-bnx2_phys_id(struct net_device *dev, u32 data)
+bnx2_set_phys_id(struct net_device *dev, enum ethtool_phys_id_state state)
 {
        struct bnx2 *bp = netdev_priv(dev);
-       int i;
-       u32 save;
 
-       bnx2_set_power_state(bp, PCI_D0);
+       switch (state) {
+       case ETHTOOL_ID_ACTIVE:
+               bnx2_set_power_state(bp, PCI_D0);
 
-       if (data == 0)
-               data = 2;
+               bp->leds_save = REG_RD(bp, BNX2_MISC_CFG);
+               REG_WR(bp, BNX2_MISC_CFG, BNX2_MISC_CFG_LEDMODE_MAC);
+               return -EINVAL;
 
-       save = REG_RD(bp, BNX2_MISC_CFG);
-       REG_WR(bp, BNX2_MISC_CFG, BNX2_MISC_CFG_LEDMODE_MAC);
+       case ETHTOOL_ID_ON:
+               REG_WR(bp, BNX2_EMAC_LED, BNX2_EMAC_LED_OVERRIDE |
+                      BNX2_EMAC_LED_1000MB_OVERRIDE |
+                      BNX2_EMAC_LED_100MB_OVERRIDE |
+                      BNX2_EMAC_LED_10MB_OVERRIDE |
+                      BNX2_EMAC_LED_TRAFFIC_OVERRIDE |
+                      BNX2_EMAC_LED_TRAFFIC);
+               break;
 
-       for (i = 0; i < (data * 2); i++) {
-               if ((i % 2) == 0) {
-                       REG_WR(bp, BNX2_EMAC_LED, BNX2_EMAC_LED_OVERRIDE);
-               }
-               else {
-                       REG_WR(bp, BNX2_EMAC_LED, BNX2_EMAC_LED_OVERRIDE |
-                               BNX2_EMAC_LED_1000MB_OVERRIDE |
-                               BNX2_EMAC_LED_100MB_OVERRIDE |
-                               BNX2_EMAC_LED_10MB_OVERRIDE |
-                               BNX2_EMAC_LED_TRAFFIC_OVERRIDE |
-                               BNX2_EMAC_LED_TRAFFIC);
-               }
-               msleep_interruptible(500);
-               if (signal_pending(current))
-                       break;
-       }
-       REG_WR(bp, BNX2_EMAC_LED, 0);
-       REG_WR(bp, BNX2_MISC_CFG, save);
+       case ETHTOOL_ID_OFF:
+               REG_WR(bp, BNX2_EMAC_LED, BNX2_EMAC_LED_OVERRIDE);
+               break;
 
-       if (!netif_running(dev))
-               bnx2_set_power_state(bp, PCI_D3hot);
+       case ETHTOOL_ID_INACTIVE:
+               REG_WR(bp, BNX2_EMAC_LED, 0);
+               REG_WR(bp, BNX2_MISC_CFG, bp->leds_save);
+
+               if (!netif_running(dev))
+                       bnx2_set_power_state(bp, PCI_D3hot);
+               break;
+       }
 
        return 0;
 }
@@ -7602,7 +7600,7 @@ static const struct ethtool_ops bnx2_ethtool_ops = {
        .set_tso                = bnx2_set_tso,
        .self_test              = bnx2_self_test,
        .get_strings            = bnx2_get_strings,
-       .phys_id                = bnx2_phys_id,
+       .set_phys_id            = bnx2_set_phys_id,
        .get_ethtool_stats      = bnx2_get_ethtool_stats,
        .get_sset_count         = bnx2_get_sset_count,
        .set_flags              = bnx2_set_flags,
index 6802045..91e8356 100644 (file)
@@ -6922,6 +6922,7 @@ struct bnx2 {
        u8                      num_tx_rings;
        u8                      num_rx_rings;
 
+       u32                     leds_save;
        u32                     idle_chk_status_idx;
 
 #ifdef BCM_CNIC