]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
mt76: dma: rely on mt76_queue in mt76_dma_tx_cleanup signature
authorLorenzo Bianconi <lorenzo@kernel.org>
Wed, 11 Nov 2020 13:47:27 +0000 (14:47 +0100)
committerFelix Fietkau <nbd@nbd.name>
Fri, 4 Dec 2020 13:31:14 +0000 (14:31 +0100)
This is a preliminary patch to move data queues in mt76_phy and properly
support dbdc

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
13 files changed:
drivers/net/wireless/mediatek/mt76/dma.c
drivers/net/wireless/mediatek/mt76/mcu.c
drivers/net/wireless/mediatek/mt76/mt76.h
drivers/net/wireless/mediatek/mt76/mt7603/beacon.c
drivers/net/wireless/mediatek/mt76/mt7603/dma.c
drivers/net/wireless/mediatek/mt76/mt7603/mac.c
drivers/net/wireless/mediatek/mt76/mt7615/dma.c
drivers/net/wireless/mediatek/mt76/mt7615/mac.c
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c
drivers/net/wireless/mediatek/mt76/mt7915/dma.c
drivers/net/wireless/mediatek/mt76/mt7915/mac.c
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c

index 145e839fea4e566aceab9c330590f26dd7824ced..31ce7dc7643b940b6ca4b00cf77b724ff49330ce 100644 (file)
@@ -217,9 +217,8 @@ mt76_dma_kick_queue(struct mt76_dev *dev, struct mt76_queue *q)
 }
 
 static void
-mt76_dma_tx_cleanup(struct mt76_dev *dev, enum mt76_txq_id qid, bool flush)
+mt76_dma_tx_cleanup(struct mt76_dev *dev, struct mt76_queue *q, bool flush)
 {
-       struct mt76_queue *q = dev->q_tx[qid];
        struct mt76_queue_entry entry;
        bool wake = false;
        int last;
@@ -255,7 +254,7 @@ mt76_dma_tx_cleanup(struct mt76_dev *dev, enum mt76_txq_id qid, bool flush)
        }
 
        wake = wake && q->stopped &&
-              qid < IEEE80211_NUM_ACS && q->queued < q->ndesc - 8;
+              q->qid < IEEE80211_NUM_ACS && q->queued < q->ndesc - 8;
        if (wake)
                q->stopped = false;
 
@@ -263,7 +262,7 @@ mt76_dma_tx_cleanup(struct mt76_dev *dev, enum mt76_txq_id qid, bool flush)
                wake_up(&dev->tx_wait);
 
        if (wake)
-               ieee80211_wake_queue(dev->hw, qid);
+               ieee80211_wake_queue(dev->hw, q->qid);
 }
 
 static void *
@@ -664,7 +663,7 @@ void mt76_dma_cleanup(struct mt76_dev *dev)
        mt76_worker_disable(&dev->tx_worker);
        netif_napi_del(&dev->tx_napi);
        for (i = 0; i < ARRAY_SIZE(dev->q_tx); i++)
