]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
ath11k: move some tx_status parsing to debugfs code
authorJohn Crispin <john@phrozen.org>
Fri, 13 Dec 2019 15:38:37 +0000 (16:38 +0100)
committerKalle Valo <kvalo@codeaurora.org>
Wed, 18 Dec 2019 17:39:47 +0000 (19:39 +0200)
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>
drivers/net/wireless/ath/ath11k/debugfs_sta.c
drivers/net/wireless/ath/ath11k/hal_tx.c
drivers/net/wireless/ath/ath11k/hal_tx.h

index 3c5f931e22a9db18fc623d6c46917d2135afb89b..743760c9bcae49ef320e51191137273285a0b1de 100644 (file)
@@ -129,12 +129,16 @@ 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 rate;
        u8 rate_idx;
        int ret;
+       u8 mcs;
 
        rcu_read_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;
 
        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);
+       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();
 }
index 72a51ed65a513a8cedf2e7776dbd10d864e5cb83..c2a3a9d2e5340e93847b466e374c566b624029a7 100644 (file)
@@ -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)
index 5217eaf9da5018ba8a9a649cf0ff7386d41da8ab..cf99e2b31f9f1ddbcbe6a174a81d818bca4de956 100644 (file)
@@ -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,