mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-12-10 14:50:14 +00:00
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: John Crispin <john@phrozen.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
6bc9d6f786
commit
8cfa7ef812
@ -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,
|
|||||||
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,
|
||||||
|
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);
|
||||||
|
bw = FIELD_GET(HAL_TX_RATE_STATS_INFO0_BW, ts->rate_stats);
|
||||||
|
|
||||||
if (ts->pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11A ||
|
if (pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11A ||
|
||||||
ts->pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11B) {
|
pkt_type == HAL_TX_RATE_STATS_PKT_TYPE_11B) {
|
||||||
ret = ath11k_mac_hw_ratecode_to_legacy_rate(ts->mcs,
|
ret = ath11k_mac_hw_ratecode_to_legacy_rate(mcs,
|
||||||
ts->pkt_type,
|
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,
|
|||||||
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 {
|
|||||||
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,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user