aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorstephen hemminger <shemminger@vyatta.com>2011-04-06 07:47:23 -0400
committerDavid S. Miller <davem@davemloft.net>2011-04-06 18:05:45 -0400
commit94469f75321d13a42056514e2883590b91d84cba (patch)
tree6bf6b52ef6b3480705956c34581860cf7081c4cb
parent066413dac420c8225e3ef7f0f76c3255448782d3 (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.h1
-rw-r--r--drivers/net/qlcnic/qlcnic_ethtool.c53
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
834static int qlcnic_blink_led(struct net_device *dev, u32 val) 834static 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
869done: 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
878static void 881static 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};