2017-04-05 151 views
1

我正在使用PCIe Linux驱动程序。我想为设备注册一个ISR。由Linux系统分配给设备的IRQ编号为16,也由其他(USB主机控制器)设备共享。 (通过lspci -v检查)。这是一个基于引脚的中断。PCIe中断处理linux内核

通过在线搜索,我发现几乎所有PCI驱动程序示例仅在API request_irq()中仅提供IRQF_SHARED作为标志,并且不提供任何其他标志来提及高/低级别中断的行为。

我的问题是,Linux内核如何确定共享中断(对于PCIe设备)的行为,如果它是低电平或高电平?

回答

1

PCIe使用MSI,所以不需要关心高/低级别。传统的PCI卡使用电平触发的中断,但大多数设备使用低电平有效的信号,所以这不是驱动程序编写者访问修改/调整的功能。

+0

在我的情况下,我没有使用MSI。如果我向IRQF_TRIGGER_HIGH/LOW请求带IRQF_TRIGGER_HIGH/LOW标志的IRQ,系统会抛出错误“genirq:Flags mismatch”,因为IRQ已经被具有不同标志值的另一个设备共享。所以想了解Linux系统如何处理这种类型的共享中断。有没有描述这些事情的文件? –

+0

进入内核中的一些更深层的机器特定代码。大部分将由BIOS或低级固件(或平台初始化代码)设置它,内核将适当地使用这些值。 –