Поделиться через


Динамическая настройка MSI-X

Windows Vista с пакетом обновления 1 (SP1), Windows Server 2008 и более поздние операционные системы поддерживают динамическое изменение свойств сообщений прерываний MSI-X. (Спецификация PCI 3.0 определяет MSI-X.) Драйвер шины PCI предоставляет интерфейс GUID_MSIX_TABLE_CONFIG_INTERFACE, позволяющий драйверам устройств PCI изменять настройки в таблице прерываний аппаратного обеспечения шины.

Драйверы используют интерфейс, отправляя запрос IRP_MN_QUERY_INTERFACE водителю шины, с параметром InterfaceType, равным GUID_MSIX_TABLE_CONFIG_INTERFACE. Драйвер шины предоставляет указатель на структуру PCI_MSIX_TABLE_CONFIG_INTERFACE, которая предоставляет указатели на три подпрограммы для изменения таблицы прерываний:

  • SetTableEntry назначает идентификатор сообщения записи аппаратной таблицы.

  • MaskTableEntry маскирует прерывание, соответствующее записи аппаратной таблицы.

  • UnmaskTableEntry распаковывает прерывание, соответствующее записи аппаратной таблицы.

По умолчанию таблица прерываний настроена таким образом, чтобы первая запись имела идентификатор сообщения ноль, вторая запись имела идентификатор сообщения один и далее. Если число записей таблицы превышает количество сообщений, каждая дополнительная запись таблицы присваивается нулю идентификатора сообщения. (Идентификатор сообщения — это индекс записи прерывания в члене MessageInfo структуры IO_INTERRUPT_MESSAGE_INFO , описывающей прерывания, сигнализированные драйвером. Подпрограмма IoConnectInterruptEx предоставляет указатель на эту структуру.)