aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2010-10-04 08:47:23 -0400
committerWey-Yi Guy <wey-yi.w.guy@intel.com>2010-10-14 12:46:33 -0400
commit085fbca29d7b4574c4e42189ee5789004e4beff7 (patch)
treee573c78ee748410861112635643d8a8294f89e2a
parentde05ead8f8649788603afc470eb1c2ea2b8b1655 (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.c40
-rw-r--r--drivers/net/wireless/iwlwifi/iwl3945-base.c16
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,