次の方法で共有


NdisMRegisterScatterGatherDma 関数 (ndis.h)

注意

ARM および ARM64 プロセッサの場合、NDIS ドライバー ライターは、NDIS 散布図/収集 DMA の代わりに WDF DMA または WDM DMA を使用することを強くお勧めします。

WDF DMA の詳細については、「KMDF ドライバーでの DMA 操作の処理」を参照してください。

WDM DMA の詳細については、ドライバーの入力/出力の管理の の DMA 関連の子トピックを参照してください。

バス マスター ミニポート ドライバーは、NdisMRegisterScatterGatherDma 関数 ミニポートInitializeEx から呼び出して、散布図/収集 DMA チャネルを初期化します。

構文

NDIS_STATUS NdisMRegisterScatterGatherDma(
  [in]      NDIS_HANDLE              MiniportAdapterHandle,
  [in, out] PNDIS_SG_DMA_DESCRIPTION DmaDescription,
  [out]     PNDIS_HANDLE             NdisMiniportDmaHandle
);

パラメーター

[in] MiniportAdapterHandle

NDIS ミニポートInitializeExに渡されるミニポート ハンドル。

[in, out] DmaDescription

NDIS_SG_DMA_DESCRIPTION構造体へのポインター。 この構造体は、ミニポート ドライバーの分散/収集 DMA プロパティを記述します。 構造体は次のように定義されます。

typedef struct _NDIS_SG_DMA_DESCRIPTION {
  NDIS_OBJECT_HEADER  Header;
  ULONG  Flags;
  ULONG  MaximumPhysicalMapping;
  MINIPORT_PROCESS_SG_LIST_HANDLER  ProcessSGListHandler;
  MINIPORT_ALLOCATE_SHARED_MEM_COMPLETE_HANDLER  SharedMemAllocateCompleteHandler;
  ULONG  ScatterGatherListSize;
} NDIS_SG_DMA_DESCRIPTION, *PNDIS_SG_DMA_DESCRIPTION;
 

この構造体には、次のメンバーが含まれます。

NDIS_SG_DMA_DESCRIPTION構造体の NDIS_OBJECT_HEADER 構造体。 Header が指定 構造体の Type メンバーを NDIS_OBJECT_TYPE_SG_DMA_DESCRIPTION、Revision メンバーを NDIS_SG_DMA_DESCRIPTION_REVISION_1 に設定し、Size メンバーを NDIS_SIZEOF_SG_DMA_DESCRIPTION_REVISION_1 に設定します。

フラグ

散布図/収集特性を定義するビット フラグのセット。 このメンバーを、必要なすべてのフラグのビットごとの OR に設定します。

NDIS_SG_DMA_64_BIT_ADDRESS フラグは、NIC が DMA 操作に 64 ビット のアドレス指定を使用できることを指定します。 それ以外の場合、NIC は 32 ビット アドレス指定を使用します。

64 ビット アドレス指定が必要ない場合は、このメンバーを 0 に設定します。

MaximumPhysicalMapping

1 回の DMA 操作で NIC が転送できる最大バイト数。 NDIS は、DMA チャネルを割り当てるときにハードウェア抽象化レイヤー (HAL) にこの値を提供し、HAL はこの値を使用して、NIC 用に予約するマップ レジスタの最大数を決定します。

ProcessSGListHandler

HAL が散布図/収集リストの構築を完了したときに NDIS が呼び出す ミニポートProcessSGList 関数。

SharedMemAllocateCompleteHandler

ザ呼び出すミニポート ドライバーのミニポートSharedMemoryAllocateComplete 関数を します。NdisMAllocateSharedMemoryAsyncEx します。 このフィールドは省略可能であり、ミニポート ドライバーが NdisMAllocateSharedMemoryAsyncEx 呼び出さない場合は、NULL する必要があります。

ScatterGatherListSize

散布図/収集リストを保持するために必要なメモリのサイズ (バイト単位)。 NDIS は、NdisMRegisterScatterGatherDmaから返される前に、この値を設定します。 ミニポート ドライバーは、各散布図/収集リストのメモリを事前に割り当てるには、このサイズを使用する必要があります。

[out] NdisMiniportDmaHandle

呼び出し元が提供し、NDIS がハンドルで埋める変数へのポインター。 ハンドルは、NDIS がこの DMA リソースを管理するために使用するコンテキスト領域を識別します。 ミニポート ドライバーは、この DMA リソースを含む NDIS への後続の呼び出しで NDIS にこのハンドルを渡します。

