diff options
author | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2013-03-09 13:38:19 -0500 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-03-20 09:17:12 -0400 |
commit | 332235427a566d8be04b9676a7ac380c8853aa9b (patch) | |
tree | 1a4af05725814a13bd734bca87bff96799b0a686 /drivers/net/wireless | |
parent | d110cb51cf109a6dff0e801d945ea98d2883bd01 (diff) |
iwlwifi: mvm: take the valid_{rx,tx}_ant from the TLV
This is the right source of information for the valid Tx
antennas, not the NVM.
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-fw.h | 12 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/fw.c | 8 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/phy-ctxt.c | 7 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/scan.c | 4 |
5 files changed, 22 insertions, 11 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-fw.h b/drivers/net/wireless/iwlwifi/iwl-fw.h index 4e932e04d87e..c4c446d41eb0 100644 --- a/drivers/net/wireless/iwlwifi/iwl-fw.h +++ b/drivers/net/wireless/iwlwifi/iwl-fw.h | |||
@@ -203,4 +203,16 @@ struct iwl_fw { | |||
203 | bool mvm_fw; | 203 | bool mvm_fw; |
204 | }; | 204 | }; |
205 | 205 | ||
206 | static inline u8 iwl_fw_valid_tx_ant(const struct iwl_fw *fw) | ||
207 | { | ||
208 | return (fw->phy_config & FW_PHY_CFG_TX_CHAIN) >> | ||
209 | FW_PHY_CFG_TX_CHAIN_POS; | ||
210 | } | ||
211 | |||
212 | static inline u8 iwl_fw_valid_rx_ant(const struct iwl_fw *fw) | ||
213 | { | ||
214 | return (fw->phy_config & FW_PHY_CFG_RX_CHAIN) >> | ||
215 | FW_PHY_CFG_RX_CHAIN_POS; | ||
216 | } | ||
217 | |||
206 | #endif /* __iwl_fw_h__ */ | 218 | #endif /* __iwl_fw_h__ */ |
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw.c b/drivers/net/wireless/iwlwifi/mvm/fw.c index b497647bf34b..e18c92dd60ec 100644 --- a/drivers/net/wireless/iwlwifi/mvm/fw.c +++ b/drivers/net/wireless/iwlwifi/mvm/fw.c | |||
@@ -114,7 +114,7 @@ static int iwl_send_tx_ant_cfg(struct iwl_mvm *mvm, u8 valid_tx_ant) | |||
114 | .valid = cpu_to_le32(valid_tx_ant), | 114 | .valid = cpu_to_le32(valid_tx_ant), |
115 | }; | 115 | }; |
116 | 116 | ||
117 | IWL_DEBUG_HC(mvm, "select valid tx ant: %u\n", valid_tx_ant); | 117 | IWL_DEBUG_FW(mvm, "select valid tx ant: %u\n", valid_tx_ant); |
118 | return iwl_mvm_send_cmd_pdu(mvm, TX_ANT_CONFIGURATION_CMD, CMD_SYNC, | 118 | return iwl_mvm_send_cmd_pdu(mvm, TX_ANT_CONFIGURATION_CMD, CMD_SYNC, |
119 | sizeof(tx_ant_cmd), &tx_ant_cmd); | 119 | sizeof(tx_ant_cmd), &tx_ant_cmd); |
120 | } | 120 | } |
@@ -327,7 +327,7 @@ int iwl_run_init_mvm_ucode(struct iwl_mvm *mvm, bool read_nvm) | |||
327 | WARN_ON(ret); | 327 | WARN_ON(ret); |
328 | 328 | ||
329 | /* Send TX valid antennas before triggering calibrations */ | 329 | /* Send TX valid antennas before triggering calibrations */ |
330 | ret = iwl_send_tx_ant_cfg(mvm, mvm->nvm_data->valid_tx_ant); | 330 | ret = iwl_send_tx_ant_cfg(mvm, iwl_fw_valid_tx_ant(mvm->fw)); |
331 | if (ret) | 331 | if (ret) |
332 | goto error; | 332 | goto error; |
333 | 333 | ||
@@ -413,7 +413,7 @@ int iwl_mvm_up(struct iwl_mvm *mvm) | |||
413 | goto error; | 413 | goto error; |
414 | } | 414 | } |
415 | 415 | ||
416 | ret = iwl_send_tx_ant_cfg(mvm, mvm->nvm_data->valid_tx_ant); | 416 | ret = iwl_send_tx_ant_cfg(mvm, iwl_fw_valid_tx_ant(mvm->fw)); |
417 | if (ret) | 417 | if (ret) |
418 | goto error; | 418 | goto error; |
419 | 419 | ||
@@ -467,7 +467,7 @@ int iwl_mvm_load_d3_fw(struct iwl_mvm *mvm) | |||
467 | goto error; | 467 | goto error; |
468 | } | 468 | } |
469 | 469 | ||
470 | ret = iwl_send_tx_ant_cfg(mvm, mvm->nvm_data->valid_tx_ant); | 470 | ret = iwl_send_tx_ant_cfg(mvm, iwl_fw_valid_tx_ant(mvm->fw)); |
471 | if (ret) | 471 | if (ret) |
472 | goto error; | 472 | goto error; |
473 | 473 | ||
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c b/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c index c45822fb937d..86e312a4f629 100644 --- a/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c +++ b/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c | |||
@@ -803,7 +803,7 @@ static int iwl_mvm_mac_ctxt_send_beacon(struct iwl_mvm *mvm, | |||
803 | TX_CMD_FLG_TSF); | 803 | TX_CMD_FLG_TSF); |
804 | 804 | ||
805 | mvm->mgmt_last_antenna_idx = | 805 | mvm->mgmt_last_antenna_idx = |
806 | iwl_mvm_next_antenna(mvm, mvm->nvm_data->valid_tx_ant, | 806 | iwl_mvm_next_antenna(mvm, iwl_fw_valid_tx_ant(mvm->fw), |
807 | mvm->mgmt_last_antenna_idx); | 807 | mvm->mgmt_last_antenna_idx); |
808 | 808 | ||
809 | beacon_cmd.tx.rate_n_flags = | 809 | beacon_cmd.tx.rate_n_flags = |
diff --git a/drivers/net/wireless/iwlwifi/mvm/phy-ctxt.c b/drivers/net/wireless/iwlwifi/mvm/phy-ctxt.c index 0d537e035ef0..0f0b44eabd93 100644 --- a/drivers/net/wireless/iwlwifi/mvm/phy-ctxt.c +++ b/drivers/net/wireless/iwlwifi/mvm/phy-ctxt.c | |||
@@ -142,7 +142,7 @@ static void iwl_mvm_phy_ctxt_cmd_data(struct iwl_mvm *mvm, | |||
142 | struct cfg80211_chan_def *chandef, | 142 | struct cfg80211_chan_def *chandef, |
143 | u8 chains_static, u8 chains_dynamic) | 143 | u8 chains_static, u8 chains_dynamic) |
144 | { | 144 | { |
145 | u8 valid_rx_chains, active_cnt, idle_cnt; | 145 | u8 active_cnt, idle_cnt; |
146 | 146 | ||
147 | /* Set the channel info data */ | 147 | /* Set the channel info data */ |
148 | cmd->ci.band = (chandef->chan->band == IEEE80211_BAND_2GHZ ? | 148 | cmd->ci.band = (chandef->chan->band == IEEE80211_BAND_2GHZ ? |
@@ -158,17 +158,16 @@ static void iwl_mvm_phy_ctxt_cmd_data(struct iwl_mvm *mvm, | |||
158 | * Need to add on chain noise calibration limitations, and | 158 | * Need to add on chain noise calibration limitations, and |
159 | * BT coex considerations. | 159 | * BT coex considerations. |
160 | */ | 160 | */ |
161 | valid_rx_chains = mvm->nvm_data->valid_rx_ant; | ||
162 | idle_cnt = chains_static; | 161 | idle_cnt = chains_static; |
163 | active_cnt = chains_dynamic; | 162 | active_cnt = chains_dynamic; |
164 | 163 | ||
165 | cmd->rxchain_info = cpu_to_le32(valid_rx_chains << | 164 | cmd->rxchain_info = cpu_to_le32(iwl_fw_valid_rx_ant(mvm->fw) << |
166 | PHY_RX_CHAIN_VALID_POS); | 165 | PHY_RX_CHAIN_VALID_POS); |
167 | cmd->rxchain_info |= cpu_to_le32(idle_cnt << PHY_RX_CHAIN_CNT_POS); | 166 | cmd->rxchain_info |= cpu_to_le32(idle_cnt << PHY_RX_CHAIN_CNT_POS); |
168 | cmd->rxchain_info |= cpu_to_le32(active_cnt << | 167 | cmd->rxchain_info |= cpu_to_le32(active_cnt << |
169 | PHY_RX_CHAIN_MIMO_CNT_POS); | 168 | PHY_RX_CHAIN_MIMO_CNT_POS); |
170 | 169 | ||
171 | cmd->txchain_info = cpu_to_le32(mvm->nvm_data->valid_tx_ant); | 170 | cmd->txchain_info = cpu_to_le32(iwl_fw_valid_tx_ant(mvm->fw)); |
172 | } | 171 | } |
173 | 172 | ||
174 | /* | 173 | /* |
diff --git a/drivers/net/wireless/iwlwifi/mvm/scan.c b/drivers/net/wireless/iwlwifi/mvm/scan.c index 0d3c76b29242..2157b0f8ced5 100644 --- a/drivers/net/wireless/iwlwifi/mvm/scan.c +++ b/drivers/net/wireless/iwlwifi/mvm/scan.c | |||
@@ -74,7 +74,7 @@ | |||
74 | static inline __le16 iwl_mvm_scan_rx_chain(struct iwl_mvm *mvm) | 74 | static inline __le16 iwl_mvm_scan_rx_chain(struct iwl_mvm *mvm) |
75 | { | 75 | { |
76 | u16 rx_chain; | 76 | u16 rx_chain; |
77 | u8 rx_ant = mvm->nvm_data->valid_rx_ant; | 77 | u8 rx_ant = iwl_fw_valid_rx_ant(mvm->fw); |
78 | 78 | ||
79 | rx_chain = rx_ant << PHY_RX_CHAIN_VALID_POS; | 79 | rx_chain = rx_ant << PHY_RX_CHAIN_VALID_POS; |
80 | rx_chain |= rx_ant << PHY_RX_CHAIN_FORCE_MIMO_SEL_POS; | 80 | rx_chain |= rx_ant << PHY_RX_CHAIN_FORCE_MIMO_SEL_POS; |
@@ -115,7 +115,7 @@ iwl_mvm_scan_rate_n_flags(struct iwl_mvm *mvm, enum ieee80211_band band, | |||
115 | u32 tx_ant; | 115 | u32 tx_ant; |
116 | 116 | ||
117 | mvm->scan_last_antenna_idx = | 117 | mvm->scan_last_antenna_idx = |
118 | iwl_mvm_next_antenna(mvm, mvm->nvm_data->valid_tx_ant, | 118 | iwl_mvm_next_antenna(mvm, iwl_fw_valid_tx_ant(mvm->fw), |
119 | mvm->scan_last_antenna_idx); | 119 | mvm->scan_last_antenna_idx); |
120 | tx_ant = BIT(mvm->scan_last_antenna_idx) << RATE_MCS_ANT_POS; | 120 | tx_ant = BIT(mvm->scan_last_antenna_idx) << RATE_MCS_ANT_POS; |
121 | 121 | ||