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


Настройка данных конфигурации PCI виртуальной функции

Минипорт-драйвер виртуальной функции PCI Express (PCIe) выполняется в гостевой операционной системе дочернего раздела Hyper-V. Из-за этого драйвер минипорта VF не может напрямую получить доступ к аппаратным ресурсам, таким как пространство конфигурации PCI VF. Только минипорт-драйвер для физической функции PCIe (PF) может получить доступ к пространству конфигурации PCI для VF. Драйвер мини-порта PF запускается в операционной системе управления Hyper-V родительской секции и имеет привилегированный доступ к ресурсам VF.

Верхний драйвер, например стек виртуализации, отправляет запрос OID OID_SRIOV_WRITE_VF_CONFIG_SPACE, когда драйвер мини-порта VF вызывает NdisMSetBusData для записи в пространство конфигурации PCI.

Прежде чем он осуществит этот запрос на установку OID, вышележащий драйвер должен задать элементы структурыNDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS следующим образом:

  • Установите элемент VFId в качестве идентификатора VF, для которого должна быть записана информация.

  • Задайте для члена Offset смещение в пространстве конфигурации PCI, отведенном для VF, куда будут записываться данные.

  • Установите для элемента Length значение, равное количеству байтов, которые необходимо записать в пространство конфигурации PCI VF.

  • Задайте элементу BufferOffset смещение в буфере (на который ссылается элементInformationBuffer), в котором будут находиться данные, записанные в указанное пространство конфигурации PCI VF. Это смещение указывается в единицах байтов с начала структуры NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS.

При обработке запроса метода OID OID_SRIOV_WRITE_VF_CONFIG_SPACEдрайвер минипорта PF должен соответствовать следующим рекомендациям:

  • Драйвер мини-порта PF должен убедиться, что VF, указанный VFId членом структуры NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS, имеет ресурсы, которые были ранее выделены. Драйвер мини-порта PF выделяет ресурсы для VF через OID-запрос метода OID_NIC_SWITCH_ALLOCATE_VF.

    Если ресурсы для указанной виртуальной функции не выделены, драйвер должен отклонить запрос OID.

  • Драйвер мини-порта PF вызывает NdisMSetVirtualFunctionBusData для записи в запрошенное пространство конфигурации PCI. Однако драйвер мини-порта PF также может возвращать данные пространства конфигурации PCI для VF, кэшированные драйвером из предыдущих операций чтения или записи пространства конфигурации PCI.

    Примечание Если независимый поставщик оборудования (IHV) предоставляет драйвер виртуальной шины (VBD) в рамках пакета драйвера SR-IOV , его драйвер мини-порта PF не должен вызывать NdisMSetVirtualFunctionBusData. Вместо этого драйвер должен взаимодействовать с VBD через приватный канал связи и запросить, чтобы VBD выполнил вызов SetVirtualFunctionData. Эта функция предоставляется из интерфейса GUID_VPCI_INTERFACE_STANDARD, поддерживаемого базовым драйвером виртуальной шины PCI (VPCI).

Если драйвер минипорта PF может успешно завершить запрос OID, драйвер должен скопировать запрошенные данные конфигурационного пространства PCI в буфер, на который ссылается элемент InformationBuffer структуры NDIS_OID_REQUEST. Драйвер копирует данные в буфер в смещение, указанноеBufferOffset элементом структуры NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS.