OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK

NDIS は、複数の構成ブロック内のデータが変更されたことを PCI Express (PCIe) 仮想関数 (VF) のミニポート ドライバーに通知するOID_SRIOV_VF_INVALIDATE_CONFIG_BLOCKのオブジェクト識別子 (OID) メソッド要求を発行します。 NDIS は、PCIe 物理関数 (PF) のミニポート ドライバーが NdisMInvalidateConfigBlockを呼び出ときに、この OID を発行します。

この NDIS_OID_REQUEST 構造体の InformationBuffer メンバーには NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO 構造体へのポインターが含まれています。 この構造体は、PF ミニポート ドライバーによってデータが変更された(無効化された)1 つ以上の仮想関数 (VF) 構成ブロックを指定します。

解説

VF 構成ブロックは、PF ミニポート ドライバーと VF ミニポート ドライバー間のバックチャネルコミュニケーションに使用されます。 IHV は、デバイスの 1 つ以上の VF 構成ブロックを定義できます。 各 VF 構成ブロックには、IHV で定義された形式、長さ、およびブロック ID があります。

各 VF 構成ブロックからのデータは、PF および VF ミニポート ドライバーによってのみ使用されます。

VF 構成データは、次のドライバー間で交換されます:

  • ゲスト オペレーティング システムで実行されるVF ドライバー。 このオペレーティング システムは、Hyper-V 子パーティション内で実行されます。

  • 管理オペレーティング システムで実行される PF ドライバー。 このオペレーティング システムは、Hyper-V 親パーティション内で実行されます。

無効な VF 構成データの通知を処理するために、NDIS およびミニポート ドライバーは、次の手順を実行します:

  1. ゲスト オペレーティング システムでは、NDISが IOCTL_VPCI_INVALIDATE_BLOCK のI/O 制御要求を発行します。 この IOCTL が完了すると、VF 構成データが変更されたことが NDIS に通知されます。

  2. 管理オペレーティング・システムでは、以下のステップが実行されます:

    1. PF ミニポート ドライバーは、 NdisMInvalidateConfigBlock 関数を呼び出して、VF 構成データが変更され、有効ではなくなったことを NDIS に通知します。 ドライバーは、どの VF 構成ブロックが変更されたかを指定する ULONGLONG ビットマスクに BlockMask パラメーターを設定します。 ビットマスク内の各ビットは、VF 構成ブロックに対応します。 ビットが 1 に設定されている場合、対応する VF 構成ブロック内のデータが変更されました。

    2. NDIS は、VF 構成ブロック データへの変更について、管理オペレーティング システムで実行される仮想化スタックを通知します。 仮想化スタックは、 BlockMask パラメーターデータをキャッシュします。

      PF ミニポート ドライバーが NdisMInvalidateConfigBlockを呼び出すたびに、 仮想化スタックは BlockMask パラメーター データとキャッシュ内の現在値とを OR 演算します。

    3. 仮想化スタックは、VF 構成データの無効化について、ゲスト オペレーティング システムで実行される仮想 PCI (VPCI) ドライバーに通知します。 仮想化スタックは、キャッシュされた BlockMask パラメーター データを VPCI ドライバーに送信します。

  3. ゲスト オペレーティング・システムでは、以下のステップが実行されます:

    1. VPCI ドライバーは、キャッシュされた BlockMask パラメーターデータを、 IOCTL_VPCI_INVALIDATE_BLOCK 要求に関連付けられている VPCI_INVALIDATE_BLOCK_OUTPUT 構造体の BlockMask メンバーに保存します。

    2. VPCI ドライバーは、 IOCTL_VPCI_INVALIDATE_BLOCK 要求を正常に完了します。 この場合、NDIS は、VF ミニポート ドライバーにOID_SRIOV_VF_INVALIDATE_CONFIG_BLOCKの OID メソッド要求を発行します。 NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO はOID 要求で渡されます。 この構造体には、キャッシュされた BlockMask パラメーターデータを含んでいます。

      NDIS は、VF 構成データへの変更の連続した通知を処理する別の IOCTL_VPCI_INVALIDATE_BLOCK 要求も発行します。

    3. VF ドライバーは、OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK 要求を処理するときに、指定された VF 構成ブロックからデータを読み取ります。

シングル ルート I/O 仮想化 (SR-IOV) インターフェイス内のバックチャネル コミュニケーションの詳細については、 SR-IOV PF/VF バックチャネル コミュニケーション を参照してください。

状態コードを返します

PF ミニポート ドライバーは、OID_SRIOV_OID_VF_CONFIG_BLOCK のメソッド要求の次の状態コードのいずれかを返します:

状態コード 説明

NDIS_STATUS_SUCCESS

OID 要求は正常に完了しました。

NDIS_STATUS_NOT_SUPPORTED

ミニポート ドライバーがシングル ルート I/O 仮想化 (SR-IOV) インターフェイスをサポートしていないか、インターフェイスの使用が有効になっていません。

NDIS_STATUS_INVALID_PARAMETER

DIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO 構造体の1つ以上のメンバーに無効な値があります。

NDIS_STATUS_INVALID_LENGTH

情報バッファーが短すぎました。 NDIS は、 NDIS_OID_REQUEST 構造体の DATA.SET_INFORMATION.BytesNeeded メンバーを NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO 構造体のサイズに設定します。

NDIS_STATUS_FAILURE

その他の理由で要求に失敗しました。

要件

バージョン

NDIS 6.30 以降でサポートされています。

ヘッダー

Ntddndis.h (Ndis.h を含む)

関連項目


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