OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK

NDIS issues an object identifier (OID) method request of OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK to notify the miniport driver of a PCI Express (PCIe) Virtual Function (VF) that data within one or more configuration blocks has changed. NDIS issues this OID when the miniport driver for a PCIe Physical Function (PF) calls NdisMInvalidateConfigBlock.

The InformationBuffer member of the NDIS_OID_REQUEST structure contains a pointer to an NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO structure. This structure specifies one or more Virtual Function (VF) configuration blocks whose data has been changed (invalidated) by the PF miniport driver.

Remarks

A VF configuration block is used for backchannel communication between the PF and VF miniport drivers. The IHV can define one or more VF configuration blocks for the device. Each VF configuration block has an IHV-defined format, length, and block ID.

Note  Data from each VF configuration block is used only by the PF and VF miniport drivers.

VF configuration data is exchanged between the following drivers:

  • The VF driver, which runs in the guest operating system. This operating system runs within a Hyper-V child partition.

  • The PF driver, which runs in the management operating system. This operating system runs within the Hyper-V parent partition.

In order to handle notifications of invalid VF configuration data, NDIS and the miniport drivers perform the following steps:

  1. In the guest operating system, NDIS issues an I/O control request of IOCTL_VPCI_INVALIDATE_BLOCK request. When this IOCTL is completed, NDIS is notified that VF configuration data has changed.

  2. In the management operating system, the following steps occur:

    1. The PF miniport driver calls the NdisMInvalidateConfigBlock function to notify NDIS that VF configuration data has changed and is no longer valid. The driver sets the BlockMask parameter to a ULONGLONG bitmask that specifies which VF configuration blocks have changed. Each bit in the bitmask corresponds to a VF configuration block. If the bit is set to one, the data in the corresponding VF configuration block has changed.

    2. NDIS signals the virtualization stack, which runs in the management operating system, about the change to VF configuration block data. The virtualization stack caches the BlockMask parameter data.

      Note  Each time that the PF miniport driver calls NdisMInvalidateConfigBlock, the virtualization stack ORs the BlockMask parameter data with the current value in its cache.

    3. The virtualization stack notifies the virtual PCI (VPCI) driver, which runs in the guest operating system, about the invalidation of VF configuration data. The virtualization stack sends the cached BlockMask parameter data to the VPCI driver.

  3. In the Guest operating system, the following steps occur:

    1. The VPCI driver saves the cached BlockMask parameter data in the BlockMask member of the VPCI_INVALIDATE_BLOCK_OUTPUT structure that is associated with the IOCTL_VPCI_INVALIDATE_BLOCK request.

    2. The VPCI driver successfully completes the IOCTL_VPCI_INVALIDATE_BLOCK request. When this happens, NDIS issues an OID method request of OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK to the VF miniport driver. An NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO is passed along in the OID request. This structure contains the cached BlockMask parameter data.

      NDIS also issues another IOCTL_VPCI_INVALIDATE_BLOCK request to handle successive notifications of changes to VF configuration data.

    3. When the VF driver handles the OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK request, it reads data from the specified VF configuration blocks.

For more information about backchannel communication within the single root I/O virtualization (SR-IOV) interface, see SR-IOV PF/VF Backchannel Communication.

Return Status Codes

The miniport driver returns one of the following status codes for the OID method request of OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK.

Status Code Description

NDIS_STATUS_SUCCESS

The OID request completed successfully.

NDIS_STATUS_NOT_SUPPORTED

The miniport driver either does not support the single root I/O virtualization (SR-IOV) interface or is not enabled to use the interface.

NDIS_STATUS_INVALID_PARAMETER

One or more of the members of the NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO structure have invalid values.

NDIS_STATUS_INVALID_LENGTH

The information buffer was too short. NDIS sets the DATA.SET_INFORMATION.BytesNeeded member in the NDIS_OID_REQUEST structure to the size of the NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO structure.

NDIS_STATUS_FAILURE

The request failed for other reasons.

Requirements

Version

Supported in NDIS 6.30 and later.

Header

Ntddndis.h (include Ndis.h)

See also


IOCTL_VPCI_INVALIDATE_BLOCK

NDIS_OID_REQUEST

NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO

NdisMInvalidateConfigBlock

OID_SRIOV_READ_VF_CONFIG_SPACE

VPCI_INVALIDATE_BLOCK_OUTPUT