ath11k: Update pdev tx and rx firmware stats
authorSriram R <srirrama@codeaurora.org>
Tue, 28 Sep 2021 09:05:40 +0000 (12:05 +0300)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 28 Sep 2021 10:57:31 +0000 (13:57 +0300)
Update the fields of pdev tx and tx firmware stats structure.
Missing fields resulted in wrong fw stats to be displayed as below.

root@OpenWrt:/# cat /sys/kernel/debug/ath11k/
ipq8074\ hw2.0/mac0/fw_stats/pdev_stats | grep Illegal
Illegal rate phy errors   36839112

Note that this struct was missing its members from initial driver
support and this change doesn't introduce/modify the structure for
firmware changes.

Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01734-QCAHKSWPL_SILICONZ-1 v2

Signed-off-by: Sriram R <srirrama@codeaurora.org>
Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20210721212029.142388-2-jouni@codeaurora.org
drivers/net/wireless/ath/ath11k/core.h
drivers/net/wireless/ath/ath11k/wmi.c
drivers/net/wireless/ath/ath11k/wmi.h

index f80f6a8a0709719032999e6f52fde127781cab0d..515eb79bcc96461006fa03b14956f64236ec233d 100644 (file)
@@ -806,12 +806,15 @@ struct ath11k_fw_stats_pdev {
        s32 hw_reaped;
        /* Num underruns */
        s32 underrun;
+       /* Num hw paused */
+       u32 hw_paused;
        /* Num PPDUs cleaned up in TX abort */
        s32 tx_abort;
        /* Num MPDUs requeued by SW */
        s32 mpdus_requeued;
        /* excessive retries */
        u32 tx_ko;
+       u32 tx_xretry;
        /* data hw rate code */
        u32 data_rc;
        /* Scheduler self triggers */
@@ -832,6 +835,30 @@ struct ath11k_fw_stats_pdev {
        u32 phy_underrun;
        /* MPDU is more than txop limit */
        u32 txop_ovf;
+       /* Num sequences posted */
+       u32 seq_posted;
+       /* Num sequences failed in queueing */
+       u32 seq_failed_queueing;
+       /* Num sequences completed */
+       u32 seq_completed;
+       /* Num sequences restarted */
+       u32 seq_restarted;
+       /* Num of MU sequences posted */
+       u32 mu_seq_posted;
+       /* Num MPDUs flushed by SW, HWPAUSED, SW TXABORT
+        * (Reset,channel change)
+        */
+       s32 mpdus_sw_flush;
+       /* Num MPDUs filtered by HW, all filter condition (TTL expired) */
+       s32 mpdus_hw_filter;
+       /* Num MPDUs truncated by PDG (TXOP, TBTT,
+        * PPDU_duration based on rate, dyn_bw)
+        */
+       s32 mpdus_truncated;
+       /* Num MPDUs that was tried but didn't receive ACK or BA */
+       s32 mpdus_ack_failed;
+       /* Num MPDUs that was dropped du to expiry. */
+       s32 mpdus_expired;
 
        /* PDEV RX stats */
        /* Cnts any change in ring routing mid-ppdu */
@@ -857,6 +884,8 @@ struct ath11k_fw_stats_pdev {
        s32 phy_err_drop;
        /* Number of mpdu errors - FCS, MIC, ENC etc. */
        s32 mpdu_errs;
+       /* Num overflow errors */
+       s32 rx_ovfl_errs;
 };
 
 struct ath11k_fw_stats_vdev {
index 62f4c4785019200a7cd6be55f9e5bb41c1861689..86174859843d3f9cc72e6ebd60fe665357e6ba5d 100644 (file)
@@ -5251,9 +5251,11 @@ ath11k_wmi_pull_pdev_stats_tx(const struct wmi_pdev_stats_tx *src,
        dst->hw_queued = src->hw_queued;
        dst->hw_reaped = src->hw_reaped;
        dst->underrun = src->underrun;
+       dst->hw_paused = src->hw_paused;
        dst->tx_abort = src->tx_abort;
        dst->mpdus_requeued = src->mpdus_requeued;
        dst->tx_ko = src->tx_ko;
+       dst->tx_xretry = src->tx_xretry;
        dst->data_rc = src->data_rc;
        dst->self_triggers = src->self_triggers;
        dst->sw_retry_failure = src->sw_retry_failure;
@@ -5264,6 +5266,16 @@ ath11k_wmi_pull_pdev_stats_tx(const struct wmi_pdev_stats_tx *src,
        dst->stateless_tid_alloc_failure = src->stateless_tid_alloc_failure;
        dst->phy_underrun = src->phy_underrun;
        dst->txop_ovf = src->txop_ovf;
+       dst->seq_posted = src->seq_posted;
+       dst->seq_failed_queueing = src->seq_failed_queueing;
+       dst->seq_completed = src->seq_completed;
+       dst->seq_restarted = src->seq_restarted;
+       dst->mu_seq_posted = src->mu_seq_posted;
+       dst->mpdus_sw_flush = src->mpdus_sw_flush;
+       dst->mpdus_hw_filter = src->mpdus_hw_filter;
+       dst->mpdus_truncated = src->mpdus_truncated;
+       dst->mpdus_ack_failed = src->mpdus_ack_failed;
+       dst->mpdus_expired = src->mpdus_expired;
 }
 
 static void ath11k_wmi_pull_pdev_stats_rx(const struct wmi_pdev_stats_rx *src,
@@ -5283,6 +5295,7 @@ static void ath11k_wmi_pull_pdev_stats_rx(const struct wmi_pdev_stats_rx *src,
        dst->phy_errs = src->phy_errs;
        dst->phy_err_drop = src->phy_err_drop;
        dst->mpdu_errs = src->mpdu_errs;
+       dst->rx_ovfl_errs = src->rx_ovfl_errs;
 }
 
 static void
@@ -5519,12 +5532,16 @@ ath11k_wmi_fw_pdev_tx_stats_fill(const struct ath11k_fw_stats_pdev *pdev,
                         "PPDUs reaped", pdev->hw_reaped);
        len += scnprintf(buf + len, buf_len - len, "%30s %10d\n",
                         "Num underruns", pdev->underrun);
+       len += scnprintf(buf + len, buf_len - len, "%30s %10d\n",
+                        "Num HW Paused", pdev->hw_paused);
        len += scnprintf(buf + len, buf_len - len, "%30s %10d\n",
                         "PPDUs cleaned", pdev->tx_abort);
        len += scnprintf(buf + len, buf_len - len, "%30s %10d\n",
                         "MPDUs requeued", pdev->mpdus_requeued);
        len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
-                        "Excessive retries", pdev->tx_ko);
+                        "PPDU OK", pdev->tx_ko);
+       len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
+                        "Excessive retries", pdev->tx_xretry);
        len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
                         "HW rate", pdev->data_rc);
        len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
@@ -5548,6 +5565,26 @@ ath11k_wmi_fw_pdev_tx_stats_fill(const struct ath11k_fw_stats_pdev *pdev,
                         "PHY underrun", pdev->phy_underrun);
        len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
                         "MPDU is more than txop limit", pdev->txop_ovf);
