ath10k: Fix the wrong calculation ht_idx and idx of rate table for tx_stats
authorSurabhi Vishnoi <svishnoi@codeaurora.org>
Tue, 26 Feb 2019 09:27:58 +0000 (14:57 +0530)
committerKalle Valo <kvalo@codeaurora.org>
Thu, 28 Feb 2019 08:46:26 +0000 (10:46 +0200)
ht_idx (ht rate index) and idx (rate table index) are calculated based on
mcs index. This mcs index used in the above calculation should be 0-9 for
getting the correct ht_idx and idx.

Currently the mcs index used for the above calculations is mcs index which
can be 0-31 (in case of HT), leading to incorrect rate index and ht index values.

Fix the issue by obtaining mcs value from the ratecode reported by firmware
and use it for calculating ht_idx and idx (rate-table index).

Tested HW: WCN3990
Tested FW: WLAN.HL.3.1-00784-QCAHLSWMTPLZ-1

Fixes: e88975ca37d1 ("ath10k: dump tx stats in rate table format")
Signed-off-by: Surabhi Vishnoi <svishnoi@codeaurora.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/ath/ath10k/htt_rx.c

index 1a9892703570933b8928df82c5140f0dd6f6630a..a20ea270d519be335b9b0086b1d5f9c8ea3d385d 100644 (file)
@@ -2929,11 +2929,11 @@ ath10k_accumulate_per_peer_tx_stats(struct ath10k *ar,
        tx_stats = arsta->tx_stats;
        flags = txrate->flags;
        gi = test_bit(ATH10K_RATE_INFO_FLAGS_SGI_BIT, &flags);
-       ht_idx = txrate->mcs + txrate->nss * 8;
-       mcs = txrate->mcs;
+       mcs = ATH10K_HW_MCS_RATE(pstats->ratecode);
        bw = txrate->bw;
        nss = txrate->nss;
-       idx = mcs * 8 + 8 * 10 * nss;
+       ht_idx = mcs + (nss - 1) * 8;
+       idx = mcs * 8 + 8 * 10 * (nss - 1);
        idx += bw * 2 + gi;
 
 #define STATS_OP_FMT(name) tx_stats->stats[ATH10K_STATS_TYPE_##name]