move tx queues to struct mt76_dev

Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
Felix Fietkau
2015-12-16 18:22:41 +01:00
parent 8ca7f984de
commit 645c93fefc
8 changed files with 46 additions and 54 deletions
+13
View File
@@ -35,6 +35,18 @@ struct mt76_bus_ops {
void (*copy)(struct mt76_dev *dev, u32 offset, const void *data, int len);
};
enum mt76_txq_id {
MT_TXQ_VO = IEEE80211_AC_VO,
MT_TXQ_VI = IEEE80211_AC_VI,
MT_TXQ_BE = IEEE80211_AC_BE,
MT_TXQ_BK = IEEE80211_AC_BK,
MT_TXQ_PSD,
MT_TXQ_MCU,
MT_TXQ_BEACON,
MT_TXQ_CAB,
__MT_TXQ_MAX
};
struct mt76_queue_entry {
struct sk_buff *skb;
union {
@@ -125,6 +137,7 @@ struct mt76_dev {
void __iomem *regs;
struct device *dev;
struct mt76_queue q_tx[__MT_TXQ_MAX];
const struct mt76_queue_ops *queue_ops;
u32 rev;
+1 -14
View File
@@ -36,18 +36,6 @@ enum mt7603_bw {
MT_BW_80,
};
enum mt7603_txq_id {
MT_TXQ_VO = IEEE80211_AC_VO,
MT_TXQ_VI = IEEE80211_AC_VI,
MT_TXQ_BE = IEEE80211_AC_BE,
MT_TXQ_BK = IEEE80211_AC_BK,
MT_TXQ_PSD,
MT_TXQ_MCU,
MT_TXQ_BEACON,
MT_TXQ_CAB,
__MT_TXQ_MAX
};
struct mt7603_mcu {
struct mutex mutex;
@@ -79,7 +67,6 @@ struct mt7603_dev {
struct mt7603_mcu mcu;
struct mt76_queue q_rx;
struct mt76_queue q_tx[__MT_TXQ_MAX];
struct net_device napi_dev;
struct napi_struct napi;
@@ -100,7 +87,7 @@ int mt7603_register_device(struct mt7603_dev *dev);
int mt7603_dma_init(struct mt7603_dev *dev);
void mt7603_dma_cleanup(struct mt7603_dev *dev);
int mt7603_mcu_init(struct mt7603_dev *dev);
int mt7603_tx_queue_mcu(struct mt7603_dev *dev, enum mt7603_txq_id qid,
int mt7603_tx_queue_mcu(struct mt7603_dev *dev, enum mt76_txq_id qid,
struct sk_buff *skb);
void mt7603_set_irq_mask(struct mt7603_dev *dev, u32 clear, u32 set);
+1 -1
View File
@@ -59,7 +59,7 @@ irqreturn_t mt7603_irq_handler(int irq, void *dev_instance)
/* send buffered multicast frames now */
if (intr & MT_INT_TBTT)
mt76_queue_kick(dev, &dev->q_tx[MT_TXQ_PSD]);
mt76_queue_kick(dev, &dev->mt76.q_tx[MT_TXQ_PSD]);
#endif
return IRQ_HANDLED;
+11 -11
View File
@@ -57,10 +57,10 @@ mt7603_dma_rx_fill(struct mt7603_dev *dev, struct mt76_queue *q)
}
int
mt7603_tx_queue_mcu(struct mt7603_dev *dev, enum mt7603_txq_id qid,
mt7603_tx_queue_mcu(struct mt7603_dev *dev, enum mt76_txq_id qid,
struct sk_buff *skb)
{
struct mt76_queue *q = &dev->q_tx[qid];
struct mt76_queue *q = &dev->mt76.q_tx[qid];
dma_addr_t addr;
int idx;
@@ -215,8 +215,8 @@ mt7603_tx_tasklet(unsigned long data)
struct mt7603_dev *dev = (struct mt7603_dev *) data;
int i;
for (i = ARRAY_SIZE(dev->q_tx) - 1; i >= 0; i--)
mt76_tx_cleanup(dev, &dev->q_tx[i], false);
for (i = ARRAY_SIZE(dev->mt76.q_tx) - 1; i >= 0; i--)
mt76_tx_cleanup(dev, &dev->mt76.q_tx[i], false);
mt7603_irq_enable(dev, MT_INT_TX_DONE_ALL);
}
@@ -278,28 +278,28 @@ int mt7603_dma_init(struct mt7603_dev *dev)
mt76_wr(dev, MT_WPDMA_RST_IDX, ~0);
for (i = 0; i < ARRAY_SIZE(wmm_queue_map); i++) {
ret = mt7603_init_tx_queue(dev, &dev->q_tx[i], wmm_queue_map[i],
ret = mt7603_init_tx_queue(dev, &dev->mt76.q_tx[i], wmm_queue_map[i],
MT_TX_RING_SIZE);
if (ret)
return ret;
}
ret = mt7603_init_tx_queue(dev, &dev->q_tx[MT_TXQ_PSD],
ret = mt7603_init_tx_queue(dev, &dev->mt76.q_tx[MT_TXQ_PSD],
MT_TX_HW_QUEUE_MGMT, MT_TX_RING_SIZE);
if (ret)
return ret;
ret = mt7603_init_tx_queue(dev, &dev->q_tx[MT_TXQ_MCU],
ret = mt7603_init_tx_queue(dev, &dev->mt76.q_tx[MT_TXQ_MCU],
MT_TX_HW_QUEUE_MCU, MT_MCU_RING_SIZE);
if (ret)
return ret;
ret = mt7603_init_tx_queue(dev, &dev->q_tx[MT_TXQ_BEACON],
ret = mt7603_init_tx_queue(dev, &dev->mt76.q_tx[MT_TXQ_BEACON],
MT_TX_HW_QUEUE_BCN, MT_MCU_RING_SIZE);
if (ret)
return ret;
ret = mt7603_init_tx_queue(dev, &dev->q_tx[MT_TXQ_CAB],
ret = mt7603_init_tx_queue(dev, &dev->mt76.q_tx[MT_TXQ_CAB],
MT_TX_HW_QUEUE_BMC, MT_MCU_RING_SIZE);
if (ret)
return ret;
@@ -333,8 +333,8 @@ void mt7603_dma_cleanup(struct mt7603_dev *dev)
tasklet_kill(&dev->tx_tasklet);
tasklet_kill(&dev->rx_tasklet);
for (i = 0; i < ARRAY_SIZE(dev->q_tx); i++)
mt76_tx_cleanup(dev, &dev->q_tx[i], true);
for (i = 0; i < ARRAY_SIZE(dev->mt76.q_tx); i++)
mt76_tx_cleanup(dev, &dev->mt76.q_tx[i], true);
mt7603_rx_cleanup(dev, &dev->q_rx);
mt7603_rx_cleanup(dev, &dev->mcu.q_rx);
}
+1 -12
View File
@@ -39,16 +39,6 @@
#include "mt76x2_regs.h"
#include "mt76x2_mac.h"
enum mt76x2_txq_id {
MT_TXQ_VO = IEEE80211_AC_VO,
MT_TXQ_VI = IEEE80211_AC_VI,
MT_TXQ_BE = IEEE80211_AC_BE,
MT_TXQ_BK = IEEE80211_AC_BK,
MT_TXQ_PSD,
MT_TXQ_MCU,
__MT_TXQ_MAX
};
struct mt76x2_mcu {
struct mutex mutex;
@@ -117,7 +107,6 @@ struct mt76x2_dev {
struct list_head txwi_cache;
struct mt76x2_mcu mcu;
struct mt76_queue q_rx;
struct mt76_queue q_tx[__MT_TXQ_MAX];
struct net_device napi_dev;
struct napi_struct napi;
@@ -240,7 +229,7 @@ void mt76x2_rx(struct mt76x2_dev *dev, struct sk_buff *skb);
int mt76x2_tx_queue_skb(struct mt76x2_dev *dev, struct mt76_queue *q,
struct sk_buff *skb, struct mt76_wcid *wcid,
struct ieee80211_sta *sta);
int mt76x2_tx_queue_mcu(struct mt76x2_dev *dev, enum mt76x2_txq_id qid,
int mt76x2_tx_queue_mcu(struct mt76x2_dev *dev, enum mt76_txq_id qid,
struct sk_buff *skb, int cmd, int seq);
void mt76x2_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
struct sk_buff *skb);
+1 -1
View File
@@ -71,7 +71,7 @@ irqreturn_t mt76x2_irq_handler(int irq, void *dev_instance)
/* send buffered multicast frames now */
if (intr & MT_INT_TBTT)
mt76_queue_kick(dev, &dev->q_tx[MT_TXQ_PSD]);
mt76_queue_kick(dev, &dev->mt76.q_tx[MT_TXQ_PSD]);
if (intr & MT_INT_TX_STAT) {
mt76x2_mac_poll_tx_status(dev, true);
+12 -9
View File
@@ -129,10 +129,10 @@ mt76x2_dma_rx_fill(struct mt76x2_dev *dev, struct mt76_queue *q)
}
int
mt76x2_tx_queue_mcu(struct mt76x2_dev *dev, enum mt76x2_txq_id qid,
mt76x2_tx_queue_mcu(struct mt76x2_dev *dev, enum mt76_txq_id qid,
struct sk_buff *skb, int cmd, int seq)
{
struct mt76_queue *q = &dev->q_tx[qid];
struct mt76_queue *q = &dev->mt76.q_tx[qid];
dma_addr_t addr;
u32 tx_info;
int idx;
@@ -249,6 +249,9 @@ mt76x2_rx_cleanup(struct mt76x2_dev *dev, struct mt76_queue *q)
static void
mt76_tx_cleanup(struct mt76x2_dev *dev, struct mt76_queue *q, bool flush)
{
if (!q->desc)
return;
spin_lock_bh(&q->lock);
mt76_queue_cleanup(dev, q, flush, mt76x2_tx_cleanup_entry);
if (!flush)
@@ -365,8 +368,8 @@ mt76x2_tx_tasklet(unsigned long data)
mt76x2_mac_process_tx_status_fifo(dev);
for (i = ARRAY_SIZE(dev->q_tx) - 1; i >= 0; i--)
mt76_tx_cleanup(dev, &dev->q_tx[i], false);
for (i = ARRAY_SIZE(dev->mt76.q_tx) - 1; i >= 0; i--)
mt76_tx_cleanup(dev, &dev->mt76.q_tx[i], false);
mt76x2_mac_poll_tx_status(dev, false);
mt76x2_irq_enable(dev, MT_INT_TX_DONE_ALL);
@@ -423,18 +426,18 @@ int mt76x2_dma_init(struct mt76x2_dev *dev)
mt76_wr(dev, MT_WPDMA_RST_IDX, ~0);
for (i = 0; i < ARRAY_SIZE(wmm_queue_map); i++) {
ret = mt76x2_init_tx_queue(dev, &dev->q_tx[i], wmm_queue_map[i],
ret = mt76x2_init_tx_queue(dev, &dev->mt76.q_tx[i], wmm_queue_map[i],
MT_TX_RING_SIZE, false);
if (ret)
return ret;
}
ret = mt76x2_init_tx_queue(dev, &dev->q_tx[MT_TXQ_PSD],
ret = mt76x2_init_tx_queue(dev, &dev->mt76.q_tx[MT_TXQ_PSD],
MT_TX_HW_QUEUE_MGMT, MT_TX_RING_SIZE, false);
if (ret)
return ret;
ret = mt76x2_init_tx_queue(dev, &dev->q_tx[MT_TXQ_MCU],
ret = mt76x2_init_tx_queue(dev, &dev->mt76.q_tx[MT_TXQ_MCU],
MT_TX_HW_QUEUE_MCU, MT_MCU_RING_SIZE, true);
if (ret)
return ret;
@@ -462,8 +465,8 @@ void mt76x2_dma_cleanup(struct mt76x2_dev *dev)
tasklet_kill(&dev->tx_tasklet);
tasklet_kill(&dev->rx_tasklet);
for (i = 0; i < ARRAY_SIZE(dev->q_tx); i++)
mt76_tx_cleanup(dev, &dev->q_tx[i], true);
for (i = 0; i < ARRAY_SIZE(dev->mt76.q_tx); i++)
mt76_tx_cleanup(dev, &dev->mt76.q_tx[i], true);
mt76x2_rx_cleanup(dev, &dev->q_rx);
mt76x2_rx_cleanup(dev, &dev->mcu.q_rx);
+6 -6
View File
@@ -45,7 +45,7 @@ void mt76x2_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
ieee80211_get_tx_rates(info->control.vif, control->sta, skb,
info->control.rates, 1);
q = &dev->q_tx[qid];
q = &dev->mt76.q_tx[qid];
spin_lock_bh(&q->lock);
mt76x2_tx_queue_skb(dev, q, skb, wcid, control->sta);
@@ -71,7 +71,7 @@ void mt76x2_tx_complete(struct mt76x2_dev *dev, struct sk_buff *skb)
ieee80211_tx_status(mt76_hw(dev), skb);
}
q = &dev->q_tx[qid];
q = &dev->mt76.q_tx[qid];
if (q->queued < q->ndesc - 8)
ieee80211_wake_queue(mt76_hw(dev), qid);
}
@@ -134,7 +134,7 @@ mt76x2_add_buffered_bc(void *priv, u8 *mac, struct ieee80211_vif *vif)
void mt76x2_pre_tbtt_tasklet(unsigned long arg)
{
struct mt76x2_dev *dev = (struct mt76x2_dev *) arg;
struct mt76_queue *q = &dev->q_tx[MT_TXQ_PSD];
struct mt76_queue *q = &dev->mt76.q_tx[MT_TXQ_PSD];
struct beacon_bc_data data = {};
struct sk_buff *skb;
int i, nframes;
@@ -223,7 +223,7 @@ mt76x2_queue_ps_skb(struct mt76x2_dev *dev, struct ieee80211_sta *sta,
{
struct mt76x2_sta *msta = (struct mt76x2_sta *) sta->drv_priv;
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
struct mt76_queue *hwq = &dev->q_tx[MT_TXQ_PSD];
struct mt76_queue *hwq = &dev->mt76.q_tx[MT_TXQ_PSD];
struct mt76_wcid *wcid = &msta->wcid;
info->control.flags |= IEEE80211_TX_CTRL_PS_RESPONSE;
@@ -242,7 +242,7 @@ mt76x2_release_buffered_frames(struct ieee80211_hw *hw, struct ieee80211_sta *st
{
struct mt76x2_dev *dev = hw->priv;
struct sk_buff *last_skb = NULL;
struct mt76_queue *hwq = &dev->q_tx[MT_TXQ_PSD];
struct mt76_queue *hwq = &dev->mt76.q_tx[MT_TXQ_PSD];
int i;
for (i = 0; tids && nframes; i++, tids >>= 1) {
@@ -425,7 +425,7 @@ void mt76x2_txq_init(struct mt76x2_dev *dev, struct ieee80211_txq *txq)
INIT_LIST_HEAD(&mtxq->list);
skb_queue_head_init(&mtxq->retry_q);
mtxq->hwq = &dev->q_tx[mt76x2_txq_get_qid(txq)];
mtxq->hwq = &dev->mt76.q_tx[mt76x2_txq_get_qid(txq)];
if (txq->sta) {
struct mt76x2_sta *sta = (struct mt76x2_sta *) txq->sta->drv_priv;