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>
This commit is contained in:
parent
3839f7ce6d
commit
0e1654fa2b
6 changed files with 19 additions and 11 deletions
|
@ -2326,7 +2326,7 @@ struct iwl_cfg iwl4965_agn_cfg = {
|
|||
* Force use of chains B and C for scan RX on 5 GHz band
|
||||
* because the device has off-channel reception on chain A.
|
||||
*/
|
||||
.scan_antennas[IEEE80211_BAND_5GHZ] = ANT_BC,
|
||||
.scan_rx_antennas[IEEE80211_BAND_5GHZ] = ANT_BC,
|
||||
};
|
||||
|
||||
/* Module firmware */
|
||||
|
|
|
@ -1150,6 +1150,7 @@ void iwlagn_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif)
|
|||
bool is_active = false;
|
||||
int chan_mod;
|
||||
u8 active_chains;
|
||||
u8 scan_tx_antennas = priv->hw_params.valid_tx_ant;
|
||||
|
||||
conf = ieee80211_get_hw_conf(priv->hw);
|
||||
|
||||
|
@ -1301,11 +1302,14 @@ void iwlagn_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif)
|
|||
|
||||
band = priv->scan_band;
|
||||
|
||||
if (priv->cfg->scan_antennas[band])
|
||||
rx_ant = priv->cfg->scan_antennas[band];
|
||||
if (priv->cfg->scan_rx_antennas[band])
|
||||
rx_ant = priv->cfg->scan_rx_antennas[band];
|
||||
|
||||
priv->scan_tx_ant[band] =
|
||||
iwl_toggle_tx_ant(priv, priv->scan_tx_ant[band]);
|
||||
if (priv->cfg->scan_tx_antennas[band])
|
||||
scan_tx_antennas = priv->cfg->scan_tx_antennas[band];
|
||||
|
||||
priv->scan_tx_ant[band] = iwl_toggle_tx_ant(priv, priv->scan_tx_ant[band],
|
||||
scan_tx_antennas);
|
||||
rate_flags |= iwl_ant_idx_to_flags(priv->scan_tx_ant[band]);
|
||||
scan->tx_cmd.rate_n_flags = iwl_hw_set_rate_n_flags(rate, rate_flags);
|
||||
|
||||
|
|
|
@ -469,7 +469,8 @@ static void iwlagn_tx_cmd_build_rate(struct iwl_priv *priv,
|
|||
}
|
||||
|
||||
/* Set up antennas */
|
||||
priv->mgmt_tx_ant = iwl_toggle_tx_ant(priv, priv->mgmt_tx_ant);
|
||||
priv->mgmt_tx_ant = iwl_toggle_tx_ant(priv, priv->mgmt_tx_ant,
|
||||
priv->hw_params.valid_tx_ant);
|
||||
rate_flags |= iwl_ant_idx_to_flags(priv->mgmt_tx_ant);
|
||||
|
||||
/* Set the rate in the TX cmd */
|
||||
|
|
|
@ -367,7 +367,8 @@ static unsigned int iwl_hw_get_beacon_cmd(struct iwl_priv *priv,
|
|||
|
||||
/* Set up packet rate and flags */
|
||||
rate = iwl_rate_get_lowest_plcp(priv);
|
||||
priv->mgmt_tx_ant = iwl_toggle_tx_ant(priv, priv->mgmt_tx_ant);
|
||||
priv->mgmt_tx_ant = iwl_toggle_tx_ant(priv, priv->mgmt_tx_ant,
|
||||
priv->hw_params.valid_tx_ant);
|
||||
rate_flags = iwl_ant_idx_to_flags(priv->mgmt_tx_ant);
|
||||
if ((rate >= IWL_FIRST_CCK_RATE) && (rate <= IWL_LAST_CCK_RATE))
|
||||
rate_flags |= RATE_MCS_CCK_MSK;
|
||||
|
|
|
@ -141,13 +141,14 @@ int iwl_hwrate_to_plcp_idx(u32 rate_n_flags)
|
|||
}
|
||||
EXPORT_SYMBOL(iwl_hwrate_to_plcp_idx);
|
||||
|
||||
u8 iwl_toggle_tx_ant(struct iwl_priv *priv, u8 ant)
|
||||
u8 iwl_toggle_tx_ant(struct iwl_priv *priv, u8 ant, u8 valid)
|
||||
{
|
||||
int i;
|
||||
u8 ind = ant;
|
||||
|
||||
for (i = 0; i < RATE_ANT_NUM - 1; i++) {
|
||||
ind = (ind + 1) < RATE_ANT_NUM ? ind + 1 : 0;
|
||||
if (priv->hw_params.valid_tx_ant & BIT(ind))
|
||||
if (valid & BIT(ind))
|
||||
return ind;
|
||||
}
|
||||
return ant;
|
||||
|
|
|
@ -328,7 +328,8 @@ struct iwl_cfg {
|
|||
const bool ucode_tracing;
|
||||
const bool sensitivity_calib_by_driver;
|
||||
const bool chain_noise_calib_by_driver;
|
||||
u8 scan_antennas[IEEE80211_NUM_BANDS];
|
||||
u8 scan_rx_antennas[IEEE80211_NUM_BANDS];
|
||||
u8 scan_tx_antennas[IEEE80211_NUM_BANDS];
|
||||
};
|
||||
|
||||
/***************************
|
||||
|
@ -499,7 +500,7 @@ int iwl_hwrate_to_plcp_idx(u32 rate_n_flags);
|
|||
|
||||
u8 iwl_rate_get_lowest_plcp(struct iwl_priv *priv);
|
||||
|
||||
u8 iwl_toggle_tx_ant(struct iwl_priv *priv, u8 ant_idx);
|
||||
u8 iwl_toggle_tx_ant(struct iwl_priv *priv, u8 ant_idx, u8 valid);
|
||||
|
||||
static inline u32 iwl_ant_idx_to_flags(u8 ant_idx)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue