次の方法で共有


仮想関数の PCI ベース アドレス レジスタのクエリ

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

Hyper-V 親パーティションの管理オペレーティング システムで実行される PCI バス ドライバーは、ネットワーク アダプターの各 PCI ベース アドレス レジスタ (BAR) のメモリまたは I/O アドレス空間の要件を照会します。 PCI バス ドライバーは、バス上のアダプターを最初に検出するときに、このクエリを実行します。

この PCI BAR クエリを使用して、PCI バス ドライバーは次を決定します。

  • PCI BAR がネットワーク アダプターでサポートされているかどうか。

  • BAR がサポートされている場合、BAR に必要なメモリまたは I/O アドレス空間の量。

PCI ドライバーは、次の方法でこの PCI BAR クエリを実行します。

  1. PCI ドライバーはまず、すべてのデータを BAR に書き込みます。

  2. その後、PCI ドライバーは BAR を読み取って、BAR に必要なメモリまたはアドレス空間を決定します。 値 0 は、BAR がネットワーク アダプターでサポートされていないことを示します。

仮想 PCI (VPCI) バス ドライバーは、Hyper-V 子パーティションのゲスト オペレーティング システムで実行されます。 PCI Express (PCIe) 仮想関数 (VF) が子パーティションに接続されている場合、VPCI バス ドライバーは VF (VF ネットワーク アダプター) の仮想ネットワーク アダプターを公開します。 これを行う前に、VPCI バス ドライバーは PCI BAR クエリを実行して、VF ネットワーク アダプターに必要なメモリまたはアドレス空間を決定する必要があります。

PCI 構成領域へのアクセスは特権操作であるため、Hyper-V 親パーティションの管理オペレーティング システムで実行されるコンポーネントによってのみ実行できます。 VPCI バス ドライバーが PCI BAR に対してクエリを実行すると、NDIS は PF ミニポート ドライバーに OID_SRIOV_PROBED_BARS のオブジェクト識別子 (OID) クエリ要求を発行します。 この OID クエリ要求によって返される結果は VPCI バス ドライバーに転送されるため、VF ネットワーク アダプターで必要なメモリ アドレス空間の量を判断できます。

OID_SRIOV_BAR_RESOURCESの OID 要求は NDIS でのみ発行できます。 OID 要求は、プロトコルやフィルター ドライバーなど、基になるドライバーによって発行することはできません。

OID_SRIOV_PROBED_BARS クエリ要求には、NDIS_SRIOV_PROBED_BARS_INFO 構造体が含まれています。 PF ミニポート ドライバーがこの OID を処理するとき、ドライバーは、BaseRegisterValuesOffset NDIS_SRIOV_PROBED_BARS_INFO 構造体のメンバーによって参照される配列内の PCI BAR 値 返す必要があります。 配列内のオフセットごとに、PF ミニポート ドライバーは、物理ネットワーク アダプターの PCI 構成空間内の同じオフセットにある BAR の ULONG 値に配列要素を設定する必要があります。

ドライバーによって返される各 BAR 値は、管理オペレーティング システムで実行される PCI ドライバーによって実行される PCI BAR クエリに従うのと同じ値である必要があります。 PF ミニポート ドライバーは、NdisMQueryProbedBars呼び出して、この情報を確認できます。

PCI デバイスのベース アドレス レジスタの詳細については、「PCI ローカル バス仕様を参照してください。