Search Linux Wireless

Re: [PATCH v4 1/3] wifi: ath12k: report station mode transmit rate

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 2024/4/29 17:11, Karthikeyan Periyasamy wrote:


On 4/19/2024 8:51 AM, Lingbo Kong wrote:
Currently, the transmit rate of "iw dev xxx station dump" command
always show an invalid value.

To address this issue, ath12k parse the info of transmit complete
report from firmware and indicate the transmit rate to mac80211.

This patch affects the station mode of WCN7850 and QCN9274.

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

Station 00:03:7f:12:03:03 (on wlo1)
         inactive time:  872 ms
         rx bytes:       219111
         rx packets:     1133
         tx bytes:       53767
         tx packets:     462
         tx retries:     51
         tx failed:      0
         beacon loss:    0
         beacon rx:      403
         rx drop misc:   74
         signal:         -95 dBm
         beacon signal avg:      -18 dBm
         tx bitrate:     1441.1 MBit/s 80MHz EHT-MCS 13 EHT-NSS 2 EHT-GI 0

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.2.1-00201-QCAHKSWPL_SILICONZ-1

Signed-off-by: Lingbo Kong <quic_lingbok@xxxxxxxxxxx>
[...]
@@ -522,10 +645,26 @@ static void ath12k_dp_tx_status_parse(struct ath12k_base *ab,
      ts->ppdu_id = le32_get_bits(desc->info1,
                      HAL_WBM_COMPL_TX_INFO1_TQM_STATUS_NUMBER);
-    if (le32_to_cpu(desc->rate_stats.info0) & HAL_TX_RATE_STATS_INFO0_VALID)
-        ts->rate_stats = le32_to_cpu(desc->rate_stats.info0);
-    else
-        ts->rate_stats = 0;
+
+    if (le32_to_cpu(desc->info2) & HAL_WBM_COMPL_TX_INFO2_FIRST_MSDU)
+        ts->flags |= HAL_TX_STATUS_FLAGS_FIRST_MSDU;
+
+    ts->peer_id = le32_get_bits(desc->info3, HAL_WBM_COMPL_TX_INFO3_PEER_ID);
+
+    if (le32_to_cpu(desc->rate_stats.info0) & HAL_TX_RATE_STATS_INFO0_VALID) {
+        ts->pkt_type = le32_get_bits(desc->rate_stats.info0,
+                         HAL_TX_RATE_STATS_INFO0_PKT_TYPE);
+        ts->mcs = le32_get_bits(desc->rate_stats.info0,
+                    HAL_TX_RATE_STATS_INFO0_MCS);
+        ts->sgi = le32_get_bits(desc->rate_stats.info0,
+                    HAL_TX_RATE_STATS_INFO0_SGI);
+        ts->bw = le32_get_bits(desc->rate_stats.info0,
+                       HAL_TX_RATE_STATS_INFO0_BW);
+        ts->ru_tones = le32_get_bits(desc->rate_stats.info0,
+                         HAL_TX_RATE_STATS_INFO0_TONES_IN_RU);
+        ts->ofdma = le32_get_bits(desc->rate_stats.info0,
+                      HAL_TX_RATE_STATS_INFO0_OFDMA_TX);
+    }


Why multiple read from dma mapped area say desc->rate_stats.info0 lead to increase in CPU cycles. Instead you do one read from dma mapped area desc->rate_stats.info0 and classify into your own data structure ?

And the info0 classification used within the ath12k_dp_tx_update_txcompl(), so you can do the classification within this API.

yes, thanks for pointing of this.
i will apply it in next version:),

Best regards
Lingbo Kong






[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux