From: John Crispin <john@phrozen.org>
To: Kalle Valo <kvalo@codeaurora.org>
Cc: linux-wireless@vger.kernel.org, ath11k@lists.infradead.org,
John Crispin <john@phrozen.org>
Subject: [RESEND 7/9] ath11k: move some tx_status parsing to debugfs code
Date: Wed, 4 Dec 2019 06:37:11 +0100 [thread overview]
Message-ID: <20191204053713.3064-8-john@phrozen.org> (raw)
In-Reply-To: <20191204053713.3064-1-john@phrozen.org>
Some of the fields are only used by debugfs. Move the parsing of these
from the data hot path to the debugfs code.
Signed-off-by: John Crispin <john@phrozen.org>
---
drivers/net/wireless/ath/ath11k/debugfs_sta.c | 66 +++++++++++--------
drivers/net/wireless/ath/ath11k/hal_tx.c | 19 +-----
drivers/net/wireless/ath/ath11k/hal_tx.h | 7 +-
3 files changed, 39 insertions(+), 53 deletions(-)
diff --git a/drivers/net/wireless/ath/ath11k/debugfs_sta.c b/drivers/net/wireless/ath/ath11k/debugfs_sta.c
index 3c5f931e22a9..3cdc34218a7d 100644
--- a/drivers/net/wireless/ath/ath11k/debugfs_sta.c
+++ b/drivers/net/wireless/ath/ath11k/debugfs_sta.c
@@ -129,12 +129,17 @@ void ath11k_update_per_peer_stats_from_txcompl(struct ath11k *ar,
{
struct ath11k_base *ab = ar->ab;
struct ath11k_per_peer_tx_stats *peer_stats = &ar->cached_stats;
+ enum hal_tx_rate_stats_pkt_type pkt_type;
+ enum hal_tx_rate_stats_sgi sgi;
+ enum hal_tx_rate_stats_bw bw;
struct ath11k_peer *peer;
struct ath11k_sta *arsta;
struct ieee80211_sta *sta;
+ u16 num_tones_in_ru;
u16 rate;
u8 rate_idx;
int ret;
+ u8 mcs;
rcu_read_lock();
spin_lock_bh(&ab->base_lock);
@@ -150,51 +155,54 @@ void ath11k_update_per_peer_stats_from_txcompl(struct ath11k *ar,
arsta = (struct ath11k_sta *)sta->drv_priv;
memset(&arsta->txrate, 0, sizeof(arsta->txrate));
-
- if (ts->pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11A ||
- ts->pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11B) {
- ret = ath11k_mac_hw_ratecode_to_legacy_rate(ts->mcs,
- ts->pkt_type,
+ pkt_type = FIELD_GET(HAL_TX_RATE_STATS_INFO0_PKT_TYPE,
+ ts->rate_stats);
+ mcs = FIELD_GET(HAL_TX_RATE_STATS_INFO0_MCS,
+ ts->rate_stats);
+ sgi = FIELD_GET(HAL_TX_RATE_STATS_INFO0_SGI,
+ ts->rate_stats);
+ num_tones_in_ru = FIELD_GET(HAL_TX_RATE_STATS_INFO0_TONES_IN_RU,
+ ts->rate_stats);
+ bw = FIELD_GET(HAL_TX_RATE_STATS_INFO0_BW, ts->rate_stats);
+
+ if (pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11A ||
+ pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11B) {
+ ret = ath11k_mac_hw_ratecode_to_legacy_rate(mcs,
+ pkt_type,
&rate_idx,
&rate);
- if (ret < 0) {
- spin_unlock_bh(&ab->base_lock);
- rcu_read_unlock();
- return;
- }
+ if (ret < 0)
+ goto err_out;
arsta->txrate.legacy = rate;
- } else if (ts->pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11N) {
- if (ts->mcs > 7) {
- ath11k_warn(ab, "Invalid HT mcs index %d\n", ts->mcs);
- spin_unlock_bh(&ab->base_lock);
- rcu_read_unlock();
- return;
+ } else if (pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11N) {
+ if (mcs > 7) {
+ ath11k_warn(ab, "Invalid HT mcs index %d\n", mcs);
+ goto err_out;
}
- arsta->txrate.mcs = ts->mcs + 8 * (arsta->last_txrate.nss - 1);
+ arsta->txrate.mcs = mcs + 8 * (arsta->last_txrate.nss - 1);
arsta->txrate.flags = RATE_INFO_FLAGS_MCS;
- if (ts->sgi)
+ if (sgi)
arsta->txrate.flags |= RATE_INFO_FLAGS_SHORT_GI;
- } else if (ts->pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11AC) {
- if (ts->mcs > 9) {
- ath11k_warn(ab, "Invalid VHT mcs index %d\n", ts->mcs);
- spin_unlock_bh(&ab->base_lock);
- rcu_read_unlock();
- return;
+ } else if (pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11AC) {
+ if (mcs > 9) {
+ ath11k_warn(ab, "Invalid VHT mcs index %d\n", mcs);
+ goto err_out;
}
- arsta->txrate.mcs = ts->mcs;
+ arsta->txrate.mcs = mcs;
arsta->txrate.flags = RATE_INFO_FLAGS_VHT_MCS;
- if (ts->sgi)
+ if (sgi)
arsta->txrate.flags |= RATE_INFO_FLAGS_SHORT_GI;
- } else {
- /*TODO: update HE rates */
+ } else if (pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11AX) {
+ /* TODO */
}
arsta->txrate.nss = arsta->last_txrate.nss;
- arsta->txrate.bw = ath11k_mac_bw_to_mac80211_bw(ts->bw);
+ arsta->txrate.bw = ath11k_mac_bw_to_mac80211_bw(bw);
ath11k_accumulate_per_peer_tx_stats(arsta, peer_stats, rate_idx);
+err_out:
spin_unlock_bh(&ab->base_lock);
rcu_read_unlock();
}
diff --git a/drivers/net/wireless/ath/ath11k/hal_tx.c b/drivers/net/wireless/ath/ath11k/hal_tx.c
index 72a51ed65a51..c2a3a9d2e534 100644
--- a/drivers/net/wireless/ath/ath11k/hal_tx.c
+++ b/drivers/net/wireless/ath/ath11k/hal_tx.c
@@ -127,24 +127,7 @@ void ath11k_hal_tx_status_parse(struct ath11k_base *ab,
if (!(desc->rate_stats.info0 & HAL_TX_RATE_STATS_INFO0_VALID))
return;
- ts->flags |= HAL_TX_STATUS_FLAGS_RATE_STATS_VALID;
- ts->tsf = desc->rate_stats.tsf;
- ts->bw = FIELD_GET(HAL_TX_RATE_STATS_INFO0_BW, desc->rate_stats.info0);
- ts->pkt_type = FIELD_GET(HAL_TX_RATE_STATS_INFO0_PKT_TYPE,
- desc->rate_stats.info0);
- if (desc->rate_stats.info0 & HAL_TX_RATE_STATS_INFO0_STBC)
- ts->flags |= HAL_TX_STATUS_FLAGS_RATE_STBC;
- if (desc->rate_stats.info0 & HAL_TX_RATE_STATS_INFO0_LDPC)
- ts->flags |= HAL_TX_STATUS_FLAGS_RATE_LDPC;
- if (desc->rate_stats.info0 & HAL_TX_RATE_STATS_INFO0_OFDMA_TX)
- ts->flags |= HAL_TX_STATUS_FLAGS_OFDMA;
-
- ts->sgi = FIELD_GET(HAL_TX_RATE_STATS_INFO0_SGI,
- desc->rate_stats.info0);
- ts->mcs = FIELD_GET(HAL_TX_RATE_STATS_INFO0_MCS,
- desc->rate_stats.info0);
- ts->num_tones_in_ru = FIELD_GET(HAL_TX_RATE_STATS_INFO0_TONES_IN_RU,
- desc->rate_stats.info0);
+ ts->rate_stats = desc->rate_stats.info0;
}
void ath11k_hal_tx_set_dscp_tid_map(struct ath11k_base *ab, int id)
diff --git a/drivers/net/wireless/ath/ath11k/hal_tx.h b/drivers/net/wireless/ath/ath11k/hal_tx.h
index 5217eaf9da50..cf99e2b31f9f 100644
--- a/drivers/net/wireless/ath/ath11k/hal_tx.h
+++ b/drivers/net/wireless/ath/ath11k/hal_tx.h
@@ -51,17 +51,12 @@ struct hal_tx_status {
u32 desc_id;
enum hal_wbm_tqm_rel_reason status;
u8 ack_rssi;
- enum hal_tx_rate_stats_bw bw;
- enum hal_tx_rate_stats_pkt_type pkt_type;
- enum hal_tx_rate_stats_sgi sgi;
- u8 mcs;
- u16 num_tones_in_ru;
u32 flags; /* %HAL_TX_STATUS_FLAGS_ */
- u32 tsf;
u32 ppdu_id;
u8 try_cnt;
u8 tid;
u16 peer_id;
+ u32 rate_stats;
};
void ath11k_hal_tx_cmd_desc_setup(struct ath11k_base *ab, void *cmd,
--
2.20.1
_______________________________________________
ath11k mailing list
ath11k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath11k
WARNING: multiple messages have this Message-ID (diff)
From: John Crispin <john@phrozen.org>
To: Kalle Valo <kvalo@codeaurora.org>
Cc: linux-wireless@vger.kernel.org, ath11k@lists.infradead.org,
John Crispin <john@phrozen.org>
Subject: [RESEND 7/9] ath11k: move some tx_status parsing to debugfs code
Date: Wed, 4 Dec 2019 06:37:11 +0100 [thread overview]
Message-ID: <20191204053713.3064-8-john@phrozen.org> (raw)
In-Reply-To: <20191204053713.3064-1-john@phrozen.org>
Some of the fields are only used by debugfs. Move the parsing of these
from the data hot path to the debugfs code.
Signed-off-by: John Crispin <john@phrozen.org>
---
drivers/net/wireless/ath/ath11k/debugfs_sta.c | 66 +++++++++++--------
drivers/net/wireless/ath/ath11k/hal_tx.c | 19 +-----
drivers/net/wireless/ath/ath11k/hal_tx.h | 7 +-
3 files changed, 39 insertions(+), 53 deletions(-)
diff --git a/drivers/net/wireless/ath/ath11k/debugfs_sta.c b/drivers/net/wireless/ath/ath11k/debugfs_sta.c
index 3c5f931e22a9..3cdc34218a7d 100644
--- a/drivers/net/wireless/ath/ath11k/debugfs_sta.c
+++ b/drivers/net/wireless/ath/ath11k/debugfs_sta.c
@@ -129,12 +129,17 @@ void ath11k_update_per_peer_stats_from_txcompl(struct ath11k *ar,
{
struct ath11k_base *ab = ar->ab;
struct ath11k_per_peer_tx_stats *peer_stats = &ar->cached_stats;
+ enum hal_tx_rate_stats_pkt_type pkt_type;
+ enum hal_tx_rate_stats_sgi sgi;
+ enum hal_tx_rate_stats_bw bw;
struct ath11k_peer *peer;
struct ath11k_sta *arsta;
struct ieee80211_sta *sta;
+ u16 num_tones_in_ru;
u16 rate;
u8 rate_idx;
int ret;
+ u8 mcs;
rcu_read_lock();
spin_lock_bh(&ab->base_lock);
@@ -150,51 +155,54 @@ void ath11k_update_per_peer_stats_from_txcompl(struct ath11k *ar,
arsta = (struct ath11k_sta *)sta->drv_priv;
memset(&arsta->txrate, 0, sizeof(arsta->txrate));
-
- if (ts->pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11A ||
- ts->pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11B) {
- ret = ath11k_mac_hw_ratecode_to_legacy_rate(ts->mcs,
- ts->pkt_type,
+ pkt_type = FIELD_GET(HAL_TX_RATE_STATS_INFO0_PKT_TYPE,
+ ts->rate_stats);
+ mcs = FIELD_GET(HAL_TX_RATE_STATS_INFO0_MCS,
+ ts->rate_stats);
+ sgi = FIELD_GET(HAL_TX_RATE_STATS_INFO0_SGI,
+ ts->rate_stats);
+ num_tones_in_ru = FIELD_GET(HAL_TX_RATE_STATS_INFO0_TONES_IN_RU,
+ ts->rate_stats);
+ bw = FIELD_GET(HAL_TX_RATE_STATS_INFO0_BW, ts->rate_stats);
+
+ if (pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11A ||
+ pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11B) {
+ ret = ath11k_mac_hw_ratecode_to_legacy_rate(mcs,
+ pkt_type,
&rate_idx,
&rate);
- if (ret < 0) {
- spin_unlock_bh(&ab->base_lock);
- rcu_read_unlock();
- return;
- }
+ if (ret < 0)
+ goto err_out;
arsta->txrate.legacy = rate;
- } else if (ts->pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11N) {
- if (ts->mcs > 7) {
- ath11k_warn(ab, "Invalid HT mcs index %d\n", ts->mcs);
- spin_unlock_bh(&ab->base_lock);
- rcu_read_unlock();
- return;
+ } else if (pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11N) {
+ if (mcs > 7) {
+ ath11k_warn(ab, "Invalid HT mcs index %d\n", mcs);
+ goto err_out;
}
- arsta->txrate.mcs = ts->mcs + 8 * (arsta->last_txrate.nss - 1);
+ arsta->txrate.mcs = mcs + 8 * (arsta->last_txrate.nss - 1);
arsta->txrate.flags = RATE_INFO_FLAGS_MCS;
- if (ts->sgi)
+ if (sgi)
arsta->txrate.flags |= RATE_INFO_FLAGS_SHORT_GI;
- } else if (ts->pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11AC) {
- if (ts->mcs > 9) {
- ath11k_warn(ab, "Invalid VHT mcs index %d\n", ts->mcs);
- spin_unlock_bh(&ab->base_lock);
- rcu_read_unlock();
- return;
+ } else if (pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11AC) {
+ if (mcs > 9) {
+ ath11k_warn(ab, "Invalid VHT mcs index %d\n", mcs);
+ goto err_out;
}
- arsta->txrate.mcs = ts->mcs;
+ arsta->txrate.mcs = mcs;
arsta->txrate.flags = RATE_INFO_FLAGS_VHT_MCS;
- if (ts->sgi)
+ if (sgi)
arsta->txrate.flags |= RATE_INFO_FLAGS_SHORT_GI;
- } else {
- /*TODO: update HE rates */
+ } else if (pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11AX) {
+ /* TODO */
}
arsta->txrate.nss = arsta->last_txrate.nss;
- arsta->txrate.bw = ath11k_mac_bw_to_mac80211_bw(ts->bw);
+ arsta->txrate.bw = ath11k_mac_bw_to_mac80211_bw(bw);
ath11k_accumulate_per_peer_tx_stats(arsta, peer_stats, rate_idx);
+err_out:
spin_unlock_bh(&ab->base_lock);
rcu_read_unlock();
}
diff --git a/drivers/net/wireless/ath/ath11k/hal_tx.c b/drivers/net/wireless/ath/ath11k/hal_tx.c
index 72a51ed65a51..c2a3a9d2e534 100644
--- a/drivers/net/wireless/ath/ath11k/hal_tx.c
+++ b/drivers/net/wireless/ath/ath11k/hal_tx.c
@@ -127,24 +127,7 @@ void ath11k_hal_tx_status_parse(struct ath11k_base *ab,
if (!(desc->rate_stats.info0 & HAL_TX_RATE_STATS_INFO0_VALID))
return;
- ts->flags |= HAL_TX_STATUS_FLAGS_RATE_STATS_VALID;
- ts->tsf = desc->rate_stats.tsf;
- ts->bw = FIELD_GET(HAL_TX_RATE_STATS_INFO0_BW, desc->rate_stats.info0);
- ts->pkt_type = FIELD_GET(HAL_TX_RATE_STATS_INFO0_PKT_TYPE,
- desc->rate_stats.info0);
- if (desc->rate_stats.info0 & HAL_TX_RATE_STATS_INFO0_STBC)
- ts->flags |= HAL_TX_STATUS_FLAGS_RATE_STBC;
- if (desc->rate_stats.info0 & HAL_TX_RATE_STATS_INFO0_LDPC)
- ts->flags |= HAL_TX_STATUS_FLAGS_RATE_LDPC;
- if (desc->rate_stats.info0 & HAL_TX_RATE_STATS_INFO0_OFDMA_TX)
- ts->flags |= HAL_TX_STATUS_FLAGS_OFDMA;
-
- ts->sgi = FIELD_GET(HAL_TX_RATE_STATS_INFO0_SGI,
- desc->rate_stats.info0);
- ts->mcs = FIELD_GET(HAL_TX_RATE_STATS_INFO0_MCS,
- desc->rate_stats.info0);
- ts->num_tones_in_ru = FIELD_GET(HAL_TX_RATE_STATS_INFO0_TONES_IN_RU,
- desc->rate_stats.info0);
+ ts->rate_stats = desc->rate_stats.info0;
}
void ath11k_hal_tx_set_dscp_tid_map(struct ath11k_base *ab, int id)
diff --git a/drivers/net/wireless/ath/ath11k/hal_tx.h b/drivers/net/wireless/ath/ath11k/hal_tx.h
index 5217eaf9da50..cf99e2b31f9f 100644
--- a/drivers/net/wireless/ath/ath11k/hal_tx.h
+++ b/drivers/net/wireless/ath/ath11k/hal_tx.h
@@ -51,17 +51,12 @@ struct hal_tx_status {
u32 desc_id;
enum hal_wbm_tqm_rel_reason status;
u8 ack_rssi;
- enum hal_tx_rate_stats_bw bw;
- enum hal_tx_rate_stats_pkt_type pkt_type;
- enum hal_tx_rate_stats_sgi sgi;
- u8 mcs;
- u16 num_tones_in_ru;
u32 flags; /* %HAL_TX_STATUS_FLAGS_ */
- u32 tsf;
u32 ppdu_id;
u8 try_cnt;
u8 tid;
u16 peer_id;
+ u32 rate_stats;
};
void ath11k_hal_tx_cmd_desc_setup(struct ath11k_base *ab, void *cmd,
--
2.20.1
next prev parent reply other threads:[~2019-12-04 5:37 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-04 5:37 [RESEND 0/9] ath11k: resend pending patches John Crispin
2019-12-04 5:37 ` John Crispin
2019-12-04 5:37 ` [RESEND 1/9] ath11k: add wmi helper for turning STA PS on/off John Crispin
2019-12-04 5:37 ` John Crispin
2019-12-10 17:35 ` Kalle Valo
2019-12-10 17:35 ` Kalle Valo
2019-12-04 5:37 ` [RESEND 2/9] ath11k: disable PS for STA interfaces by default upon bringup John Crispin
2019-12-04 5:37 ` John Crispin
2019-12-04 5:37 ` [RESEND 3/9] ath11k: drop memset when setting up a tx cmd desc John Crispin
2019-12-04 5:37 ` John Crispin
2019-12-04 5:37 ` [RESEND 4/9] ath11k: rename ath11k_wmi_base instances from wmi_sc to wmi_ab John Crispin
2019-12-04 5:37 ` John Crispin
2019-12-04 5:37 ` [RESEND 5/9] ath11k: add WMI calls to manually add/del/pause/resume TWT dialogs John Crispin
2019-12-04 5:37 ` John Crispin
2019-12-04 5:55 ` vthiagar
2019-12-04 5:55 ` vthiagar
2019-12-04 5:37 ` [RESEND 6/9] ath11k: add debugfs for TWT debug calls John Crispin
2019-12-04 5:37 ` John Crispin
2019-12-04 6:00 ` vthiagar
2019-12-04 6:00 ` vthiagar
2019-12-19 13:25 ` Kalle Valo
2019-12-19 13:25 ` Kalle Valo
2019-12-19 13:45 ` John Crispin
2019-12-19 13:45 ` John Crispin
2019-12-04 5:37 ` John Crispin [this message]
2019-12-04 5:37 ` [RESEND 7/9] ath11k: move some tx_status parsing to debugfs code John Crispin
2019-12-04 5:37 ` [RESEND 8/9] ath11k: optimise ath11k_dp_tx_completion_handler John Crispin
2019-12-04 5:37 ` John Crispin
2019-12-04 5:37 ` [RESEND 9/9] ath11k: optimize ath11k_hal_tx_status_parse John Crispin
2019-12-04 5:37 ` John Crispin
2019-12-04 6:02 ` vthiagar
2019-12-04 6:02 ` vthiagar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191204053713.3064-8-john@phrozen.org \
--to=john@phrozen.org \
--cc=ath11k@lists.infradead.org \
--cc=kvalo@codeaurora.org \
--cc=linux-wireless@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.