免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Cyberman.Wu
打印 上一主题 下一主题

再问PCIe中断问题 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2009-02-12 12:42 |显示全部楼层
>在软件中有没有办法区分中断是MSI触发的还是INTx触发的?现在用的Xilinx V5的板子发中断是通过它的IP Core发的,导致遇到的问题不好定位。

注册中断的时候区分。 实际发生中断的时候,就走到你注册的handler里去了。  再说,PCIE设备是不直接支持INTx的,它只是用MSI方式emulate了INTx中断,以便软件可以向后兼容。

>另外规范中感觉有些含糊(也有可能是没看到位,毕竟太多了),MSI中断如果全能,最终映射到软件应该也是一个IRQ号吧,它是不是也是Configuration Register中的Interrupt Pin的值?

是有个irq号,不过这个号没多少意义。 和Interupt PIN、Interrupt LINE寄存器更是没关系。

> 还有一个问题是规范中简单提了一下Level-Triggerd和Edge-Trigger,并且规定MSI只能是Edge-Trigger的,但INTx好像都可以,这两者在操作系统层面有没有什么区别?

应该说是有点区别的。 MSI之所以应该被当成一个Edge-triggered,是因为它只是一个消息写到系统总线上,并不维护什么状态。 而INTx必须是Level-Triggered,它是有PCI设备的PIN(也就是INTA/INTB/INTC/INTD这些),经过主板上chipset的路由,间接“插到” IO-APIC的输入引脚上的。  发生了中断后,电平一直有效,直到IOAPIC给它撤销掉——这期间相当于维护了一个状态。

论坛徽章:
0
2 [报告]
发表于 2009-02-13 10:44 |显示全部楼层
>> 按LLD3中的说法,根本可以直接读出来做IRQ号使用于request_irq

ldd3的说法是错的。  driver应该用pdev->irq,而不是读INTERRUPT LINE寄存器。

论坛徽章:
0
3 [报告]
发表于 2009-02-19 10:25 |显示全部楼层

回复 #8 Roemer 的帖子

你可以在写个module,

for each pci dev, 读一下其pdev->irq和INTERRUPT LINE寄存器, 比较一下就知道是否一样了。

注意kernel不要太老的版本

论坛徽章:
0
4 [报告]
发表于 2009-02-19 23:52 |显示全部楼层
firmware或者OS在枚举pci设备时, 分配的INTx中断号。

评分

参与人数 1可用积分 +6 收起 理由
Roemer + 6 谢谢!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP