Я реализую драйвер PCIe, и я хотел бы понять, на каком уровне прерывания могут быть или должны быть включены/отключены. Я намеренно не указываю ОС, поскольку я предполагаю, что это должно быть релевантно для любой платформы. На уровне я имею в виду следующее:Нужно ли включать или отключать прерывания PCI на каждом уровне или только на самом близком к оборудованию?
- OS конкретных прерываний обработки Рамочный
- Прерывания может быть отключена или включена в пространстве регистров конфигурации PCI/PCIe, например, КОМАНДА регистр
- Прерывание также может быть замаскировано на уровне устройства, например, мы можем настроить устройство не вызывать определенные прерывания хоста
Я понимаю, что все, что прерывание типа используется на PCIe (IntX эмуляция, MSI или MSI-X), он должен быть доставлен в ОС хоста.
Так что мой вопрос действительно - действительно ли нам нужно включать или отключать прерывания на каждом уровне, или это достаточно только в ближайшем к оборудованию, например. в соответствующих регистрах PCI?
Это помогает понять, спасибо. Не могли бы вы пояснить следующее: если водитель предпочитает использовать, например, INTx прерывает парадигму, предполагается ли она отключать доставку прерываний MSI/MSI-X (как это возможно через MSI/MSIX возможности PCI-регистров)? То же самое относится к отключению INTx при выборе MSI? В случае Linux это похоже на то, что он выполняется слоем PCI при вызове pci_msi_enable/pci_msix_enable. Является ли это дополнительным и зависит от ОС? – Mark
Стандартизированные регистры возможностей PCI обычно поддерживаются поддержкой PCI PCI. Когда ваш драйвер утверждает устройство и регистрирует его обработчик прерываний с ОС, вы, как правило, имеете возможность выбирать MSI или MSIX. ОС должна знать, что вы используете, чтобы он мог вызвать ваш обработчик в соответствующее время, поэтому он также имеет конфигурацию PCI. Но проверьте документацию/исходный код вашей ОС, если он что-то ожидает от вас. Если на вашем устройстве есть пользовательские регистры выбора векторов MSIX для разных типов событий, вам нужно иметь дело с теми, что есть в вашем драйвере. Надеюсь, это поможет? – pmdj
спасибо, это делает его более ясным. Существует ли требование в спецификациях PCI/PCIe для отключения INTX, когда MSI/MSIX активен? Я искал это в спецификациях, но не смог найти. В конце концов, я полагаю, что только один режим прерывания должен быть активным. – Mark