免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1672 | 回复: 2
打印 上一主题 下一主题

网络驱动代码疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-18 16:57 |只看该作者 |倒序浏览
大虾门,帮我分析下./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函数,他是怎么触发软中断的?

论坛徽章:
0
2 [报告]
发表于 2012-06-21 08:49 |只看该作者
回复 1# linuxLife12345


    软中断在处理完中断之后由系统自动去调用的,

论坛徽章:
0
3 [报告]
发表于 2012-07-06 15:59 |只看该作者
好像是中断下部分处理吧。这个应该是上部。我记的在软中断注册时,填入处理函数名称,当中断处理时,它会自动调用处理函数来处理软中断。建议你搜索一下软中断注册函数,应该能找到。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP