diff options
author | Philippe Langlais <philippe.langlais@stericsson.com> | 2012-04-06 11:11:31 +0200 |
---|---|---|
committer | Philippe Langlais <philippe.langlais@stericsson.com> | 2012-04-06 11:11:31 +0200 |
commit | 5c807f98e94548dac3fcbd391389c0869f8a9f32 (patch) | |
tree | d8b652c2d428b78f7bdfd890102b5a5ca2628093 /net/mac80211/work.c | |
parent | fe07b033c06f6f5e9bda543da22cfa7962325e56 (diff) | |
parent | bd6a3784c37447e7336759ff4910f6cd3ff89f34 (diff) |
Merge topic branch 'wlan' into integration-linux-ux500-3.3
Diffstat (limited to 'net/mac80211/work.c')
-rw-r--r-- | net/mac80211/work.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/net/mac80211/work.c b/net/mac80211/work.c index c6dd01a0529..290ddbb4d1d 100644 --- a/net/mac80211/work.c +++ b/net/mac80211/work.c @@ -454,6 +454,30 @@ ieee80211_authenticate(struct ieee80211_work *wk) struct ieee80211_sub_if_data *sdata = wk->sdata; struct ieee80211_local *local = sdata->local; + /* HACK!!! cw1200 device requires SSID to be available at AUTH stage. + * cfg80211 beacon cache is designed to handle multi-SSID BSSes, so + * bss struct returned by cfg80211_get_bss() has random SSID if BSS + * just changed SSID before authentication (typical for p2p). + * This is a firmware design fault, however as a workaround cfg80211 + * beacon cache is purged to make sure target BSS is searchable + * in rb-tree at the AUTH stage. + */ + struct cfg80211_bss *bss; + while (true) { + bss = cfg80211_get_bss(local->hw.wiphy, + wk->probe_auth.bss->channel, + wk->probe_auth.bss->bssid, + NULL, 0, 0, 0); + if (WARN_ON(!bss)) + break; + if (bss == wk->probe_auth.bss) { + cfg80211_put_bss(bss); + break; + } + cfg80211_unlink_bss(local->hw.wiphy, bss); + } + /* End of the hack */ + if (!wk->probe_auth.synced) { int ret = drv_tx_sync(local, sdata, wk->filter_ta, IEEE80211_TX_SYNC_AUTH); |