diff options
author | Rick Farrington <rickdic@hotmail.com> | 2009-01-23 16:45:10 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-01-29 16:01:31 -0500 |
commit | 7b841727d2715d97592f46164804b34d6241644f (patch) | |
tree | 44541bb608cd175511ae35ac60b0e0c77ba3451f | |
parent | 4c4df78f5e224fd59fe337773878eca681ed02a9 (diff) |
iwlagn: reduce off channel reception for 4965
Force use of chains B and C (0x6) for Rx for 4965
Avoid A (0x1) because of its off-channel reception on A-band.
Signed-off-by: Rick Farrington <rickdic@hotmail.com>
Signed-off-by: Ben Cahill <ben.m.cahill@intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-commands.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.c | 13 |
3 files changed, 17 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index c72a99a9ab36..61788a508971 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -2698,6 +2698,9 @@ static int iwl_mac_config(struct ieee80211_hw *hw, u32 changed) | |||
2698 | 2698 | ||
2699 | iwl_set_rate(priv); | 2699 | iwl_set_rate(priv); |
2700 | 2700 | ||
2701 | /* call to ensure that 4965 rx_chain is set properly in monitor mode */ | ||
2702 | iwl_set_rxon_chain(priv); | ||
2703 | |||
2701 | if (memcmp(&priv->active_rxon, | 2704 | if (memcmp(&priv->active_rxon, |
2702 | &priv->staging_rxon, sizeof(priv->staging_rxon))) | 2705 | &priv->staging_rxon, sizeof(priv->staging_rxon))) |
2703 | iwl_commit_rxon(priv); | 2706 | iwl_commit_rxon(priv); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-commands.h b/drivers/net/wireless/iwlwifi/iwl-commands.h index 3ced5e5b6823..7571110f5f15 100644 --- a/drivers/net/wireless/iwlwifi/iwl-commands.h +++ b/drivers/net/wireless/iwlwifi/iwl-commands.h | |||
@@ -563,6 +563,7 @@ enum { | |||
563 | 563 | ||
564 | 564 | ||
565 | #define RXON_RX_CHAIN_DRIVER_FORCE_MSK cpu_to_le16(0x1 << 0) | 565 | #define RXON_RX_CHAIN_DRIVER_FORCE_MSK cpu_to_le16(0x1 << 0) |
566 | #define RXON_RX_CHAIN_DRIVER_FORCE_POS (0) | ||
566 | #define RXON_RX_CHAIN_VALID_MSK cpu_to_le16(0x7 << 1) | 567 | #define RXON_RX_CHAIN_VALID_MSK cpu_to_le16(0x7 << 1) |
567 | #define RXON_RX_CHAIN_VALID_POS (1) | 568 | #define RXON_RX_CHAIN_VALID_POS (1) |
568 | #define RXON_RX_CHAIN_FORCE_SEL_MSK cpu_to_le16(0x7 << 4) | 569 | #define RXON_RX_CHAIN_FORCE_SEL_MSK cpu_to_le16(0x7 << 4) |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c index ef4a7c54c736..b64377e760e5 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.c +++ b/drivers/net/wireless/iwlwifi/iwl-core.c | |||
@@ -753,6 +753,19 @@ void iwl_set_rxon_chain(struct iwl_priv *priv) | |||
753 | rx_chain |= active_rx_cnt << RXON_RX_CHAIN_MIMO_CNT_POS; | 753 | rx_chain |= active_rx_cnt << RXON_RX_CHAIN_MIMO_CNT_POS; |
754 | rx_chain |= idle_rx_cnt << RXON_RX_CHAIN_CNT_POS; | 754 | rx_chain |= idle_rx_cnt << RXON_RX_CHAIN_CNT_POS; |
755 | 755 | ||
756 | /* copied from 'iwl_bg_request_scan()' */ | ||
757 | /* Force use of chains B and C (0x6) for Rx for 4965 | ||
758 | * Avoid A (0x1) because of its off-channel reception on A-band. | ||
759 | * MIMO is not used here, but value is required */ | ||
760 | if (iwl_is_monitor_mode(priv) && | ||
761 | !(priv->staging_rxon.flags & RXON_FLG_BAND_24G_MSK) && | ||
762 | ((priv->hw_rev & CSR_HW_REV_TYPE_MSK) == CSR_HW_REV_TYPE_4965)) { | ||
763 | rx_chain = 0x07 << RXON_RX_CHAIN_VALID_POS; | ||
764 | rx_chain |= 0x06 << RXON_RX_CHAIN_FORCE_SEL_POS; | ||
765 | rx_chain |= 0x07 << RXON_RX_CHAIN_FORCE_MIMO_SEL_POS; | ||
766 | rx_chain |= 0x01 << RXON_RX_CHAIN_DRIVER_FORCE_POS; | ||
767 | } | ||
768 | |||
756 | priv->staging_rxon.rx_chain = cpu_to_le16(rx_chain); | 769 | priv->staging_rxon.rx_chain = cpu_to_le16(rx_chain); |
757 | 770 | ||
758 | if (!is_single && (active_rx_cnt >= IWL_NUM_RX_CHAINS_SINGLE) && is_cam) | 771 | if (!is_single && (active_rx_cnt >= IWL_NUM_RX_CHAINS_SINGLE) && is_cam) |