mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 04:13:31 +00:00
251 lines
8.3 KiB
Diff
251 lines
8.3 KiB
Diff
From f394e4eae8e2c0579063e5473f1e321d22d3fe43 Mon Sep 17 00:00:00 2001
|
|
From: Sriram R <srirrama@codeaurora.org>
|
|
Date: Tue, 28 Sep 2021 12:05:40 +0300
|
|
Subject: [PATCH] ath11k: Update pdev tx and rx firmware stats
|
|
|
|
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 | 29 ++++++++++++++++++
|
|
drivers/net/wireless/ath/ath11k/wmi.c | 41 ++++++++++++++++++++++++-
|
|
drivers/net/wireless/ath/ath11k/wmi.h | 42 ++++++++++++++++++++++++++
|
|
3 files changed, 111 insertions(+), 1 deletion(-)
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/core.h
|
|
+++ b/drivers/net/wireless/ath/ath11k/core.h
|
|
@@ -819,12 +819,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 */
|
|
@@ -845,6 +848,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 */
|
|
@@ -870,6 +897,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 {
|
|
--- a/drivers/net/wireless/ath/ath11k/wmi.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
|
|
@@ -5252,9 +5252,11 @@ ath11k_wmi_pull_pdev_stats_tx(const stru
|
|
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;
|
|
@@ -5265,6 +5267,16 @@ ath11k_wmi_pull_pdev_stats_tx(const stru
|
|
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,
|
|
@@ -5284,6 +5296,7 @@ static void ath11k_wmi_pull_pdev_stats_r
|
|
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
|
|
@@ -5521,11 +5534,15 @@ ath11k_wmi_fw_pdev_tx_stats_fill(const s
|
|
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",
|
|
@@ -5549,6 +5566,26 @@ ath11k_wmi_fw_pdev_tx_stats_fill(const s
|
|
"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;
|
|
}
|
|
|
|
@@ -5593,6 +5630,8 @@ ath11k_wmi_fw_pdev_rx_stats_fill(const s
|
|
"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;
|
|
}
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/wmi.h
|
|
+++ b/drivers/net/wireless/ath/ath11k/wmi.h
|
|
@@ -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 {
|