mirror of
https://github.com/outbackdingo/mt76.git
synced 2026-10-24 13:26:48 +00:00
mt76: pass original queue id from __mt76_tx_queue_skb to the driver
MT7615 and newer map multiple software tx queues to the hardware id Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
@@ -349,8 +349,8 @@ error:
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
mt76_dma_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
|
mt76_dma_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
|
||||||
struct sk_buff *skb, struct mt76_wcid *wcid,
|
enum mt76_txq_id qid, struct sk_buff *skb,
|
||||||
struct ieee80211_sta *sta)
|
struct mt76_wcid *wcid, struct ieee80211_sta *sta)
|
||||||
{
|
{
|
||||||
struct ieee80211_tx_status status = {
|
struct ieee80211_tx_status status = {
|
||||||
.sta = sta,
|
.sta = sta,
|
||||||
@@ -406,7 +406,7 @@ mt76_dma_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
|
|||||||
|
|
||||||
dma_sync_single_for_cpu(dev->dma_dev, t->dma_addr, dev->drv->txwi_size,
|
dma_sync_single_for_cpu(dev->dma_dev, t->dma_addr, dev->drv->txwi_size,
|
||||||
DMA_TO_DEVICE);
|
DMA_TO_DEVICE);
|
||||||
ret = dev->drv->tx_prepare_skb(dev, txwi, q->qid, wcid, sta, &tx_info);
|
ret = dev->drv->tx_prepare_skb(dev, txwi, qid, wcid, sta, &tx_info);
|
||||||
dma_sync_single_for_device(dev->dma_dev, t->dma_addr, dev->drv->txwi_size,
|
dma_sync_single_for_device(dev->dma_dev, t->dma_addr, dev->drv->txwi_size,
|
||||||
DMA_TO_DEVICE);
|
DMA_TO_DEVICE);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
|||||||
@@ -223,8 +223,8 @@ struct mt76_queue_ops {
|
|||||||
u32 ring_base);
|
u32 ring_base);
|
||||||
|
|
||||||
int (*tx_queue_skb)(struct mt76_dev *dev, struct mt76_queue *q,
|
int (*tx_queue_skb)(struct mt76_dev *dev, struct mt76_queue *q,
|
||||||
struct sk_buff *skb, struct mt76_wcid *wcid,
|
enum mt76_txq_id qid, struct sk_buff *skb,
|
||||||
struct ieee80211_sta *sta);
|
struct mt76_wcid *wcid, struct ieee80211_sta *sta);
|
||||||
|
|
||||||
int (*tx_queue_skb_raw)(struct mt76_dev *dev, struct mt76_queue *q,
|
int (*tx_queue_skb_raw)(struct mt76_dev *dev, struct mt76_queue *q,
|
||||||
struct sk_buff *skb, u32 tx_info);
|
struct sk_buff *skb, u32 tx_info);
|
||||||
|
|||||||
+3
-3
@@ -24,8 +24,8 @@ mt7603_update_beacon_iter(void *priv, u8 *mac, struct ieee80211_vif *vif)
|
|||||||
if (!skb)
|
if (!skb)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
mt76_tx_queue_skb(dev, dev->mphy.q_tx[MT_TXQ_BEACON], skb,
|
mt76_tx_queue_skb(dev, dev->mphy.q_tx[MT_TXQ_BEACON],
|
||||||
&mvif->sta.wcid, NULL);
|
MT_TXQ_BEACON, skb, &mvif->sta.wcid, NULL);
|
||||||
|
|
||||||
spin_lock_bh(&dev->ps_lock);
|
spin_lock_bh(&dev->ps_lock);
|
||||||
mt76_wr(dev, MT_DMA_FQCR0, MT_DMA_FQCR0_BUSY |
|
mt76_wr(dev, MT_DMA_FQCR0, MT_DMA_FQCR0_BUSY |
|
||||||
@@ -123,7 +123,7 @@ void mt7603_pre_tbtt_tasklet(struct tasklet_struct *t)
|
|||||||
struct ieee80211_vif *vif = info->control.vif;
|
struct ieee80211_vif *vif = info->control.vif;
|
||||||
struct mt7603_vif *mvif = (struct mt7603_vif *)vif->drv_priv;
|
struct mt7603_vif *mvif = (struct mt7603_vif *)vif->drv_priv;
|
||||||
|
|
||||||
mt76_tx_queue_skb(dev, q, skb, &mvif->sta.wcid, NULL);
|
mt76_tx_queue_skb(dev, q, MT_TXQ_CAB, skb, &mvif->sta.wcid, NULL);
|
||||||
}
|
}
|
||||||
mt76_queue_kick(dev, q);
|
mt76_queue_kick(dev, q);
|
||||||
spin_unlock(&q->lock);
|
spin_unlock(&q->lock);
|
||||||
|
|||||||
+2
-1
@@ -59,7 +59,8 @@ static void mt76x02_pre_tbtt_tasklet(struct tasklet_struct *t)
|
|||||||
struct ieee80211_vif *vif = info->control.vif;
|
struct ieee80211_vif *vif = info->control.vif;
|
||||||
struct mt76x02_vif *mvif = (struct mt76x02_vif *)vif->drv_priv;
|
struct mt76x02_vif *mvif = (struct mt76x02_vif *)vif->drv_priv;
|
||||||
|
|
||||||
mt76_tx_queue_skb(dev, q, skb, &mvif->group_wcid, NULL);
|
mt76_tx_queue_skb(dev, q, MT_TXQ_PSD, skb, &mvif->group_wcid,
|
||||||
|
NULL);
|
||||||
}
|
}
|
||||||
spin_unlock(&q->lock);
|
spin_unlock(&q->lock);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -517,8 +517,8 @@ static void mt76s_tx_status_data(struct work_struct *work)
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
mt76s_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
|
mt76s_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
|
||||||
struct sk_buff *skb, struct mt76_wcid *wcid,
|
enum mt76_txq_id qid, struct sk_buff *skb,
|
||||||
struct ieee80211_sta *sta)
|
struct mt76_wcid *wcid, struct ieee80211_sta *sta)
|
||||||
{
|
{
|
||||||
struct mt76_tx_info tx_info = {
|
struct mt76_tx_info tx_info = {
|
||||||
.skb = skb,
|
.skb = skb,
|
||||||
@@ -530,7 +530,7 @@ mt76s_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
|
|||||||
return -ENOSPC;
|
return -ENOSPC;
|
||||||
|
|
||||||
skb->prev = skb->next = NULL;
|
skb->prev = skb->next = NULL;
|
||||||
err = dev->drv->tx_prepare_skb(dev, NULL, q->qid, wcid, sta, &tx_info);
|
err = dev->drv->tx_prepare_skb(dev, NULL, qid, wcid, sta, &tx_info);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -50,8 +50,8 @@ void mt76_testmode_tx_pending(struct mt76_phy *phy)
|
|||||||
q->queued < q->ndesc / 2) {
|
q->queued < q->ndesc / 2) {
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = dev->queue_ops->tx_queue_skb(dev, q, skb_get(skb), wcid,
|
ret = dev->queue_ops->tx_queue_skb(dev, q, qid, skb_get(skb),
|
||||||
NULL);
|
wcid, NULL);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -285,7 +285,7 @@ __mt76_tx_queue_skb(struct mt76_phy *phy, int qid, struct sk_buff *skb,
|
|||||||
int idx;
|
int idx;
|
||||||
|
|
||||||
non_aql = !info->tx_time_est;
|
non_aql = !info->tx_time_est;
|
||||||
idx = dev->queue_ops->tx_queue_skb(dev, q, skb, wcid, sta);
|
idx = dev->queue_ops->tx_queue_skb(dev, q, qid, skb, wcid, sta);
|
||||||
if (idx < 0 || !sta)
|
if (idx < 0 || !sta)
|
||||||
return idx;
|
return idx;
|
||||||
|
|
||||||
|
|||||||
@@ -845,8 +845,8 @@ mt76u_tx_setup_buffers(struct mt76_dev *dev, struct sk_buff *skb,
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
mt76u_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
|
mt76u_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
|
||||||
struct sk_buff *skb, struct mt76_wcid *wcid,
|
enum mt76_txq_id qid, struct sk_buff *skb,
|
||||||
struct ieee80211_sta *sta)
|
struct mt76_wcid *wcid, struct ieee80211_sta *sta)
|
||||||
{
|
{
|
||||||
struct mt76_tx_info tx_info = {
|
struct mt76_tx_info tx_info = {
|
||||||
.skb = skb,
|
.skb = skb,
|
||||||
@@ -858,7 +858,7 @@ mt76u_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
|
|||||||
return -ENOSPC;
|
return -ENOSPC;
|
||||||
|
|
||||||
skb->prev = skb->next = NULL;
|
skb->prev = skb->next = NULL;
|
||||||
err = dev->drv->tx_prepare_skb(dev, NULL, q->qid, wcid, sta, &tx_info);
|
err = dev->drv->tx_prepare_skb(dev, NULL, qid, wcid, sta, &tx_info);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user