Commit f394e4ea authored by Sriram R's avatar Sriram R Committed by Kalle Valo

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: default avatarSriram R <srirrama@codeaurora.org>
Signed-off-by: default avatarJouni Malinen <jouni@codeaurora.org>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20210721212029.142388-2-jouni@codeaurora.org
parent ab18e3bc
...@@ -806,12 +806,15 @@ struct ath11k_fw_stats_pdev { ...@@ -806,12 +806,15 @@ struct ath11k_fw_stats_pdev {
s32 hw_reaped; s32 hw_reaped;
/* Num underruns */ /* Num underruns */
s32 underrun; s32 underrun;
/* Num hw paused */
u32 hw_paused;
/* Num PPDUs cleaned up in TX abort */ /* Num PPDUs cleaned up in TX abort */
s32 tx_abort; s32 tx_abort;
/* Num MPDUs requeued by SW */ /* Num MPDUs requeued by SW */
s32 mpdus_requeued; s32 mpdus_requeued;
/* excessive retries */ /* excessive retries */
u32 tx_ko; u32 tx_ko;
u32 tx_xretry;
/* data hw rate code */ /* data hw rate code */
u32 data_rc; u32 data_rc;
/* Scheduler self triggers */ /* Scheduler self triggers */
...@@ -832,6 +835,30 @@ struct ath11k_fw_stats_pdev { ...@@ -832,6 +835,30 @@ struct ath11k_fw_stats_pdev {
u32 phy_underrun; u32 phy_underrun;
/* MPDU is more than txop limit */ /* MPDU is more than txop limit */
u32 txop_ovf; 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 */ /* PDEV RX stats */
/* Cnts any change in ring routing mid-ppdu */ /* Cnts any change in ring routing mid-ppdu */
...@@ -857,6 +884,8 @@ struct ath11k_fw_stats_pdev { ...@@ -857,6 +884,8 @@ struct ath11k_fw_stats_pdev {
s32 phy_err_drop; s32 phy_err_drop;
/* Number of mpdu errors - FCS, MIC, ENC etc. */ /* Number of mpdu errors - FCS, MIC, ENC etc. */
s32 mpdu_errs; s32 mpdu_errs;
/* Num overflow errors */
s32 rx_ovfl_errs;
}; };
struct ath11k_fw_stats_vdev { struct ath11k_fw_stats_vdev {
......
...@@ -5251,9 +5251,11 @@ ath11k_wmi_pull_pdev_stats_tx(const struct wmi_pdev_stats_tx *src, ...@@ -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_queued = src->hw_queued;
dst->hw_reaped = src->hw_reaped; dst->hw_reaped = src->hw_reaped;
dst->underrun = src->underrun; dst->underrun = src->underrun;
dst->hw_paused = src->hw_paused;
dst->tx_abort = src->tx_abort; dst->tx_abort = src->tx_abort;
dst->mpdus_requeued = src->mpdus_requeued; dst->mpdus_requeued = src->mpdus_requeued;
dst->tx_ko = src->tx_ko; dst->tx_ko = src->tx_ko;
dst->tx_xretry = src->tx_xretry;
dst->data_rc = src->data_rc; dst->data_rc = src->data_rc;
dst->self_triggers = src->self_triggers; dst->self_triggers = src->self_triggers;
dst->sw_retry_failure = src->sw_retry_failure; 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, ...@@ -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->stateless_tid_alloc_failure = src->stateless_tid_alloc_failure;
dst->phy_underrun = src->phy_underrun; dst->phy_underrun = src->phy_underrun;
dst->txop_ovf = src->txop_ovf; 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, 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, ...@@ -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_errs = src->phy_errs;
dst->phy_err_drop = src->phy_err_drop; dst->phy_err_drop = src->phy_err_drop;
dst->mpdu_errs = src->mpdu_errs; dst->mpdu_errs = src->mpdu_errs;
dst->rx_ovfl_errs = src->rx_ovfl_errs;
} }
static void static void
...@@ -5519,12 +5532,16 @@ ath11k_wmi_fw_pdev_tx_stats_fill(const struct ath11k_fw_stats_pdev *pdev, ...@@ -5519,12 +5532,16 @@ ath11k_wmi_fw_pdev_tx_stats_fill(const struct ath11k_fw_stats_pdev *pdev,
"PPDUs reaped", pdev->hw_reaped); "PPDUs reaped", pdev->hw_reaped);
len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", len += scnprintf(buf + len, buf_len - len, "%30s %10d\n",
"Num underruns", pdev->underrun); "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", len += scnprintf(buf + len, buf_len - len, "%30s %10d\n",
"PPDUs cleaned", pdev->tx_abort); "PPDUs cleaned", pdev->tx_abort);
len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", len += scnprintf(buf + len, buf_len - len, "%30s %10d\n",
"MPDUs requeued", pdev->mpdus_requeued); "MPDUs requeued", pdev->mpdus_requeued);
len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", 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", len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
"HW rate", pdev->data_rc); "HW rate", pdev->data_rc);
len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", 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, ...@@ -5548,6 +5565,26 @@ ath11k_wmi_fw_pdev_tx_stats_fill(const struct ath11k_fw_stats_pdev *pdev,
"PHY underrun", pdev->phy_underrun); "PHY underrun", pdev->phy_underrun);
len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
"MPDU is more than txop limit", pdev->txop_ovf); "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; *length = len;
} }
...@@ -5592,6 +5629,8 @@ ath11k_wmi_fw_pdev_rx_stats_fill(const struct ath11k_fw_stats_pdev *pdev, ...@@ -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); "PHY errors drops", pdev->phy_err_drop);
len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", len += scnprintf(buf + len, buf_len - len, "%30s %10d\n",
"MPDU errors (FCS, MIC, ENC)", pdev->mpdu_errs); "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; *length = len;
} }
......
...@@ -4223,6 +4223,9 @@ struct wmi_pdev_stats_tx { ...@@ -4223,6 +4223,9 @@ struct wmi_pdev_stats_tx {
/* Num underruns */ /* Num underruns */
s32 underrun; s32 underrun;
/* Num hw paused */
u32 hw_paused;
/* Num PPDUs cleaned up in TX abort */ /* Num PPDUs cleaned up in TX abort */
s32 tx_abort; s32 tx_abort;
...@@ -4232,6 +4235,8 @@ struct wmi_pdev_stats_tx { ...@@ -4232,6 +4235,8 @@ struct wmi_pdev_stats_tx {
/* excessive retries */ /* excessive retries */
u32 tx_ko; u32 tx_ko;
u32 tx_xretry;
/* data hw rate code */ /* data hw rate code */
u32 data_rc; u32 data_rc;
...@@ -4261,6 +4266,40 @@ struct wmi_pdev_stats_tx { ...@@ -4261,6 +4266,40 @@ struct wmi_pdev_stats_tx {
/* MPDU is more than txop limit */ /* MPDU is more than txop limit */
u32 txop_ovf; 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; } __packed;
struct wmi_pdev_stats_rx { struct wmi_pdev_stats_rx {
...@@ -4295,6 +4334,9 @@ struct wmi_pdev_stats_rx { ...@@ -4295,6 +4334,9 @@ struct wmi_pdev_stats_rx {
/* Number of mpdu errors - FCS, MIC, ENC etc. */ /* Number of mpdu errors - FCS, MIC, ENC etc. */
s32 mpdu_errs; s32 mpdu_errs;
/* Num overflow errors */
s32 rx_ovfl_errs;
} __packed; } __packed;
struct wmi_pdev_stats { struct wmi_pdev_stats {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment