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


Запрос пространства конфигурации PCI для виртуальной функции

Примечание Этот метод можно использовать только в драйверах, работающих в операционной системе управления родительского раздела Hyper-V.

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

Избыточный драйвер, работающий в операционной системе управления, отправляет запрос метода идентификатора объекта (OID) OID_SRIOV_READ_VF_CONFIG_SPACE для чтения данных из пространства конфигурации PCIe для указанного VF на сетевом адаптере.

Например, стек виртуализации, работающий в операционной системе управления, отправляет запрос метода OID OID_SRIOV_READ_VF_CONFIG_SPACE , когда драйвер VF miniport вызывает NdisMGetBusData для чтения из пространства конфигурации PCIe VF.

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

  • Для элемента VFId необходимо задать идентификатор VF, из которого будут считываться сведения.

  • Для элемента Offset необходимо задать смещение в пространстве конфигурации PCIe виртуальной машины, в которой будут считываться данные.

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

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

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

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

  • Драйвер мини-порта должен убедиться, что буфер (на который ссылается элемент InformationBufferструктуры NDIS_OID_REQUEST ) достаточно велик, чтобы вернуть запрошенные данные пространства конфигурации PCIe. Если это не так, драйвер должен завершить запрос OID.

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

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

После успешного возврата из этого запроса метода OID член InformationBufferструктуры NDIS_OID_REQUEST содержит указатель на буфер, выделенный вызывающим объектом. Этот буфер имеет следующий формат:

  • Структура NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS , содержащая параметры для операции чтения пространства конфигурации PCIe виртуальной машины.

  • Дополнительное буферное пространство для считывания данных из пространства конфигурации PCIe. Драйвер копирует данные в буфер со смещением, указанным элементомBufferOffsetструктуры NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS .