VF ミニポート ドライバーからのバックチャネル通信
PCI Express (PCIe) 仮想関数 (VF) のミニポート ドライバーは、VF 構成ブロックからデータを読み取ったり書き込んだりするために、PCIe 物理機能 (PF) のミニポート ドライバーと通信します。
VF 構成ブロックは、PF ミニポート ドライバーと VF ミニポート ドライバー間のバックチャネル コミュニケーションに使用されます。 独立系ハードウェア ベンダー (IHV) は、デバイスの 1 つ以上の VF 構成ブロックを定義できます。 各 VF 構成ブロックには、IHV で定義された形式、長さ、およびブロック ID があります。 たとえば、IHV は、VF ミニポート ドライバーのメディア アクセス制御 (MAC) アドレスに使用できる VF 構成ブロックを定義できます。 現在の VF および仮想ポート (VPort) 構成には、別の VF 構成ブロックを使用できます。
注: 各 VF 構成ブロックからのデータは、PF および VF ミニポート ドライバーによってのみ使用されます。 このデータの形式と内容は、Windows オペレーティング システムのコンポーネントに対して不透明です。
各 VF 構成ブロックには、IHV によって一意の識別子が割り当てられます。 これにより、VF ミニポート ドライバーは、クエリまたは特定の VF 構成ブロックに関する情報を設定します。
VF ミニポート ドライバーは、次の関数を使用して、指定した VF 構成ブロックの読み取りまたは書き込み操作を開始します。
NdisMReadConfigBlockは、指定した VF 構成ブロックからデータを読み取ります。 VF ミニポート ドライバーは、この関数を呼び出すときに、読み取るデータのブロック識別子と長さを指定します。 ドライバーは、要求されたデータを格納するバッファーへのポインターも渡します。
NdisMWriteConfigBlock は、指定した VF 構成ブロックにデータを書き込みます。 VF ミニポート ドライバーは、この関数を呼び出すときに、書き込むデータのブロック識別子と長さを指定します。 ドライバーは、データの書き込み元のバッファーへのポインターも渡します。
PF ミニポート ドライバーは、次の方法で指定した VF 構成ブロックへのアクセスを管理します。
VF ミニポート ドライバーが NdisMReadConfigBlock を呼び出すと、NDIS は PF ミニポート ドライバーに OID_SRIOV_READ_VF_CONFIG_BLOCK のオブジェクト識別子 (OID) メソッド要求を発行します。 この OID 要求には、関数呼び出しで VF ミニポート ドライバーによって渡されたパラメーター データが含まれています。
PF ミニポート ドライバーは、読み取り操作を実行し、ドライバーが OID 要求を完了したときに要求されたデータを返します。 OID 要求が完了すると、NDIS は NdisMReadConfigBlock の呼び出しから返されます。
VF ミニポート ドライバーが NdisMWriteConfigBlock を呼び出すと、NDIS は PF ミニポート ドライバーに OID_SRIOV_WRITE_VF_CONFIG_BLOCK の OID メソッド要求を発行します。 この OID 要求には、関数呼び出しで VF ミニポート ドライバーによって渡されたパラメーター データが含まれています。
PF ミニポート ドライバーは、書き込み操作を実行し、OID 要求を完了します。 OID 要求が完了すると、NDIS は NdisMWriteConfigBlock の呼び出しから返されます。
次の図は、SR-IOV バックチャネル インターフェイスでの VF 構成ブロックの読み取りと書き込みに関連するプロセスを示しています。