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: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
335e97ace2
commit
cb8ed33d4b
@ -602,8 +602,7 @@ mt76_dma_rx_process(struct mt76_dev *dev, struct mt76_queue *q, int budget)
|
||||
return done;
|
||||
}
|
||||
|
||||
static int
|
||||
mt76_dma_rx_poll(struct napi_struct *napi, int budget)
|
||||
int mt76_dma_rx_poll(struct napi_struct *napi, int budget)
|
||||
{
|
||||
struct mt76_dev *dev;
|
||||
int qid, done = 0, cur;
|
||||
@ -626,9 +625,11 @@ mt76_dma_rx_poll(struct napi_struct *napi, int budget)
|
||||
|
||||
return done;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt76_dma_rx_poll);
|
||||
|
||||
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;
|
||||
|
||||
@ -639,8 +640,7 @@ mt76_dma_init(struct mt76_dev *dev)
|
||||
dev->napi_dev.threaded = 1;
|
||||
|
||||
mt76_for_each_q_rx(dev, i) {
|
||||
netif_napi_add(&dev->napi_dev, &dev->napi[i], mt76_dma_rx_poll,
|
||||
64);
|
||||
netif_napi_add(&dev->napi_dev, &dev->napi[i], poll, 64);
|
||||
mt76_dma_rx_fill(dev, &dev->q_rx[i]);
|
||||
napi_enable(&dev->napi[i]);
|
||||
}
|
||||
|
@ -45,6 +45,7 @@ enum mt76_mcu_evt_type {
|
||||
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_cleanup(struct mt76_dev *dev);
|
||||
|
||||
|
@ -170,7 +170,8 @@ struct mt76_mcu_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 idx, int n_desc, int bufsize,
|
||||
@ -802,7 +803,7 @@ static inline u16 mt76_rev(struct mt76_dev *dev)
|
||||
#define mt76xx_chip(dev) mt76_chip(&((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_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__)
|
||||
|
@ -219,7 +219,7 @@ int mt7603_dma_init(struct mt7603_dev *dev)
|
||||
return ret;
|
||||
|
||||
mt76_wr(dev, MT_DELAY_INT_CFG, 0);
|
||||
ret = mt76_init_queues(dev);
|
||||
ret = mt76_init_queues(dev, mt76_dma_rx_poll);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -261,7 +261,7 @@ int mt7615_dma_init(struct mt7615_dev *dev)
|
||||
|
||||
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)
|
||||
return ret;
|
||||
|
||||
|
@ -226,7 +226,7 @@ int mt76x02_dma_init(struct mt76x02_dev *dev)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = mt76_init_queues(dev);
|
||||
ret = mt76_init_queues(dev, mt76_dma_rx_poll);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -213,7 +213,7 @@ int mt7915_dma_init(struct mt7915_dev *dev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = mt76_init_queues(dev);
|
||||
ret = mt76_init_queues(dev, mt76_dma_rx_poll);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
@ -295,7 +295,7 @@ int mt7921_dma_init(struct mt7921_dev *dev)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = mt76_init_queues(dev);
|
||||
ret = mt76_init_queues(dev, mt76_dma_rx_poll);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user