SerCx2SystemDmaTransmitCreate 関数 (sercx.h)
SerCx2SystemDmaTransmitCreate メソッドは、SerCx2 system-DMA-transmit オブジェクトを作成します。このオブジェクトは、シリアル フレームワーク拡張機能 (SerCx2) のバージョン 2 がシステム DMA 送信トランザクションの実行に使用します。
構文
NTSTATUS SerCx2SystemDmaTransmitCreate(
[in] WDFDEVICE Device,
[in] PSERCX2_SYSTEM_DMA_TRANSMIT_CONFIG SystemDmaTransmitConfig,
[in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
[out] SERCX2SYSTEMDMATRANSMIT *SystemDmaTransmit
);
パラメーター
[in] Device
シリアル コントローラーを表すフレームワーク デバイス オブジェクトへの WDFDEVICE ハンドル。 シリアル コントローラー ドライバーは、 EvtDriverDeviceAdd コールバック関数でこのオブジェクトを作成しました。 詳細については、「 SerCx2InitializeDevice」を参照してください。
[in] SystemDmaTransmitConfig
SERCX2_SYSTEM_DMA_TRANSMIT_CONFIG構造体へのポインター。 このメソッドを呼び出す前に、呼び出し元は構造体を初期化するために SERCX2_SYSTEM_DMA_TRANSMIT_CONFIG_INIT 関数を呼び出す必要があります。 この構造体には、シリアル コントローラー ドライバーによって実装されるイベント コールバック ルーチンのセットへのポインターが含まれています。 SerCx2 は、これらの関数を呼び出して、システム DMA 送信トランザクションを実行します。
[in, optional] Attributes
新しい system-DMA-transmit オブジェクトに割り当てる属性を記述する WDF_OBJECT_ATTRIBUTES構造体への ポインター。 このメソッドを呼び出す前に、呼び出し元は WDF_OBJECT_ATTRIBUTES_INIT 関数を呼び出して構造体を初期化する必要があります。 このパラメーターは省略可能であり、シリアル コントローラー ドライバーがオブジェクトに属性を割り当てる必要がない場合は、WDF_NO_OBJECT_ATTRIBUTESとして指定できます。 詳細については、「解説」を参照してください。
[out] SystemDmaTransmit
このメソッドが新しく作成された system-DMA-transmit オブジェクトに SERCX2SYSTEMDMATRANSMIT ハンドルを書き込む場所へのポインター。 SerCx2 とシリアル コントローラー ドライバーは、このオブジェクトを参照する後続の呼び出しでこのハンドルを使用します。
戻り値
このメソッドは、呼び出しが成功した場合にSTATUS_SUCCESSを返します。 考えられるエラーの戻り値には、次の状態コードが含まれます。
リターン コード | 説明 |
---|---|
|
system-DMA-transmit オブジェクトは、以前の SerCx2SystemDmaTransmitCreate 呼び出しから既に存在します。または、 SerCx2CustomTransmitCreate メソッドの以前の呼び出しからカスタム送信オブジェクトが存在します。または、 SerCx2CustomReceiveCreate メソッドの以前の呼び出しからカスタム受信オブジェクトが存在します。または SerCx2PioTransmitCreate は、PIO-transmit オブジェクトを作成するためにまだ呼び出されていません。 |
|
Config->Size の値が sizeof(SERCX2_SYSTEM_DMA_TRANSMIT_CONFIG) と等しくありません。 |
|
パラメーター値が無効です。 |
|
system-DMA-transmit オブジェクトを作成するために使用できるリソースが不足しています。 |
注釈
シリアル コントローラー ドライバーでは、このメソッドを使用して、システム DMA 送信オブジェクトを作成できます。 SerCx2 では、このオブジェクトを使用してシステム DMA 送信トランザクションを実行します。これは、システム DMA コントローラーを使用して、送信するシリアル コントローラーにデータを書き込むトランザクションです。
通常、シリアル コントローラー ドライバーは、その EvtDevicePrepareHardware コールバック関数から SerCx2SystemDmaTransmitCreate を呼び出します。 この関数は、システム DMA チャネルを含めることができるハードウェア リソースの一覧を受け取ります。
シリアル コントローラー ドライバーは、SerCx2SystemDmaTransmitCreate を呼び出す前に、SerCx2InitializeDevice メソッドと SerCx2PioTransmitCreate メソッドを正常に呼び出す必要があります。
SerCx2SystemDmaTransmitCreate を呼び出す前に、シリアル コントローラー ドライバーは SERCX2_SYSTEM_DMA_TRANSMIT_CONFIG_INIT 関数を呼び出して、SystemDmaTransmitConfig が指すSERCX2_SYSTEM_DMA_TRANSMIT_CONFIG構造体を初期化する必要があります。 この関数は、構造体の次のメンバーを 0 に設定します。
- MaximumScatterGatherFragments
- MinimumTransferUnitOverride
- DmaAlignment
- MinimumTransactionLength
- [排他]
- MaximumScatterGatherFragments が 0 の場合、SerCx2 は散布/収集リスト内の要素の最大数を ((ULONG)-1) に設定します。
- MinimumTransferUnitOverride が 0 の場合、SerCx2 は最小転送単位を既定値に設定します。これは、システム DMA コントローラーのDMA_ADAPTER構造体で指定されます。 この構造体の詳細については、「 WdfDmaEnablerWdmGetDmaAdapter」を参照してください。
- DmaAlignment が 0 の場合、SerCx2 はアラインメント値を最小転送単位に設定します。 MinimumTransferUnitOverride が 0 の場合、既定の最小転送単位が使用されます。
- MinimumTransactionLength が 0 の場合、SerCx2 はトランザクションの最小長を 1 バイトに設定します。
- Exclusive が 0 (FALSE) の場合、排他モードは無効になります。
実装されたコールバック関数の指定された組み合わせが無効な場合、 SerCx2SystemDmaTransmitCreate は失敗し、STATUS_INVALID_PARAMETERを返します。 ドライバーは、 EvtSerCx2SystemDmaTransmitDrainFifo、 EvtSerCx2SystemDmaTransmitCancelDrainFifo、 EvtSerCx2SystemDmaTransmitPurgeFifo 関数のいずれかを実装する必要があります。
オプションとして、シリアル コントローラー ドライバーは Attributes パラメーターを使用して、system-DMA-transmit オブジェクトのコンテキストを作成し、削除のためにオブジェクトを準備するために呼び出される EvtCleanupCallback 関数と EvtDestroyCallback 関数へのポインターを指定できます。 詳細については、「 WDF_OBJECT_ATTRIBUTES」を参照してください。
Attributes パラメーターがWDF_OBJECT_ATTRIBUTES構造体を指している場合、呼び出し元は、WDF_OBJECT_ATTRIBUTES_INIT初期化関数がこの構造体の ParentObject、ExecutionLevel、および SynchronizationScope メンバーに書き込む値を上書きしないでください。
system-DMA-transmit オブジェクトの作成の詳細については、「 SERCX2SYSTEMDMATRANSMIT」を参照してください。 システム DMA 送信トランザクションの詳細については、「 SerCx2 System-DMA-Transmit トランザクション」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8.1以降で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | sercx.h |
IRQL | PASSIVE_LEVEL |
こちらもご覧ください
EvtSerCx2SystemDmaTransmitCancelDrainFifo
EvtSerCx2SystemDmaTransmitCleanupTransaction
EvtSerCx2SystemDmaTransmitDrainFifo
EvtSerCx2SystemDmaTransmitInitializeTransaction
EvtSerCx2SystemDmaTransmitPurgeFifo
SERCX2_SYSTEM_DMA_TRANSMIT_CONFIG