-               mt76_dma_tx_cleanup(dev, i, true);
+               mt76_dma_tx_cleanup(dev, dev->q_tx[i], true);
 
        mt76_for_each_q_rx(dev, i) {
                netif_napi_del(&dev->napi[i]);
index 30a6515758a8a1da209098bade86a1bfdbe5be5a..1c727afe5e87835816d7723123a3ebf26faacb3d 100644 (file)
@@ -122,7 +122,8 @@ int mt76_mcu_send_firmware(struct mt76_dev *dev, int cmd, const void *data,
                len -= cur_len;
 
                if (dev->queue_ops->tx_cleanup)
-                       dev->queue_ops->tx_cleanup(dev, MT_TXQ_FWDL, false);
+                       dev->queue_ops->tx_cleanup(dev, dev->q_tx[MT_TXQ_FWDL],
+                                                  false);
        }
 
        return 0;
index fc4f0b3e4873ea6a0e02dcbcf2e42652e0214a00..4e691adb2a2b36b490dccaed6e6561b37a0300c9 100644 (file)
@@ -179,7 +179,7 @@ struct mt76_queue_ops {
 
        void (*rx_reset)(struct mt76_dev *dev, enum mt76_rxq_id qid);
 
-       void (*tx_cleanup)(struct mt76_dev *dev, enum mt76_txq_id qid,
+       void (*tx_cleanup)(struct mt76_dev *dev, struct mt76_queue *q,
                           bool flush);
 
        void (*kick)(struct mt76_dev *dev, struct mt76_queue *q);
@@ -751,7 +751,7 @@ static inline u16 mt76_rev(struct mt76_dev *dev)
 #define mt76_tx_queue_skb_raw(dev, ...)        (dev)->mt76.queue_ops->tx_queue_skb_raw(&((dev)->mt76), __VA_ARGS__)
 #define mt76_tx_queue_skb(dev, ...)    (dev)->mt76.queue_ops->tx_queue_skb(&((dev)->mt76), __VA_ARGS__)
 #define mt76_queue_rx_reset(dev, ...)  (dev)->mt76.queue_ops->rx_reset(&((dev)->mt76), __VA_ARGS__)
-#define mt76_queue_tx_cleanup(dev, ...)        (dev)->mt76.queue_ops->tx_cleanup(&((dev)->mt76), __VA_ARGS__)
+#define mt76_queue_tx_cleanup(dev, ...)        (dev)->mt76.queue_ops->tx_cleanup(&((dev)->mt76), __VA_ARGS__)
 #define mt76_queue_kick(dev, ...)      (dev)->mt76.queue_ops->kick(&((dev)->mt76), __VA_ARGS__)
 
 #define mt76_for_each_q_rx(dev, i)     \
index 53c229cadbbfda8595ea941807c7d0f70123f3ba..2d2b429c9ffc9843d8a33913bb90ec5f530d7b5a 100644 (file)
@@ -89,7 +89,7 @@ void mt7603_pre_tbtt_tasklet(struct tasklet_struct *t)
        /* Flush all previous CAB queue packets */
        mt76_wr(dev, MT_WF_ARB_CAB_FLUSH, GENMASK(30, 16) | BIT(0));
 
-       mt76_queue_tx_cleanup(dev, MT_TXQ_CAB, false);
+       mt76_queue_tx_cleanup(dev, dev->mt76.q_tx[MT_TXQ_CAB], false);
 
        mt76_csa_check(&dev->mt76);
        if (dev->mt76.csa_complete)
@@ -135,7 +135,7 @@ void mt7603_pre_tbtt_tasklet(struct tasklet_struct *t)
                 ((1 << (MT7603_MAX_INTERFACES - 1)) - 1)));
 
 out:
-       mt76_queue_tx_cleanup(dev, MT_TXQ_BEACON, false);
+       mt76_queue_tx_cleanup(dev, dev->mt76.q_tx[MT_TXQ_BEACON], false);
        if (dev->mt76.q_tx[MT_TXQ_BEACON]->queued >
            hweight8(dev->mt76.beacon_mask))
                dev->beacon_check++;
index 05a5801646d7eee34783aef728b2e5c1444f80f1..3c6399909c063b424950c82775cc8892b7587086 100644 (file)
@@ -147,13 +147,13 @@ static int mt7603_poll_tx(struct napi_struct *napi, int budget)
        dev->tx_dma_check = 0;
 
        for (i = MT_TXQ_MCU; i >= 0; i--)
-               mt76_queue_tx_cleanup(dev, i, false);
+               mt76_queue_tx_cleanup(dev, dev->mt76.q_tx[i], false);
 
        if (napi_complete_done(napi, 0))
                mt7603_irq_enable(dev, MT_INT_TX_DONE_ALL);
 
        for (i = MT_TXQ_MCU; i >= 0; i--)
-               mt76_queue_tx_cleanup(dev, i, false);
+               mt76_queue_tx_cleanup(dev, dev->mt76.q_tx[i], false);
 
        mt7603_mac_sta_poll(dev);
 
index f665a1c95eed2dd3c6ff1dc783bebdb81b1d0593..aefa161ecbf8d7358bf9d73aae5d355a831cf9a3 100644 (file)
@@ -1435,7 +1435,7 @@ static void mt7603_mac_watchdog_reset(struct mt7603_dev *dev)
        mt7603_pse_client_reset(dev);
 
        for (i = 0; i < __MT_TXQ_MAX; i++)
-               mt76_queue_tx_cleanup(dev, i, true);
+               mt76_queue_tx_cleanup(dev, dev->mt76.q_tx[i], true);
 
        mt76_for_each_q_rx(&dev->mt76, i) {
                mt76_queue_rx_reset(dev, i);
index 333254734ac5dcfb830d284eba8d32fe099c106a..0a11b346f52296cadbc4590f649ae5409ec057b5 100644 (file)
@@ -75,7 +75,7 @@ static int mt7615_poll_tx(struct napi_struct *napi, int budget)
 
        dev = container_of(napi, struct mt7615_dev, mt76.tx_napi);
 
-       mt76_queue_tx_cleanup(dev, MT_TXQ_MCU, false);
+       mt76_queue_tx_cleanup(dev, dev->mt76.q_tx[MT_TXQ_MCU], false);
 
        if (napi_complete_done(napi, 0))
                mt7615_irq_enable(dev, mt7615_tx_mcu_int_mask(dev));
index 54650f265df7ef7ab9b0b8c46e9eb0fe2d526ef6..78fc7b96210117e4efe3068d9e1e9fa95609b559 100644 (file)
@@ -1435,12 +1435,12 @@ static void mt7615_mac_tx_free(struct mt7615_dev *dev, struct sk_buff *skb)
        struct mt7615_tx_free *free = (struct mt7615_tx_free *)skb->data;
        u8 i, count;
 
-       mt76_queue_tx_cleanup(dev, MT_TXQ_PSD, false);
+       mt76_queue_tx_cleanup(dev, dev->mt76.q_tx[MT_TXQ_PSD], false);
        if (is_mt7615(&dev->mt76)) {
-               mt76_queue_tx_cleanup(dev, MT_TXQ_BE, false);
+               mt76_queue_tx_cleanup(dev, dev->mt76.q_tx[MT_TXQ_BE], false);
        } else {
                for (i = 0; i < IEEE80211_NUM_ACS; i++)
-                       mt76_queue_tx_cleanup(dev, i, false);
+                       mt76_queue_tx_cleanup(dev, dev->mt76.q_tx[i], false);
        }
 
        count = FIELD_GET(MT_TX_FREE_MSDU_ID_CNT, le16_to_cpu(free->ctrl));
@@ -2045,7 +2045,7 @@ void mt7615_dma_reset(struct mt7615_dev *dev)
        usleep_range(1000, 2000);
 
        for (i = 0; i < __MT_TXQ_MAX; i++)
-               mt76_queue_tx_cleanup(dev, i, true);
+               mt76_queue_tx_cleanup(dev, dev->mt76.q_tx[i], true);
 
        mt76_for_each_q_rx(&dev->mt76, i) {
                mt76_queue_rx_reset(dev, i);
index 6b05bb7dfc69958d7327cf7ad0087a269708a519..8525236d7d35f6b2bf82040596a17f3d434b5547 100644 (file)
@@ -2464,7 +2464,7 @@ int mt7615_mcu_init(struct mt7615_dev *dev)
        if (ret)
                return ret;
 
-       mt76_queue_tx_cleanup(dev, MT_TXQ_FWDL, false);
+       mt76_queue_tx_cleanup(dev, dev->mt76.q_tx[MT_TXQ_FWDL], false);
        dev_dbg(dev->mt76.dev, "Firmware init done\n");
        set_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state);
        mt7615_mcu_fw_log_2_host(dev, 0);
index 82f65fa1a39d4a8de6645d362bcd1dd759535bd1..e610544971a669b13c7256e6b488deff38573691 100644 (file)
@@ -164,13 +164,13 @@ static int mt76x02_poll_tx(struct napi_struct *napi, int budget)
        mt76x02_mac_poll_tx_status(dev, false);
 
        for (i = MT_TXQ_MCU; i >= 0; i--)
-               mt76_queue_tx_cleanup(dev, i, false);
+               mt76_queue_tx_cleanup(dev, dev->mt76.q_tx[i], false);
 
        if (napi_complete_done(napi, 0))
                mt76x02_irq_enable(dev, MT_INT_TX_DONE_ALL);
 
        for (i = MT_TXQ_MCU; i >= 0; i--)
-               mt76_queue_tx_cleanup(dev, i, false);
+               mt76_queue_tx_cleanup(dev, dev->mt76.q_tx[i], false);
 
        mt76_worker_schedule(&dev->mt76.tx_worker);
 
@@ -469,7 +469,7 @@ static void mt76x02_watchdog_reset(struct mt76x02_dev *dev)
                mt76_mcu_restart(dev);
 
        for (i = 0; i < __MT_TXQ_MAX; i++)
-               mt76_queue_tx_cleanup(dev, i, true);
+               mt76_queue_tx_cleanup(dev, dev->mt76.q_tx[i], true);
 
        mt76_for_each_q_rx(&dev->mt76, i) {
                mt76_queue_rx_reset(dev, i);
index 7c9fe142ed41a20f9f508f22c560da5f3c20d9b7..702034be621c19bf13a7d18ebe1f3d9c448119f2 100644 (file)
@@ -56,8 +56,8 @@ void mt7915_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
 static void
 mt7915_tx_cleanup(struct mt7915_dev *dev)
 {
-       mt76_queue_tx_cleanup(dev, MT_TXQ_MCU, false);
-       mt76_queue_tx_cleanup(dev, MT_TXQ_MCU_WA, false);
+       mt76_queue_tx_cleanup(dev, dev->mt76.q_tx[MT_TXQ_MCU], false);
+       mt76_queue_tx_cleanup(dev, dev->mt76.q_tx[MT_TXQ_MCU_WA], false);
 }
 
 static int mt7915_poll_tx(struct napi_struct *napi, int budget)
index 74299887b9936619923c562483cbe155c5bc80f4..871c906de9f957b10bdcff2e01b8c6cfdcc06a6d 100644 (file)
@@ -1072,8 +1072,8 @@ void mt7915_mac_tx_free(struct mt7915_dev *dev, struct sk_buff *skb)
        u8 i, count;
 
        /* clean DMA queues and unmap buffers first */
-       mt76_queue_tx_cleanup(dev, MT_TXQ_PSD, false);
-       mt76_queue_tx_cleanup(dev, MT_TXQ_BE, false);
+       mt76_queue_tx_cleanup(dev, mdev->q_tx[MT_TXQ_PSD], false);
+       mt76_queue_tx_cleanup(dev, mdev->q_tx[MT_TXQ_BE], false);
 
        /*
         * TODO: MT_TX_FREE_LATENCY is msdu time from the TXD is queued into PLE,
@@ -1421,7 +1421,7 @@ mt7915_dma_reset(struct mt7915_dev *dev)
        usleep_range(1000, 2000);
 
        for (i = 0; i < __MT_TXQ_MAX; i++)
-               mt76_queue_tx_cleanup(dev, i, true);
+               mt76_queue_tx_cleanup(dev, dev->mt76.q_tx[i], true);
 
        mt76_for_each_q_rx(&dev->mt76, i) {
                mt76_queue_rx_reset(dev, i);
index 364ffa37de30e5ce952eedc1d2a05a4a97d960ad..b135ad972e88547b8ae1de2a43a56ed175197885 100644 (file)
@@ -2799,7 +2799,7 @@ static int mt7915_load_firmware(struct mt7915_dev *dev)
                return -EIO;
        }
 
-       mt76_queue_tx_cleanup(dev, MT_TXQ_FWDL, false);
+       mt76_queue_tx_cleanup(dev, dev->mt76.q_tx[MT_TXQ_FWDL], false);
 
        dev_dbg(dev->mt76.dev, "Firmware init done\n");