Commit 8cfa7ef8 authored by John Crispin's avatar John Crispin Committed by Kalle Valo

ath11k: move some tx_status parsing to debugfs code

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: default avatarJohn Crispin <john@phrozen.org>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 6bc9d6f7
...@@ -129,12 +129,16 @@ void ath11k_update_per_peer_stats_from_txcompl(struct ath11k *ar, ...@@ -129,12 +129,16 @@ void ath11k_update_per_peer_stats_from_txcompl(struct ath11k *ar,
{ {
struct ath11k_base *ab = ar->ab; struct ath11k_base *ab = ar->ab;
struct ath11k_per_peer_tx_stats *peer_stats = &ar->cached_stats; 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_peer *peer;
struct ath11k_sta *arsta; struct ath11k_sta *arsta;
struct ieee80211_sta *sta; struct ieee80211_sta *sta;
u16 rate; u16 rate;
u8 rate_idx; u8 rate_idx;
int ret; int ret;
u8 mcs;
rcu_read_lock(); rcu_read_lock();
spin_lock_bh(&ab->base_lock); spin_lock_bh(&ab->base_lock);
...@@ -150,51 +154,52 @@ void ath11k_update_per_peer_stats_from_txcompl(struct ath11k *ar, ...@@ -150,51 +154,52 @@ void ath11k_update_per_peer_stats_from_txcompl(struct ath11k *ar,
arsta = (struct ath11k_sta *)sta->drv_priv; arsta = (struct ath11k_sta *)sta->drv_priv;
memset(&arsta->txrate, 0, sizeof(arsta->txrate)); memset(&arsta->txrate, 0, sizeof(arsta->txrate));
pkt_type = FIELD_GET(HAL_TX_RATE_STATS_INFO0_PKT_TYPE,
if (ts->pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11A || ts->rate_stats);
ts->pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11B) { mcs = FIELD_GET(HAL_TX_RATE_STATS_INFO0_MCS,
ret = ath11k_mac_hw_ratecode_to_legacy_rate(ts->mcs, ts->rate_stats);
ts->pkt_type, sgi = FIELD_GET(HAL_TX_RATE_STATS_INFO0_SGI,
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_idx,
&rate); &rate);
if (ret < 0) { if (ret < 0)
spin_unlock_bh(&ab->base_lock); goto err_out;
rcu_read_unlock();
return;
}
arsta->txrate.legacy = rate; arsta->txrate.legacy = rate;
} else if (ts->pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11N) { } else if (pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11N) {
if (ts->mcs > 7) { if (mcs > 7) {
ath11k_warn(ab, "Invalid HT mcs index %d\n", ts->mcs); ath11k_warn(ab, "Invalid HT mcs index %d\n", mcs);
spin_unlock_bh(&ab->base_lock); goto err_out;
rcu_read_unlock();
return;
} }
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; arsta->txrate.flags = RATE_INFO_FLAGS_MCS;
if (ts->sgi) if (sgi)
arsta->txrate.flags |= RATE_INFO_FLAGS_SHORT_GI; arsta->txrate.flags |= RATE_INFO_FLAGS_SHORT_GI;
} else if (ts->pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11AC) { } else if (pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11AC) {
if (ts->mcs > 9) { if (mcs > 9) {
ath11k_warn(ab, "Invalid VHT mcs index %d\n", ts->mcs); ath11k_warn(ab, "Invalid VHT mcs index %d\n", mcs);
spin_unlock_bh(&ab->base_lock); goto err_out;
rcu_read_unlock();
return;
} }
arsta->txrate.mcs = ts->mcs; arsta->txrate.mcs = mcs;
arsta->txrate.flags = RATE_INFO_FLAGS_VHT_MCS; arsta->txrate.flags = RATE_INFO_FLAGS_VHT_MCS;
if (ts->sgi) if (sgi)
arsta->txrate.flags |= RATE_INFO_FLAGS_SHORT_GI; arsta->txrate.flags |= RATE_INFO_FLAGS_SHORT_GI;
} else { } else if (pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11AX) {
/*TODO: update HE rates */ /* TODO */
} }
arsta->txrate.nss = arsta->last_txrate.nss; 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); ath11k_accumulate_per_peer_tx_stats(arsta, peer_stats, rate_idx);
err_out:
spin_unlock_bh(&ab->base_lock); spin_unlock_bh(&ab->base_lock);
rcu_read_unlock(); rcu_read_unlock();
} }
......
...@@ -127,24 +127,7 @@ void ath11k_hal_tx_status_parse(struct ath11k_base *ab, ...@@ -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)) if (!(desc->rate_stats.info0 & HAL_TX_RATE_STATS_INFO0_VALID))
return; return;
ts->flags |= HAL_TX_STATUS_FLAGS_RATE_STATS_VALID; ts->rate_stats = desc->rate_stats.info0;
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);
} }
void ath11k_hal_tx_set_dscp_tid_map(struct ath11k_base *ab, int id) void ath11k_hal_tx_set_dscp_tid_map(struct ath11k_base *ab, int id)
......
...@@ -51,17 +51,12 @@ struct hal_tx_status { ...@@ -51,17 +51,12 @@ struct hal_tx_status {
u32 desc_id; u32 desc_id;
enum hal_wbm_tqm_rel_reason status; enum hal_wbm_tqm_rel_reason status;
u8 ack_rssi; 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 flags; /* %HAL_TX_STATUS_FLAGS_ */
u32 tsf;
u32 ppdu_id; u32 ppdu_id;
u8 try_cnt; u8 try_cnt;
u8 tid; u8 tid;
u16 peer_id; u16 peer_id;
u32 rate_stats;
}; };
void ath11k_hal_tx_cmd_desc_setup(struct ath11k_base *ab, void *cmd, void ath11k_hal_tx_cmd_desc_setup(struct ath11k_base *ab, void *cmd,
......
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