From 7115e5cb9392ef5ba77b83d96377eff2ac7978d6 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Wed, 3 Feb 2016 14:57:53 +0100 Subject: [PATCH] mt7603: move rx queue processing to core Signed-off-by: Felix Fietkau --- mt7603.h | 4 ++++ mt7603_dma.c | 45 +++++---------------------------------------- mt7603_init.c | 1 + 3 files changed, 10 insertions(+), 40 deletions(-) diff --git a/mt7603.h b/mt7603.h index 92d54bb2..09c3ac9d 100644 --- a/mt7603.h +++ b/mt7603.h @@ -142,4 +142,8 @@ void mt7603_wtbl_set_rates(struct mt7603_dev *dev, int wcid, int mt7603_mac_write_txwi(struct mt76_dev *mdev, void *txwi_ptr, struct sk_buff *skb, struct mt76_wcid *wcid, struct ieee80211_sta *sta); + +void mt7603_queue_rx_skb(struct mt76_dev *dev, struct mt76_queue *q, + struct sk_buff *skb); + #endif diff --git a/mt7603_dma.c b/mt7603_dma.c index e9bd375e..78cfa703 100644 --- a/mt7603_dma.c +++ b/mt7603_dma.c @@ -94,10 +94,10 @@ mt7603_init_tx_queue(struct mt7603_dev *dev, struct mt76_queue *q, return 0; } -static void -mt7603_process_rx_skb(struct mt7603_dev *dev, struct mt76_queue *q, - struct sk_buff *skb) +void mt7603_queue_rx_skb(struct mt76_dev *mdev, struct mt76_queue *q, + struct sk_buff *skb) { + struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76); __le32 *rxd = (__le32 *) skb->data; enum rx_pkt_type type; @@ -124,41 +124,6 @@ mt7603_process_rx_skb(struct mt7603_dev *dev, struct mt76_queue *q, } } -static int -mt7603_process_rx_queue(struct mt7603_dev *dev, struct mt76_queue *q, int budget) -{ - struct sk_buff *skb; - unsigned char *data; - int len; - int done = 0; - bool napi = q == &dev->mt76.q_rx[MT_RXQ_MAIN]; - bool more; - - while (done < budget) { - data = mt76_queue_dequeue(dev, q, false, &len, NULL, &more); - if (!data) - break; - - skb = build_skb(data, q->buf_size); - if (!skb) { - skb_free_frag(data); - continue; - } - - if (skb->tail + len > skb->end) { - dev_kfree_skb(skb); - continue; - } - - __skb_put(skb, len); - mt7603_process_rx_skb(dev, q, skb); - done++; - } - - mt76_queue_rx_fill(dev, q, napi); - return done; -} - static int mt7603_init_rx_queue(struct mt7603_dev *dev, struct mt76_queue *q, int idx, int n_desc, int bufsize) @@ -196,7 +161,7 @@ mt7603_dma_rx_poll(struct napi_struct *napi, int budget) struct mt7603_dev *dev = container_of(napi, struct mt7603_dev, napi); int done; - done = mt7603_process_rx_queue(dev, &dev->mt76.q_rx[MT_RXQ_MAIN], budget); + done = mt76_queue_rx_process(dev, &dev->mt76.q_rx[MT_RXQ_MAIN], budget); if (done < budget) { napi_complete(napi); @@ -212,7 +177,7 @@ mt7603_rx_tasklet(unsigned long data) struct mt7603_dev *dev = (struct mt7603_dev *) data; struct mt76_queue *q = &dev->mt76.q_rx[MT_RXQ_MCU]; - mt7603_process_rx_queue(dev, q, q->ndesc); + mt76_queue_rx_process(dev, q, q->ndesc); mt7603_irq_enable(dev, MT_INT_RX_DONE(1)); } diff --git a/mt7603_init.c b/mt7603_init.c index a03a3d9a..88c7dcfe 100644 --- a/mt7603_init.c +++ b/mt7603_init.c @@ -21,6 +21,7 @@ struct mt7603_dev *mt7603_alloc_device(struct device *pdev) static const struct mt76_driver_ops drv_ops = { .fill_txwi = mt7603_mac_write_txwi, .tx_queue_skb = mt7603_tx_queue_skb, + .rx_skb = mt7603_queue_rx_skb, }; struct ieee80211_hw *hw; struct mt7603_dev *dev;