diff options
author | Johannes Berg <johannes.berg@intel.com> | 2010-10-04 08:47:23 -0400 |
---|---|---|
committer | Wey-Yi Guy <wey-yi.w.guy@intel.com> | 2010-10-14 12:46:33 -0400 |
commit | 085fbca29d7b4574c4e42189ee5789004e4beff7 (patch) | |
tree | e573c78ee748410861112635643d8a8294f89e2a | |
parent | de05ead8f8649788603afc470eb1c2ea2b8b1655 (diff) |
iwlwifi: allow probe-after-rx on 2.4 GHz
There are two passive 2.4 GHz channels: 12 and 13.
If you have a hidden SSID on those, you will not
be able to connect to it because we don't send out
probe requests there. We can allow this by using
the firmware's probe-after-rx functionality on
those channels as well.
This fixes
https://bugzilla.kernel.org/show_bug.cgi?id=16462
Reported-by: Daniel J Blueman <daniel.blueman@gmail.com>
Tested-by: Daniel J Blueman <daniel.blueman@gmail.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-lib.c | 40 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl3945-base.c | 16 |
2 files changed, 28 insertions, 28 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c index c1a389883af0..b555edd53354 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c | |||
@@ -1447,35 +1447,35 @@ int iwlagn_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif) | |||
1447 | if (priv->cfg->bt_params && | 1447 | if (priv->cfg->bt_params && |
1448 | priv->cfg->bt_params->advanced_bt_coexist) | 1448 | priv->cfg->bt_params->advanced_bt_coexist) |
1449 | scan->tx_cmd.tx_flags |= TX_CMD_FLG_IGNORE_BT; | 1449 | scan->tx_cmd.tx_flags |= TX_CMD_FLG_IGNORE_BT; |
1450 | scan->good_CRC_th = IWL_GOOD_CRC_TH_DISABLED; | ||
1451 | break; | 1450 | break; |
1452 | case IEEE80211_BAND_5GHZ: | 1451 | case IEEE80211_BAND_5GHZ: |
1453 | rate = IWL_RATE_6M_PLCP; | 1452 | rate = IWL_RATE_6M_PLCP; |
1454 | /* | ||
1455 | * If active scanning is requested but a certain channel is | ||
1456 | * marked passive, we can do active scanning if we detect | ||
1457 | * transmissions. | ||
1458 | * | ||
1459 | * There is an issue with some firmware versions that triggers | ||
1460 | * a sysassert on a "good CRC threshold" of zero (== disabled), | ||
1461 | * on a radar channel even though this means that we should NOT | ||
1462 | * send probes. | ||
1463 | * | ||
1464 | * The "good CRC threshold" is the number of frames that we | ||
1465 | * need to receive during our dwell time on a channel before | ||
1466 | * sending out probes -- setting this to a huge value will | ||
1467 | * mean we never reach it, but at the same time work around | ||
1468 | * the aforementioned issue. Thus use IWL_GOOD_CRC_TH_NEVER | ||
1469 | * here instead of IWL_GOOD_CRC_TH_DISABLED. | ||
1470 | */ | ||
1471 | scan->good_CRC_th = is_active ? IWL_GOOD_CRC_TH_DEFAULT : | ||
1472 | IWL_GOOD_CRC_TH_NEVER; | ||
1473 | break; | 1453 | break; |
1474 | default: | 1454 | default: |
1475 | IWL_WARN(priv, "Invalid scan band\n"); | 1455 | IWL_WARN(priv, "Invalid scan band\n"); |
1476 | return -EIO; | 1456 | return -EIO; |
1477 | } | 1457 | } |
1478 | 1458 | ||
1459 | /* | ||
1460 | * If active scanning is requested but a certain channel is | ||
1461 | * marked passive, we can do active scanning if we detect | ||
1462 | * transmissions. | ||
1463 | * | ||
1464 | * There is an issue with some firmware versions that triggers | ||
1465 | * a sysassert on a "good CRC threshold" of zero (== disabled), | ||
1466 | * on a radar channel even though this means that we should NOT | ||
1467 | * send probes. | ||
1468 | * | ||
1469 | * The "good CRC threshold" is the number of frames that we | ||
1470 | * need to receive during our dwell time on a channel before | ||
1471 | * sending out probes -- setting this to a huge value will | ||
1472 | * mean we never reach it, but at the same time work around | ||
1473 | * the aforementioned issue. Thus use IWL_GOOD_CRC_TH_NEVER | ||
1474 | * here instead of IWL_GOOD_CRC_TH_DISABLED. | ||
1475 | */ | ||
1476 | scan->good_CRC_th = is_active ? IWL_GOOD_CRC_TH_DEFAULT : | ||
1477 | IWL_GOOD_CRC_TH_NEVER; | ||
1478 | |||
1479 | band = priv->scan_band; | 1479 | band = priv->scan_band; |
1480 | 1480 | ||
1481 | if (priv->cfg->scan_rx_antennas[band]) | 1481 | if (priv->cfg->scan_rx_antennas[band]) |
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c index 980c6096620a..3ee3e55fa546 100644 --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c | |||
@@ -2938,18 +2938,10 @@ int iwl3945_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif) | |||
2938 | case IEEE80211_BAND_2GHZ: | 2938 | case IEEE80211_BAND_2GHZ: |
2939 | scan->flags = RXON_FLG_BAND_24G_MSK | RXON_FLG_AUTO_DETECT_MSK; | 2939 | scan->flags = RXON_FLG_BAND_24G_MSK | RXON_FLG_AUTO_DETECT_MSK; |
2940 | scan->tx_cmd.rate = IWL_RATE_1M_PLCP; | 2940 | scan->tx_cmd.rate = IWL_RATE_1M_PLCP; |
2941 | scan->good_CRC_th = 0; | ||
2942 | band = IEEE80211_BAND_2GHZ; | 2941 | band = IEEE80211_BAND_2GHZ; |
2943 | break; | 2942 | break; |
2944 | case IEEE80211_BAND_5GHZ: | 2943 | case IEEE80211_BAND_5GHZ: |
2945 | scan->tx_cmd.rate = IWL_RATE_6M_PLCP; | 2944 | scan->tx_cmd.rate = IWL_RATE_6M_PLCP; |
2946 | /* | ||
2947 | * If active scaning is requested but a certain channel | ||
2948 | * is marked passive, we can do active scanning if we | ||
2949 | * detect transmissions. | ||
2950 | */ | ||
2951 | scan->good_CRC_th = is_active ? IWL_GOOD_CRC_TH_DEFAULT : | ||
2952 | IWL_GOOD_CRC_TH_DISABLED; | ||
2953 | band = IEEE80211_BAND_5GHZ; | 2945 | band = IEEE80211_BAND_5GHZ; |
2954 | break; | 2946 | break; |
2955 | default: | 2947 | default: |
@@ -2957,6 +2949,14 @@ int iwl3945_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif) | |||
2957 | return -EIO; | 2949 | return -EIO; |
2958 | } | 2950 | } |
2959 | 2951 | ||
2952 | /* | ||
2953 | * If active scaning is requested but a certain channel | ||
2954 | * is marked passive, we can do active scanning if we | ||
2955 | * detect transmissions. | ||
2956 | */ | ||
2957 | scan->good_CRC_th = is_active ? IWL_GOOD_CRC_TH_DEFAULT : | ||
2958 | IWL_GOOD_CRC_TH_DISABLED; | ||
2959 | |||
2960 | if (!priv->is_internal_short_scan) { | 2960 | if (!priv->is_internal_short_scan) { |
2961 | scan->tx_cmd.len = cpu_to_le16( | 2961 | scan->tx_cmd.len = cpu_to_le16( |
2962 | iwl_fill_probe_req(priv, | 2962 | iwl_fill_probe_req(priv, |