mt76: move mt76_init_tx_queue in common code
authorLorenzo Bianconi <lorenzo@kernel.org>
Wed, 11 Nov 2020 13:47:23 +0000 (14:47 +0100)
committerFelix Fietkau <nbd@nbd.name>
Fri, 4 Dec 2020 13:31:14 +0000 (14:31 +0100)
Move mt76_init_tx_queue in mac80211.c since it is shared by all
drivers.

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

index 2bc1ef1..d48f09a 100644 (file)
@@ -1213,3 +1213,24 @@ int mt76_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
        return 0;
 }
 EXPORT_SYMBOL_GPL(mt76_get_antenna);
+
+int mt76_init_tx_queue(struct mt76_dev *dev, int qid, int idx,
+                      int n_desc, int ring_base)
+{
+       struct mt76_queue *hwq;
+       int err;
+
+       hwq = devm_kzalloc(dev->dev, sizeof(*hwq), GFP_KERNEL);
+       if (!hwq)
+               return -ENOMEM;
+
+       err = dev->queue_ops->alloc(dev, hwq, idx, n_desc, 0, ring_base);
+       if (err < 0)
+               return err;
+
+       hwq->qid = qid;
+       dev->q_tx[qid] = hwq;
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(mt76_init_tx_queue);
index 34b6d32..63549a7 100644 (file)
@@ -134,6 +134,7 @@ struct mt76_queue {
 
        u8 buf_offset;
        u8 hw_idx;
+       u8 qid;
 
        dma_addr_t desc_dma;
        struct sk_buff *rx_head;
@@ -778,6 +779,9 @@ void mt76_seq_puts_array(struct seq_file *file, const char *str,
 int mt76_eeprom_init(struct mt76_dev *dev, int len);
 void mt76_eeprom_override(struct mt76_dev *dev);
 
+int mt76_init_tx_queue(struct mt76_dev *dev, int qid, int idx,
+                      int n_desc, int ring_base);
+
 static inline struct mt76_phy *
 mt76_dev_phy(struct mt76_dev *dev, bool phy_ext)
 {
index d60d00f..05a5801 100644 (file)
@@ -7,19 +7,13 @@
 static int
 mt7603_init_tx_queue(struct mt7603_dev *dev, int qid, int idx, int n_desc)
 {
-       struct mt76_queue *hwq;
        int err;
 
-       hwq = devm_kzalloc(dev->mt76.dev, sizeof(*hwq), GFP_KERNEL);
-       if (!hwq)
-               return -ENOMEM;
-
-       err = mt76_queue_alloc(dev, hwq, idx, n_desc, 0, MT_TX_RING_BASE);
+       err = mt76_init_tx_queue(&dev->mt76, qid, idx, n_desc,
+                                MT_TX_RING_BASE);
        if (err < 0)
                return err;
 
-       dev->mt76.q_tx[qid] = hwq;
-
        mt7603_irq_enable(dev, MT_INT_TX_DONE(idx));
 
        return 0;
index bf8ae14..3332547 100644 (file)
 #include "mac.h"
 
 static int
-mt7615_init_tx_queue(struct mt7615_dev *dev, int qid, int idx, int n_desc)
-{
-       struct mt76_queue *hwq;
-       int err;
-
-       hwq = devm_kzalloc(dev->mt76.dev, sizeof(*hwq), GFP_KERNEL);
-       if (!hwq)
-               return -ENOMEM;
-
-       err = mt76_queue_alloc(dev, hwq, idx, n_desc, 0, MT_TX_RING_BASE);
-       if (err < 0)
-               return err;
-
-       dev->mt76.q_tx[qid] = hwq;
-
-       return 0;
-}
-
-static int
 mt7622_init_tx_queues_multi(struct mt7615_dev *dev)
 {
        static const u8 wmm_queue_map[] = {
@@ -43,20 +24,22 @@ mt7622_init_tx_queues_multi(struct mt7615_dev *dev)
        int i;
 
        for (i = 0; i < ARRAY_SIZE(wmm_queue_map); i++) {
-               ret = mt7615_init_tx_queue(dev, i, wmm_queue_map[i],
-                                          MT7615_TX_RING_SIZE / 2);
+               ret = mt76_init_tx_queue(&dev->mt76, i, wmm_queue_map[i],
+                                        MT7615_TX_RING_SIZE / 2,
+                                        MT_TX_RING_BASE);
                if (ret)
                        return ret;
        }
 
-       ret = mt7615_init_tx_queue(dev, MT_TXQ_PSD,
-                                  MT7622_TXQ_MGMT, MT7615_TX_MGMT_RING_SIZE);
+       ret = mt76_init_tx_queue(&dev->mt76, MT_TXQ_PSD, MT7622_TXQ_MGMT,
+                                MT7615_TX_MGMT_RING_SIZE,
+                                MT_TX_RING_BASE);
        if (ret)
                return ret;
 
-       ret = mt7615_init_tx_queue(dev, MT_TXQ_MCU,
-                                  MT7622_TXQ_MCU, MT7615_TX_MCU_RING_SIZE);
-       return ret;
+       return mt76_init_tx_queue(&dev->mt76, MT_TXQ_MCU, MT7622_TXQ_MCU,
+                                 MT7615_TX_MCU_RING_SIZE,
+                                 MT_TX_RING_BASE);
 }
 
 static int
@@ -64,25 +47,26 @@ mt7615_init_tx_queues(struct mt7615_dev *dev)
 {
        int ret, i;
 
-       ret = mt7615_init_tx_queue(dev, MT_TXQ_FWDL,
-                                  MT7615_TXQ_FWDL,
-                                  MT7615_TX_FWDL_RING_SIZE);
+       ret = mt76_init_tx_queue(&dev->mt76, MT_TXQ_FWDL, MT7615_TXQ_FWDL,
+                                MT7615_TX_FWDL_RING_SIZE,
+                                MT_TX_RING_BASE);
        if (ret)
                return ret;
 
        if (!is_mt7615(&dev->mt76))
                return mt7622_init_tx_queues_multi(dev);
 
-       ret = mt7615_init_tx_queue(dev, 0, 0, MT7615_TX_RING_SIZE);
+       ret = mt76_init_tx_queue(&dev->mt76, 0, 0, MT7615_TX_RING_SIZE,
+                                MT_TX_RING_BASE);
        if (ret)
                return ret;
 
        for (i = 1; i < MT_TXQ_MCU; i++)
                dev->mt76.q_tx[i] = dev->mt76.q_tx[0];
 
-       ret = mt7615_init_tx_queue(dev, MT_TXQ_MCU, MT7615_TXQ_MCU,
-                                  MT7615_TX_MCU_RING_SIZE);
-       return 0;
+       return mt76_init_tx_queue(&dev->mt76, MT_TXQ_MCU, MT7615_TXQ_MCU,
+                                 MT7615_TX_MCU_RING_SIZE,
+                                 MT_TX_RING_BASE);
 }
 
 static int mt7615_poll_tx(struct napi_struct *napi, int budget)
index 67911c0..82f65fa 100644 (file)
@@ -106,19 +106,13 @@ EXPORT_SYMBOL_GPL(mt76x02e_init_beacon_config);
 static int
 mt76x02_init_tx_queue(struct mt76x02_dev *dev, int qid, int idx, int n_desc)
 {
-       struct mt76_queue *hwq;
        int err;
 
-       hwq = devm_kzalloc(dev->mt76.dev, sizeof(*hwq), GFP_KERNEL);
-       if (!hwq)
-               return -ENOMEM;
-
-       err = mt76_queue_alloc(dev, hwq, idx, n_desc, 0, MT_TX_RING_BASE);
+       err = mt76_init_tx_queue(&dev->mt76, qid, idx, n_desc,
+                                MT_TX_RING_BASE);
        if (err < 0)
                return err;
 
-       dev->mt76.q_tx[qid] = hwq;
-
        mt76x02_irq_enable(dev, MT_INT_TX_DONE(idx));
 
        return 0;
index 33c42ec..7c9fe14 100644 (file)
@@ -6,41 +6,16 @@
 #include "mac.h"
 
 static int
-mt7915_init_tx_queues(struct mt7915_dev *dev, int n_desc)
+mt7915_init_tx_queues(struct mt7915_dev *dev, int idx, int n_desc)
 {
-       struct mt76_queue *hwq;
-       int err, i;
+       int i, err;
 
-       hwq = devm_kzalloc(dev->mt76.dev, sizeof(*hwq), GFP_KERNEL);
-       if (!hwq)
-               return -ENOMEM;
-
-       err = mt76_queue_alloc(dev, hwq, MT7915_TXQ_BAND0, n_desc, 0,
-                              MT_TX_RING_BASE);
+       err = mt76_init_tx_queue(&dev->mt76, 0, idx, n_desc, MT_TX_RING_BASE);
        if (err < 0)
                return err;
 
        for (i = 0; i < MT_TXQ_MCU; i++)
-               dev->mt76.q_tx[i] = hwq;
-
-       return 0;
-}
-
-static int
-mt7915_init_mcu_queue(struct mt7915_dev *dev, int qid, int idx, int n_desc)
-{
-       struct mt76_queue *hwq;
-       int err;
-
-       hwq = devm_kzalloc(dev->mt76.dev, sizeof(*hwq), GFP_KERNEL);
-       if (!hwq)
-               return -ENOMEM;
-
-       err = mt76_queue_alloc(dev, hwq, idx, n_desc, 0, MT_TX_RING_BASE);
-       if (err < 0)
-               return err;
-
-       dev->mt76.q_tx[qid] = hwq;
+               dev->mt76.q_tx[i] = dev->mt76.q_tx[0];
 
        return 0;
 }
@@ -262,25 +237,26 @@ int mt7915_dma_init(struct mt7915_dev *dev)
        mt76_wr(dev, MT_WFDMA1_PRI_DLY_INT_CFG0, 0);
 
        /* init tx queue */
-       ret = mt7915_init_tx_queues(dev, MT7915_TX_RING_SIZE);
+       ret = mt7915_init_tx_queues(dev, MT7915_TXQ_BAND0,
+                                   MT7915_TX_RING_SIZE);
        if (ret)
                return ret;
 
        /* command to WM */
-       ret = mt7915_init_mcu_queue(dev, MT_TXQ_MCU, MT7915_TXQ_MCU_WM,
-                                   MT7915_TX_MCU_RING_SIZE);
+       ret = mt76_init_tx_queue(&dev->mt76, MT_TXQ_MCU, MT7915_TXQ_MCU_WM,
+                                MT7915_TX_MCU_RING_SIZE, MT_TX_RING_BASE);
        if (ret)
                return ret;
 
        /* command to WA */
-       ret = mt7915_init_mcu_queue(dev, MT_TXQ_MCU_WA, MT7915_TXQ_MCU_WA,
-                                   MT7915_TX_MCU_RING_SIZE);
+       ret = mt76_init_tx_queue(&dev->mt76, MT_TXQ_MCU_WA, MT7915_TXQ_MCU_WA,
+                                MT7915_TX_MCU_RING_SIZE, MT_TX_RING_BASE);
        if (ret)
                return ret;
 
        /* firmware download */
-       ret = mt7915_init_mcu_queue(dev, MT_TXQ_FWDL, MT7915_TXQ_FWDL,
-                                   MT7915_TX_FWDL_RING_SIZE);
+       ret = mt76_init_tx_queue(&dev->mt76, MT_TXQ_FWDL, MT7915_TXQ_FWDL,
+                                MT7915_TX_FWDL_RING_SIZE, MT_TX_RING_BASE);
        if (ret)
                return ret;