diff options
author | Anilkumar Kolli <akolli@codeaurora.org> | 2018-10-11 18:15:03 +0530 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2018-10-12 13:05:40 +0200 |
commit | f8252e7b5a83deee0e477fc1e31e3f06ceb35d28 (patch) | |
tree | 0aec5d53368c62dc46a82d7643fe5ff0a07ce9e6 /net/mac80211/status.c | |
parent | 0d4e14a32dcab9c4bd559d02874120fbb86b1322 (diff) | |
download | linux-stable-f8252e7b5a83deee0e477fc1e31e3f06ceb35d28.tar.gz linux-stable-f8252e7b5a83deee0e477fc1e31e3f06ceb35d28.tar.bz2 linux-stable-f8252e7b5a83deee0e477fc1e31e3f06ceb35d28.zip |
mac80211: implement ieee80211_tx_rate_update to update rate
Current mac80211 has provision to update tx status through
ieee80211_tx_status() and ieee80211_tx_status_ext(). But
drivers like ath10k updates the tx status from the skb except
txrate, txrate will be updated from a different path, peer stats.
Using ieee80211_tx_status_ext() in two different paths
(one for the stats, one for the tx rate) would duplicate
the stats instead.
To avoid this stats duplication, ieee80211_tx_rate_update()
is implemented.
Signed-off-by: Anilkumar Kolli <akolli@codeaurora.org>
[minor commit message editing, use initializers in code]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/status.c')
-rw-r--r-- | net/mac80211/status.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/net/mac80211/status.c b/net/mac80211/status.c index 91d7c0cd1882..aa4afbf0abaf 100644 --- a/net/mac80211/status.c +++ b/net/mac80211/status.c @@ -987,6 +987,25 @@ void ieee80211_tx_status_ext(struct ieee80211_hw *hw, } EXPORT_SYMBOL(ieee80211_tx_status_ext); +void ieee80211_tx_rate_update(struct ieee80211_hw *hw, + struct ieee80211_sta *pubsta, + struct ieee80211_tx_info *info) +{ + struct ieee80211_local *local = hw_to_local(hw); + struct ieee80211_supported_band *sband = hw->wiphy->bands[info->band]; + struct sta_info *sta = container_of(pubsta, struct sta_info, sta); + struct ieee80211_tx_status status = { + .info = info, + .sta = pubsta, + }; + + rate_control_tx_status(local, sband, &status); + + if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL)) + sta->tx_stats.last_rate = info->status.rates[0]; +} +EXPORT_SYMBOL(ieee80211_tx_rate_update); + void ieee80211_report_low_ack(struct ieee80211_sta *pubsta, u32 num_packets) { struct sta_info *sta = container_of(pubsta, struct sta_info, sta); |