aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ti
diff options
context:
space:
mode:
authorArik Nemtsov <arik@wizery.com>2014-07-10 20:01:36 -0400
committerJohn W. Linville <linville@tuxdriver.com>2014-07-15 16:00:00 -0400
commite65628691f04f1a9ce57d8036c9b119c43031187 (patch)
tree9a59d65558e3e85c08500bafd9bb31564ee888a2 /drivers/net/wireless/ti
parentd8c5a48d2751086de9ed0ae9ff97ab094e2d534d (diff)
wlcore: don't switch channels on disconnected STA vifs
Sending the FW a channel switch command on a disconnected vif may result in a beacon loss event. Avoid this corner case. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Eliad Peller <eliad@wizery.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ti')
-rw-r--r--drivers/net/wireless/ti/wlcore/main.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
index d92f578dd95c..ec211413ffe6 100644
--- a/drivers/net/wireless/ti/wlcore/main.c
+++ b/drivers/net/wireless/ti/wlcore/main.c
@@ -5192,6 +5192,10 @@ static void wl12xx_op_channel_switch(struct ieee80211_hw *hw,
5192 if (unlikely(wl->state == WLCORE_STATE_OFF)) { 5192 if (unlikely(wl->state == WLCORE_STATE_OFF)) {
5193 wl12xx_for_each_wlvif_sta(wl, wlvif) { 5193 wl12xx_for_each_wlvif_sta(wl, wlvif) {
5194 struct ieee80211_vif *vif = wl12xx_wlvif_to_vif(wlvif); 5194 struct ieee80211_vif *vif = wl12xx_wlvif_to_vif(wlvif);
5195
5196 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags))
5197 continue;
5198
5195 ieee80211_chswitch_done(vif, false); 5199 ieee80211_chswitch_done(vif, false);
5196 } 5200 }
5197 goto out; 5201 goto out;
@@ -5207,6 +5211,9 @@ static void wl12xx_op_channel_switch(struct ieee80211_hw *hw,
5207 wl12xx_for_each_wlvif_sta(wl, wlvif) { 5211 wl12xx_for_each_wlvif_sta(wl, wlvif) {
5208 unsigned long delay_usec; 5212 unsigned long delay_usec;
5209 5213
5214 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags))
5215 continue;
5216
5210 ret = wl->ops->channel_switch(wl, wlvif, ch_switch); 5217 ret = wl->ops->channel_switch(wl, wlvif, ch_switch);
5211 if (ret) 5218 if (ret)
5212 goto out_sleep; 5219 goto out_sleep;