diff options
Diffstat (limited to 'drivers/net/wireless/libertas/ethtool.c')
-rw-r--r-- | drivers/net/wireless/libertas/ethtool.c | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/drivers/net/wireless/libertas/ethtool.c b/drivers/net/wireless/libertas/ethtool.c index 3804a58d7f4e..0cf31bbf6567 100644 --- a/drivers/net/wireless/libertas/ethtool.c +++ b/drivers/net/wireless/libertas/ethtool.c | |||
@@ -69,14 +69,11 @@ static void lbs_ethtool_get_wol(struct net_device *dev, | |||
69 | { | 69 | { |
70 | struct lbs_private *priv = dev->ml_priv; | 70 | struct lbs_private *priv = dev->ml_priv; |
71 | 71 | ||
72 | if (priv->wol_criteria == 0xffffffff) { | ||
73 | /* Interface driver didn't configure wake */ | ||
74 | wol->supported = wol->wolopts = 0; | ||
75 | return; | ||
76 | } | ||
77 | |||
78 | wol->supported = WAKE_UCAST|WAKE_MCAST|WAKE_BCAST|WAKE_PHY; | 72 | wol->supported = WAKE_UCAST|WAKE_MCAST|WAKE_BCAST|WAKE_PHY; |
79 | 73 | ||
74 | if (priv->wol_criteria == EHS_REMOVE_WAKEUP) | ||
75 | return; | ||
76 | |||
80 | if (priv->wol_criteria & EHS_WAKE_ON_UNICAST_DATA) | 77 | if (priv->wol_criteria & EHS_WAKE_ON_UNICAST_DATA) |
81 | wol->wolopts |= WAKE_UCAST; | 78 | wol->wolopts |= WAKE_UCAST; |
82 | if (priv->wol_criteria & EHS_WAKE_ON_MULTICAST_DATA) | 79 | if (priv->wol_criteria & EHS_WAKE_ON_MULTICAST_DATA) |
@@ -91,23 +88,22 @@ static int lbs_ethtool_set_wol(struct net_device *dev, | |||
91 | struct ethtool_wolinfo *wol) | 88 | struct ethtool_wolinfo *wol) |
92 | { | 89 | { |
93 | struct lbs_private *priv = dev->ml_priv; | 90 | struct lbs_private *priv = dev->ml_priv; |
94 | uint32_t criteria = 0; | ||
95 | 91 | ||
96 | if (wol->wolopts & ~(WAKE_UCAST|WAKE_MCAST|WAKE_BCAST|WAKE_PHY)) | 92 | if (wol->wolopts & ~(WAKE_UCAST|WAKE_MCAST|WAKE_BCAST|WAKE_PHY)) |
97 | return -EOPNOTSUPP; | 93 | return -EOPNOTSUPP; |
98 | 94 | ||
95 | priv->wol_criteria = 0; | ||
99 | if (wol->wolopts & WAKE_UCAST) | 96 | if (wol->wolopts & WAKE_UCAST) |
100 | criteria |= EHS_WAKE_ON_UNICAST_DATA; | 97 | priv->wol_criteria |= EHS_WAKE_ON_UNICAST_DATA; |
101 | if (wol->wolopts & WAKE_MCAST) | 98 | if (wol->wolopts & WAKE_MCAST) |
102 | criteria |= EHS_WAKE_ON_MULTICAST_DATA; | 99 | priv->wol_criteria |= EHS_WAKE_ON_MULTICAST_DATA; |
103 | if (wol->wolopts & WAKE_BCAST) | 100 | if (wol->wolopts & WAKE_BCAST) |
104 | criteria |= EHS_WAKE_ON_BROADCAST_DATA; | 101 | priv->wol_criteria |= EHS_WAKE_ON_BROADCAST_DATA; |
105 | if (wol->wolopts & WAKE_PHY) | 102 | if (wol->wolopts & WAKE_PHY) |
106 | criteria |= EHS_WAKE_ON_MAC_EVENT; | 103 | priv->wol_criteria |= EHS_WAKE_ON_MAC_EVENT; |
107 | if (wol->wolopts == 0) | 104 | if (wol->wolopts == 0) |
108 | criteria |= EHS_REMOVE_WAKEUP; | 105 | priv->wol_criteria |= EHS_REMOVE_WAKEUP; |
109 | 106 | return 0; | |
110 | return lbs_host_sleep_cfg(priv, criteria, (struct wol_config *)NULL); | ||
111 | } | 107 | } |
112 | 108 | ||
113 | const struct ethtool_ops lbs_ethtool_ops = { | 109 | const struct ethtool_ops lbs_ethtool_ops = { |