diff options
author | stephen hemminger <shemminger@vyatta.com> | 2011-04-06 07:47:23 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-04-06 18:05:45 -0400 |
commit | 94469f75321d13a42056514e2883590b91d84cba (patch) | |
tree | 6bf6b52ef6b3480705956c34581860cf7081c4cb | |
parent | 066413dac420c8225e3ef7f0f76c3255448782d3 (diff) |
qlcnic: convert to set_phys_id
Convert driver to use new ethtool set_phys_id.
Not completely sure that this is correct for all cases of device
up/down and doing operation. Compile tested only.
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/qlcnic/qlcnic.h | 1 | ||||
-rw-r--r-- | drivers/net/qlcnic/qlcnic_ethtool.c | 53 |
2 files changed, 29 insertions, 25 deletions
diff --git a/drivers/net/qlcnic/qlcnic.h b/drivers/net/qlcnic/qlcnic.h index dc6f7c69acac..b6e0fc33585f 100644 --- a/drivers/net/qlcnic/qlcnic.h +++ b/drivers/net/qlcnic/qlcnic.h | |||
@@ -912,6 +912,7 @@ struct qlcnic_adapter { | |||
912 | struct net_device *netdev; | 912 | struct net_device *netdev; |
913 | struct pci_dev *pdev; | 913 | struct pci_dev *pdev; |
914 | 914 | ||
915 | bool blink_was_down; | ||
915 | unsigned long state; | 916 | unsigned long state; |
916 | u32 flags; | 917 | u32 flags; |
917 | 918 | ||
diff --git a/drivers/net/qlcnic/qlcnic_ethtool.c b/drivers/net/qlcnic/qlcnic_ethtool.c index 6be4d5a26c7c..3cd8a169694a 100644 --- a/drivers/net/qlcnic/qlcnic_ethtool.c +++ b/drivers/net/qlcnic/qlcnic_ethtool.c | |||
@@ -831,48 +831,51 @@ static int qlcnic_set_tso(struct net_device *dev, u32 data) | |||
831 | return 0; | 831 | return 0; |
832 | } | 832 | } |
833 | 833 | ||
834 | static int qlcnic_blink_led(struct net_device *dev, u32 val) | 834 | static int qlcnic_set_led(struct net_device *dev, |
835 | enum ethtool_phys_id_state state) | ||
835 | { | 836 | { |
836 | struct qlcnic_adapter *adapter = netdev_priv(dev); | 837 | struct qlcnic_adapter *adapter = netdev_priv(dev); |
837 | int max_sds_rings = adapter->max_sds_rings; | 838 | int max_sds_rings = adapter->max_sds_rings; |
838 | int dev_down = 0; | ||
839 | int ret; | ||
840 | |||
841 | if (!test_bit(__QLCNIC_DEV_UP, &adapter->state)) { | ||
842 | dev_down = 1; | ||
843 | if (test_and_set_bit(__QLCNIC_RESETTING, &adapter->state)) | ||
844 | return -EIO; | ||
845 | 839 | ||
846 | ret = qlcnic_diag_alloc_res(dev, QLCNIC_LED_TEST); | 840 | switch (state) { |
847 | if (ret) { | 841 | case ETHTOOL_ID_ACTIVE: |
848 | clear_bit(__QLCNIC_RESETTING, &adapter->state); | 842 | adapter->blink_was_down = false; |
849 | return ret; | 843 | if (!test_bit(__QLCNIC_DEV_UP, &adapter->state)) { |
844 | if (test_and_set_bit(__QLCNIC_RESETTING, &adapter->state)) | ||
845 | return -EIO; | ||
846 | |||
847 | if (qlcnic_diag_alloc_res(dev, QLCNIC_LED_TEST)) { | ||
848 | clear_bit(__QLCNIC_RESETTING, &adapter->state); | ||
849 | return -EIO; | ||
850 | } | ||
851 | adapter->blink_was_down = true; | ||
850 | } | 852 | } |
851 | } | ||
852 | 853 | ||
853 | ret = adapter->nic_ops->config_led(adapter, 1, 0xf); | 854 | if (adapter->nic_ops->config_led(adapter, 1, 0xf) == 0) |
854 | if (ret) { | 855 | return 0; |
856 | |||
855 | dev_err(&adapter->pdev->dev, | 857 | dev_err(&adapter->pdev->dev, |
856 | "Failed to set LED blink state.\n"); | 858 | "Failed to set LED blink state.\n"); |
857 | goto done; | 859 | break; |
858 | } | ||
859 | 860 | ||
860 | msleep_interruptible(val * 1000); | 861 | case ETHTOOL_ID_INACTIVE: |
862 | if (adapter->nic_ops->config_led(adapter, 0, 0xf) == 0) | ||
863 | return 0; | ||
861 | 864 | ||
862 | ret = adapter->nic_ops->config_led(adapter, 0, 0xf); | ||
863 | if (ret) { | ||
864 | dev_err(&adapter->pdev->dev, | 865 | dev_err(&adapter->pdev->dev, |
865 | "Failed to reset LED blink state.\n"); | 866 | "Failed to reset LED blink state.\n"); |
866 | goto done; | 867 | break; |
868 | |||
869 | default: | ||
870 | return -EINVAL; | ||
867 | } | 871 | } |
868 | 872 | ||
869 | done: | 873 | if (adapter->blink_was_down) { |
870 | if (dev_down) { | ||
871 | qlcnic_diag_free_res(dev, max_sds_rings); | 874 | qlcnic_diag_free_res(dev, max_sds_rings); |
872 | clear_bit(__QLCNIC_RESETTING, &adapter->state); | 875 | clear_bit(__QLCNIC_RESETTING, &adapter->state); |
873 | } | 876 | } |
874 | return ret; | ||
875 | 877 | ||
878 | return -EIO; | ||
876 | } | 879 | } |
877 | 880 | ||
878 | static void | 881 | static void |
@@ -1078,7 +1081,7 @@ const struct ethtool_ops qlcnic_ethtool_ops = { | |||
1078 | .set_coalesce = qlcnic_set_intr_coalesce, | 1081 | .set_coalesce = qlcnic_set_intr_coalesce, |
1079 | .get_flags = ethtool_op_get_flags, | 1082 | .get_flags = ethtool_op_get_flags, |
1080 | .set_flags = qlcnic_set_flags, | 1083 | .set_flags = qlcnic_set_flags, |
1081 | .phys_id = qlcnic_blink_led, | 1084 | .set_phys_id = qlcnic_set_led, |
1082 | .set_msglevel = qlcnic_set_msglevel, | 1085 | .set_msglevel = qlcnic_set_msglevel, |
1083 | .get_msglevel = qlcnic_get_msglevel, | 1086 | .get_msglevel = qlcnic_get_msglevel, |
1084 | }; | 1087 | }; |