Commit 66e6961c authored by Emil Tantilov's avatar Emil Tantilov Committed by Jeff Kirsher

ixgbe: convert to ethtool set_phys_id

Based on the original patch submitted by Stephen Hemminger.

This patch makes the following changes:
- Change ETHTOOL_ID_INACTIVE return value to 2 (blinks/sec)
- Fix restoring of IXGBE_LEDCTL

CC: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: default avatarEmil Tantilov <emil.s.tantilov@intel.com>
Tested-by: default avatarEvan Swanson <evan.swanson@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent e7fd9253
...@@ -461,6 +461,7 @@ struct ixgbe_adapter { ...@@ -461,6 +461,7 @@ struct ixgbe_adapter {
u16 eeprom_version; u16 eeprom_version;
int node; int node;
u32 led_reg;
struct work_struct check_overtemp_task; struct work_struct check_overtemp_task;
u32 interrupt_event; u32 interrupt_event;
char lsc_int_name[IFNAMSIZ + 9]; char lsc_int_name[IFNAMSIZ + 9];
......
...@@ -2003,25 +2003,30 @@ static int ixgbe_nway_reset(struct net_device *netdev) ...@@ -2003,25 +2003,30 @@ static int ixgbe_nway_reset(struct net_device *netdev)
return 0; return 0;
} }
static int ixgbe_phys_id(struct net_device *netdev, u32 data) static int ixgbe_set_phys_id(struct net_device *netdev,
enum ethtool_phys_id_state state)
{ {
struct ixgbe_adapter *adapter = netdev_priv(netdev); struct ixgbe_adapter *adapter = netdev_priv(netdev);
struct ixgbe_hw *hw = &adapter->hw; struct ixgbe_hw *hw = &adapter->hw;
u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
u32 i;
if (!data || data > 300) switch (state) {
data = 300; case ETHTOOL_ID_ACTIVE:
adapter->led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
return 2;
for (i = 0; i < (data * 1000); i += 400) { case ETHTOOL_ID_ON:
hw->mac.ops.led_on(hw, IXGBE_LED_ON); hw->mac.ops.led_on(hw, IXGBE_LED_ON);
msleep_interruptible(200); break;
case ETHTOOL_ID_OFF:
hw->mac.ops.led_off(hw, IXGBE_LED_ON); hw->mac.ops.led_off(hw, IXGBE_LED_ON);
msleep_interruptible(200); break;
}
/* Restore LED settings */ case ETHTOOL_ID_INACTIVE:
IXGBE_WRITE_REG(&adapter->hw, IXGBE_LEDCTL, led_reg); /* Restore LED settings */
IXGBE_WRITE_REG(&adapter->hw, IXGBE_LEDCTL, adapter->led_reg);
break;
}
return 0; return 0;
} }
...@@ -2469,7 +2474,7 @@ static const struct ethtool_ops ixgbe_ethtool_ops = { ...@@ -2469,7 +2474,7 @@ static const struct ethtool_ops ixgbe_ethtool_ops = {
.set_tso = ixgbe_set_tso, .set_tso = ixgbe_set_tso,
.self_test = ixgbe_diag_test, .self_test = ixgbe_diag_test,
.get_strings = ixgbe_get_strings, .get_strings = ixgbe_get_strings,
.phys_id = ixgbe_phys_id, .set_phys_id = ixgbe_set_phys_id,
.get_sset_count = ixgbe_get_sset_count, .get_sset_count = ixgbe_get_sset_count,
.get_ethtool_stats = ixgbe_get_ethtool_stats, .get_ethtool_stats = ixgbe_get_ethtool_stats,
.get_coalesce = ixgbe_get_coalesce, .get_coalesce = ixgbe_get_coalesce,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment