diff options
author | Eliad Peller <eliad@wizery.com> | 2011-12-18 20:25:45 +0200 |
---|---|---|
committer | Luciano Coelho <coelho@ti.com> | 2011-12-20 22:30:15 +0200 |
commit | 6ab70916939f055d9aaa9acc28a3a5bdfe9649f0 (patch) | |
tree | 8e90082732f08774042536a282541ae9e3a3871f /drivers/net/wireless/wl12xx | |
parent | b890f4c363ebdc9c38d7f1ec91e9ec0976c4fb6a (diff) | |
download | blackbird-op-linux-6ab70916939f055d9aaa9acc28a3a5bdfe9649f0.tar.gz blackbird-op-linux-6ab70916939f055d9aaa9acc28a3a5bdfe9649f0.zip |
wl12xx: check the actual vif operstate in wl1271_dev_notify
The current wl1271_dev_notify implementation sets the
new operstate to all associated stations (while only
a specific vif was changed).
Until we'll have a method to get the actual vif from
the given dev, check the current operstate of each vif.
Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
Diffstat (limited to 'drivers/net/wireless/wl12xx')
-rw-r--r-- | drivers/net/wireless/wl12xx/main.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/net/wireless/wl12xx/main.c b/drivers/net/wireless/wl12xx/main.c index 0719fc82d55f..d5f55a149de5 100644 --- a/drivers/net/wireless/wl12xx/main.c +++ b/drivers/net/wireless/wl12xx/main.c @@ -450,7 +450,16 @@ static int wl1271_dev_notify(struct notifier_block *me, unsigned long what, if (wl->state == WL1271_STATE_OFF) goto out; + if (dev->operstate != IF_OPER_UP) + goto out; + /* + * The correct behavior should be just getting the appropriate wlvif + * from the given dev, but currently we don't have a mac80211 + * interface for it. + */ wl12xx_for_each_wlvif_sta(wl, wlvif) { + struct ieee80211_vif *vif = wl12xx_wlvif_to_vif(wlvif); + if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags)) continue; @@ -458,7 +467,8 @@ static int wl1271_dev_notify(struct notifier_block *me, unsigned long what, if (ret < 0) goto out; - wl1271_check_operstate(wl, wlvif, dev->operstate); + wl1271_check_operstate(wl, wlvif, + ieee80211_get_operstate(vif)); wl1271_ps_elp_sleep(wl); } |