次の方法で共有


仮想関数の PCI 構成領域のクエリ

このメソッドは、Hyper-V 親パーティションの管理オペレーティング システムで実行されるドライバーの上にある場合のみ使用できます。

PCI Express (PCIe) 仮想関数 (VF) のミニポート ドライバーは、Hyper-V 子パーティションのゲスト オペレーティング システムで実行されます。 このため、VF ミニポート ドライバーは、VF の PCIe 構成領域などのハードウェア リソースに直接アクセスできません。 VF の PCIe 構成領域にアクセスできるのは、PCIe 物理関数 (PF) のミニポート ドライバーだけです。 PF ミニポート ドライバーは、Hyper-V 親パーティションの管理オペレーティング システムで実行され、VF リソースへのアクセス権限を持ちます。

管理オペレーティング システムで実行される上位のドライバーは、OID_SRIOV_READ_VF_CONFIG_SPACE のオブジェクト識別子 (OID) メソッド要求を発行し、ネットワーク アダプター上の指定された VF の PCIe 構成領域からデータを読み取ります。

たとえば、管理オペレーティング システムで実行される仮想化スタックは、VF ミニポート ドライバーが NdisMGetBusData を呼び出して VF PCIe 構成領域から読み取るときに、OID_SRIOV_READ_VF_CONFIG_SPACE の OID メソッド要求を発行します。

この OID メソッド要求を発行する前に、基になるドライバーは、次の方法で NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS 構造のメンバーを設定する必要があります。

  • VFId メンバーを、情報の読み取り元となる VF の識別子に設定する必要があります。

  • Offset メンバーは、データを読み取る VF の PCIe 構成空間内のオフセットに設定する必要があります。

  • Length メンバーは、VF の PCIe 構成領域から読み取るバイト数に設定する必要があります。

  • BufferOffset メンバーは、指定された VF の PCI 構成領域から読み取られるデータを格納するバッファー内のオフセット (InformationBuffer メンバーによって参照される) に設定する必要があります。 このオフセットは、NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS 構造の先頭からバイト単位で指定されます。

OID_SRIOV_READ_VF_CONFIG_SPACE の OID メソッド要求を処理する場合、PF ミニポート ドライバーは、次のガイドラインに従う必要があります。

  • PF ミニポート ドライバーは、 NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERSS 構造の VFId メンバーによって指定された VF に、以前に割り当てられているリソースがあることを確認する必要があります。 PF ミニポート ドライバーは、 OID_NIC_SWITCH_ALLOCATE_VF の OID メソッド要求を通じて VF のリソースを割り当てます。 指定した VF のリソースが割り当てられていない場合、ドライバーは OID 要求に失敗する必要があります。

  • ミニポート ドライバーは、(NDIS_OID_REQUEST 構造の InformationBuffer メンバーによって参照される) バッファーが、要求された PCIe 構成領域データを返すのに十分な大きさであることを確認する必要があります。 これが真でない場合、ドライバーは OID 要求を失敗する必要があります。

  • ミニポート ドライバーは、通常 NdisMGetVirtualFunctionBusData を呼び出して、要求された PCIe 構成領域を照会します。 ただし、ミニポート ドライバーは、ドライバーが PCIe 構成領域の以前の読み取りまたは書き込み操作からキャッシュされている VF の PCIe 構成領域データを返すこともできます。

    独立系ハードウェア ベンダー (IHV) が SR-IOV ドライバー パッケージ の一部として仮想バス ドライバー (VBD) を提供する場合、そのミニポート ドライバーは NdisMGetVirtualFunctionBusData を呼び出してはなりません。 代わりに、ドライバーはプライベート コミュニケーション チャネルを介して VBD とやり取りし、VBDが ReadVfConfigBlock を呼び出すように要求する必要があります。 この関数は、下位仮想 PCI (VPCI) バス ドライバーでサポートされている GUID_VPCI_INTERFACE_STANDARD インターフェースから公開されます。

この OID メソッド要求から正常に戻った後、NDIS_OID_REQUEST 構造の InformationBuffer メンバーには、呼び出し元が割り当てたバッファーへのポインターが含まれています。 このバッファーは、次のようにフォーマットされます。