| From d7b9c5204e9c6810a20d509ee47bc70419096e59 Mon Sep 17 00:00:00 2001 |
| From: Amitkumar Karwar <akarwar@marvell.com> |
| Date: Tue, 8 Jan 2013 17:53:10 -0800 |
| Subject: mwifiex: update config_bands during infra association |
| |
| From: Amitkumar Karwar <akarwar@marvell.com> |
| |
| commit d7b9c5204e9c6810a20d509ee47bc70419096e59 upstream. |
| |
| Currently "adapter->config_bands" is updated during infra |
| association only if channel is provided by user in "iw connect" |
| command. config_bands is used while preparing association |
| request to calculate supported rates by intersecting our rates |
| with the rates advertised by AP. |
| |
| There is corner case in which we include zero rates in |
| supported rates TLV based on previous IBSS network history, |
| which leads to association failure. |
| |
| This patch fixes the problem by correctly updating config_bands. |
| |
| Signed-off-by: Amitkumar Karwar <akarwar@marvell.com> |
| Signed-off-by: Bing Zhao <bzhao@marvell.com> |
| Signed-off-by: John W. Linville <linville@tuxdriver.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/net/wireless/mwifiex/cfg80211.c | 15 +-------------- |
| drivers/net/wireless/mwifiex/sta_ioctl.c | 14 ++++++++++++++ |
| 2 files changed, 15 insertions(+), 14 deletions(-) |
| |
| --- a/drivers/net/wireless/mwifiex/cfg80211.c |
| +++ b/drivers/net/wireless/mwifiex/cfg80211.c |
| @@ -1462,7 +1462,7 @@ mwifiex_cfg80211_assoc(struct mwifiex_pr |
| struct cfg80211_ssid req_ssid; |
| int ret, auth_type = 0; |
| struct cfg80211_bss *bss = NULL; |
| - u8 is_scanning_required = 0, config_bands = 0; |
| + u8 is_scanning_required = 0; |
| |
| memset(&req_ssid, 0, sizeof(struct cfg80211_ssid)); |
| |
| @@ -1481,19 +1481,6 @@ mwifiex_cfg80211_assoc(struct mwifiex_pr |
| /* disconnect before try to associate */ |
| mwifiex_deauthenticate(priv, NULL); |
| |
| - if (channel) { |
| - if (mode == NL80211_IFTYPE_STATION) { |
| - if (channel->band == IEEE80211_BAND_2GHZ) |
| - config_bands = BAND_B | BAND_G | BAND_GN; |
| - else |
| - config_bands = BAND_A | BAND_AN; |
| - |
| - if (!((config_bands | priv->adapter->fw_bands) & |
| - ~priv->adapter->fw_bands)) |
| - priv->adapter->config_bands = config_bands; |
| - } |
| - } |
| - |
| /* As this is new association, clear locally stored |
| * keys and security related flags */ |
| priv->sec_info.wpa_enabled = false; |
| --- a/drivers/net/wireless/mwifiex/sta_ioctl.c |
| +++ b/drivers/net/wireless/mwifiex/sta_ioctl.c |
| @@ -265,6 +265,20 @@ int mwifiex_bss_start(struct mwifiex_pri |
| if (ret) |
| goto done; |
| |
| + if (bss_desc) { |
| + u8 config_bands = 0; |
| + |
| + if (mwifiex_band_to_radio_type((u8) bss_desc->bss_band) |
| + == HostCmd_SCAN_RADIO_TYPE_BG) |
| + config_bands = BAND_B | BAND_G | BAND_GN; |
| + else |
| + config_bands = BAND_A | BAND_AN; |
| + |
| + if (!((config_bands | adapter->fw_bands) & |
| + ~adapter->fw_bands)) |
| + adapter->config_bands = config_bands; |
| + } |
| + |
| ret = mwifiex_check_network_compatibility(priv, bss_desc); |
| if (ret) |
| goto done; |