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


Обратная связь с драйвером минипорта PF

Драйвер минипорта физической функции PCI Express (PCIe) взаимодействует с драйвером минипорта виртуальной функции PCIe (VF) для отправки уведомлений об изменениях в данных блока конфигурации VF. Драйвер минипорта PF выдает эти уведомления, чтобы сделать недействительными данные в блоке конфигурации VF. В ответ на это уведомление драйвер VF miniport может отправить обратный запрос драйверу минипорта PF для чтения данных из недопустимого блока конфигурации VF.

Блок конфигурации VF используется для обмена данными между PF и драйверами мини-порта VF. IHV может определить один или несколько блоков конфигурации VF для устройства. Каждый блок конфигурации VF имеет формат, длину и идентификатор блока, определяемый IHV.

Примечание Данные из каждого блока конфигурации VF используются только драйверами PF и VF miniport. Формат и содержимое этих данных непрозрачны для компонентов операционной системы Windows.

При выдаче и обработке уведомлений о недопустимых данных конфигурации VF выполняются следующие действия.

  1. В гостевой операционной системе NDIS отправляет запрос на управление вводом-выводом IOCTL_VPCI_INVALIDATE_BLOCK. После завершения этого IOCTL NDIS получает уведомление об изменении данных конфигурации VF.

  2. В операционной системе управления, работающей в родительском разделе Hyper-V, выполняются следующие действия.

    1. Драйвер минипорта PF вызывает функцию NdisMInvalidateConfigBlock , чтобы уведомить NDIS о том, что данные конфигурации VF изменились и больше не действительны. Драйвер задает для параметра BlockMask битовую маску ULONGLONG, которая указывает, какие блоки конфигурации VF были изменены. Каждый бит в битовой маске соответствует блоку конфигурации VF. Если для бита задано значение единицы, данные в соответствующем блоке конфигурации VF изменились.

    2. NDIS сообщает стеку виртуализации, который работает в операционной системе управления, об изменении данных блока конфигурации VF. Стек виртуализации кэширует данные параметра BlockMask .

      Примечание Каждый раз, когда драйвер минипорта PF вызывает NdisMInvalidateConfigBlock, стек виртуализации возвращает данные параметра BlockMask с текущим значением в кэше.

    3. Стек виртуализации уведомляет драйвер виртуального PCI (VPCI), который работает в гостевой операционной системе, о недопустимости данных конфигурации VF. Стек виртуализации отправляет кэшированные данные параметров BlockMask драйверу VPCI.

  3. В гостевой операционной системе, работающей в дочернем разделе Hyper-V, выполняются следующие действия.

    1. Драйвер VPCI сохраняет кэшированные данные параметров BlockMask в элементе BlockMaskструктуры VPCI_INVALIDATE_BLOCK_OUTPUT, связанной с запросом IOCTL_VPCI_INVALIDATE_BLOCK .

    2. Драйвер VPCI успешно завершает запрос IOCTL_VPCI_INVALIDATE_BLOCK . В этом случае NDIS отправляет запрос метода идентификатора объекта (OID) OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK драйверу мини-порта VF. В запросе OID передается NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO . Эта структура содержит кэшированные данные параметра BlockMask .

      NDIS также выдает другой запрос IOCTL_VPCI_INVALIDATE_BLOCK для обработки последовательных уведомлений об изменениях данных конфигурации VF.

    3. Когда драйвер VF обрабатывает запрос OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK , он может считывать данные из указанных блоков конфигурации VF, вызвав NdisMReadConfigBlock. Дополнительные сведения об этом процессе см. в разделе Backchannel Communication from a VF Miniport Driver.