Commit cb8ed33d authored by Lorenzo Bianconi's avatar Lorenzo Bianconi Committed by Felix Fietkau

mt76: dma: add the capability to define a custom rx napi poll routine

Add the capability to define a custom rx napi callback for each driver.
This is a preliminary patch to properly support runtime-pm on rx side
Signed-off-by: default avatarLorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent 335e97ac
...@@ -602,8 +602,7 @@ mt76_dma_rx_process(struct mt76_dev *dev, struct mt76_queue *q, int budget) ...@@ -602,8 +602,7 @@ mt76_dma_rx_process(struct mt76_dev *dev, struct mt76_queue *q, int budget)
return done; return done;
} }
static int int mt76_dma_rx_poll(struct napi_struct *napi, int budget)
mt76_dma_rx_poll(struct napi_struct *napi, int budget)
{ {
struct mt76_dev *dev; struct mt76_dev *dev;
int qid, done = 0, cur; int qid, done = 0, cur;
...@@ -626,9 +625,11 @@ mt76_dma_rx_poll(struct napi_struct *napi, int budget) ...@@ -626,9 +625,11 @@ mt76_dma_rx_poll(struct napi_struct *napi, int budget)
return done; return done;
} }
EXPORT_SYMBOL_GPL(mt76_dma_rx_poll);
static int static int
mt76_dma_init(struct mt76_dev *dev) mt76_dma_init(struct mt76_dev *dev,
int (*poll)(struct napi_struct *napi, int budget))
{ {
int i; int i;
...@@ -639,8 +640,7 @@ mt76_dma_init(struct mt76_dev *dev) ...@@ -639,8 +640,7 @@ mt76_dma_init(struct mt76_dev *dev)
dev->napi_dev.threaded = 1; dev->napi_dev.threaded = 1;
mt76_for_each_q_rx(dev, i) { mt76_for_each_q_rx(dev, i) {
netif_napi_add(&dev->napi_dev, &dev->napi[i], mt76_dma_rx_poll, netif_napi_add(&dev->napi_dev, &dev->napi[i], poll, 64);
64);
mt76_dma_rx_fill(dev, &dev->q_rx[i]); mt76_dma_rx_fill(dev, &dev->q_rx[i]);
napi_enable(&dev->napi[i]); napi_enable(&dev->napi[i]);
} }
......
...@@ -45,6 +45,7 @@ enum mt76_mcu_evt_type { ...@@ -45,6 +45,7 @@ enum mt76_mcu_evt_type {
EVT_EVENT_DFS_DETECT_RSP, EVT_EVENT_DFS_DETECT_RSP,
}; };
int mt76_dma_rx_poll(struct napi_struct *napi, int budget);
void mt76_dma_attach(struct mt76_dev *dev); void mt76_dma_attach(struct mt76_dev *dev);
void mt76_dma_cleanup(struct mt76_dev *dev); void mt76_dma_cleanup(struct mt76_dev *dev);
......
...@@ -170,7 +170,8 @@ struct mt76_mcu_ops { ...@@ -170,7 +170,8 @@ struct mt76_mcu_ops {
}; };
struct mt76_queue_ops { struct mt76_queue_ops {
int (*init)(struct mt76_dev *dev); int (*init)(struct mt76_dev *dev,
int (*poll)(struct napi_struct *napi, int budget));
int (*alloc)(struct mt76_dev *dev, struct mt76_queue *q, int (*alloc)(struct mt76_dev *dev, struct mt76_queue *q,
int idx, int n_desc, int bufsize, int idx, int n_desc, int bufsize,
...@@ -802,7 +803,7 @@ static inline u16 mt76_rev(struct mt76_dev *dev) ...@@ -802,7 +803,7 @@ static inline u16 mt76_rev(struct mt76_dev *dev)
#define mt76xx_chip(dev) mt76_chip(&((dev)->mt76)) #define mt76xx_chip(dev) mt76_chip(&((dev)->mt76))
#define mt76xx_rev(dev) mt76_rev(&((dev)->mt76)) #define mt76xx_rev(dev) mt76_rev(&((dev)->mt76))
#define mt76_init_queues(dev) (dev)->mt76.queue_ops->init(&((dev)->mt76)) #define mt76_init_queues(dev, ...) (dev)->mt76.queue_ops->init(&((dev)->mt76), __VA_ARGS__)
#define mt76_queue_alloc(dev, ...) (dev)->mt76.queue_ops->alloc(&((dev)->mt76), __VA_ARGS__) #define mt76_queue_alloc(dev, ...) (dev)->mt76.queue_ops->alloc(&((dev)->mt76), __VA_ARGS__)
#define mt76_tx_queue_skb_raw(dev, ...) (dev)->mt76.queue_ops->tx_queue_skb_raw(&((dev)->mt76), __VA_ARGS__) #define mt76_tx_queue_skb_raw(dev, ...) (dev)->mt76.queue_ops->tx_queue_skb_raw(&((dev)->mt76), __VA_ARGS__)
#define mt76_tx_queue_skb(dev, ...) (dev)->mt76.queue_ops->tx_queue_skb(&((dev)->mt76), __VA_ARGS__) #define mt76_tx_queue_skb(dev, ...) (dev)->mt76.queue_ops->tx_queue_skb(&((dev)->mt76), __VA_ARGS__)
......
...@@ -219,7 +219,7 @@ int mt7603_dma_init(struct mt7603_dev *dev) ...@@ -219,7 +219,7 @@ int mt7603_dma_init(struct mt7603_dev *dev)
return ret; return ret;
mt76_wr(dev, MT_DELAY_INT_CFG, 0); mt76_wr(dev, MT_DELAY_INT_CFG, 0);
ret = mt76_init_queues(dev); ret = mt76_init_queues(dev, mt76_dma_rx_poll);
if (ret) if (ret)
return ret; return ret;
......
...@@ -261,7 +261,7 @@ int mt7615_dma_init(struct mt7615_dev *dev) ...@@ -261,7 +261,7 @@ int mt7615_dma_init(struct mt7615_dev *dev)
mt76_wr(dev, MT_DELAY_INT_CFG, 0); mt76_wr(dev, MT_DELAY_INT_CFG, 0);
ret = mt76_init_queues(dev); ret = mt76_init_queues(dev, mt76_dma_rx_poll);
if (ret < 0) if (ret < 0)
return ret; return ret;
......
...@@ -226,7 +226,7 @@ int mt76x02_dma_init(struct mt76x02_dev *dev) ...@@ -226,7 +226,7 @@ int mt76x02_dma_init(struct mt76x02_dev *dev)
if (ret) if (ret)
return ret; return ret;
ret = mt76_init_queues(dev); ret = mt76_init_queues(dev, mt76_dma_rx_poll);
if (ret) if (ret)
return ret; return ret;
......
...@@ -213,7 +213,7 @@ int mt7915_dma_init(struct mt7915_dev *dev) ...@@ -213,7 +213,7 @@ int mt7915_dma_init(struct mt7915_dev *dev)
return ret; return ret;
} }
ret = mt76_init_queues(dev); ret = mt76_init_queues(dev, mt76_dma_rx_poll);
if (ret < 0) if (ret < 0)
return ret; return ret;
......
...@@ -295,7 +295,7 @@ int mt7921_dma_init(struct mt7921_dev *dev) ...@@ -295,7 +295,7 @@ int mt7921_dma_init(struct mt7921_dev *dev)
if (ret) if (ret)
return ret; return ret;
ret = mt76_init_queues(dev); ret = mt76_init_queues(dev, mt76_dma_rx_poll);
if (ret < 0) if (ret < 0)
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment