Commit 7534e966 authored by Johannes Berg's avatar Johannes Berg

wifi: iwlwifi: mvm: support injection antenna control

Pull up the injection rate control one layer, and let it
control the antenna settings as well. Since mac80211 has
already checked that enough antennas are configured, and
we only have two bits, it's enough to just copy the data
over.
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarGregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230921110727.12ab7634dbbc.I5aa16c99864ecd7375011a8996de2564fd01fc30@changeidSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent b99c4607
...@@ -295,7 +295,9 @@ static u32 iwl_mvm_convert_rate_idx(struct iwl_mvm *mvm, ...@@ -295,7 +295,9 @@ static u32 iwl_mvm_convert_rate_idx(struct iwl_mvm *mvm,
} }
static u32 iwl_mvm_get_inject_tx_rate(struct iwl_mvm *mvm, static u32 iwl_mvm_get_inject_tx_rate(struct iwl_mvm *mvm,
struct ieee80211_tx_info *info) struct ieee80211_tx_info *info,
struct ieee80211_sta *sta,
__le16 fc)
{ {
struct ieee80211_tx_rate *rate = &info->control.rates[0]; struct ieee80211_tx_rate *rate = &info->control.rates[0];
u32 result; u32 result;
...@@ -345,6 +347,12 @@ static u32 iwl_mvm_get_inject_tx_rate(struct iwl_mvm *mvm, ...@@ -345,6 +347,12 @@ static u32 iwl_mvm_get_inject_tx_rate(struct iwl_mvm *mvm,
result = iwl_mvm_convert_rate_idx(mvm, info, rate_idx); result = iwl_mvm_convert_rate_idx(mvm, info, rate_idx);
} }
if (info->control.antennas)
result |= u32_encode_bits(info->control.antennas,
RATE_MCS_ANT_AB_MSK);
else
result |= iwl_mvm_get_tx_ant(mvm, info, sta, fc);
return result; return result;
} }
...@@ -354,9 +362,6 @@ static u32 iwl_mvm_get_tx_rate(struct iwl_mvm *mvm, ...@@ -354,9 +362,6 @@ static u32 iwl_mvm_get_tx_rate(struct iwl_mvm *mvm,
{ {
int rate_idx = -1; int rate_idx = -1;
if (unlikely(info->control.flags & IEEE80211_TX_CTRL_RATE_INJECT))
return iwl_mvm_get_inject_tx_rate(mvm, info);
if (!ieee80211_hw_check(mvm->hw, HAS_RATE_CONTROL)) { if (!ieee80211_hw_check(mvm->hw, HAS_RATE_CONTROL)) {
/* info->control is only relevant for non HW rate control */ /* info->control is only relevant for non HW rate control */
...@@ -389,6 +394,9 @@ static u32 iwl_mvm_get_tx_rate_n_flags(struct iwl_mvm *mvm, ...@@ -389,6 +394,9 @@ static u32 iwl_mvm_get_tx_rate_n_flags(struct iwl_mvm *mvm,
struct ieee80211_tx_info *info, struct ieee80211_tx_info *info,
struct ieee80211_sta *sta, __le16 fc) struct ieee80211_sta *sta, __le16 fc)
{ {
if (unlikely(info->control.flags & IEEE80211_TX_CTRL_RATE_INJECT))
return iwl_mvm_get_inject_tx_rate(mvm, info, sta, fc);
return iwl_mvm_get_tx_rate(mvm, info, sta, fc) | return iwl_mvm_get_tx_rate(mvm, info, sta, fc) |
iwl_mvm_get_tx_ant(mvm, info, sta, fc); iwl_mvm_get_tx_ant(mvm, info, sta, fc);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment