mac80211: clean up rate encoding bits in RX status
In preparation for adding support for HE rates, clean up the driver report encoding for rate/bandwidth reporting on RX frames. Much of this patch was done with the following spatch: @@ expression status; @@ -status->flag & (RX_FLAG_HT | RX_FLAG_VHT) +status->enc_flags & (RX_ENC_FLAG_HT | RX_ENC_FLAG_VHT) @@ assignment operator op; expression status; @@ -status->flag op RX_FLAG_SHORTPRE +status->enc_flags op RX_ENC_FLAG_SHORTPRE @@ expression status; @@ -status->flag & RX_FLAG_SHORTPRE +status->enc_flags & RX_ENC_FLAG_SHORTPRE @@ assignment operator op; expression status; @@ -status->flag op RX_FLAG_HT +status->enc_flags op RX_ENC_FLAG_HT @@ expression status; @@ -status->flag & RX_FLAG_HT +status->enc_flags & RX_ENC_FLAG_HT @@ assignment operator op; expression status; @@ -status->flag op RX_FLAG_40MHZ +status->enc_flags op RX_ENC_FLAG_40MHZ @@ expression status; @@ -status->flag & RX_FLAG_40MHZ +status->enc_flags & RX_ENC_FLAG_40MHZ @@ assignment operator op; expression status; @@ -status->flag op RX_FLAG_SHORT_GI +status->enc_flags op RX_ENC_FLAG_SHORT_GI @@ expression status; @@ -status->flag & RX_FLAG_SHORT_GI +status->enc_flags & RX_ENC_FLAG_SHORT_GI @@ assignment operator op; expression status; @@ -status->flag op RX_FLAG_HT_GF +status->enc_flags op RX_ENC_FLAG_HT_GF @@ expression status; @@ -status->flag & RX_FLAG_HT_GF +status->enc_flags & RX_ENC_FLAG_HT_GF @@ assignment operator op; expression status; @@ -status->flag op RX_FLAG_VHT +status->enc_flags op RX_ENC_FLAG_VHT @@ expression status; @@ -status->flag & RX_FLAG_VHT +status->enc_flags & RX_ENC_FLAG_VHT @@ assignment operator op; expression status; @@ -status->flag op RX_FLAG_STBC_MASK +status->enc_flags op RX_ENC_FLAG_STBC_MASK @@ expression status; @@ -status->flag & RX_FLAG_STBC_MASK +status->enc_flags & RX_ENC_FLAG_STBC_MASK @@ assignment operator op; expression status; @@ -status->flag op RX_FLAG_LDPC +status->enc_flags op RX_ENC_FLAG_LDPC @@ expression status; @@ -status->flag & RX_FLAG_LDPC +status->enc_flags & RX_ENC_FLAG_LDPC @@ assignment operator op; expression status; @@ -status->flag op RX_FLAG_10MHZ +status->enc_flags op RX_ENC_FLAG_10MHZ @@ expression status; @@ -status->flag & RX_FLAG_10MHZ +status->enc_flags & RX_ENC_FLAG_10MHZ @@ assignment operator op; expression status; @@ -status->flag op RX_FLAG_5MHZ +status->enc_flags op RX_ENC_FLAG_5MHZ @@ expression status; @@ -status->flag & RX_FLAG_5MHZ +status->enc_flags & RX_ENC_FLAG_5MHZ @@ assignment operator op; expression status; @@ -status->vht_flag op RX_VHT_FLAG_80MHZ +status->enc_flags op RX_ENC_FLAG_80MHZ @@ expression status; @@ -status->vht_flag & RX_VHT_FLAG_80MHZ +status->enc_flags & RX_ENC_FLAG_80MHZ @@ assignment operator op; expression status; @@ -status->vht_flag op RX_VHT_FLAG_160MHZ +status->enc_flags op RX_ENC_FLAG_160MHZ @@ expression status; @@ -status->vht_flag & RX_VHT_FLAG_160MHZ +status->enc_flags & RX_ENC_FLAG_160MHZ @@ assignment operator op; expression status; @@ -status->vht_flag op RX_VHT_FLAG_BF +status->enc_flags op RX_ENC_FLAG_BF @@ expression status; @@ -status->vht_flag & RX_VHT_FLAG_BF +status->enc_flags & RX_ENC_FLAG_BF @@ assignment operator op; expression status, STBC; @@ -status->flag op STBC << RX_FLAG_STBC_SHIFT +status->enc_flags op STBC << RX_ENC_FLAG_STBC_SHIFT @@ assignment operator op; expression status; @@ -status.flag op RX_FLAG_SHORTPRE +status.enc_flags op RX_ENC_FLAG_SHORTPRE @@ expression status; @@ -status.flag & RX_FLAG_SHORTPRE +status.enc_flags & RX_ENC_FLAG_SHORTPRE @@ assignment operator op; expression status; @@ -status.flag op RX_FLAG_HT +status.enc_flags op RX_ENC_FLAG_HT @@ expression status; @@ -status.flag & RX_FLAG_HT +status.enc_flags & RX_ENC_FLAG_HT @@ assignment operator op; expression status; @@ -status.flag op RX_FLAG_40MHZ +status.enc_flags op RX_ENC_FLAG_40MHZ @@ expression status; @@ -status.flag & RX_FLAG_40MHZ +status.enc_flags & RX_ENC_FLAG_40MHZ @@ assignment operator op; expression status; @@ -status.flag op RX_FLAG_SHORT_GI +status.enc_flags op RX_ENC_FLAG_SHORT_GI @@ expression status; @@ -status.flag & RX_FLAG_SHORT_GI +status.enc_flags & RX_ENC_FLAG_SHORT_GI @@ assignment operator op; expression status; @@ -status.flag op RX_FLAG_HT_GF +status.enc_flags op RX_ENC_FLAG_HT_GF @@ expression status; @@ -status.flag & RX_FLAG_HT_GF +status.enc_flags & RX_ENC_FLAG_HT_GF @@ assignment operator op; expression status; @@ -status.flag op RX_FLAG_VHT +status.enc_flags op RX_ENC_FLAG_VHT @@ expression status; @@ -status.flag & RX_FLAG_VHT +status.enc_flags & RX_ENC_FLAG_VHT @@ assignment operator op; expression status; @@ -status.flag op RX_FLAG_STBC_MASK +status.enc_flags op RX_ENC_FLAG_STBC_MASK @@ expression status; @@ -status.flag & RX_FLAG_STBC_MASK +status.enc_flags & RX_ENC_FLAG_STBC_MASK @@ assignment operator op; expression status; @@ -status.flag op RX_FLAG_LDPC +status.enc_flags op RX_ENC_FLAG_LDPC @@ expression status; @@ -status.flag & RX_FLAG_LDPC +status.enc_flags & RX_ENC_FLAG_LDPC @@ assignment operator op; expression status; @@ -status.flag op RX_FLAG_10MHZ +status.enc_flags op RX_ENC_FLAG_10MHZ @@ expression status; @@ -status.flag & RX_FLAG_10MHZ +status.enc_flags & RX_ENC_FLAG_10MHZ @@ assignment operator op; expression status; @@ -status.flag op RX_FLAG_5MHZ +status.enc_flags op RX_ENC_FLAG_5MHZ @@ expression status; @@ -status.flag & RX_FLAG_5MHZ +status.enc_flags & RX_ENC_FLAG_5MHZ @@ assignment operator op; expression status; @@ -status.vht_flag op RX_VHT_FLAG_80MHZ +status.enc_flags op RX_ENC_FLAG_80MHZ @@ expression status; @@ -status.vht_flag & RX_VHT_FLAG_80MHZ +status.enc_flags & RX_ENC_FLAG_80MHZ @@ assignment operator op; expression status; @@ -status.vht_flag op RX_VHT_FLAG_160MHZ +status.enc_flags op RX_ENC_FLAG_160MHZ @@ expression status; @@ -status.vht_flag & RX_VHT_FLAG_160MHZ +status.enc_flags & RX_ENC_FLAG_160MHZ @@ assignment operator op; expression status; @@ -status.vht_flag op RX_VHT_FLAG_BF +status.enc_flags op RX_ENC_FLAG_BF @@ expression status; @@ -status.vht_flag & RX_VHT_FLAG_BF +status.enc_flags & RX_ENC_FLAG_BF @@ assignment operator op; expression status, STBC; @@ -status.flag op STBC << RX_FLAG_STBC_SHIFT +status.enc_flags op STBC << RX_ENC_FLAG_STBC_SHIFT @@ @@ -RX_FLAG_STBC_SHIFT +RX_ENC_FLAG_STBC_SHIFT Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
@@ -1014,9 +1014,9 @@ static void ieee80211_update_sta_info(struct ieee80211_sub_if_data *sdata,
|
||||
prev_rates = sta->sta.supp_rates[band];
|
||||
/* make sure mandatory rates are always added */
|
||||
scan_width = NL80211_BSS_CHAN_WIDTH_20;
|
||||
if (rx_status->flag & RX_FLAG_5MHZ)
|
||||
if (rx_status->enc_flags & RX_ENC_FLAG_5MHZ)
|
||||
scan_width = NL80211_BSS_CHAN_WIDTH_5;
|
||||
if (rx_status->flag & RX_FLAG_10MHZ)
|
||||
if (rx_status->enc_flags & RX_ENC_FLAG_10MHZ)
|
||||
scan_width = NL80211_BSS_CHAN_WIDTH_10;
|
||||
|
||||
sta->sta.supp_rates[band] = supp_rates |
|
||||
|
@@ -1532,7 +1532,7 @@ ieee80211_have_rx_timestamp(struct ieee80211_rx_status *status)
|
||||
return true;
|
||||
/* can't handle HT/VHT preamble yet */
|
||||
if (status->flag & RX_FLAG_MACTIME_PLCP_START &&
|
||||
!(status->flag & (RX_FLAG_HT | RX_FLAG_VHT)))
|
||||
!(status->enc_flags & (RX_ENC_FLAG_HT | RX_ENC_FLAG_VHT)))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
@@ -156,7 +156,7 @@ ieee80211_rx_radiotap_hdrlen(struct ieee80211_local *local,
|
||||
/* padding for RX_FLAGS if necessary */
|
||||
len = ALIGN(len, 2);
|
||||
|
||||
if (status->flag & RX_FLAG_HT) /* HT info */
|
||||
if (status->enc_flags & RX_ENC_FLAG_HT) /* HT info */
|
||||
len += 3;
|
||||
|
||||
if (status->flag & RX_FLAG_AMPDU_DETAILS) {
|
||||
@@ -164,7 +164,7 @@ ieee80211_rx_radiotap_hdrlen(struct ieee80211_local *local,
|
||||
len += 8;
|
||||
}
|
||||
|
||||
if (status->flag & RX_FLAG_VHT) {
|
||||
if (status->enc_flags & RX_ENC_FLAG_VHT) {
|
||||
len = ALIGN(len, 2);
|
||||
len += 12;
|
||||
}
|
||||
@@ -329,12 +329,12 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
|
||||
*pos |= IEEE80211_RADIOTAP_F_FCS;
|
||||
if (status->flag & (RX_FLAG_FAILED_FCS_CRC | RX_FLAG_FAILED_PLCP_CRC))
|
||||
*pos |= IEEE80211_RADIOTAP_F_BADFCS;
|
||||
if (status->flag & RX_FLAG_SHORTPRE)
|
||||
if (status->enc_flags & RX_ENC_FLAG_SHORTPRE)
|
||||
*pos |= IEEE80211_RADIOTAP_F_SHORTPRE;
|
||||
pos++;
|
||||
|
||||
/* IEEE80211_RADIOTAP_RATE */
|
||||
if (!rate || status->flag & (RX_FLAG_HT | RX_FLAG_VHT)) {
|
||||
if (!rate || status->enc_flags & (RX_ENC_FLAG_HT | RX_ENC_FLAG_VHT)) {
|
||||
/*
|
||||
* Without rate information don't add it. If we have,
|
||||
* MCS information is a separate field in radiotap,
|
||||
@@ -345,9 +345,9 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
|
||||
} else {
|
||||
int shift = 0;
|
||||
rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_RATE);
|
||||
if (status->flag & RX_FLAG_10MHZ)
|
||||
if (status->enc_flags & RX_ENC_FLAG_10MHZ)
|
||||
shift = 1;
|
||||
else if (status->flag & RX_FLAG_5MHZ)
|
||||
else if (status->enc_flags & RX_ENC_FLAG_5MHZ)
|
||||
shift = 2;
|
||||
*pos = DIV_ROUND_UP(rate->bitrate, 5 * (1 << shift));
|
||||
}
|
||||
@@ -356,14 +356,14 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
|
||||
/* IEEE80211_RADIOTAP_CHANNEL */
|
||||
put_unaligned_le16(status->freq, pos);
|
||||
pos += 2;
|
||||
if (status->flag & RX_FLAG_10MHZ)
|
||||
if (status->enc_flags & RX_ENC_FLAG_10MHZ)
|
||||
channel_flags |= IEEE80211_CHAN_HALF;
|
||||
else if (status->flag & RX_FLAG_5MHZ)
|
||||
else if (status->enc_flags & RX_ENC_FLAG_5MHZ)
|
||||
channel_flags |= IEEE80211_CHAN_QUARTER;
|
||||
|
||||
if (status->band == NL80211_BAND_5GHZ)
|
||||
channel_flags |= IEEE80211_CHAN_OFDM | IEEE80211_CHAN_5GHZ;
|
||||
else if (status->flag & (RX_FLAG_HT | RX_FLAG_VHT))
|
||||
else if (status->enc_flags & (RX_ENC_FLAG_HT | RX_ENC_FLAG_VHT))
|
||||
channel_flags |= IEEE80211_CHAN_DYN | IEEE80211_CHAN_2GHZ;
|
||||
else if (rate && rate->flags & IEEE80211_RATE_ERP_G)
|
||||
channel_flags |= IEEE80211_CHAN_OFDM | IEEE80211_CHAN_2GHZ;
|
||||
@@ -402,21 +402,21 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
|
||||
put_unaligned_le16(rx_flags, pos);
|
||||
pos += 2;
|
||||
|
||||
if (status->flag & RX_FLAG_HT) {
|
||||
if (status->enc_flags & RX_ENC_FLAG_HT) {
|
||||
unsigned int stbc;
|
||||
|
||||
rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_MCS);
|
||||
*pos++ = local->hw.radiotap_mcs_details;
|
||||
*pos = 0;
|
||||
if (status->flag & RX_FLAG_SHORT_GI)
|
||||
if (status->enc_flags & RX_ENC_FLAG_SHORT_GI)
|
||||
*pos |= IEEE80211_RADIOTAP_MCS_SGI;
|
||||
if (status->flag & RX_FLAG_40MHZ)
|
||||
if (status->enc_flags & RX_ENC_FLAG_40MHZ)
|
||||
*pos |= IEEE80211_RADIOTAP_MCS_BW_40;
|
||||
if (status->flag & RX_FLAG_HT_GF)
|
||||
if (status->enc_flags & RX_ENC_FLAG_HT_GF)
|
||||
*pos |= IEEE80211_RADIOTAP_MCS_FMT_GF;
|
||||
if (status->flag & RX_FLAG_LDPC)
|
||||
if (status->enc_flags & RX_ENC_FLAG_LDPC)
|
||||
*pos |= IEEE80211_RADIOTAP_MCS_FEC_LDPC;
|
||||
stbc = (status->flag & RX_FLAG_STBC_MASK) >> RX_FLAG_STBC_SHIFT;
|
||||
stbc = (status->enc_flags & RX_ENC_FLAG_STBC_MASK) >> RX_ENC_FLAG_STBC_SHIFT;
|
||||
*pos |= stbc << IEEE80211_RADIOTAP_MCS_STBC_SHIFT;
|
||||
pos++;
|
||||
*pos++ = status->rate_idx;
|
||||
@@ -449,27 +449,27 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
|
||||
*pos++ = 0;
|
||||
}
|
||||
|
||||
if (status->flag & RX_FLAG_VHT) {
|
||||
if (status->enc_flags & RX_ENC_FLAG_VHT) {
|
||||
u16 known = local->hw.radiotap_vht_details;
|
||||
|
||||
rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_VHT);
|
||||
put_unaligned_le16(known, pos);
|
||||
pos += 2;
|
||||
/* flags */
|
||||
if (status->flag & RX_FLAG_SHORT_GI)
|
||||
if (status->enc_flags & RX_ENC_FLAG_SHORT_GI)
|
||||
*pos |= IEEE80211_RADIOTAP_VHT_FLAG_SGI;
|
||||
/* in VHT, STBC is binary */
|
||||
if (status->flag & RX_FLAG_STBC_MASK)
|
||||
if (status->enc_flags & RX_ENC_FLAG_STBC_MASK)
|
||||
*pos |= IEEE80211_RADIOTAP_VHT_FLAG_STBC;
|
||||
if (status->vht_flag & RX_VHT_FLAG_BF)
|
||||
if (status->enc_flags & RX_ENC_FLAG_BF)
|
||||
*pos |= IEEE80211_RADIOTAP_VHT_FLAG_BEAMFORMED;
|
||||
pos++;
|
||||
/* bandwidth */
|
||||
if (status->vht_flag & RX_VHT_FLAG_80MHZ)
|
||||
if (status->enc_flags & RX_ENC_FLAG_80MHZ)
|
||||
*pos++ = 4;
|
||||
else if (status->vht_flag & RX_VHT_FLAG_160MHZ)
|
||||
else if (status->enc_flags & RX_ENC_FLAG_160MHZ)
|
||||
*pos++ = 11;
|
||||
else if (status->flag & RX_FLAG_40MHZ)
|
||||
else if (status->enc_flags & RX_ENC_FLAG_40MHZ)
|
||||
*pos++ = 1;
|
||||
else /* 20 MHz */
|
||||
*pos++ = 0;
|
||||
@@ -477,7 +477,7 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
|
||||
*pos = (status->rate_idx << 4) | status->vht_nss;
|
||||
pos += 4;
|
||||
/* coding field */
|
||||
if (status->flag & RX_FLAG_LDPC)
|
||||
if (status->enc_flags & RX_ENC_FLAG_LDPC)
|
||||
*pos |= IEEE80211_RADIOTAP_CODING_LDPC_USER0;
|
||||
pos++;
|
||||
/* group ID */
|
||||
@@ -3336,8 +3336,8 @@ static void ieee80211_rx_handlers_result(struct ieee80211_rx_data *rx,
|
||||
status = IEEE80211_SKB_RXCB((rx->skb));
|
||||
|
||||
sband = rx->local->hw.wiphy->bands[status->band];
|
||||
if (!(status->flag & RX_FLAG_HT) &&
|
||||
!(status->flag & RX_FLAG_VHT))
|
||||
if (!(status->enc_flags & RX_ENC_FLAG_HT) &&
|
||||
!(status->enc_flags & RX_ENC_FLAG_VHT))
|
||||
rate = &sband->bitrates[status->rate_idx];
|
||||
|
||||
ieee80211_rx_cooked_monitor(rx, rate);
|
||||
@@ -3598,7 +3598,7 @@ static bool ieee80211_accept_frame(struct ieee80211_rx_data *rx)
|
||||
return false;
|
||||
if (!rx->sta) {
|
||||
int rate_idx;
|
||||
if (status->flag & (RX_FLAG_HT | RX_FLAG_VHT))
|
||||
if (status->enc_flags & (RX_ENC_FLAG_HT | RX_ENC_FLAG_VHT))
|
||||
rate_idx = 0; /* TODO: HT/VHT rates */
|
||||
else
|
||||
rate_idx = status->rate_idx;
|
||||
@@ -3618,7 +3618,7 @@ static bool ieee80211_accept_frame(struct ieee80211_rx_data *rx)
|
||||
return false;
|
||||
if (!rx->sta) {
|
||||
int rate_idx;
|
||||
if (status->flag & RX_FLAG_HT)
|
||||
if (status->enc_flags & RX_ENC_FLAG_HT)
|
||||
rate_idx = 0; /* TODO: HT rates */
|
||||
else
|
||||
rate_idx = status->rate_idx;
|
||||
@@ -4281,7 +4281,7 @@ void ieee80211_rx_napi(struct ieee80211_hw *hw, struct ieee80211_sta *pubsta,
|
||||
* we probably can't have a valid rate here anyway.
|
||||
*/
|
||||
|
||||
if (status->flag & RX_FLAG_HT) {
|
||||
if (status->enc_flags & RX_ENC_FLAG_HT) {
|
||||
/*
|
||||
* rate_idx is MCS index, which can be [0-76]
|
||||
* as documented on:
|
||||
@@ -4299,7 +4299,7 @@ void ieee80211_rx_napi(struct ieee80211_hw *hw, struct ieee80211_sta *pubsta,
|
||||
status->rate_idx,
|
||||
status->rate_idx))
|
||||
goto drop;
|
||||
} else if (status->flag & RX_FLAG_VHT) {
|
||||
} else if (status->enc_flags & RX_ENC_FLAG_VHT) {
|
||||
if (WARN_ONCE(status->rate_idx > 9 ||
|
||||
!status->vht_nss ||
|
||||
status->vht_nss > 8,
|
||||
|
@@ -79,9 +79,9 @@ ieee80211_bss_info_update(struct ieee80211_local *local,
|
||||
bss_meta.signal = (rx_status->signal * 100) / local->hw.max_signal;
|
||||
|
||||
bss_meta.scan_width = NL80211_BSS_CHAN_WIDTH_20;
|
||||
if (rx_status->flag & RX_FLAG_5MHZ)
|
||||
if (rx_status->enc_flags & RX_ENC_FLAG_5MHZ)
|
||||
bss_meta.scan_width = NL80211_BSS_CHAN_WIDTH_5;
|
||||
if (rx_status->flag & RX_FLAG_10MHZ)
|
||||
if (rx_status->enc_flags & RX_ENC_FLAG_10MHZ)
|
||||
bss_meta.scan_width = NL80211_BSS_CHAN_WIDTH_10;
|
||||
|
||||
bss_meta.chan = channel;
|
||||
@@ -174,8 +174,8 @@ ieee80211_bss_info_update(struct ieee80211_local *local,
|
||||
if (beacon) {
|
||||
struct ieee80211_supported_band *sband =
|
||||
local->hw.wiphy->bands[rx_status->band];
|
||||
if (!(rx_status->flag & RX_FLAG_HT) &&
|
||||
!(rx_status->flag & RX_FLAG_VHT))
|
||||
if (!(rx_status->enc_flags & RX_ENC_FLAG_HT) &&
|
||||
!(rx_status->enc_flags & RX_ENC_FLAG_VHT))
|
||||
bss->beacon_rate =
|
||||
&sband->bitrates[rx_status->rate_idx];
|
||||
}
|
||||
|
@@ -740,25 +740,25 @@ static inline u16 sta_stats_encode_rate(struct ieee80211_rx_status *s)
|
||||
{
|
||||
u16 r = s->rate_idx;
|
||||
|
||||
if (s->vht_flag & RX_VHT_FLAG_80MHZ)
|
||||
if (s->enc_flags & RX_ENC_FLAG_80MHZ)
|
||||
r |= RATE_INFO_BW_80 << STA_STATS_RATE_BW_SHIFT;
|
||||
else if (s->vht_flag & RX_VHT_FLAG_160MHZ)
|
||||
else if (s->enc_flags & RX_ENC_FLAG_160MHZ)
|
||||
r |= RATE_INFO_BW_160 << STA_STATS_RATE_BW_SHIFT;
|
||||
else if (s->flag & RX_FLAG_40MHZ)
|
||||
else if (s->enc_flags & RX_ENC_FLAG_40MHZ)
|
||||
r |= RATE_INFO_BW_40 << STA_STATS_RATE_BW_SHIFT;
|
||||
else if (s->flag & RX_FLAG_10MHZ)
|
||||
else if (s->enc_flags & RX_ENC_FLAG_10MHZ)
|
||||
r |= RATE_INFO_BW_10 << STA_STATS_RATE_BW_SHIFT;
|
||||
else if (s->flag & RX_FLAG_5MHZ)
|
||||
else if (s->enc_flags & RX_ENC_FLAG_5MHZ)
|
||||
r |= RATE_INFO_BW_5 << STA_STATS_RATE_BW_SHIFT;
|
||||
else
|
||||
r |= RATE_INFO_BW_20 << STA_STATS_RATE_BW_SHIFT;
|
||||
|
||||
if (s->flag & RX_FLAG_SHORT_GI)
|
||||
if (s->enc_flags & RX_ENC_FLAG_SHORT_GI)
|
||||
r |= STA_STATS_RATE_SGI;
|
||||
|
||||
if (s->flag & RX_FLAG_VHT)
|
||||
if (s->enc_flags & RX_ENC_FLAG_VHT)
|
||||
r |= STA_STATS_RATE_TYPE_VHT | (s->vht_nss << 4);
|
||||
else if (s->flag & RX_FLAG_HT)
|
||||
else if (s->enc_flags & RX_ENC_FLAG_HT)
|
||||
r |= STA_STATS_RATE_TYPE_HT;
|
||||
else
|
||||
r |= STA_STATS_RATE_TYPE_LEGACY | (s->band << 4);
|
||||
|
@@ -2715,38 +2715,38 @@ u64 ieee80211_calculate_rx_timestamp(struct ieee80211_local *local,
|
||||
memset(&ri, 0, sizeof(ri));
|
||||
|
||||
/* Fill cfg80211 rate info */
|
||||
if (status->flag & RX_FLAG_HT) {
|
||||
if (status->enc_flags & RX_ENC_FLAG_HT) {
|
||||
ri.mcs = status->rate_idx;
|
||||
ri.flags |= RATE_INFO_FLAGS_MCS;
|
||||
if (status->flag & RX_FLAG_40MHZ)
|
||||
if (status->enc_flags & RX_ENC_FLAG_40MHZ)
|
||||
ri.bw = RATE_INFO_BW_40;
|
||||
else
|
||||
ri.bw = RATE_INFO_BW_20;
|
||||
if (status->flag & RX_FLAG_SHORT_GI)
|
||||
if (status->enc_flags & RX_ENC_FLAG_SHORT_GI)
|
||||
ri.flags |= RATE_INFO_FLAGS_SHORT_GI;
|
||||
} else if (status->flag & RX_FLAG_VHT) {
|
||||
} else if (status->enc_flags & RX_ENC_FLAG_VHT) {
|
||||
ri.flags |= RATE_INFO_FLAGS_VHT_MCS;
|
||||
ri.mcs = status->rate_idx;
|
||||
ri.nss = status->vht_nss;
|
||||
if (status->flag & RX_FLAG_40MHZ)
|
||||
if (status->enc_flags & RX_ENC_FLAG_40MHZ)
|
||||
ri.bw = RATE_INFO_BW_40;
|
||||
else if (status->vht_flag & RX_VHT_FLAG_80MHZ)
|
||||
else if (status->enc_flags & RX_ENC_FLAG_80MHZ)
|
||||
ri.bw = RATE_INFO_BW_80;
|
||||
else if (status->vht_flag & RX_VHT_FLAG_160MHZ)
|
||||
else if (status->enc_flags & RX_ENC_FLAG_160MHZ)
|
||||
ri.bw = RATE_INFO_BW_160;
|
||||
else
|
||||
ri.bw = RATE_INFO_BW_20;
|
||||
if (status->flag & RX_FLAG_SHORT_GI)
|
||||
if (status->enc_flags & RX_ENC_FLAG_SHORT_GI)
|
||||
ri.flags |= RATE_INFO_FLAGS_SHORT_GI;
|
||||
} else {
|
||||
struct ieee80211_supported_band *sband;
|
||||
int shift = 0;
|
||||
int bitrate;
|
||||
|
||||
if (status->flag & RX_FLAG_10MHZ) {
|
||||
if (status->enc_flags & RX_ENC_FLAG_10MHZ) {
|
||||
shift = 1;
|
||||
ri.bw = RATE_INFO_BW_10;
|
||||
} else if (status->flag & RX_FLAG_5MHZ) {
|
||||
} else if (status->enc_flags & RX_ENC_FLAG_5MHZ) {
|
||||
shift = 2;
|
||||
ri.bw = RATE_INFO_BW_5;
|
||||
} else {
|
||||
@@ -2762,7 +2762,7 @@ u64 ieee80211_calculate_rx_timestamp(struct ieee80211_local *local,
|
||||
if (status->band == NL80211_BAND_5GHZ) {
|
||||
ts += 20 << shift;
|
||||
mpdu_offset += 2;
|
||||
} else if (status->flag & RX_FLAG_SHORTPRE) {
|
||||
} else if (status->enc_flags & RX_ENC_FLAG_SHORTPRE) {
|
||||
ts += 96;
|
||||
} else {
|
||||
ts += 192;
|
||||
|
Reference in New Issue
Block a user