diff --git a/dma.c b/dma.c index 0600e3bf..abbd2b9f 100644 --- a/dma.c +++ b/dma.c @@ -236,7 +236,19 @@ mt76_dma_rx_cleanup(struct mt76_dev *dev, struct mt76_queue *q) spin_unlock_bh(&q->lock); } +static int +mt76_dma_init(struct mt76_dev *dev) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(dev->q_rx); i++) + mt76_dma_rx_fill(dev, &dev->q_rx[i], false); + + return 0; +} + static const struct mt76_queue_ops mt76_dma_ops = { + .init = mt76_dma_init, .alloc = mt76_dma_alloc_queue, .add_buf = mt76_dma_add_buf, .rx_fill = mt76_dma_rx_fill, diff --git a/mt76.h b/mt76.h index f60bf157..bcadadb8 100644 --- a/mt76.h +++ b/mt76.h @@ -91,6 +91,8 @@ struct mt76_queue { }; struct mt76_queue_ops { + int (*init)(struct mt76_dev *dev); + int (*alloc)(struct mt76_dev *dev, struct mt76_queue *q); int (*add_buf)(struct mt76_dev *dev, struct mt76_queue *q, @@ -225,6 +227,7 @@ static inline u16 mt76_rev(struct mt76_dev *dev) #define mt76xx_rev(dev) mt76_rev(&((dev)->mt76)) +#define mt76_init_queues(dev) (dev)->mt76.queue_ops->init(&((dev)->mt76)) #define mt76_queue_alloc(dev, ...) (dev)->mt76.queue_ops->alloc(&((dev)->mt76), __VA_ARGS__) #define mt76_queue_add_buf(dev, ...) (dev)->mt76.queue_ops->add_buf(&((dev)->mt76), __VA_ARGS__) #define mt76_queue_dequeue(dev, ...) (dev)->mt76.queue_ops->dequeue(&((dev)->mt76), __VA_ARGS__) diff --git a/mt7603_dma.c b/mt7603_dma.c index 8d6d6c16..e9bd375e 100644 --- a/mt7603_dma.c +++ b/mt7603_dma.c @@ -284,12 +284,8 @@ int mt7603_dma_init(struct mt7603_dev *dev) if (ret) return ret; - for (i = 0; i < ARRAY_SIZE(dev->mt76.q_rx); i++) - mt76_queue_rx_fill(dev, &dev->mt76.q_rx[i], false); - mt76_wr(dev, MT_DELAY_INT_CFG, 0); - - return 0; + return mt76_init_queues(dev); } void mt7603_dma_cleanup(struct mt7603_dev *dev) diff --git a/mt76x2_dma.c b/mt76x2_dma.c index f064c583..b0150af5 100644 --- a/mt76x2_dma.c +++ b/mt76x2_dma.c @@ -333,10 +333,7 @@ int mt76x2_dma_init(struct mt76x2_dev *dev) if (ret) return ret; - for (i = 0; i < ARRAY_SIZE(dev->mt76.q_rx); i++) - mt76_queue_rx_fill(dev, &dev->mt76.q_rx[i], false); - - return 0; + return mt76_init_queues(dev); } void mt76x2_dma_cleanup(struct mt76x2_dev *dev)