mac80211: separate encoding/bandwidth from flags
We currently use a lot of flags that are mutually incompatible, separate this out into actual encoding and bandwidth enum values. Much of this again done with spatch, with manual post-editing, mostly to add the switch statements and get rid of the conversions. @@ expression status; @@ -status->enc_flags |= RX_ENC_FLAG_80MHZ +status->bw = RATE_INFO_BW_80 @@ expression status; @@ -status->enc_flags |= RX_ENC_FLAG_40MHZ +status->bw = RATE_INFO_BW_40 @@ expression status; @@ -status->enc_flags |= RX_ENC_FLAG_20MHZ +status->bw = RATE_INFO_BW_20 @@ expression status; @@ -status->enc_flags |= RX_ENC_FLAG_160MHZ +status->bw = RATE_INFO_BW_160 @@ expression status; @@ -status->enc_flags |= RX_ENC_FLAG_5MHZ +status->bw = RATE_INFO_BW_5 @@ expression status; @@ -status->enc_flags |= RX_ENC_FLAG_10MHZ +status->bw = RATE_INFO_BW_10 @@ expression status; @@ -status->enc_flags |= RX_ENC_FLAG_VHT +status->encoding = RX_ENC_VHT @@ expression status; @@ -status->enc_flags |= RX_ENC_FLAG_HT +status->encoding = RX_ENC_HT @@ expression status; @@ -status.enc_flags |= RX_ENC_FLAG_VHT +status.encoding = RX_ENC_VHT @@ expression status; @@ -status.enc_flags |= RX_ENC_FLAG_HT +status.encoding = RX_ENC_HT @@ expression status; @@ -(status->enc_flags & RX_ENC_FLAG_HT) +(status->encoding == RX_ENC_HT) @@ expression status; @@ -(status->enc_flags & RX_ENC_FLAG_VHT) +(status->encoding == RX_ENC_VHT) @@ expression status; @@ -(status->enc_flags & RX_ENC_FLAG_5MHZ) +(status->bw == RATE_INFO_BW_5) @@ expression status; @@ -(status->enc_flags & RX_ENC_FLAG_10MHZ) +(status->bw == RATE_INFO_BW_10) @@ expression status; @@ -(status->enc_flags & RX_ENC_FLAG_40MHZ) +(status->bw == RATE_INFO_BW_40) @@ expression status; @@ -(status->enc_flags & RX_ENC_FLAG_80MHZ) +(status->bw == RATE_INFO_BW_80) @@ expression status; @@ -(status->enc_flags & RX_ENC_FLAG_160MHZ) +(status->bw == RATE_INFO_BW_160) Signed-off-by: Johannes Berg <johannes.berg@intel.com>
这个提交包含在:
@@ -495,6 +495,7 @@ int ath9k_hw_process_rxdesc_edma(struct ath_hw *ah, struct ath_rx_status *rxs,
|
||||
rxs->rs_status = 0;
|
||||
rxs->rs_flags = 0;
|
||||
rxs->enc_flags = 0;
|
||||
rxs->bw = RATE_INFO_BW_20;
|
||||
|
||||
rxs->rs_datalen = rxsp->status2 & AR_DataLen;
|
||||
rxs->rs_tstamp = rxsp->status3;
|
||||
|
@@ -181,13 +181,15 @@ int ath9k_cmn_process_rate(struct ath_common *common,
|
||||
sband = hw->wiphy->bands[band];
|
||||
|
||||
if (IS_CHAN_QUARTER_RATE(ah->curchan))
|
||||
rxs->enc_flags |= RX_ENC_FLAG_5MHZ;
|
||||
rxs->bw = RATE_INFO_BW_5;
|
||||
else if (IS_CHAN_HALF_RATE(ah->curchan))
|
||||
rxs->enc_flags |= RX_ENC_FLAG_10MHZ;
|
||||
rxs->bw = RATE_INFO_BW_10;
|
||||
|
||||
if (rx_stats->rs_rate & 0x80) {
|
||||
/* HT rate */
|
||||
rxs->enc_flags |= RX_ENC_FLAG_HT | rx_stats->enc_flags;
|
||||
rxs->encoding = RX_ENC_HT;
|
||||
rxs->enc_flags |= rx_stats->enc_flags;
|
||||
rxs->bw = rx_stats->bw;
|
||||
rxs->rate_idx = rx_stats->rs_rate & 0x7f;
|
||||
return 0;
|
||||
}
|
||||
|
@@ -116,7 +116,7 @@ void ath_debug_rate_stats(struct ath_softc *sc,
|
||||
if (rxs->rate_idx >= ARRAY_SIZE(rstats->ht_stats))
|
||||
goto exit;
|
||||
|
||||
if (rxs->enc_flags & RX_ENC_FLAG_40MHZ)
|
||||
if ((rxs->bw == RATE_INFO_BW_40))
|
||||
rstats->ht_stats[rxs->rate_idx].ht40_cnt++;
|
||||
else
|
||||
rstats->ht_stats[rxs->rate_idx].ht20_cnt++;
|
||||
|
@@ -930,8 +930,9 @@ static inline void convert_htc_flag(struct ath_rx_status *rx_stats,
|
||||
struct ath_htc_rx_status *rxstatus)
|
||||
{
|
||||
rx_stats->enc_flags = 0;
|
||||
rx_stats->bw = RATE_INFO_BW_20;
|
||||
if (rxstatus->rs_flags & ATH9K_RX_2040)
|
||||
rx_stats->enc_flags |= RX_ENC_FLAG_40MHZ;
|
||||
rx_stats->bw = RATE_INFO_BW_40;
|
||||
if (rxstatus->rs_flags & ATH9K_RX_GI)
|
||||
rx_stats->enc_flags |= RX_ENC_FLAG_SHORT_GI;
|
||||
}
|
||||
|
@@ -536,6 +536,7 @@ int ath9k_hw_rxprocdesc(struct ath_hw *ah, struct ath_desc *ds,
|
||||
rs->rs_status = 0;
|
||||
rs->rs_flags = 0;
|
||||
rs->enc_flags = 0;
|
||||
rs->bw = RATE_INFO_BW_20;
|
||||
|
||||
rs->rs_datalen = ads.ds_rxstatus1 & AR_DataLen;
|
||||
rs->rs_tstamp = ads.AR_RcvTimestamp;
|
||||
|
@@ -16,6 +16,7 @@
|
||||
|
||||
#ifndef MAC_H
|
||||
#define MAC_H
|
||||
#include <net/cfg80211.h>
|
||||
|
||||
#define set11nTries(_series, _index) \
|
||||
(SM((_series)[_index].Tries, AR_XmitDataTries##_index))
|
||||
@@ -144,6 +145,7 @@ struct ath_rx_status {
|
||||
u32 evm3;
|
||||
u32 evm4;
|
||||
u16 enc_flags;
|
||||
enum rate_info_bw bw;
|
||||
};
|
||||
|
||||
struct ath_htc_rx_status {
|
||||
|
@@ -1038,10 +1038,10 @@ static void ath_rx_count_airtime(struct ath_softc *sc,
|
||||
rxs = IEEE80211_SKB_RXCB(skb);
|
||||
|
||||
is_sgi = !!(rxs->enc_flags & RX_ENC_FLAG_SHORT_GI);
|
||||
is_40 = !!(rxs->enc_flags & RX_ENC_FLAG_40MHZ);
|
||||
is_40 = !!(rxs->bw == RATE_INFO_BW_40);
|
||||
is_sp = !!(rxs->enc_flags & RX_ENC_FLAG_SHORTPRE);
|
||||
|
||||
if (!!(rxs->enc_flags & RX_ENC_FLAG_HT)) {
|
||||
if (!!(rxs->encoding == RX_ENC_HT)) {
|
||||
/* MCS rates */
|
||||
|
||||
airtime += ath_pkt_duration(sc, rxs->rate_idx, len,
|
||||
|
在新工单中引用
屏蔽一个用户