diff options
Diffstat (limited to 'drivers/net/wireless/mediatek/mt76/tx.c')
-rw-r--r-- | drivers/net/wireless/mediatek/mt76/tx.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/drivers/net/wireless/mediatek/mt76/tx.c b/drivers/net/wireless/mediatek/mt76/tx.c index 25627e70bdad..92e1c0974770 100644 --- a/drivers/net/wireless/mediatek/mt76/tx.c +++ b/drivers/net/wireless/mediatek/mt76/tx.c @@ -202,16 +202,22 @@ void mt76_tx_complete_skb(struct mt76_dev *dev, u16 wcid_idx, struct sk_buff *sk struct ieee80211_hw *hw; struct sk_buff_head list; + mt76_tx_check_non_aql(dev, wcid_idx, skb); + #ifdef CONFIG_NL80211_TESTMODE - if (skb == dev->test.tx_skb) { - dev->test.tx_done++; - if (dev->test.tx_queued == dev->test.tx_done) + if (mt76_is_testmode_skb(dev, skb, &hw)) { + struct mt76_phy *phy = hw->priv; + + if (skb == phy->test.tx_skb) + phy->test.tx_done++; + if (phy->test.tx_queued == phy->test.tx_done) wake_up(&dev->tx_wait); + + ieee80211_free_txskb(hw, skb); + return; } #endif - mt76_tx_check_non_aql(dev, wcid_idx, skb); - if (!skb->prev) { hw = mt76_tx_status_get_hw(dev, skb); ieee80211_free_txskb(hw, skb); @@ -261,7 +267,7 @@ mt76_tx(struct mt76_phy *phy, struct ieee80211_sta *sta, int qid = skb_get_queue_mapping(skb); bool ext_phy = phy != &dev->phy; - if (mt76_testmode_enabled(dev)) { + if (mt76_testmode_enabled(phy)) { ieee80211_free_txskb(phy->hw, skb); return; } @@ -539,8 +545,10 @@ void mt76_tx_worker(struct mt76_worker *w) mt76_txq_schedule_all(dev->phy2); #ifdef CONFIG_NL80211_TESTMODE - if (dev->test.tx_pending) - mt76_testmode_tx_pending(dev); + if (dev->phy.test.tx_pending) + mt76_testmode_tx_pending(&dev->phy); + if (dev->phy2 && dev->phy2->test.tx_pending) + mt76_testmode_tx_pending(dev->phy2); #endif } |