diff options
author | Johannes Berg <johannes.berg@intel.com> | 2010-05-18 05:48:36 -0400 |
---|---|---|
committer | Reinette Chatre <reinette.chatre@intel.com> | 2010-06-06 02:19:44 -0400 |
commit | 0e1654fa2b91324ab91019c7dfabf3518aca54dd (patch) | |
tree | 6a04db2898f305c2c26dcc52070b67748ec6521b /drivers/net | |
parent | 3839f7ce6dc749e3170e1bfa656cfac748528117 (diff) |
iwlwifi: generic scan TX antenna forcing
In "iwlwifi: make scan antenna forcing more generic"
I introduced generic scan RX antenna forcing, which
here I rename to make it more evident. Also add scan
TX antenna forcing, since I will need that as well.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-4965.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-lib.c | 12 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-tx.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.c | 5 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.h | 5 |
6 files changed, 19 insertions, 11 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c index a51c4b8e65c7..83e6a42ca2da 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965.c +++ b/drivers/net/wireless/iwlwifi/iwl-4965.c | |||
@@ -2326,7 +2326,7 @@ struct iwl_cfg iwl4965_agn_cfg = { | |||
2326 | * Force use of chains B and C for scan RX on 5 GHz band | 2326 | * Force use of chains B and C for scan RX on 5 GHz band |
2327 | * because the device has off-channel reception on chain A. | 2327 | * because the device has off-channel reception on chain A. |
2328 | */ | 2328 | */ |
2329 | .scan_antennas[IEEE80211_BAND_5GHZ] = ANT_BC, | 2329 | .scan_rx_antennas[IEEE80211_BAND_5GHZ] = ANT_BC, |
2330 | }; | 2330 | }; |
2331 | 2331 | ||
2332 | /* Module firmware */ | 2332 | /* Module firmware */ |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c index 5bec72a91fd7..d339881e1d8f 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c | |||
@@ -1150,6 +1150,7 @@ void iwlagn_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif) | |||
1150 | bool is_active = false; | 1150 | bool is_active = false; |
1151 | int chan_mod; | 1151 | int chan_mod; |
1152 | u8 active_chains; | 1152 | u8 active_chains; |
1153 | u8 scan_tx_antennas = priv->hw_params.valid_tx_ant; | ||
1153 | 1154 | ||
1154 | conf = ieee80211_get_hw_conf(priv->hw); | 1155 | conf = ieee80211_get_hw_conf(priv->hw); |
1155 | 1156 | ||
@@ -1301,11 +1302,14 @@ void iwlagn_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif) | |||
1301 | 1302 | ||
1302 | band = priv->scan_band; | 1303 | band = priv->scan_band; |
1303 | 1304 | ||
1304 | if (priv->cfg->scan_antennas[band]) | 1305 | if (priv->cfg->scan_rx_antennas[band]) |
1305 | rx_ant = priv->cfg->scan_antennas[band]; | 1306 | rx_ant = priv->cfg->scan_rx_antennas[band]; |
1306 | 1307 | ||
1307 | priv->scan_tx_ant[band] = | 1308 | if (priv->cfg->scan_tx_antennas[band]) |
1308 | iwl_toggle_tx_ant(priv, priv->scan_tx_ant[band]); | 1309 | scan_tx_antennas = priv->cfg->scan_tx_antennas[band]; |
1310 | |||
1311 | priv->scan_tx_ant[band] = iwl_toggle_tx_ant(priv, priv->scan_tx_ant[band], | ||
1312 | scan_tx_antennas); | ||
1309 | rate_flags |= iwl_ant_idx_to_flags(priv->scan_tx_ant[band]); | 1313 | rate_flags |= iwl_ant_idx_to_flags(priv->scan_tx_ant[band]); |
1310 | scan->tx_cmd.rate_n_flags = iwl_hw_set_rate_n_flags(rate, rate_flags); | 1314 | scan->tx_cmd.rate_n_flags = iwl_hw_set_rate_n_flags(rate, rate_flags); |
1311 | 1315 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c index 0037a52f2e37..0d3e13b2442f 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c | |||
@@ -469,7 +469,8 @@ static void iwlagn_tx_cmd_build_rate(struct iwl_priv *priv, | |||
469 | } | 469 | } |
470 | 470 | ||
471 | /* Set up antennas */ | 471 | /* Set up antennas */ |
472 | priv->mgmt_tx_ant = iwl_toggle_tx_ant(priv, priv->mgmt_tx_ant); | 472 | priv->mgmt_tx_ant = iwl_toggle_tx_ant(priv, priv->mgmt_tx_ant, |
473 | priv->hw_params.valid_tx_ant); | ||
473 | rate_flags |= iwl_ant_idx_to_flags(priv->mgmt_tx_ant); | 474 | rate_flags |= iwl_ant_idx_to_flags(priv->mgmt_tx_ant); |
474 | 475 | ||
475 | /* Set the rate in the TX cmd */ | 476 | /* Set the rate in the TX cmd */ |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index a0e995ec453a..ac5fade28c8d 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -367,7 +367,8 @@ static unsigned int iwl_hw_get_beacon_cmd(struct iwl_priv *priv, | |||
367 | 367 | ||
368 | /* Set up packet rate and flags */ | 368 | /* Set up packet rate and flags */ |
369 | rate = iwl_rate_get_lowest_plcp(priv); | 369 | rate = iwl_rate_get_lowest_plcp(priv); |
370 | priv->mgmt_tx_ant = iwl_toggle_tx_ant(priv, priv->mgmt_tx_ant); | 370 | priv->mgmt_tx_ant = iwl_toggle_tx_ant(priv, priv->mgmt_tx_ant, |
371 | priv->hw_params.valid_tx_ant); | ||
371 | rate_flags = iwl_ant_idx_to_flags(priv->mgmt_tx_ant); | 372 | rate_flags = iwl_ant_idx_to_flags(priv->mgmt_tx_ant); |
372 | if ((rate >= IWL_FIRST_CCK_RATE) && (rate <= IWL_LAST_CCK_RATE)) | 373 | if ((rate >= IWL_FIRST_CCK_RATE) && (rate <= IWL_LAST_CCK_RATE)) |
373 | rate_flags |= RATE_MCS_CCK_MSK; | 374 | rate_flags |= RATE_MCS_CCK_MSK; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c index ec0f39c93106..00b2cdd3c11e 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.c +++ b/drivers/net/wireless/iwlwifi/iwl-core.c | |||
@@ -141,13 +141,14 @@ int iwl_hwrate_to_plcp_idx(u32 rate_n_flags) | |||
141 | } | 141 | } |
142 | EXPORT_SYMBOL(iwl_hwrate_to_plcp_idx); | 142 | EXPORT_SYMBOL(iwl_hwrate_to_plcp_idx); |
143 | 143 | ||
144 | u8 iwl_toggle_tx_ant(struct iwl_priv *priv, u8 ant) | 144 | u8 iwl_toggle_tx_ant(struct iwl_priv *priv, u8 ant, u8 valid) |
145 | { | 145 | { |
146 | int i; | 146 | int i; |
147 | u8 ind = ant; | 147 | u8 ind = ant; |
148 | |||
148 | for (i = 0; i < RATE_ANT_NUM - 1; i++) { | 149 | for (i = 0; i < RATE_ANT_NUM - 1; i++) { |
149 | ind = (ind + 1) < RATE_ANT_NUM ? ind + 1 : 0; | 150 | ind = (ind + 1) < RATE_ANT_NUM ? ind + 1 : 0; |
150 | if (priv->hw_params.valid_tx_ant & BIT(ind)) | 151 | if (valid & BIT(ind)) |
151 | return ind; | 152 | return ind; |
152 | } | 153 | } |
153 | return ant; | 154 | return ant; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h index 9fe08ecdc14b..87dd5731e515 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.h +++ b/drivers/net/wireless/iwlwifi/iwl-core.h | |||
@@ -328,7 +328,8 @@ struct iwl_cfg { | |||
328 | const bool ucode_tracing; | 328 | const bool ucode_tracing; |
329 | const bool sensitivity_calib_by_driver; | 329 | const bool sensitivity_calib_by_driver; |
330 | const bool chain_noise_calib_by_driver; | 330 | const bool chain_noise_calib_by_driver; |
331 | u8 scan_antennas[IEEE80211_NUM_BANDS]; | 331 | u8 scan_rx_antennas[IEEE80211_NUM_BANDS]; |
332 | u8 scan_tx_antennas[IEEE80211_NUM_BANDS]; | ||
332 | }; | 333 | }; |
333 | 334 | ||
334 | /*************************** | 335 | /*************************** |
@@ -499,7 +500,7 @@ int iwl_hwrate_to_plcp_idx(u32 rate_n_flags); | |||
499 | 500 | ||
500 | u8 iwl_rate_get_lowest_plcp(struct iwl_priv *priv); | 501 | u8 iwl_rate_get_lowest_plcp(struct iwl_priv *priv); |
501 | 502 | ||
502 | u8 iwl_toggle_tx_ant(struct iwl_priv *priv, u8 ant_idx); | 503 | u8 iwl_toggle_tx_ant(struct iwl_priv *priv, u8 ant_idx, u8 valid); |
503 | 504 | ||
504 | static inline u32 iwl_ant_idx_to_flags(u8 ant_idx) | 505 | static inline u32 iwl_ant_idx_to_flags(u8 ant_idx) |
505 | { | 506 | { |