+       len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
+                        "Num sequences posted", pdev->seq_posted);
+       len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
+                        "Num seq failed queueing ", pdev->seq_failed_queueing);
+       len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
+                        "Num sequences completed ", pdev->seq_completed);
+       len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
+                        "Num sequences restarted ", pdev->seq_restarted);
+       len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
+                        "Num of MU sequences posted ", pdev->mu_seq_posted);
+       len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
+                        "Num of MPDUS SW flushed ", pdev->mpdus_sw_flush);
+       len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
+                        "Num of MPDUS HW filtered ", pdev->mpdus_hw_filter);
+       len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
+                        "Num of MPDUS truncated ", pdev->mpdus_truncated);
+       len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
+                        "Num of MPDUS ACK failed ", pdev->mpdus_ack_failed);
+       len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
+                        "Num of MPDUS expired ", pdev->mpdus_expired);
        *length = len;
 }
 
@@ -5592,6 +5629,8 @@ ath11k_wmi_fw_pdev_rx_stats_fill(const struct ath11k_fw_stats_pdev *pdev,
                         "PHY errors drops", pdev->phy_err_drop);
        len += scnprintf(buf + len, buf_len - len, "%30s %10d\n",
                         "MPDU errors (FCS, MIC, ENC)", pdev->mpdu_errs);
+       len += scnprintf(buf + len, buf_len - len, "%30s %10d\n",
+                        "Overflow errors", pdev->rx_ovfl_errs);
        *length = len;
 }
 
index 3d55c087ef75611b3488d9baa246dc43c8b75aa5..f4ab308cac97503fb480c406e00dfa9b5abc4539 100644 (file)
@@ -4223,6 +4223,9 @@ struct wmi_pdev_stats_tx {
        /* Num underruns */
        s32 underrun;
 
+       /* Num hw paused */
+       u32 hw_paused;
+
        /* Num PPDUs cleaned up in TX abort */
        s32 tx_abort;
 
@@ -4232,6 +4235,8 @@ struct wmi_pdev_stats_tx {
        /* excessive retries */
        u32 tx_ko;
 
+       u32 tx_xretry;
+
        /* data hw rate code */
        u32 data_rc;
 
@@ -4261,6 +4266,40 @@ struct wmi_pdev_stats_tx {
 
        /* MPDU is more than txop limit */
        u32 txop_ovf;
+
+       /* Num sequences posted */
+       u32 seq_posted;
+
+       /* Num sequences failed in queueing */
+       u32 seq_failed_queueing;
+
+       /* Num sequences completed */
+       u32 seq_completed;
+
+       /* Num sequences restarted */
+       u32 seq_restarted;
+
+       /* Num of MU sequences posted */
+       u32 mu_seq_posted;
+
+       /* Num MPDUs flushed by SW, HWPAUSED, SW TXABORT
+        * (Reset,channel change)
+        */
+       s32 mpdus_sw_flush;
+
+       /* Num MPDUs filtered by HW, all filter condition (TTL expired) */
+       s32 mpdus_hw_filter;
+
+       /* Num MPDUs truncated by PDG (TXOP, TBTT,
+        * PPDU_duration based on rate, dyn_bw)
+        */
+       s32 mpdus_truncated;
+
+       /* Num MPDUs that was tried but didn't receive ACK or BA */
+       s32 mpdus_ack_failed;
+
+       /* Num MPDUs that was dropped du to expiry. */
+       s32 mpdus_expired;
 } __packed;
 
 struct wmi_pdev_stats_rx {
@@ -4295,6 +4334,9 @@ struct wmi_pdev_stats_rx {
 
        /* Number of mpdu errors - FCS, MIC, ENC etc. */
        s32 mpdu_errs;
+
+       /* Num overflow errors */
+       s32 rx_ovfl_errs;
 } __packed;
 
 struct wmi_pdev_stats {