PALLOCATE_DMA_BUFFER Rückruffunktion (hdaudio.h)
Die AllocateDmaBuffer
Routine weist einen Datenpuffer im Systemspeicher für ein DMA-Modul zu.
Der Funktionszeigertyp für eine AllocateDmaBuffer
Routine wird wie folgt definiert.
Syntax
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
)
{...}
Parameter
[in] _context
Gibt den Kontextwert aus den Context- Membern der HDAUDIO_BUS_INTERFACE- und HDAUDIO_BUS_INTERFACE_V2-Strukturen an.
[in] Handle
Behandeln Sie die Identifizierung des DMA-Moduls. Dieser Handlewert wurde aus einem vorherigen Aufruf von AllocateCaptureDmaEngine oder AllocateRenderDmaEngineabgerufen.
[in] RequestedBufferSize
Gibt die angeforderte Puffergröße in Byte an.
[out] BufferMdl
Ruft die physischen Speicherseiten ab, die den zugeordneten Puffer enthalten. Dieser Parameter verweist auf eine vom Aufrufer zugewiesene PMDL-Variable, in die die Routine einen Zeiger auf eine Speicherdeskriptorliste (MDL) schreibt, die den Puffer beschreibt.
[out] AllocatedBufferSize
Ruft die zugeordnete Puffergröße in Bytes ab. Dieser Parameter verweist auf eine vom Aufrufer zugewiesene SIZE_T Variable, in die die Routine die Größe des zugeordneten Puffers schreibt.
[out] StreamId
Ruft den Datenstrombezeichner ab. Dieser Parameter verweist auf eine vom Aufrufer zugewiesene UCHAR-Variable, in die die Routine den Datenstrombezeichner schreibt, den er dem Datenstrom zuweist.
[out] FifoSize
Ruft die FIFO-Größe des DMA-Moduls in Byte ab. Dieser Parameter verweist auf eine vom Aufrufer zugewiesene ULONG-Variable, in die die FIFO-Größe von der Routine geschrieben wird.
Rückgabewert
AllocateDmaBuffer
gibt STATUS_SUCCESS zurück, wenn der Aufruf erfolgreich ist. Andernfalls gibt die Routine einen geeigneten Fehlercode zurück. In der folgenden Tabelle sind einige der möglichen Rückgabestatuscodes aufgeführt.
Rückgabecode | Beschreibung |
---|---|
|
Gibt an, dass der Aufrufer bei einer IRQL ausgeführt wird, die zu hoch ist. |
|
Gibt an, dass die Pufferzuweisung fehlgeschlagen ist. |
|
Gibt an, dass der Handle-Parameterwert ungültig ist. |
|
Gibt an, dass einer der Parameterwerte falsch ist (ungültiger Zeiger). |
|
Gibt an, dass das Zeitlimit für die Hardwareprogrammierung eingestellt ist. Wenn dies geschieht, befindet sich die Hardware möglicherweise in einem kompromittierten Zustand. |
|
Gibt an, dass sich der Datenstrom nicht im Zurücksetzungszustand befindet oder dass bereits ein Puffer für das DMA-Modul zugeordnet ist. |
Bemerkungen
Die AllocateDmaBuffer
Routine wird in Verbindung mit der FreeDmaBuffer Routine verwendet. Diese beiden Routinen sind nur in den HDAUDIO_BUS_INTERFACE und den HDAUDIO_BUS_INTERFACE_V2 Versionen des HD Audio DDI verfügbar. Dieser DDI enthält nicht die AllocateContiguousDmaBuffer, SetupDmaEngineWithBdlund FreeContiguousDmaBuffer Routinen, die nie in Verbindung mit AllocateDmaBuffer
und FreeDmaBufferverwendet werden. Im Gegensatz zu SetupDmaEngineWithBdl, das das DMA-Modul so konfiguriert, dass ein zuvor zugewiesener DMA-Puffer verwendet wird, AllocateDmaBuffer
beide einen DMA-Puffer zuweisen und das DMA-Modul so konfiguriert, dass der Puffer verwendet wird.
Wenn das DMA-Modul keinen Puffer der im Parameter angeforderten Größe requestedBufferSizeverwenden kann, weist die Routine einen Puffer zu, der der angeforderten Größe so nah wie möglich ist.
Der Funktionstreiber für einen Audio- oder Modemcodec ist für die Programmierung des Codecs für die Verwaltung der Datenübertragungen und für die Erkennung des Datenstrombezeichners verantwortlich.
Die Routine gibt eine MDL aus, die die physischen Speicherseiten auflistet, die den Puffer enthalten. Die Pufferbasisadresse stimmt mit dem Anfang der ersten physischen Seite in der Liste überein.
Während der Lebensdauer eines DMA-Modulhandles können AllocateDmaBuffer
nacheinander aufgerufen werden, um neue DMA-Puffer zuzuweisen. Bevor Sie jedoch AllocateDmaBuffer
aufrufen, müssen alle zuvor zugewiesenen DMA-Puffer zuerst durch Aufrufen FreeDmaBuffer-freigegeben werden.
Bei Aufrufen von AllocateDmaBuffer
und FreeDmaBuffer-muss sich das DMA-Modul im Zustand "Stream zurücksetzen" befinden. Das DMA-Modul befindet sich unmittelbar nach dem Aufruf zum ZuweisenXxxDmaEngine im Zustand "Zurücksetzen". Um das DMA-Modul in den Ausführungszustand zu ändern, rufen Sie SetDmaEngineStateauf.
Die FIFO-Größe ist die maximale Anzahl von Bytes, die das DMA-Modul im internen Puffer enthalten kann. Je nach Hardwareimplementierung kann die FIFO-Größe eines DMA-Moduls statisch sein oder dynamisch mit Änderungen im Datenstromformat variieren. Weitere Informationen zur FIFO-Größe finden Sie in der Intel High Definition Audio Specification auf der Website Intel HD Audio.
Diese Routine schlägt fehl und gibt fehlercode STATUS_INVALID_DEVICE_REQUEST in einem der folgenden Situationen zurück:
- Alle zuvor zugewiesenen DMA-Puffer wurden nicht freigegeben (durch Aufrufen von FreeDmaBuffer).
- Der Datenstrom befindet sich in einem anderen Zustand als "Zurücksetzen".
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Desktop |
Header- | hdaudio.h (einschließlich Hdaudio.h) |
IRQL- | PASSIVE_LEVEL |