OID_SRIOV_PROBED_BARS

NDIS は、ネットワーク アダプターの PCI Express (PCIe) ベース アドレス レジスター (BAR) の値を取得する OID_SRIOV_PROBED_BARS のオブジェクト識別子 (OID) クエリ要求を発行します。 この関数は、PCI バス ドライバーによって実行されたクエリの後に続いてネットワーク アダプターによって報告された BAR 値を返します。 このクエリは、ネットワーク アダプターに必要なメモリまたは I/O アドレス空間を決定します。

NDIS は、ネットワーク アダプターの PCIe 物理関数 (PF) のミニポート ドライバーに OID_SRIOV_PROBED_BARS の OID クエリ要求を発行します。 この OID クエリ要求は、シングルルート I/O 仮想化 (SR-IOV) インターフェースをサポートする PF ミニポートドライバーに必要なものです。

NDIS_OID_REQUEST 構造体の InformationBuffer メンバーには、バッファーへのポインターが含まれています。 このバッファーは、次のようにフォーマットされます:

  • ネットワーク アダプターの PCI BAR における読み取り操作のパラメーターを含む NDIS_SRIOV_PROBED_BARS_INFO 構造体。

  • PCIe ネットワーク アダプターの各 BAR の ULONG 値の配列。 この配列内の要素の最大数は PCI_TYPE0_ADDRESSE です。

解説

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

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

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

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

仮想 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_PROBED_BARSの OID 要求は NDIS でのみ発行できます。 フィルター ドライバーのプロトコルなど、上位ドライバーによって OID 要求を発行することはできません。

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

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

PCI デバイスの BAR の詳細については、 PCI ローカル バスの仕様を参照してください。

VF の PCI BAR レジスタをクエリする方法の詳細については、 仮想関数の PCI ベース アドレス レジスタ-のクエリ を参照してください。

状態コードを返します

PF ミニポート ドライバーは、OID_SRIOV_PROBED_BARSのクエリ要求の次の状態コードのいずれかを返します:

状態コード 説明

NDIS_STATUS_SUCCESS

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

NDIS_STATUS_NOT_SUPPORTED

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

NDIS_STATUS_INVALID_PARAMETER

NDIS_SRIOV_PROBED_BARS_INFO 構造体の1つ以上のメンバーに無効な値が含まれています。

NDIS_STATUS_INVALID_LENGTH

情報バッファーが、 (sizeof(NDIS_SRIOV_PROBED_BARS_INFO) + PCI_TYPE0_ADDRES) 未満です。 PF ミニドライバーは、 NDIS_OID_REQUEST 構造体の DATA.QUERY_INFORMATION.BytesNeeded メンバー に必要最小限のバッファーを設定する必要があります。

NDIS_STATUS_FAILURE

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

要件

バージョン

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

ヘッダー

Ntddndis.h (Ndis.h を含む)

関連項目


NDIS_OID_REQUEST

NDIS_SRIOV_PROBED_BARS_INFO

NdisMQueryProbedBars