PALLOCATE_DMA_BUFFER コールバック関数 (hdaudio.h)
このルーチンは AllocateDmaBuffer
、DMA エンジンのシステム メモリにデータ バッファーを割り当てます。
ルーチンの関数ポインター型 AllocateDmaBuffer
は、次のように定義されます。
構文
PALLOCATE_DMA_BUFFER PallocateDmaBuffer;
NTSTATUS PallocateDmaBuffer(
[in] PVOID _context,
[in] HANDLE Handle,
[in] SIZE_T RequestedBufferSize,
[out] PMDL *BufferMdl,
[out] PSIZE_T AllocatedBufferSize,
[out] PUCHAR StreamId,
[out] PULONG FifoSize
)
{...}
パラメーター
[in] _context
HDAUDIO_BUS_INTERFACEおよびHDAUDIO_BUS_INTERFACE_V2構造体の Context メンバーからのコンテキスト値を指定します。
[in] Handle
DMA エンジンを識別するハンドル。 このハンドル値は、 AllocateCaptureDmaEngine または AllocateRenderDmaEngine の以前の呼び出しから取得されました。
[in] RequestedBufferSize
要求されたバッファー サイズをバイト単位で指定します。
[out] BufferMdl
割り当てられたバッファーを含む物理メモリ ページを取得します。 このパラメーターは、呼び出し元によって割り当てられた PMDL 変数を指します。この変数は、バッファーを記述するメモリ記述子リスト (MDL) へのポインターをルーチンが書き込みます。
[out] AllocatedBufferSize
割り当てられたバッファー サイズをバイト単位で取得します。 このパラメーターは、ルーチンが割り当てられたバッファーのサイズを書き込む呼び出し元割り当てSIZE_T変数を指します。
[out] StreamId
ストリーム識別子を取得します。 このパラメーターは、ルーチンがストリームに割り当てるストリーム識別子を書き込む呼び出し元によって割り当てられた UCHAR 変数を指します。
[out] FifoSize
DMA エンジンの FIFO サイズをバイト単位で取得します。 このパラメーターは、ルーチンが FIFO サイズを書き込む呼び出し元割り当て ULONG 変数を指します。
戻り値
AllocateDmaBuffer
は、呼び出しが成功した場合は STATUS_SUCCESS を返します。 それ以外の場合、ルーチンは適切なエラー コードを返します。 次の表は、可能な戻り状態コードの一部を示しています。
リターン コード | 説明 |
---|---|
|
呼び出し元が高すぎる IRQL で実行されていることを示します。 |
|
バッファー割り当てが失敗したことを示します。 |
|
ハンドル パラメーターの値が無効であることを示します。 |
|
パラメーター値の 1 つが正しくない (不適切なポインター) ことを示します。 |
|
ハードウェア プログラミングがタイムアウトしたことを示します。これが発生した場合、ハードウェアが侵害された状態になっている可能性があります。 |
|
ストリームがリセット状態ではないこと、または DMA エンジンにバッファーが既に割り当てられていることを示します。 |
注釈
この AllocateDmaBuffer
ルーチンは、 FreeDmaBuffer ルーチンと組み合わせて使用されます。 これら 2 つのルーチンは、HD Audio DDI のHDAUDIO_BUS_INTERFACEとHDAUDIO_BUS_INTERFACE_V2 バージョンでのみ使用できます。 この DDI には、AllocateContiguousDmaBuffer、SetupDmaEngineWithBdl、FreeContiguousDmaBuffer ルーチンは含まれません。これは、 および FreeDmaBuffer とAllocateDmaBuffer
組み合わせて使用されることはありません。 以前に割り当てられた DMA バッファーを使用するように DMA エンジンを構成する SetupDmaEngineWithBdl とは異なり、 AllocateDmaBuffer
両方とも DMA バッファーを割り当て、バッファーを使用するように DMA エンジンを構成します。
パラメーター requestedBufferSize で要求されたサイズのバッファーを DMA エンジンが使用できない場合、ルーチンは、要求されたサイズにできるだけ近いバッファーを割り当てます。
オーディオまたはモデム コーデックのファンクション ドライバーは、データ転送を管理し、ストリーム識別子を認識するためにコーデックをプログラミングする役割を担います。
ルーチンは、バッファーを含む物理メモリ ページを一覧表示する MDL を出力します。 バッファーベースアドレスは、リスト内の最初の物理ページの先頭と一致します。
DMA エンジン ハンドルの有効期間中は、 を連続して呼び出して、 AllocateDmaBuffer
新しい DMA バッファーを割り当てることができます。 ただし、 を呼び出す AllocateDmaBuffer
前に、以前に割り当てられた DMA バッファーを FreeDmaBuffer を呼び出して解放する必要があります。
および FreeDmaBuffer のAllocateDmaBuffer
呼び出し中に、DMA エンジンはリセット ストリーム状態である必要があります。 DMA エンジンは、XxxDmaEngine の割り当て呼び出しの直後にリセット状態になります。 DMA エンジンを実行状態に変更するには、 SetDmaEngineState を呼び出します。
FIFO サイズは、DMA エンジンが内部バッファーに保持できる最大バイト数です。 ハードウェアの実装に応じて、DMA エンジンの FIFO サイズは静的であるか、ストリーム形式の変更に応じて動的に変化する可能性があります。 FIFO サイズの詳細については、Intel HD Audio Web サイトの Intel High Definition Audio Specification を参照してください。
このルーチンは失敗し、次のいずれかの状況でSTATUS_INVALID_DEVICE_REQUESTエラー コードを返します。
- 以前に割り当てられた DMA バッファーが解放されていません ( FreeDmaBuffer を呼び出すことによって)。
- ストリームがリセット以外の状態です。
要件
要件 | 値 |
---|---|
対象プラットフォーム | デスクトップ |
Header | hdaudio.h (Hdaudio.h を含む) |
IRQL | PASSIVE_LEVEL |