]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath12k: report station mode receive rate for IEEE 802.11be
authorLingbo Kong <quic_lingbok@quicinc.com>
Wed, 15 Jan 2025 06:35:36 +0000 (14:35 +0800)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Sun, 26 Jan 2025 18:41:27 +0000 (10:41 -0800)
Currently, the receive rate of EHT of "iw dev xxx station dump" command
always show an invalid value.

This is because ath12k does not pass information about the rx_status of EHT
to mac80211. So, mac80211 not calculate the receive rate.

To address this issue, add logic for handling rx_status of EHT to the
ath12k_dp_rx_h_rate() function.

After that, "iw dev xxx station dump" show the correct receive rate.
Such as:

Station 00:03:7f:12:03:03 (on wlo1)
        inactive time:  48 ms
        rx bytes:       59226
        rx packets:     320
        tx bytes:       26556
        tx packets:     191
        tx retries:     99
        tx failed:      0
        beacon loss:    0
        beacon rx:      79
        rx drop misc:   68
        signal:         -95 dBm
        beacon signal avg:      -20 dBm
        tx bitrate:     688.2 MBit/s 40MHz EHT-MCS 13 EHT-NSS 2 EHT-GI 0
        tx duration:    0 us
        rx bitrate:     619.5 MBit/s 40MHz EHT-MCS 8 EHT-NSS 3 EHT-GI 0

This patch affects the station mode of WCN7850 and QCN9274.

Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.1.1-00214-QCAHKSWPL_SILICONZ-1

Signed-off-by: Lingbo Kong <quic_lingbok@quicinc.com>
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219715
Link: https://patch.msgid.link/20250115063537.35797-3-quic_lingbok@quicinc.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/dp_rx.c
drivers/net/wireless/ath/ath12k/rx_desc.h

index dad35bfd83f6271253361c618534933e83e7f7fb..09e35dd757e067406def3a85b51ec96bfdf994cf 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: BSD-3-Clause-Clear
 /*
  * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
  */
 
 #include <linux/ieee80211.h>
@@ -2392,6 +2392,23 @@ static void ath12k_dp_rx_h_rate(struct ath12k *ar, struct hal_rx_desc *rx_desc,
                rx_status->he_gi = ath12k_he_gi_to_nl80211_he_gi(sgi);
                rx_status->bw = ath12k_mac_bw_to_mac80211_bw(bw);
                break;
+       case RX_MSDU_START_PKT_TYPE_11BE:
+               rx_status->rate_idx = rate_mcs;
+
+               if (rate_mcs > ATH12K_EHT_MCS_MAX) {
+                       ath12k_warn(ar->ab,
+                                   "Received with invalid mcs in EHT mode %d\n",
+                                   rate_mcs);
+                       break;
+               }
+
+               rx_status->encoding = RX_ENC_EHT;
+               rx_status->nss = nss;
+               rx_status->eht.gi = ath12k_mac_eht_gi_to_nl80211_eht_gi(sgi);
+               rx_status->bw = ath12k_mac_bw_to_mac80211_bw(bw);
+               break;
+       default:
+               break;
        }
 }
 
@@ -2486,7 +2503,7 @@ static void ath12k_dp_rx_deliver_msdu(struct ath12k *ar, struct napi_struct *nap
        spin_unlock_bh(&ab->base_lock);
 
        ath12k_dbg(ab, ATH12K_DBG_DATA,
-                  "rx skb %p len %u peer %pM %d %s sn %u %s%s%s%s%s%s%s%s%s rate_idx %u vht_nss %u freq %u band %u flag 0x%x fcs-err %i mic-err %i amsdu-more %i\n",
+                  "rx skb %p len %u peer %pM %d %s sn %u %s%s%s%s%s%s%s%s%s%s rate_idx %u vht_nss %u freq %u band %u flag 0x%x fcs-err %i mic-err %i amsdu-more %i\n",
                   msdu,
                   msdu->len,
                   peer ? peer->addr : NULL,
@@ -2497,6 +2514,7 @@ static void ath12k_dp_rx_deliver_msdu(struct ath12k *ar, struct napi_struct *nap
                   (status->encoding == RX_ENC_HT) ? "ht" : "",
                   (status->encoding == RX_ENC_VHT) ? "vht" : "",
                   (status->encoding == RX_ENC_HE) ? "he" : "",
+                  (status->encoding == RX_ENC_EHT) ? "eht" : "",
                   (status->bw == RATE_INFO_BW_40) ? "40" : "",
                   (status->bw == RATE_INFO_BW_80) ? "80" : "",
                   (status->bw == RATE_INFO_BW_160) ? "160" : "",
index 777506a67d65682bf2526a2060fa248fc12d4b4d..7367935ee68b36f59d542b7000073603a9a8d947 100644 (file)
@@ -637,6 +637,8 @@ enum rx_msdu_start_pkt_type {
        RX_MSDU_START_PKT_TYPE_11N,
        RX_MSDU_START_PKT_TYPE_11AC,
        RX_MSDU_START_PKT_TYPE_11AX,
+       RX_MSDU_START_PKT_TYPE_11BA,
+       RX_MSDU_START_PKT_TYPE_11BE,
 };
 
 enum rx_msdu_start_sgi {