Commit b671da33 authored by Lorenzo Bianconi's avatar Lorenzo Bianconi Committed by Felix Fietkau
Browse files

mt76: move mt76_init_tx_queue in common code



Move mt76_init_tx_queue in mac80211.c since it is shared by all
drivers.

Signed-off-by: default avatarLorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent 3d51a3e9
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -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);
+4 −0
Original line number Diff line number Diff line
@@ -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)
{
+2 −8
Original line number Diff line number Diff line
@@ -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;
+17 −33
Original line number Diff line number Diff line
@@ -11,25 +11,6 @@
#include "../dma.h"
#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)
{
@@ -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)
+2 −8
Original line number Diff line number Diff line
@@ -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;
Loading