Определение возможностей SR-IOV

В этом разделе описывается, как NDIS и избыточные драйверы определяют возможности виртуализации единого корневого ввода-вывода (SR-IOV) сетевого адаптера. В этом разделе содержатся следующие сведения:

Возможности отчётности SR-IOV во время MiniportInitializeEx

Запрос возможностей SR-IOV оверлейными драйверами

Создание отчетов о возможностях SR-IOV во время MiniportInitializeEx

Когда NDIS вызывает функцию минипорт-драйвера MiniportInitializeEx, драйвер предоставляет следующие возможности SR-IOV:

  • Полный набор возможностей оборудования SR-IOV, которые может поддерживать сетевой адаптер.

  • Возможности SR-IOV, которые в настоящее время включены в сетевом адаптере.

  • Управляет ли минипорт-драйвер физической функцией PCI Express (PCIe) или виртуальной функцией (VF) на сетевом адаптере.

Драйвер минипорта сообщает о SR-IOV аппаратных возможностях базового сетевого адаптера через структуру NDIS_SRIOV_CAPABILITIES, которая инициализируется следующим образом:

  1. Драйвер минипорта инициализирует член Header. Драйвер устанавливает элемент Type в Header на NDIS_OBJECT_TYPE_DEFAULT.

    Начиная с версии NDIS 6.30, драйвер минипорт устанавливает член Revision элемента Header в NDIS_SRIOV_CAPABILITIES_REVISION_1 и член Size в NDIS_SIZEOF_SRIOV_CAPABILITIES_REVISION_1.

  2. Драйвер минипорта задает соответствующие флаги в SriovCapabilities члене, для сообщения о возможностях SR-IOV.

    Если сетевой адаптер поддерживает SR-IOV, минипорт-драйвер физической функции PCI Express (PCIe) адаптера должен задать следующие флаги:

    • NDIS_SRIOV_CAPS_SRIOV_SUPPORTED (поддерживается)

    • NDIS_SRIOV_CAPS_PF_MINIPORT

    Заметка

     Минипорт-драйвер виртуальной функции PCIe (VF) сетевого адаптера должен задать флаг NDIS_SRIOV_CAPS_VF_MINIPORT и флаг NDIS_SRIOV_CAPS_SRIOV_SUPPORTED.  

Когда NDIS вызывает функцию минипорта MiniportInitializeEx, драйвер регистрирует SR-IOV возможности сетевого адаптера, следуя следующим шагам.

  1. Минипорт-драйвер инициализирует структуру NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES.

    Драйвер минипорта устанавливает член HardwareSriovCapabilities как указатель на предварительно инициализированную структуру NDIS_SRIOV_CAPABILITIES.

    Если параметр реестра для ключевого слова INF *SRIOV INF имеет значение единицы, в настоящее время SR-IOV возможности включены на сетевом адаптере. Драйвер минипорта задает CurrentSriovCapabilities члены в виде указателя на ту же самую NDIS_SRIOV_CAPABILITIES структуру.

    Если параметр реестра для ключевого слова *SRIOV INF имеет значение ноль, то возможности SR-IOV в настоящее время отключены на сетевом адаптере. Драйвер минипорта должен задать для элемента CurrentSriovCapabilities значение NULL.

    Дополнительные сведения о ключевом слове INF *SRIOV см. в разделе Стандартные INF-ключевые слова дляSR-IOV.

  2. Драйвер вызывает NdisMSetMiniportAttributes и устанавливает для параметра MiniportAttributes указатель на структуру NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES.

Дополнительные сведения о процессе инициализации адаптера см. в разделе «Инициализация минипорт-адаптера».

Запрос возможностей SR-IOV накладывающимися драйверами

NDIS передает текущие активные возможности SR-IOV сетевого адаптера драйверам верхнего уровня, которые подключаются к сетевому адаптеру следующим образом:

  • Когда NDIS вызывает функцию FilterAttachдрайвера фильтра, NDIS передает возможности сетевого адаптера SR-IOV через параметр AttachParameters . Этот параметр содержит указатель на структуру NDIS_FILTER_ATTACH_PARAMETERS. Элемент SriovCapabilities в этой структуре содержит указатель на структуру NDIS_SRIOV_CAPABILITIES.

  • Когда NDIS вызывает функцию драйвера протокола ProtocolBindAdapterEx, NDIS передает возможности SR-IOV сетевого адаптера через параметр BindParameters. Этот параметр содержит указатель на структуру NDIS_FILTER_ATTACH_PARAMETERS. Элемент SriovCapabilities в этой структуре содержит указатель на структуру NDIS_SRIOV_CAPABILITIES.

NDIS также возвращает структуру NDIS_SRIOV_CAPABILITIES при обработке запросов идентификатора объекта (OID) OID_SRIOV_HARDWARE_CAPABILITIES и OID_SRIOV_CURRENT_CAPABILITIES, выдаваемых вышележащими протокольными или фильтровыми драйверами.