2017-04-05 154 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或低級固件(或平臺初始化代碼)設置它,內核將適當地使用這些值。 –