mt7603: move rx queue processing to core

Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
Felix Fietkau
2016-02-03 14:57:53 +01:00
parent 812bcc3a78
commit 7115e5cb93
3 changed files with 10 additions and 40 deletions
+4
View File
@@ -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
+5 -40
View File
@@ -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));
}
+1
View File
@@ -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;