Skip to content

Commit

Permalink
ath11k: Update pdev tx and rx firmware stats
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Sriram R authored and Kalle Valo committed Sep 28, 2021
1 parent ab18e3b commit f394e4e
Show file tree
Hide file tree
Showing 3 changed files with 111 additions and 1 deletion.
29 changes: 29 additions & 0 deletions drivers/net/wireless/ath/ath11k/core.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand All @@ -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 */
Expand All @@ -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 {
Expand Down
41 changes: 40 additions & 1 deletion drivers/net/wireless/ath/ath11k/wmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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,
Expand All @@ -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
Expand Down Expand Up @@ -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",
Expand All @@ -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;
}

Expand Down Expand Up @@ -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;
}

Expand Down
42 changes: 42 additions & 0 deletions drivers/net/wireless/ath/ath11k/wmi.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -4232,6 +4235,8 @@ struct wmi_pdev_stats_tx {
/* excessive retries */
u32 tx_ko;

u32 tx_xretry;

/* data hw rate code */
u32 data_rc;

Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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 {
Expand Down

0 comments on commit f394e4e

Please sign in to comment.