ath11k: add RX stats support for radiotap
authorJohn Crispin <john@phrozen.org>
Mon, 25 Nov 2019 16:36:18 +0000 (16:36 +0000)
committerKalle Valo <kvalo@codeaurora.org>
Wed, 27 Nov 2019 15:45:35 +0000 (17:45 +0200)
mac80211 expects the definition of what HE rate info is available inside a
struct prepended to the skb.

Signed-off-by: Shashidhar Lakkavalli <slakkavalli@datto.com>
Signed-off-by: John Crispin <john@phrozen.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/ath/ath11k/dp_rx.c

index 9491a479fab516a47089ba4efbf7b4fc7bea6c2e..c498c4920e1179ff86b74769b00bca114ee8da77 100644 (file)
@@ -2038,11 +2038,21 @@ static char *ath11k_print_get_tid(struct ieee80211_hdr *hdr, char *out,
 static void ath11k_dp_rx_deliver_msdu(struct ath11k *ar, struct napi_struct *napi,
                                      struct sk_buff *msdu)
 {
+       static const struct ieee80211_radiotap_he known = {
+               .data1 = cpu_to_le16(IEEE80211_RADIOTAP_HE_DATA1_DATA_MCS_KNOWN),
+               .data2 = cpu_to_le16(IEEE80211_RADIOTAP_HE_DATA2_GI_KNOWN),
+       };
        struct ieee80211_rx_status *status;
        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)msdu->data;
+       struct ieee80211_radiotap_he *he = NULL;
        char tid[32];
 
        status = IEEE80211_SKB_RXCB(msdu);
+       if (status->encoding == RX_ENC_HE) {
+               he = skb_push(msdu, sizeof(known));
+               memcpy(he, &known, sizeof(known));
+               status->flag |= RX_FLAG_RADIOTAP_HE;
+       }
 
        ath11k_dbg(ar->ab, ATH11K_DBG_DATA,
                   "rx skb %pK len %u peer %pM %s %s sn %u %s%s%s%s%s%s%s %srate_idx %u vht_nss %u freq %u band %u flag 0x%x fcs-err %i mic-err %i amsdu-more %i\n",