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

mt76: introduce mt76_init_mcu_queue utility routine



Introduce mt76_init_mcu_queue utility routine in order to allocate
dedicate q_mcu pointers for mcu hw queues. This is a preliminary patch
to move data queues in mt76_phy and add dbdc support to mt7915 driver

Signed-off-by: default avatarLorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent 89870594
Loading
Loading
Loading
Loading
+7 −9
Original line number Diff line number Diff line
@@ -1214,23 +1214,21 @@ int mt76_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
}
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 *
mt76_init_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;
		return ERR_PTR(-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 ERR_PTR(err);

	return 0;
	return hwq;
}
EXPORT_SYMBOL_GPL(mt76_init_tx_queue);
EXPORT_SYMBOL_GPL(mt76_init_queue);
+37 −2
Original line number Diff line number Diff line
@@ -72,6 +72,10 @@ enum mt76_txq_id {
	__MT_TXQ_MAX
};

enum mt76_mcuq_id {
	__MT_MCUQ_MAX
};

enum mt76_rxq_id {
	MT_RXQ_MAIN,
	MT_RXQ_MCU,
@@ -604,6 +608,7 @@ struct mt76_dev {

	struct list_head txwi_cache;
	struct mt76_queue *q_tx[2 * __MT_TXQ_MAX];
	struct mt76_queue *q_mcu[__MT_MCUQ_MAX];
	struct mt76_queue q_rx[__MT_RXQ_MAX];
	const struct mt76_queue_ops *queue_ops;
	int tx_dma_idx[4];
@@ -779,8 +784,38 @@ 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);
struct mt76_queue *
mt76_init_queue(struct mt76_dev *dev, int qid, int idx, int n_desc,
		int ring_base);
static inline int mt76_init_tx_queue(struct mt76_phy *phy, int qid, int idx,
				     int n_desc, int ring_base)
{
	struct mt76_queue *q;

	q = mt76_init_queue(phy->dev, qid, idx, n_desc, ring_base);
	if (IS_ERR(q))
		return PTR_ERR(q);

	q->qid = qid;
	phy->dev->q_tx[qid] = q;

	return 0;
}

static inline int mt76_init_mcu_queue(struct mt76_dev *dev, int qid, int idx,
				      int n_desc, int ring_base)
{
	struct mt76_queue *q;

	q = mt76_init_queue(dev, qid, idx, n_desc, ring_base);
	if (IS_ERR(q))
		return PTR_ERR(q);

	q->qid = qid;
	dev->q_mcu[qid] = q;

	return 0;
}

static inline struct mt76_phy *
mt76_dev_phy(struct mt76_dev *dev, bool phy_ext)
+1 −1
Original line number Diff line number Diff line
@@ -9,7 +9,7 @@ mt7603_init_tx_queue(struct mt7603_dev *dev, int qid, int idx, int n_desc)
{
	int err;

	err = mt76_init_tx_queue(&dev->mt76, qid, idx, n_desc,
	err = mt76_init_tx_queue(&dev->mphy, qid, idx, n_desc,
				 MT_TX_RING_BASE);
	if (err < 0)
		return err;
+6 −6
Original line number Diff line number Diff line
@@ -24,20 +24,20 @@ mt7622_init_tx_queues_multi(struct mt7615_dev *dev)
	int i;

	for (i = 0; i < ARRAY_SIZE(wmm_queue_map); i++) {
		ret = mt76_init_tx_queue(&dev->mt76, i, wmm_queue_map[i],
		ret = mt76_init_tx_queue(&dev->mphy, i, wmm_queue_map[i],
					 MT7615_TX_RING_SIZE / 2,
					 MT_TX_RING_BASE);
		if (ret)
			return ret;
	}

	ret = mt76_init_tx_queue(&dev->mt76, MT_TXQ_PSD, MT7622_TXQ_MGMT,
	ret = mt76_init_tx_queue(&dev->mphy, MT_TXQ_PSD, MT7622_TXQ_MGMT,
				 MT7615_TX_MGMT_RING_SIZE,
				 MT_TX_RING_BASE);
	if (ret)
		return ret;

	return mt76_init_tx_queue(&dev->mt76, MT_TXQ_MCU, MT7622_TXQ_MCU,
	return mt76_init_tx_queue(&dev->mphy, MT_TXQ_MCU, MT7622_TXQ_MCU,
				  MT7615_TX_MCU_RING_SIZE,
				  MT_TX_RING_BASE);
}
@@ -47,7 +47,7 @@ mt7615_init_tx_queues(struct mt7615_dev *dev)
{
	int ret, i;

	ret = mt76_init_tx_queue(&dev->mt76, MT_TXQ_FWDL, MT7615_TXQ_FWDL,
	ret = mt76_init_tx_queue(&dev->mphy, MT_TXQ_FWDL, MT7615_TXQ_FWDL,
				 MT7615_TX_FWDL_RING_SIZE,
				 MT_TX_RING_BASE);
	if (ret)
@@ -56,7 +56,7 @@ mt7615_init_tx_queues(struct mt7615_dev *dev)
	if (!is_mt7615(&dev->mt76))
		return mt7622_init_tx_queues_multi(dev);

	ret = mt76_init_tx_queue(&dev->mt76, 0, 0, MT7615_TX_RING_SIZE,
	ret = mt76_init_tx_queue(&dev->mphy, 0, 0, MT7615_TX_RING_SIZE,
				 MT_TX_RING_BASE);
	if (ret)
		return ret;
@@ -64,7 +64,7 @@ mt7615_init_tx_queues(struct mt7615_dev *dev)
	for (i = 1; i < MT_TXQ_MCU; i++)
		dev->mt76.q_tx[i] = dev->mt76.q_tx[0];

	return mt76_init_tx_queue(&dev->mt76, MT_TXQ_MCU, MT7615_TXQ_MCU,
	return mt76_init_tx_queue(&dev->mphy, MT_TXQ_MCU, MT7615_TXQ_MCU,
				  MT7615_TX_MCU_RING_SIZE,
				  MT_TX_RING_BASE);
}
+1 −1
Original line number Diff line number Diff line
@@ -109,7 +109,7 @@ mt76x02_init_tx_queue(struct mt76x02_dev *dev, int qid, int idx, int n_desc)
{
	int err;

	err = mt76_init_tx_queue(&dev->mt76, qid, idx, n_desc,
	err = mt76_init_tx_queue(&dev->mphy, qid, idx, n_desc,
				 MT_TX_RING_BASE);
	if (err < 0)
		return err;
Loading