@@ -1317,13 +1317,10 @@ mt7915_mac_parse_txs(struct mt7915_dev *dev, struct mt76_wcid *wcid,
{
struct ieee80211_supported_band *sband;
struct mt76_phy *mphy;
- u32 txrate, txs, txs5, txs6, txs7, mode;
+ u32 txrate, txs, mode;
bool cck = false;
txs = le32_to_cpu(txs_data[0]);
- txs5 = le32_to_cpu(txs_data[5]);
- txs6 = le32_to_cpu(txs_data[6]);
- txs7 = le32_to_cpu(txs_data[7]);
if (!(txs & MT_TXS0_ACK_ERROR_MASK))
info->flags |= IEEE80211_TX_STAT_ACK;
@@ -1334,10 +1331,6 @@ mt7915_mac_parse_txs(struct mt7915_dev *dev, struct mt76_wcid *wcid,
info->status.rates[0].idx = -1;
- stats->tx_mpdu_attempts += FIELD_GET(MT_TXS5_F1_MPDU_TX_COUNT, txs5);
- stats->tx_mpdu_fail += FIELD_GET(MT_TXS6_F1_MPDU_FAIL_COUNT, txs6);
- stats->tx_mpdu_retry += FIELD_GET(MT_TXS7_F1_MPDU_RETRY_COUNT, txs7);
-
txrate = FIELD_GET(MT_TXS0_TX_RATE, txs);
rate->mcs = FIELD_GET(MT_TX_RATE_IDX, txrate);
@@ -1418,6 +1411,19 @@ mt7915_mac_parse_txs(struct mt7915_dev *dev, struct mt76_wcid *wcid,
stats->tx_bw[0]++;
break;
}
+
+ if (FIELD_GET(MT_TXS0_TXS_FORMAT, txs) == 2) {
+ /* TXSFM == 10 */
+ u32 txs5, txs6, txs7;
+
+ txs5 = le32_to_cpu(txs_data[5]);
+ txs6 = le32_to_cpu(txs_data[6]);
+ txs7 = le32_to_cpu(txs_data[7]);
+
+ stats->tx_mpdu_attempts += FIELD_GET(MT_TXS5_F1_MPDU_TX_COUNT, txs5);
+ stats->tx_mpdu_fail += FIELD_GET(MT_TXS6_F1_MPDU_FAIL_COUNT, txs6);
+ stats->tx_mpdu_retry += FIELD_GET(MT_TXS7_F1_MPDU_RETRY_COUNT, txs7);
+ }
}
static void
@@ -1469,8 +1475,6 @@ static void mt7915_mac_add_txs(struct mt7915_dev *dev, void *data)
u8 pid;
txs = le32_to_cpu(txs_data[0]);
- if (FIELD_GET(MT_TXS0_TXS_FORMAT, txs) > 1)
- return;
txs = le32_to_cpu(txs_data[2]);
wcidx = FIELD_GET(MT_TXS2_WCID, txs);
@@ -347,6 +347,9 @@ struct mt7915_tx_free {
#define MT_TXS4_TIMESTAMP GENMASK(31, 0)
+/* The F0 variables are for TXSFM 0x0 and 0x1. The F1 variables
+ * are for TXSFM 0x2 aka PPDU format.
+ */
#define MT_TXS5_F0_FINAL_MPDU BIT(31)
#define MT_TXS5_F0_QOS BIT(30)
#define MT_TXS5_F0_TX_COUNT GENMASK(29, 25)