diff mbox

[net-next-2.6,04/24] e1000: convert to set_phys_id

Message ID 1302742940-22141-5-git-send-email-jeffrey.t.kirsher@intel.com
State Changes Requested, archived
Delegated to: David Miller
Headers show

Commit Message

Kirsher, Jeffrey T April 14, 2011, 1:02 a.m. UTC
From: stephen hemminger <shemminger@vyatta.com>

Convert to new LED control infrastucture and remove no longer
necessary bits.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
 drivers/net/e1000/e1000.h         |    3 --
 drivers/net/e1000/e1000_ethtool.c |   50 ++++++++++++-------------------------
 2 files changed, 16 insertions(+), 37 deletions(-)

Comments

Allan, Bruce W April 14, 2011, 1:12 a.m. UTC | #1
>-----Original Message-----
>From: netdev-owner@vger.kernel.org [mailto:netdev-owner@vger.kernel.org] On
>Behalf Of Jeff Kirsher
>Sent: Wednesday, April 13, 2011 6:02 PM
>To: davem@davemloft.net
>Cc: stephen hemminger; netdev@vger.kernel.org; gospo@redhat.com;
>bphilips@novell.com; Kirsher, Jeffrey T
>Subject: [net-next-2.6 04/24] e1000: convert to set_phys_id
>
>From: stephen hemminger <shemminger@vyatta.com>
>
>Convert to new LED control infrastucture and remove no longer
>necessary bits.
>
>Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
>Tested-by: Aaron Brown <aaron.f.brown@intel.com>
>Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
>---
> drivers/net/e1000/e1000.h         |    3 --
> drivers/net/e1000/e1000_ethtool.c |   50 ++++++++++++-------------------------
> 2 files changed, 16 insertions(+), 37 deletions(-)
>
>diff --git a/drivers/net/e1000/e1000.h b/drivers/net/e1000/e1000.h
>index a881dd0..f96475c 100644
>--- a/drivers/net/e1000/e1000.h
>+++ b/drivers/net/e1000/e1000.h
>@@ -238,9 +238,6 @@ struct e1000_adapter {
> 	struct work_struct reset_task;
> 	u8 fc_autoneg;
>
>-	struct timer_list blink_timer;
>-	unsigned long led_status;
>-
> 	/* TX */
> 	struct e1000_tx_ring *tx_ring;      /* One per active queue */
> 	unsigned int restart_queue;
>diff --git a/drivers/net/e1000/e1000_ethtool.c
>b/drivers/net/e1000/e1000_ethtool.c
>index dd70738..5c998a9 100644
>--- a/drivers/net/e1000/e1000_ethtool.c
>+++ b/drivers/net/e1000/e1000_ethtool.c
>@@ -1753,46 +1753,28 @@ static int e1000_set_wol(struct net_device *netdev,
>struct ethtool_wolinfo *wol)
> 	return 0;
> }
>
>-/* toggle LED 4 times per second = 2 "blinks" per second */
>-#define E1000_ID_INTERVAL	(HZ/4)
>-
>-/* bit defines for adapter->led_status */
>-#define E1000_LED_ON		0
>-
>-static void e1000_led_blink_callback(unsigned long data)
>+static int e1000_set_phys_id(struct net_device *netdev,
>+			     enum ethtool_phys_id_state state)
> {
>-	struct e1000_adapter *adapter = (struct e1000_adapter *) data;
>+	struct e1000_adapter *adapter = netdev_priv(netdev);
> 	struct e1000_hw *hw = &adapter->hw;
>
>-	if (test_and_change_bit(E1000_LED_ON, &adapter->led_status))
>-		e1000_led_off(hw);
>-	else
>-		e1000_led_on(hw);
>-
>-	mod_timer(&adapter->blink_timer, jiffies + E1000_ID_INTERVAL);
>-}
>+	switch (state) {
>+	case ETHTOOL_ID_ACTIVE:
>+		e1000_setup_led(hw);
>+		return -EINVAL;

This conflicts with the patch I submitted a few hours ago - with it, this
feature is broken for e1000.

>
>-static int e1000_phys_id(struct net_device *netdev, u32 data)
>-{
>-	struct e1000_adapter *adapter = netdev_priv(netdev);
>-	struct e1000_hw *hw = &adapter->hw;
>+	case ETHTOOL_ID_ON:
>+		e1000_led_on(hw);
>+		break;
>
>-	if (!data)
>-		data = INT_MAX;
>+	case ETHTOOL_ID_OFF:
>+		e1000_led_off(hw);
>+		break;
>
>-	if (!adapter->blink_timer.function) {
>-		init_timer(&adapter->blink_timer);
>-		adapter->blink_timer.function = e1000_led_blink_callback;
>-		adapter->blink_timer.data = (unsigned long)adapter;
>+	case ETHTOOL_ID_INACTIVE:
>+		e1000_cleanup_led(hw);
> 	}
>-	e1000_setup_led(hw);
>-	mod_timer(&adapter->blink_timer, jiffies);
>-	msleep_interruptible(data * 1000);
>-	del_timer_sync(&adapter->blink_timer);
>-
>-	e1000_led_off(hw);
>-	clear_bit(E1000_LED_ON, &adapter->led_status);
>-	e1000_cleanup_led(hw);
>
> 	return 0;
> }
>@@ -1929,7 +1911,7 @@ static const struct ethtool_ops e1000_ethtool_ops = {
> 	.set_tso                = e1000_set_tso,
> 	.self_test              = e1000_diag_test,
> 	.get_strings            = e1000_get_strings,
>-	.phys_id                = e1000_phys_id,
>+	.set_phys_id            = e1000_set_phys_id,
> 	.get_ethtool_stats      = e1000_get_ethtool_stats,
> 	.get_sset_count         = e1000_get_sset_count,
> 	.get_coalesce           = e1000_get_coalesce,
>--
>1.7.4.2
>
>--
>To unsubscribe from this list: send the line "unsubscribe netdev" in
>the body of a message to majordomo@vger.kernel.org
>More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Kirsher, Jeffrey T April 14, 2011, 1:18 a.m. UTC | #2
On Wed, 2011-04-13 at 18:12 -0700, Allan, Bruce W wrote:
> >-----Original Message-----
> >From:
> netdev-owner@vger.kernel.org [mailto:netdev-owner@vger.kernel.org] On
> >Behalf Of Jeff Kirsher
> >Sent: Wednesday, April 13, 2011 6:02 PM
> >To: davem@davemloft.net
> >Cc: stephen hemminger; netdev@vger.kernel.org; gospo@redhat.com;
> >bphilips@novell.com; Kirsher, Jeffrey T
> >Subject: [net-next-2.6 04/24] e1000: convert to set_phys_id
> >
> >From: stephen hemminger <shemminger@vyatta.com>
> >
> >Convert to new LED control infrastucture and remove no longer
> >necessary bits.
> >
> >Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
> >Tested-by: Aaron Brown <aaron.f.brown@intel.com>
> >Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
> >---
> > drivers/net/e1000/e1000.h         |    3 --
> > drivers/net/e1000/e1000_ethtool.c |   50
> ++++++++++++-------------------------
> > 2 files changed, 16 insertions(+), 37 deletions(-)
> >
> >diff --git a/drivers/net/e1000/e1000.h b/drivers/net/e1000/e1000.h
> >index a881dd0..f96475c 100644
> >--- a/drivers/net/e1000/e1000.h
> >+++ b/drivers/net/e1000/e1000.h
> >@@ -238,9 +238,6 @@ struct e1000_adapter {
> >       struct work_struct reset_task;
> >       u8 fc_autoneg;
> >
> >-      struct timer_list blink_timer;
> >-      unsigned long led_status;
> >-
> >       /* TX */
> >       struct e1000_tx_ring *tx_ring;      /* One per active queue */
> >       unsigned int restart_queue;
> >diff --git a/drivers/net/e1000/e1000_ethtool.c
> >b/drivers/net/e1000/e1000_ethtool.c
> >index dd70738..5c998a9 100644
> >--- a/drivers/net/e1000/e1000_ethtool.c
> >+++ b/drivers/net/e1000/e1000_ethtool.c
> >@@ -1753,46 +1753,28 @@ static int e1000_set_wol(struct net_device
> *netdev,
> >struct ethtool_wolinfo *wol)
> >       return 0;
> > }
> >
> >-/* toggle LED 4 times per second = 2 "blinks" per second */
> >-#define E1000_ID_INTERVAL     (HZ/4)
> >-
> >-/* bit defines for adapter->led_status */
> >-#define E1000_LED_ON          0
> >-
> >-static void e1000_led_blink_callback(unsigned long data)
> >+static int e1000_set_phys_id(struct net_device *netdev,
> >+                           enum ethtool_phys_id_state state)
> > {
> >-      struct e1000_adapter *adapter = (struct e1000_adapter *) data;
> >+      struct e1000_adapter *adapter = netdev_priv(netdev);
> >       struct e1000_hw *hw = &adapter->hw;
> >
> >-      if (test_and_change_bit(E1000_LED_ON, &adapter->led_status))
> >-              e1000_led_off(hw);
> >-      else
> >-              e1000_led_on(hw);
> >-
> >-      mod_timer(&adapter->blink_timer, jiffies + E1000_ID_INTERVAL);
> >-}
> >+      switch (state) {
> >+      case ETHTOOL_ID_ACTIVE:
> >+              e1000_setup_led(hw);
> >+              return -EINVAL;
> 
> This conflicts with the patch I submitted a few hours ago - with it,
> this
> feature is broken for e1000.

Dave - I will remove this patch from my tree and send you an updated
pull request when my tree is updated.
diff mbox

Patch

diff --git a/drivers/net/e1000/e1000.h b/drivers/net/e1000/e1000.h
index a881dd0..f96475c 100644
--- a/drivers/net/e1000/e1000.h
+++ b/drivers/net/e1000/e1000.h
@@ -238,9 +238,6 @@  struct e1000_adapter {
 	struct work_struct reset_task;
 	u8 fc_autoneg;
 
-	struct timer_list blink_timer;
-	unsigned long led_status;
-
 	/* TX */
 	struct e1000_tx_ring *tx_ring;      /* One per active queue */
 	unsigned int restart_queue;
diff --git a/drivers/net/e1000/e1000_ethtool.c b/drivers/net/e1000/e1000_ethtool.c
index dd70738..5c998a9 100644
--- a/drivers/net/e1000/e1000_ethtool.c
+++ b/drivers/net/e1000/e1000_ethtool.c
@@ -1753,46 +1753,28 @@  static int e1000_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
 	return 0;
 }
 
-/* toggle LED 4 times per second = 2 "blinks" per second */
-#define E1000_ID_INTERVAL	(HZ/4)
-
-/* bit defines for adapter->led_status */
-#define E1000_LED_ON		0
-
-static void e1000_led_blink_callback(unsigned long data)
+static int e1000_set_phys_id(struct net_device *netdev,
+			     enum ethtool_phys_id_state state)
 {
-	struct e1000_adapter *adapter = (struct e1000_adapter *) data;
+	struct e1000_adapter *adapter = netdev_priv(netdev);
 	struct e1000_hw *hw = &adapter->hw;
 
-	if (test_and_change_bit(E1000_LED_ON, &adapter->led_status))
-		e1000_led_off(hw);
-	else
-		e1000_led_on(hw);
-
-	mod_timer(&adapter->blink_timer, jiffies + E1000_ID_INTERVAL);
-}
+	switch (state) {
+	case ETHTOOL_ID_ACTIVE:
+		e1000_setup_led(hw);
+		return -EINVAL;
 
-static int e1000_phys_id(struct net_device *netdev, u32 data)
-{
-	struct e1000_adapter *adapter = netdev_priv(netdev);
-	struct e1000_hw *hw = &adapter->hw;
+	case ETHTOOL_ID_ON:
+		e1000_led_on(hw);
+		break;
 
-	if (!data)
-		data = INT_MAX;
+	case ETHTOOL_ID_OFF:
+		e1000_led_off(hw);
+		break;
 
-	if (!adapter->blink_timer.function) {
-		init_timer(&adapter->blink_timer);
-		adapter->blink_timer.function = e1000_led_blink_callback;
-		adapter->blink_timer.data = (unsigned long)adapter;
+	case ETHTOOL_ID_INACTIVE:
+		e1000_cleanup_led(hw);
 	}
-	e1000_setup_led(hw);
-	mod_timer(&adapter->blink_timer, jiffies);
-	msleep_interruptible(data * 1000);
-	del_timer_sync(&adapter->blink_timer);
-
-	e1000_led_off(hw);
-	clear_bit(E1000_LED_ON, &adapter->led_status);
-	e1000_cleanup_led(hw);
 
 	return 0;
 }
@@ -1929,7 +1911,7 @@  static const struct ethtool_ops e1000_ethtool_ops = {
 	.set_tso                = e1000_set_tso,
 	.self_test              = e1000_diag_test,
 	.get_strings            = e1000_get_strings,
-	.phys_id                = e1000_phys_id,
+	.set_phys_id            = e1000_set_phys_id,
 	.get_ethtool_stats      = e1000_get_ethtool_stats,
 	.get_sset_count         = e1000_get_sset_count,
 	.get_coalesce           = e1000_get_coalesce,