]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mt76: pass original queue id from __mt76_tx_queue_skb to the driver
authorFelix Fietkau <nbd@nbd.name>
Sun, 3 Jul 2022 15:52:24 +0000 (17:52 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 20 Nov 2023 10:08:14 +0000 (11:08 +0100)
[ Upstream commit d08295f5be8e63e64f9e664572f1b582ede7958b ]

MT7615 and newer map multiple software tx queues to the hardware id

Signed-off-by: Felix Fietkau <nbd@nbd.name>
Stable-dep-of: 317620593349 ("wifi: mt76: mt7603: improve stuck beacon handling")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/wireless/mediatek/mt76/dma.c
drivers/net/wireless/mediatek/mt76/mt76.h
drivers/net/wireless/mediatek/mt76/mt7603/beacon.c
drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c
drivers/net/wireless/mediatek/mt76/sdio.c
drivers/net/wireless/mediatek/mt76/testmode.c
drivers/net/wireless/mediatek/mt76/tx.c
drivers/net/wireless/mediatek/mt76/usb.c

index 71a04c92117a62608659697a45e28989deb7d095..f225a34e218619bb03da34e39f0f70c8b346cd5f 100644 (file)
@@ -349,8 +349,8 @@ error:
 
 static int
 mt76_dma_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
-                     struct sk_buff *skb, struct mt76_wcid *wcid,
-                     struct ieee80211_sta *sta)
+                     enum mt76_txq_id qid, struct sk_buff *skb,
+                     struct mt76_wcid *wcid, struct ieee80211_sta *sta)
 {
        struct ieee80211_tx_status status = {
                .sta = sta,
@@ -406,7 +406,7 @@ mt76_dma_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
 
        dma_sync_single_for_cpu(dev->dma_dev, t->dma_addr, dev->drv->txwi_size,
                                DMA_TO_DEVICE);
-       ret = dev->drv->tx_prepare_skb(dev, txwi, q->qid, wcid, sta, &tx_info);
+       ret = dev->drv->tx_prepare_skb(dev, txwi, qid, wcid, sta, &tx_info);
        dma_sync_single_for_device(dev->dma_dev, t->dma_addr, dev->drv->txwi_size,
                                   DMA_TO_DEVICE);
        if (ret < 0)
index 87ae528581bbf4528a7982744a3f65f9aabbceed..27f04fb2796d7fc0438d71ef789b418df451699d 100644 (file)
@@ -195,8 +195,8 @@ struct mt76_queue_ops {
                     u32 ring_base);
 
        int (*tx_queue_skb)(struct mt76_dev *dev, struct mt76_queue *q,
-                           struct sk_buff *skb, struct mt76_wcid *wcid,
-                           struct ieee80211_sta *sta);
+                           enum mt76_txq_id qid, struct sk_buff *skb,
+                           struct mt76_wcid *wcid, struct ieee80211_sta *sta);
 
        int (*tx_queue_skb_raw)(struct mt76_dev *dev, struct mt76_queue *q,
                                struct sk_buff *skb, u32 tx_info);
index 5d4522f440b74cf2e5e3be9560d6575fa7b0fbbf..e35e0a68c6e48c18e2534e54e467728cc28c4a29 100644 (file)
@@ -24,8 +24,8 @@ mt7603_update_beacon_iter(void *priv, u8 *mac, struct ieee80211_vif *vif)
        if (!skb)
                return;
 
-       mt76_tx_queue_skb(dev, dev->mphy.q_tx[MT_TXQ_BEACON], skb,
-                         &mvif->sta.wcid, NULL);
+       mt76_tx_queue_skb(dev, dev->mphy.q_tx[MT_TXQ_BEACON],
+                         MT_TXQ_BEACON, skb, &mvif->sta.wcid, NULL);
 
        spin_lock_bh(&dev->ps_lock);
        mt76_wr(dev, MT_DMA_FQCR0, MT_DMA_FQCR0_BUSY |
@@ -123,7 +123,7 @@ void mt7603_pre_tbtt_tasklet(struct tasklet_struct *t)
                struct ieee80211_vif *vif = info->control.vif;
                struct mt7603_vif *mvif = (struct mt7603_vif *)vif->drv_priv;
 
-               mt76_tx_queue_skb(dev, q, skb, &mvif->sta.wcid, NULL);
+               mt76_tx_queue_skb(dev, q, MT_TXQ_CAB, skb, &mvif->sta.wcid, NULL);
        }
        mt76_queue_kick(dev, q);
        spin_unlock_bh(&q->lock);
index b50084bbe83de942a819d403310bc1e558e4b04a..6ba3a7975e1bfc61b32200c90efd84355a7963b8 100644 (file)
@@ -59,7 +59,8 @@ static void mt76x02_pre_tbtt_tasklet(struct tasklet_struct *t)
                struct ieee80211_vif *vif = info->control.vif;
                struct mt76x02_vif *mvif = (struct mt76x02_vif *)vif->drv_priv;
 
-               mt76_tx_queue_skb(dev, q, skb, &mvif->group_wcid, NULL);
+               mt76_tx_queue_skb(dev, q, MT_TXQ_PSD, skb, &mvif->group_wcid,
+                                 NULL);
        }
        spin_unlock_bh(&q->lock);
 }
