Я реализую драйвер PCIe, и я хотел бы понять, на каком уровне прерывания могут быть или должны быть включены / отключены. Я намеренно не указываю ОС, так как полагаю, что это должно быть актуально для любой платформы. Под уровнями я имею в виду следующее:
- Специфичная для ОС структура обработки прерываний
- Прерывания могут быть отключены или включены в регистрах пространства конфигурации PCI / PCIe, например, регистр COMMAND
- Прерывания также могут маскироваться на уровне устройства, например, мы можем настроить устройство так, чтобы оно не вызывало определенные прерывания для хоста.
Я понимаю, что какой бы тип прерывания не использовался в PCIe (эмуляция INTx, MSI или MSI-X), он должен быть доставлен в хост-ОС.
Поэтому мой вопрос: нужно ли нам на самом деле включать или отключать прерывания на каждом уровне, или этого достаточно только на самом близком к аппаратному обеспечению, например, в соответствующих регистрах PCI?