В настоящее время я работаю над драйвером сетевой карты Intel на основе PCIe для своего проекта разработки ОС. Хотя драйвер, кажется, работает хорошо, как только я включаю INTA (IRQ 16, используя I / O APIC), я продолжаю получать поток прерываний, который полностью блокирует мое ядро. Они не вызваны сетевой картой (регистр причины прерывания - все нули), за исключением очень немногих случаев, когда карта фактически получила пакет.
Вещи, которые я пробовал:
Проверьте другие настройки триггера IRQ - уровень срабатывания на «низком уровне» должен быть правильным, поскольку в других случаях вообще ничего не происходит (прерывания сетевой карты должны работать).
Отключить все другие устройства PCIe: я попытался записать 0x0400 в регистр команд каждого устройства PCIe cfg space (установить флаг отключения прерывания, снять все остальные флаги); Я исключил только сетевую карту, видеокарту и мостовые устройства. Хотя эта операция завершается успешно, я не совсем уверен, что это действительно отключает данные устройства, поскольку эти прерывания все еще происходят.
Правильно ли записывать 0x0400 в регистр команд для полного отключения устройства PCIe?