Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fcdd99ce authored by Lorenzo Bianconi's avatar Lorenzo Bianconi Committed by Kalle Valo
Browse files

mt76: rename mt76_tx_queue_skb in mt76_dma_tx_queue_skb



Move mt76_dma_tx_queue_skb routine in dma.c.
Remove static qualifier from mt76_get_txwi definition

Signed-off-by: default avatarLorenzo Bianconi <lorenzo.bianconi@redhat.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent bbd89d94
Loading
Loading
Loading
Loading
+74 −0
Original line number Original line Diff line number Diff line
@@ -239,6 +239,80 @@ mt76_dma_kick_queue(struct mt76_dev *dev, struct mt76_queue *q)
	iowrite32(q->head, &q->regs->cpu_idx);
	iowrite32(q->head, &q->regs->cpu_idx);
}
}


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)
{
	struct mt76_queue_entry e;
	struct mt76_txwi_cache *t;
	struct mt76_queue_buf buf[32];
	struct sk_buff *iter;
	dma_addr_t addr;
	int len;
	u32 tx_info = 0;
	int n, ret;

	t = mt76_get_txwi(dev);
	if (!t) {
		ieee80211_free_txskb(dev->hw, skb);
		return -ENOMEM;
	}

	dma_sync_single_for_cpu(dev->dev, t->dma_addr, sizeof(t->txwi),
				DMA_TO_DEVICE);
	ret = dev->drv->tx_prepare_skb(dev, &t->txwi, skb, q, wcid, sta,
				       &tx_info);
	dma_sync_single_for_device(dev->dev, t->dma_addr, sizeof(t->txwi),
				   DMA_TO_DEVICE);
	if (ret < 0)
		goto free;

	len = skb->len - skb->data_len;
	addr = dma_map_single(dev->dev, skb->data, len, DMA_TO_DEVICE);
	if (dma_mapping_error(dev->dev, addr)) {
		ret = -ENOMEM;
		goto free;
	}

	n = 0;
	buf[n].addr = t->dma_addr;
	buf[n++].len = dev->drv->txwi_size;
	buf[n].addr = addr;
	buf[n++].len = len;

	skb_walk_frags(skb, iter) {
		if (n == ARRAY_SIZE(buf))
			goto unmap;

		addr = dma_map_single(dev->dev, iter->data, iter->len,
				      DMA_TO_DEVICE);
		if (dma_mapping_error(dev->dev, addr))
			goto unmap;

		buf[n].addr = addr;
		buf[n++].len = iter->len;
	}

	if (q->queued + (n + 1) / 2 >= q->ndesc - 1)
		goto unmap;

	return dev->queue_ops->add_buf(dev, q, buf, n, tx_info, skb, t);

unmap:
	ret = -ENOMEM;
	for (n--; n > 0; n--)
		dma_unmap_single(dev->dev, buf[n].addr, buf[n].len,
				 DMA_TO_DEVICE);

free:
	e.skb = skb;
	e.txwi = t;
	dev->drv->tx_complete_skb(dev, q, &e, true);
	mt76_put_txwi(dev, t);
	return ret;
}
EXPORT_SYMBOL_GPL(mt76_dma_tx_queue_skb);

static int
static int
mt76_dma_rx_fill(struct mt76_dev *dev, struct mt76_queue *q, bool napi)
mt76_dma_rx_fill(struct mt76_dev *dev, struct mt76_queue *q, bool napi)
{
{
+4 −3
Original line number Original line Diff line number Diff line
@@ -421,7 +421,7 @@ wcid_to_sta(struct mt76_wcid *wcid)
	return container_of(ptr, struct ieee80211_sta, drv_priv);
	return container_of(ptr, struct ieee80211_sta, drv_priv);
}
}


int mt76_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
int mt76_dma_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
			  struct sk_buff *skb, struct mt76_wcid *wcid,
			  struct sk_buff *skb, struct mt76_wcid *wcid,
			  struct ieee80211_sta *sta);
			  struct ieee80211_sta *sta);


@@ -454,6 +454,7 @@ void mt76_wcid_key_setup(struct mt76_dev *dev, struct mt76_wcid *wcid,


/* internal */
/* internal */
void mt76_tx_free(struct mt76_dev *dev);
void mt76_tx_free(struct mt76_dev *dev);
struct mt76_txwi_cache *mt76_get_txwi(struct mt76_dev *dev);
void mt76_put_txwi(struct mt76_dev *dev, struct mt76_txwi_cache *t);
void mt76_put_txwi(struct mt76_dev *dev, struct mt76_txwi_cache *t);
void mt76_rx_complete(struct mt76_dev *dev, struct sk_buff_head *frames,
void mt76_rx_complete(struct mt76_dev *dev, struct sk_buff_head *frames,
		      struct napi_struct *napi);
		      struct napi_struct *napi);
+2 −1
Original line number Original line Diff line number Diff line
@@ -289,7 +289,8 @@ void mt76x2_pre_tbtt_tasklet(unsigned long arg)
		struct ieee80211_vif *vif = info->control.vif;
		struct ieee80211_vif *vif = info->control.vif;
		struct mt76x2_vif *mvif = (struct mt76x2_vif *) vif->drv_priv;
		struct mt76x2_vif *mvif = (struct mt76x2_vif *) vif->drv_priv;


		mt76_tx_queue_skb(&dev->mt76, q, skb, &mvif->group_wcid, NULL);
		mt76_dma_tx_queue_skb(&dev->mt76, q, skb, &mvif->group_wcid,
				      NULL);
	}
	}
	spin_unlock_bh(&q->lock);
	spin_unlock_bh(&q->lock);
}
}
+5 −79
Original line number Original line Diff line number Diff line
@@ -51,7 +51,7 @@ __mt76_get_txwi(struct mt76_dev *dev)
	return t;
	return t;
}
}


