bnx2x: convert to set_phys_id
authorstephen hemminger <shemminger@vyatta.com>
Mon, 4 Apr 2011 11:06:37 +0000 (11:06 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 6 Apr 2011 21:35:21 +0000 (14:35 -0700)
Also cleanup error codes to no lie about things that driver doesn't
support. If device is down report -EAGAIN (same as Broadcom), and
if port doesn't blink then error as well.

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

index f505015..1479994 100644 (file)
@@ -2097,36 +2097,38 @@ static void bnx2x_get_ethtool_stats(struct net_device *dev,
        }
 }
 
-static int bnx2x_phys_id(struct net_device *dev, u32 data)
+static int bnx2x_set_phys_id(struct net_device *dev,
+                            enum ethtool_phys_id_state state)
 {
        struct bnx2x *bp = netdev_priv(dev);
-       int i;
 
        if (!netif_running(dev))
-               return 0;
+               return -EAGAIN;
 
        if (!bp->port.pmf)
-               return 0;
+               return -EOPNOTSUPP;
 
-       if (data == 0)
-               data = 2;
+       switch (state) {
+       case ETHTOOL_ID_ACTIVE:
+               return -EINVAL;
 
-       for (i = 0; i < (data * 2); i++) {
-               if ((i % 2) == 0)
-                       bnx2x_set_led(&bp->link_params, &bp->link_vars,
-                                     LED_MODE_OPER, SPEED_1000);
-               else
-                       bnx2x_set_led(&bp->link_params, &bp->link_vars,
-                                     LED_MODE_OFF, 0);
+       case ETHTOOL_ID_ON:
+               bnx2x_set_led(&bp->link_params, &bp->link_vars,
+                             LED_MODE_OPER, SPEED_1000);
+               break;
 
-               msleep_interruptible(500);
-               if (signal_pending(current))
-                       break;
-       }
+       case ETHTOOL_ID_OFF:
+               bnx2x_set_led(&bp->link_params, &bp->link_vars,
+                             LED_MODE_OFF, 0);
 
-       if (bp->link_vars.link_up)
-               bnx2x_set_led(&bp->link_params, &bp->link_vars, LED_MODE_OPER,
-                             bp->link_vars.line_speed);
+               break;
+
+       case ETHTOOL_ID_INACTIVE:
+               if (bp->link_vars.link_up)
+                       bnx2x_set_led(&bp->link_params, &bp->link_vars,
+                                     LED_MODE_OPER,
+                                     bp->link_vars.line_speed);
+       }
 
        return 0;
 }
@@ -2218,7 +2220,7 @@ static const struct ethtool_ops bnx2x_ethtool_ops = {
        .self_test              = bnx2x_self_test,
        .get_sset_count         = bnx2x_get_sset_count,
        .get_strings            = bnx2x_get_strings,
-       .phys_id                = bnx2x_phys_id,
+       .set_phys_id            = bnx2x_set_phys_id,
        .get_ethtool_stats      = bnx2x_get_ethtool_stats,
        .get_rxnfc              = bnx2x_get_rxnfc,
        .get_rxfh_indir         = bnx2x_get_rxfh_indir,