2
我正在實現一個PCIe驅動程序,並且我想了解中斷可以或應該被啓用/禁用的級別。我故意不指定操作系統,因爲我認爲它應該適用於任何平臺。通過I級表示以下含義:我們是否必須在每個層上啓用或禁用PCI中斷,或者只在最接近硬件的位置啓用或禁用PCI中斷?
- OS特定的中斷處理框架
- 中斷可以被禁用,或在PCI/PCIe配置空間寄存器啓用,例如命令寄存器
- 中斷還可以在設備級別被屏蔽,比如我們可以 配置設備不會觸發特定的中斷到主機
據我瞭解,正在對用於PCIe任何中斷類型(INTx仿真,MSI或MSI-X),它必須交付給主機操作系統。所以我的問題是 - 我們實際上是否必須在每一層啓用或禁用中斷,或者只有在最接近硬件的情況下才足夠,例如,在相關的PCI寄存器中?
這有助於理解,謝謝。您能否澄清以下內容:如果司機選擇使用例如INTx中斷範例,是否應該禁用MSI/MSI-X中斷傳送(因爲可以通過MSI/MSIX功能PCI寄存器)?這同樣適用於選擇MSI時禁用INTx嗎?在Linux的情況下,當調用pci_msi_enable/pci_msix_enable時,看起來它是由PCI層完成的。這是可選的,並取決於操作系統? – Mark
標準化的PCI功能寄存器通常由操作系統的PCI支持負責。當您的驅動程序聲明設備並向操作系統註冊其中斷處理程序時,您通常可以選擇MSI或MSIX。操作系統需要知道你正在使用什麼,所以它可以在適當的時候調用你的處理程序,所以它也會執行PCI配置。但是請檢查你的操作系統的文檔/源代碼是否有任何它期望你做的事情。如果您的設備具有用於不同類型事件的自定義MSIX矢量選擇寄存器,則需要在驅動程序中處理這些寄存器。希望有幫助嗎? – pmdj
謝謝,這使得它更清晰。當MSI/MSIX處於活動狀態時,PCI/PCIe規範是否需要禁用INTx?我一直在尋找這個規格,但沒有找到。畢竟,我想只有一箇中斷模式應該是激活的。 – Mark