戻り値

NdisMRegisterScatterGatherDma は、次のいずれかを返します。

リターン コード 形容
NDIS_STATUS_SUCCESS
NdisMRegisterScatterGatherDma バス マスター DMA 操作用のリソースが正常に割り当てられます。
NDIS_STATUS_RESOURCES
リソースが不足しているため、NdisMRegisterScatterGatherDma 失敗しました。
NDIS_STATUS_NOT_SUPPORTED
ndisMRegisterScatterGatherDma 失敗しました。ミニポートが NDIS 6.0 以降のバージョンをサポートすることを指定しなかったか、ミニポート ドライバーが NIC がバス マスター DMA デバイスであることを指定していないためです。 ミニポート ドライバーは、呼び出し時にその NDIS バージョンを指定します。NdisMRegisterMiniportDriver します。 ミニポート ドライバーは、呼び出し時にバス マスター DMA デバイスをサポートすることを指定します。NdisMSetMiniportAttributes します。
NDIS_STATUS_BAD_VERSION
NDIS の現在のバージョンでは、DmaDescription ヘッダー 構造体の リビジョン メンバーで指定されたバージョン サポートされていません。

備考

NDIS バス マスター ミニポート ドライバーは、その ミニポートInitializeEx 関数内 ndisMRegisterScatterGatherDma を呼び出して、散在/収集 DMA 操作のリソースを初期化します。 DmaDescription ミニポート ドライバーが NdisMRegisterScatterGatherDma に渡すパラメーター には、NDIS が散布図の初期化/DMA リソースの収集に使用する情報が含まれています。 NdisMRegisterScatterGatherDma 戻った後、DmaDescriptionScatterGatherListSize メンバーには、散布図/収集リストを保持するのに十分なバッファー サイズが含まれます。 ミニポート ドライバーは、散布図/収集リストのメモリを事前に割り当てるには、このサイズを使用する必要があります。

DmaDescription パラメーターの ProcessSGListHandler メンバーは、ミニポート ドライバーのエントリ ポイント ミニポートProcessSGList 関数を定義します。 ミニポート ドライバーが呼び出されたときNdisMAllocateNetBufferSGList 、NDIS は HAL を呼び出して、ミニポート ドライバーに散布図/収集リストを提供します。 HAL 呼び出し ミニポートProcessSGList HAL は、散布図/収集リストの構築が完了した後。 NDIS は、NdisMAllocateNetBufferSGListへの呼び出しのコンテキスト外 ミニポートProcessSGList を呼び出すことができます。

NdisMRegisterScatterGatherDma は、ミニポート ドライバーに不透明なコンテキスト領域へのポインターを返します。 ミニポート ドライバーは、NDIS 散布図/DMA 関数を収集する後続の呼び出しでこのハンドルを使用する必要があります。

バス マスター ミニポート ドライバーの呼び出しNdisMAllocateSharedMemoryAsyncEx して、データ転送操作用に共有メモリを動的に割り当てます。 この呼び出しは、高いネットワーク トラフィックが原因で、ドライバーが初期化中に割り当てられた共有メモリ領域でミニポート ドライバーが低く実行される場合に必要です。 NdisMAllocateSharedMemoryAsyncEx NDIS_STATUS_PENDINGが返された場合、NDIS は ミニポートSharedMemoryAllocateComplete 後で操作を完了する関数です。 ミニポート ドライバーは、DmaDescription パラメーターの SharedMemAllocateCompleteHandler メンバーの ミニポートSharedMemoryAllocateComplete 関数のエントリ ポイントを指定します。

ミニポート ドライバーは、次を呼び出します。NdisMDeregisterScatterGatherDma 関数を して、NdisMRegisterScatterGatherDma 割り当てられた DMA リソース 割り当てを解除します。

必要条件

要件 価値
サポートされる最小クライアント NDIS 6.0 以降でサポートされています。
ターゲット プラットフォーム 万国
ヘッダー ndis.h (Ndis.h を含む)
ライブラリ Ndis.lib
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 する Init_RegisterSG(ndis)Irql_Gather_DMA_Function(ndis)

関連項目

ミニポートInitializeEx

ミニポートProcessSGList

ミニポートSharedMemoryAllocateComplete

NDIS 散布図/DMA の収集

NDIS_OBJECT_HEADER

NdisMAllocateNetBufferSGList

NdisMAllocateSharedMemoryAsyncEx NdisMDeregisterScatterGatherDma

NdisMRegisterMiniportDriver

NdisMSetMiniportAttributes