index 9e639d0b9c631a17bef8756c2cc6158f2f2764b3..4964f19558be2987d7e241f57d70fbaeb1ba5881 100644 (file)
@@ -243,8 +243,8 @@ static void mt76s_tx_status_data(struct work_struct *work)
 
 static int
 mt76s_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
-                  struct sk_buff *skb, struct mt76_wcid *wcid,
-                  struct ieee80211_sta *sta)
+                  enum mt76_txq_id qid, struct sk_buff *skb,
+                  struct mt76_wcid *wcid, struct ieee80211_sta *sta)
 {
        struct mt76_tx_info tx_info = {
                .skb = skb,
@@ -256,7 +256,7 @@ mt76s_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
                return -ENOSPC;
 
        skb->prev = skb->next = NULL;
-       err = dev->drv->tx_prepare_skb(dev, NULL, q->qid, wcid, sta, &tx_info);
+       err = dev->drv->tx_prepare_skb(dev, NULL, qid, wcid, sta, &tx_info);
        if (err < 0)
                return err;
 
index 0109433e8c2fe49ea3a9fc0a316fc85d6fc4717d..12b13946fba18464760581cbaeba1ff9531a58a7 100644 (file)
@@ -49,8 +49,8 @@ void mt76_testmode_tx_pending(struct mt76_phy *phy)
               q->queued < q->ndesc / 2) {
                int ret;
 
-               ret = dev->queue_ops->tx_queue_skb(dev, q, skb_get(skb), wcid,
-                                                  NULL);
+               ret = dev->queue_ops->tx_queue_skb(dev, q, qid, skb_get(skb),
+                                                  wcid, NULL);
                if (ret < 0)
                        break;
 
index 7d126634547f12ff8e53198e0a2ed5c21aa9b9ac..134a735a06329f2dc4d3fc0078faddf156b6c2fa 100644 (file)
@@ -259,7 +259,7 @@ __mt76_tx_queue_skb(struct mt76_phy *phy, int qid, struct sk_buff *skb,
        int idx;
 
        non_aql = !info->tx_time_est;
-       idx = dev->queue_ops->tx_queue_skb(dev, q, skb, wcid, sta);
+       idx = dev->queue_ops->tx_queue_skb(dev, q, qid, skb, wcid, sta);
        if (idx < 0 || !sta)
                return idx;
 
index b47343e321b819bae02fe15f3d1185736194dad9..392632c3f1b1d410ad4db79db8900f8c2d2a139f 100644 (file)
@@ -901,8 +901,8 @@ mt76u_tx_setup_buffers(struct mt76_dev *dev, struct sk_buff *skb,
 
 static int
 mt76u_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
-                  struct sk_buff *skb, struct mt76_wcid *wcid,
-                  struct ieee80211_sta *sta)
+                  enum mt76_txq_id qid, struct sk_buff *skb,
+                  struct mt76_wcid *wcid, struct ieee80211_sta *sta)
 {
        struct mt76_tx_info tx_info = {
                .skb = skb,
@@ -914,7 +914,7 @@ mt76u_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
                return -ENOSPC;
 
        skb->prev = skb->next = NULL;
-       err = dev->drv->tx_prepare_skb(dev, NULL, q->qid, wcid, sta, &tx_info);
+       err = dev->drv->tx_prepare_skb(dev, NULL, qid, wcid, sta, &tx_info);
        if (err < 0)
                return err;