mt76x2: move rx queues to struct mt76_dev

Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
Felix Fietkau
2016-02-03 14:03:53 +01:00
parent 435c5408a1
commit f79b92dde5
3 changed files with 23 additions and 17 deletions
+7
View File
@@ -47,6 +47,12 @@ enum mt76_txq_id {
__MT_TXQ_MAX
};
enum mt76_rxq_id {
MT_RXQ_MAIN,
MT_RXQ_MCU,
__MT_RXQ_MAX
};
struct mt76_queue_entry {
struct sk_buff *skb;
union {
@@ -163,6 +169,7 @@ struct mt76_dev {
struct list_head txwi_cache;
struct mt76_queue q_tx[__MT_TXQ_MAX];
struct mt76_queue q_rx[__MT_RXQ_MAX];
const struct mt76_queue_ops *queue_ops;
u8 macaddr[ETH_ALEN];
-2
View File
@@ -45,7 +45,6 @@ struct mt76x2_mcu {
wait_queue_head_t wait;
struct sk_buff_head res_q;
struct mt76_queue q_rx;
u32 msg_seq;
};
@@ -105,7 +104,6 @@ struct mt76x2_dev {
struct mt76x2_mcu mcu;
struct sk_buff *rx_head;
struct mt76_queue q_rx;
struct net_device napi_dev;
struct napi_struct napi;
+16 -15
View File
@@ -128,7 +128,7 @@ mt76x2_process_rx_skb(struct mt76x2_dev *dev, struct mt76_queue *q,
{
void *rxwi = skb->data;
if (q == &dev->mcu.q_rx) {
if (q == &dev->mt76.q_rx[MT_RXQ_MCU]) {
skb_queue_tail(&dev->mcu.res_q, skb);
wake_up(&dev->mcu.wait);
return;
@@ -167,7 +167,7 @@ mt76x2_process_rx_queue(struct mt76x2_dev *dev, struct mt76_queue *q, int budget
unsigned char *data;
int len;
int done = 0;
bool napi = q == &dev->q_rx;
bool napi = q == &dev->mt76.q_rx[MT_RXQ_MAIN];
bool more;
while (done < budget) {
@@ -194,7 +194,7 @@ mt76x2_process_rx_queue(struct mt76x2_dev *dev, struct mt76_queue *q, int budget
continue;
}
if (q == &dev->mcu.q_rx) {
if (q == &dev->mt76.q_rx[MT_RXQ_MCU]) {
u32 * rxfce = (u32 *) skb->cb;
*rxfce = info;
}
@@ -254,7 +254,7 @@ mt76x2_dma_rx_poll(struct napi_struct *napi, int budget)
struct mt76x2_dev *dev = container_of(napi, struct mt76x2_dev, napi);
int done;
done = mt76x2_process_rx_queue(dev, &dev->q_rx, budget);
done = mt76x2_process_rx_queue(dev, &dev->mt76.q_rx[MT_RXQ_MAIN], budget);
if (done < budget) {
napi_complete(napi);
@@ -268,8 +268,9 @@ static void
mt76x2_rx_tasklet(unsigned long data)
{
struct mt76x2_dev *dev = (struct mt76x2_dev *) data;
struct mt76_queue *q = &dev->mt76.q_rx[MT_RXQ_MCU];
mt76x2_process_rx_queue(dev, &dev->mcu.q_rx, dev->mcu.q_rx.ndesc);
mt76x2_process_rx_queue(dev, q, q->ndesc);
mt76x2_irq_enable(dev, MT_INT_RX_DONE(1));
}
@@ -285,6 +286,7 @@ int mt76x2_dma_init(struct mt76x2_dev *dev)
int ret;
int i;
struct mt76_txwi_cache __maybe_unused *t;
struct mt76_queue *q;
BUILD_BUG_ON(sizeof(t->txwi) < sizeof(struct mt76x2_txwi));
BUILD_BUG_ON(sizeof(struct mt76x2_rxwi) > MT_RX_HEADROOM);
@@ -319,21 +321,20 @@ int mt76x2_dma_init(struct mt76x2_dev *dev)
if (ret)
return ret;
dev->q_rx.buf_offset = MT_RX_HEADROOM - sizeof(struct mt76x2_rxwi);
dev->mcu.q_rx.buf_offset = MT_RX_HEADROOM - sizeof(struct mt76x2_rxwi);
ret = mt76x2_init_rx_queue(dev, &dev->mcu.q_rx, 1, MT_MCU_RING_SIZE,
MT_RX_BUF_SIZE);
ret = mt76x2_init_rx_queue(dev, &dev->mt76.q_rx[MT_RXQ_MCU], 1,
MT_MCU_RING_SIZE, MT_RX_BUF_SIZE);
if (ret)
return ret;
ret = mt76x2_init_rx_queue(dev, &dev->q_rx, 0,
MT_RX_RING_SIZE, MT_RX_BUF_SIZE);
q = &dev->mt76.q_rx[MT_RXQ_MAIN];
q->buf_offset = MT_RX_HEADROOM - sizeof(struct mt76x2_rxwi);
ret = mt76x2_init_rx_queue(dev, q, 0, MT_RX_RING_SIZE, MT_RX_BUF_SIZE);
if (ret)
return ret;
mt76_queue_rx_fill(dev, &dev->q_rx, false);
mt76_queue_rx_fill(dev, &dev->mcu.q_rx, false);
for (i = 0; i < ARRAY_SIZE(dev->mt76.q_rx); i++)
mt76_queue_rx_fill(dev, &dev->mt76.q_rx[i], false);
return 0;
}
@@ -346,6 +347,6 @@ void mt76x2_dma_cleanup(struct mt76x2_dev *dev)
tasklet_kill(&dev->rx_tasklet);
for (i = 0; i < ARRAY_SIZE(dev->mt76.q_tx); i++)
mt76x2_tx_cleanup(dev, &dev->mt76.q_tx[i], true);
mt76_queue_rx_cleanup(dev, &dev->q_rx);
mt76_queue_rx_cleanup(dev, &dev->mcu.q_rx);
for (i = 0; i < ARRAY_SIZE(dev->mt76.q_rx); i++)
mt76_queue_rx_cleanup(dev, &dev->mt76.q_rx[i]);
}