summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/mediatek/mt76/tx.c
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@nbd.name>2020-08-23 14:50:13 +0200
committerFelix Fietkau <nbd@nbd.name>2020-09-24 18:10:16 +0200
commitfe5b5ab52e9d385d5e6d20e3ce2d2af69175f6ad (patch)
treeb6b17fa7c2f983ad1370576ce6653ea318c0dd31 /drivers/net/wireless/mediatek/mt76/tx.c
parent16254fc51f7df622bd870f70cf6ae84d2d4c08a3 (diff)
mt76: unify queue tx cleanup code
Cleanup and preparation for changing tx scheduling behavior Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'drivers/net/wireless/mediatek/mt76/tx.c')
-rw-r--r--drivers/net/wireless/mediatek/mt76/tx.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/net/wireless/mediatek/mt76/tx.c b/drivers/net/wireless/mediatek/mt76/tx.c
index d8252e28bacd..1a2f2163c6c3 100644
--- a/drivers/net/wireless/mediatek/mt76/tx.c
+++ b/drivers/net/wireless/mediatek/mt76/tx.c
@@ -696,3 +696,25 @@ int mt76_skb_adjust_pad(struct sk_buff *skb)
return 0;
}
EXPORT_SYMBOL_GPL(mt76_skb_adjust_pad);
+
+void mt76_queue_tx_complete(struct mt76_dev *dev, struct mt76_queue *q,
+ struct mt76_queue_entry *e)
+{
+ enum mt76_txq_id qid = e->qid % 4;
+ bool ext_phy = e->qid >= 4;
+
+ if (e->skb)
+ dev->drv->tx_complete_skb(dev, qid, e);
+
+ spin_lock_bh(&q->lock);
+ q->tail = (q->tail + 1) % q->ndesc;
+ q->queued--;
+
+ if (ext_phy)
+ qid += __MT_TXQ_MAX;
+
+ if (e->schedule)
+ dev->q_tx[qid].swq_queued--;
+ spin_unlock_bh(&q->lock);
+}
+EXPORT_SYMBOL_GPL(mt76_queue_tx_complete);