static struct mt76_txwi_cache *
struct mt76_txwi_cache *
mt76_get_txwi(struct mt76_dev *dev)
mt76_get_txwi(struct mt76_dev *dev)
{
{
	struct mt76_txwi_cache *t = __mt76_get_txwi(dev);
	struct mt76_txwi_cache *t = __mt76_get_txwi(dev);
@@ -91,80 +91,6 @@ mt76_txq_get_qid(struct ieee80211_txq *txq)
	return txq->ac;
	return txq->ac;
}
}


int mt76_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
		      struct sk_buff *skb, struct mt76_wcid *wcid,
		      struct ieee80211_sta *sta)
{
	struct mt76_queue_entry e;
	struct mt76_txwi_cache *t;
	struct mt76_queue_buf buf[32];
	struct sk_buff *iter;
	dma_addr_t addr;
	int len;
	u32 tx_info = 0;
	int n, ret;

	t = mt76_get_txwi(dev);
	if (!t) {
		ieee80211_free_txskb(dev->hw, skb);
		return -ENOMEM;
	}

	dma_sync_single_for_cpu(dev->dev, t->dma_addr, sizeof(t->txwi),
				DMA_TO_DEVICE);
	ret = dev->drv->tx_prepare_skb(dev, &t->txwi, skb, q, wcid, sta,
				       &tx_info);
	dma_sync_single_for_device(dev->dev, t->dma_addr, sizeof(t->txwi),
				   DMA_TO_DEVICE);
	if (ret < 0)
		goto free;

	len = skb->len - skb->data_len;
	addr = dma_map_single(dev->dev, skb->data, len, DMA_TO_DEVICE);
	if (dma_mapping_error(dev->dev, addr)) {
		ret = -ENOMEM;
		goto free;
	}

	n = 0;
	buf[n].addr = t->dma_addr;
	buf[n++].len = dev->drv->txwi_size;
	buf[n].addr = addr;
	buf[n++].len = len;

	skb_walk_frags(skb, iter) {
		if (n == ARRAY_SIZE(buf))
			goto unmap;

		addr = dma_map_single(dev->dev, iter->data, iter->len,
				      DMA_TO_DEVICE);
		if (dma_mapping_error(dev->dev, addr))
			goto unmap;

		buf[n].addr = addr;
		buf[n++].len = iter->len;
	}

	if (q->queued + (n + 1) / 2 >= q->ndesc - 1)
		goto unmap;

	return dev->queue_ops->add_buf(dev, q, buf, n, tx_info, skb, t);

unmap:
	ret = -ENOMEM;
	for (n--; n > 0; n--)
		dma_unmap_single(dev->dev, buf[n].addr, buf[n].len,
				 DMA_TO_DEVICE);

free:
	e.skb = skb;
	e.txwi = t;
	dev->drv->tx_complete_skb(dev, q, &e, true);
	mt76_put_txwi(dev, t);
	return ret;
}
EXPORT_SYMBOL_GPL(mt76_tx_queue_skb);

void
void
mt76_tx(struct mt76_dev *dev, struct ieee80211_sta *sta,
mt76_tx(struct mt76_dev *dev, struct ieee80211_sta *sta,
	struct mt76_wcid *wcid, struct sk_buff *skb)
	struct mt76_wcid *wcid, struct sk_buff *skb)
@@ -185,7 +111,7 @@ mt76_tx(struct mt76_dev *dev, struct ieee80211_sta *sta,
	q = &dev->q_tx[qid];
	q = &dev->q_tx[qid];


	spin_lock_bh(&q->lock);
	spin_lock_bh(&q->lock);
	mt76_tx_queue_skb(dev, q, skb, wcid, sta);
	mt76_dma_tx_queue_skb(dev, q, skb, wcid, sta);
	dev->queue_ops->kick(dev, q);
	dev->queue_ops->kick(dev, q);


	if (q->queued > q->ndesc - 8)
	if (q->queued > q->ndesc - 8)
@@ -241,7 +167,7 @@ mt76_queue_ps_skb(struct mt76_dev *dev, struct ieee80211_sta *sta,
		info->flags |= IEEE80211_TX_STATUS_EOSP;
		info->flags |= IEEE80211_TX_STATUS_EOSP;


	mt76_skb_set_moredata(skb, !last);
	mt76_skb_set_moredata(skb, !last);
	mt76_tx_queue_skb(dev, hwq, skb, wcid, sta);
	mt76_dma_tx_queue_skb(dev, hwq, skb, wcid, sta);
}
}


void
void
@@ -321,7 +247,7 @@ mt76_txq_send_burst(struct mt76_dev *dev, struct mt76_queue *hwq,
	if (ampdu)
	if (ampdu)
		mt76_check_agg_ssn(mtxq, skb);
		mt76_check_agg_ssn(mtxq, skb);


	idx = mt76_tx_queue_skb(dev, hwq, skb, wcid, txq->sta);
	idx = mt76_dma_tx_queue_skb(dev, hwq, skb, wcid, txq->sta);


	if (idx < 0)
	if (idx < 0)
		return idx;
		return idx;
@@ -356,7 +282,7 @@ mt76_txq_send_burst(struct mt76_dev *dev, struct mt76_queue *hwq,
		if (cur_ampdu)
		if (cur_ampdu)
			mt76_check_agg_ssn(mtxq, skb);
			mt76_check_agg_ssn(mtxq, skb);


		idx = mt76_tx_queue_skb(dev, hwq, skb, wcid, txq->sta);
		idx = mt76_dma_tx_queue_skb(dev, hwq, skb, wcid, txq->sta);
		if (idx < 0)
		if (idx < 0)
			return idx;
			return idx;