Настройка данных конфигурации PCI виртуальной функции
Драйвер минипорта для виртуальной функции PCI Express (PCIe) работает в гостевой операционной системе дочернего раздела Hyper-V. Из-за этого драйвер мини-порта VF не может напрямую обращаться к аппаратным ресурсам, таким как пространство конфигурации PCI VF. Только драйвер miniport для физической функции PCIe (PF) может получить доступ к пространству конфигурации PCI для VF. Драйвер мини-порта PF работает в операционной системе управления родительского раздела Hyper-V и имеет привилегированный доступ к ресурсам VF.
Драйвер overlying, например стек виртуализации, выдает запрос на набор OID OID_SRIOV_WRITE_VF_CONFIG_SPACE , когда драйвер VF miniport вызывает NdisMSetBusData для записи в пространство конфигурации PCI.
Перед выполнением этого запроса на набор OID драйвер должен задать элементыструктуры NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS следующим образом:
Задайте для элемента VFId идентификатор VF, для которого необходимо записать сведения.
Задайте для элемента Offset значение смещения в пространстве конфигурации PCI виртуальной машины, в которую будут записываться данные.
Задайте для элемента 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 miniport вызывает NdisMSetVirtualFunctionBusData для записи в запрошенное пространство конфигурации PCI. Однако драйвер минипорта PF также может возвращать данные пространства конфигурации PCI для VF, кэшированные драйвером из предыдущих операций чтения или записи пространства конфигурации PCI.
Примечание Если независимый поставщик оборудования (IHV) предоставляет драйвер виртуальной шины (VBD) в составе пакета драйверов SR-IOV, его драйвер PF miniport не должен вызывать NdisMSetVirtualFunctionBusData. Вместо этого драйвер должен выполнять интерфейс с VBD через частный канал связи и запрашивать вызов SetVirtualFunctionData из VBD. Эта функция предоставляется из интерфейса GUID_VPCI_INTERFACE_STANDARD , поддерживаемого базовым драйвером виртуальной шины PCI (VPCI).
Если драйвер минипорта PF может успешно выполнить запрос OID, драйвер должен скопировать запрошенные данные пространства конфигурации PCI в буфер, на который ссылается элемент InformationBufferструктуры NDIS_OID_REQUEST . Драйвер копирует данные в буфер со смещением, указанным элементомBufferOffsetструктуры NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS .