realtek: eth: provide helper for irq reenabling
Once again there is a family_id check. This time around the irq reactivation in the receive path. For cleanup and better readability add a helper directly besides its already existing counterpart rteth_confirm_and_disable_irqs(). With that drop unneeded defines. Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de> Link: https://github.com/openwrt/openwrt/pull/22156 Signed-off-by: Robert Marko <robimarko@gmail.com>
This commit is contained in:
parent
3bcbbb0ac7
commit
46da6feabc
@ -194,6 +194,17 @@ struct rteth_ctrl {
|
||||
struct rteth_tx *tx_data;
|
||||
};
|
||||
|
||||
static inline void rteth_reenable_irq(struct rteth_ctrl *ctrl, int ring)
|
||||
{
|
||||
u32 shift = ctrl->r->rx_rings % 32;
|
||||
u32 reg = ctrl->r->rx_rings / 32;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&ctrl->lock, flags);
|
||||
sw_w32_mask(0, BIT(ring + shift), ctrl->r->dma_if_intr_msk + reg * 4);
|
||||
spin_unlock_irqrestore(&ctrl->lock, flags);
|
||||
}
|
||||
|
||||
static inline void rteth_confirm_and_disable_irqs(struct rteth_ctrl *ctrl,
|
||||
unsigned long *rings, bool *l2)
|
||||
{
|
||||
@ -1075,7 +1086,6 @@ static int rtl838x_poll_rx(struct napi_struct *napi, int budget)
|
||||
{
|
||||
struct rtl838x_rx_q *rx_q = container_of(napi, struct rtl838x_rx_q, napi);
|
||||
struct rteth_ctrl *ctrl = rx_q->ctrl;
|
||||
unsigned long flags;
|
||||
int ring = rx_q->id;
|
||||
int work_done = 0;
|
||||
|
||||
@ -1087,15 +1097,8 @@ static int rtl838x_poll_rx(struct napi_struct *napi, int budget)
|
||||
work_done += work;
|
||||
}
|
||||
|
||||
if (work_done < budget && napi_complete_done(napi, work_done)) {
|
||||
/* Re-enable rx interrupts */
|
||||
spin_lock_irqsave(&ctrl->lock, flags);
|
||||
if (ctrl->r->family_id == RTL9300_FAMILY_ID || ctrl->r->family_id == RTL9310_FAMILY_ID)
|
||||
sw_w32_mask(0, RTL93XX_DMA_IF_INTR_RX_MASK(ring), ctrl->r->dma_if_intr_rx_done_msk);
|
||||
else
|
||||
sw_w32_mask(0, RTL83XX_DMA_IF_INTR_RX_MASK(ring), ctrl->r->dma_if_intr_msk);
|
||||
spin_unlock_irqrestore(&ctrl->lock, flags);
|
||||
}
|
||||
if (work_done < budget && napi_complete_done(napi, work_done))
|
||||
rteth_reenable_irq(ctrl, ring);
|
||||
|
||||
return work_done;
|
||||
}
|
||||
|
||||
@ -77,10 +77,6 @@
|
||||
#define RTL931X_L2_NTFY_IF_INTR_STS (0x09E8)
|
||||
|
||||
#define RTL839X_DMA_IF_INTR_NOTIFY_MASK GENMASK(22, 20)
|
||||
#define RTL83XX_DMA_IF_INTR_RX_DONE_MASK GENMASK(15, 8)
|
||||
#define RTL83XX_DMA_IF_INTR_RX_RUN_OUT_MASK GENMASK(7, 0)
|
||||
#define RTL83XX_DMA_IF_INTR_RX_MASK(ring) (BIT(ring + 8))
|
||||
#define RTL93XX_DMA_IF_INTR_RX_MASK(ring) (BIT(ring))
|
||||
|
||||
/* MAC address settings */
|
||||
#define RTL838X_MAC (0xa9ec)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user