aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormabbas <mabbas@linux.intel.com>2007-10-25 05:15:42 -0400
committerDavid S. Miller <davem@davemloft.net>2008-01-28 18:03:21 -0500
commitbee488dbd7effea4c4a483b0a336df331066bb3c (patch)
tree2f70b27d5180f97c13f822ffea8aec851a598d30
parentd9fd0c9969282609b663a1d933f0777118dd084c (diff)
iwl4965: exclude 60M rate from probe request
This patch do the following 2 things: 1. Make sure we don't add rate 60M part of supported rate in proble request, some AP does not like that. 2. It is wrong to set priv->active_rate in this function, this will set it to all avialable rates which might overwrite the mode supported rate. priv->active_rate should be set by only from iwl_set_rate. Signed-off-by: Mohamed Abbas <mabbas@linux.intel.com> Signed-off-by: Zhu Yi <yi.zhu@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/iwlwifi/iwl4965-base.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl4965-base.c b/drivers/net/wireless/iwlwifi/iwl4965-base.c
index 5408b5379a4..a9415ca784a 100644
--- a/drivers/net/wireless/iwlwifi/iwl4965-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl4965-base.c
@@ -1833,7 +1833,7 @@ static u16 iwl_fill_probe_req(struct iwl_priv *priv,
1833{ 1833{
1834 int len = 0; 1834 int len = 0;
1835 u8 *pos = NULL; 1835 u8 *pos = NULL;
1836 u16 active_rates, ret_rates, cck_rates; 1836 u16 active_rates, ret_rates, cck_rates, active_rate_basic;
1837 1837
1838 /* Make sure there is enough space for the probe request, 1838 /* Make sure there is enough space for the probe request,
1839 * two mandatory IEs and the data */ 1839 * two mandatory IEs and the data */
@@ -1883,17 +1883,19 @@ static u16 iwl_fill_probe_req(struct iwl_priv *priv,
1883 *pos++ = WLAN_EID_SUPP_RATES; 1883 *pos++ = WLAN_EID_SUPP_RATES;
1884 *pos = 0; 1884 *pos = 0;
1885 1885
1886 priv->active_rate = priv->rates_mask; 1886 /* exclude 60M rate */
1887 active_rates = priv->active_rate; 1887 active_rates = priv->rates_mask;
1888 priv->active_rate_basic = priv->rates_mask & IWL_BASIC_RATES_MASK; 1888 active_rates &= ~IWL_RATE_60M_MASK;
1889
1890 active_rate_basic = active_rates & IWL_BASIC_RATES_MASK;
1889 1891
1890 cck_rates = IWL_CCK_RATES_MASK & active_rates; 1892 cck_rates = IWL_CCK_RATES_MASK & active_rates;
1891 ret_rates = iwl_supported_rate_to_ie(pos, cck_rates, 1893 ret_rates = iwl_supported_rate_to_ie(pos, cck_rates,
1892 priv->active_rate_basic, &left); 1894 active_rate_basic, &left);
1893 active_rates &= ~ret_rates; 1895 active_rates &= ~ret_rates;
1894 1896
1895 ret_rates = iwl_supported_rate_to_ie(pos, active_rates, 1897 ret_rates = iwl_supported_rate_to_ie(pos, active_rates,
1896 priv->active_rate_basic, &left); 1898 active_rate_basic, &left);
1897 active_rates &= ~ret_rates; 1899 active_rates &= ~ret_rates;
1898 1900
1899 len += 2 + *pos; 1901 len += 2 + *pos;
@@ -1910,7 +1912,7 @@ static u16 iwl_fill_probe_req(struct iwl_priv *priv,
1910 *pos++ = WLAN_EID_EXT_SUPP_RATES; 1912 *pos++ = WLAN_EID_EXT_SUPP_RATES;
1911 *pos = 0; 1913 *pos = 0;
1912 iwl_supported_rate_to_ie(pos, active_rates, 1914 iwl_supported_rate_to_ie(pos, active_rates,
1913 priv->active_rate_basic, &left); 1915 active_rate_basic, &left);
1914 if (*pos > 0) 1916 if (*pos > 0)
1915 len += 2 + *pos; 1917 len += 2 + *pos;
1916 1918