- 论坛徽章:
- 0
|
大虾门,帮我分析下./driver/net/korina.c下面的一段代码
RX中断申请:
ret = request_irq(lp->rx_irq, &korina_rx_dma_interrupt,
IRQF_SHARED | IRQF_DISABLED, "Korina ethernet Rx", dev);
Rx中断处理:
/* Ethernet Rx DMA interrupt */
static irqreturn_t korina_rx_dma_interrupt(int irq, void *dev_id)
{
struct net_device *dev = dev_id;
struct korina_private *lp = netdev_priv(dev);
u32 dmas, dmasm;
irqreturn_t retval;
dmas = readl (&lp->rx_dma_regs->dmas);
if (dmas & (DMA_STAT_DONE | DMA_STAT_HALT | DMA_STAT_ERR)) {
netif_rx_schedule_prep (dev, &lp->napi);
dmasm = readl (&lp->rx_dma_regs->dmasm);
writel (dmasm | (DMA_STAT_DONE |
DMA_STAT_HALT | DMA_STAT_ERR),
&lp->rx_dma_regs->dmasm);
if (dmas & DMA_STAT_ERR)
printk(KERN_ERR DRV_NAME "%s: DMA error\n", dev->name);
retval = IRQ_HANDLED;
} else
retval = IRQ_NONE;
return retval;
}
问题:
为什么这里面没有调用:__netif_rx_schedule函数,他是怎么触发软中断的? |
|