PALLOCATE_DMA_BUFFER_WITH_NOTIFICATION Rückruffunktion (hdaudio.h)
Die AllocateDmaBufferWithNotification
Routine weist einen Datenpuffer im Systemspeicher für ein DMA-Modul zu.
Der Funktionszeigertyp für eine AllocateDmaBufferWithNotification
Routine wird wie folgt definiert.
Syntax
PALLOCATE_DMA_BUFFER_WITH_NOTIFICATION PallocateDmaBufferWithNotification;
NTSTATUS PallocateDmaBufferWithNotification(
[in] PVOID _context,
[in] HANDLE Handle,
[in] ULONG NotificationCount,
[in] SIZE_T RequestedBufferSize,
[out] PMDL *BufferMdl,
[out] PSIZE_T AllocatedBufferSize,
PSIZE_T OffsetFromFirstPage,
[out] PUCHAR StreamId,
[out] PULONG FifoSize
)
{...}
Parameter
[in] _context
Gibt den Kontextwert aus dem Context-Element der HDAUDIO_BUS_INTERFACE_V2-Struktur an.
[in] Handle
Ein Handle, das das DMA-Modul identifiziert. Dieser Handlewert wurde aus einem vorherigen Aufruf von AllocateCaptureDmaEngine oder AllocateRenderDmaEngineabgerufen.
[in] NotificationCount
Gibt die Anzahl der benötigten Benachrichtigungen basierend auf der DMA-Entwicklung durch den Audiopuffer an. Derzeit wird ein Wert von 1 oder 2 unterstützt. Wenn der Wert 1 ist, werden alle registrierten Benachrichtigungsereignisse jedes Mal signalisiert, wenn der zyklische Audiopuffer abgeschlossen ist, und DMA wird wieder an den Anfang umgebrochen. Wenn der Wert 2 ist, werden alle registrierten Benachrichtigungsereignisse benachrichtigt, da DMA den Mittelpunkt des Audiopuffers sowie am Ende (oder den Umbruchpunkt) übergibt.
[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 Variable, die einen Zeiger auf eine Speicherdeskriptorliste (PMDL) darstellt. Diese Routine schreibt einen Zeiger, der den Speicherdeskriptorlistenpuffer in die PMDL-Variable 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.
OffsetFromFirstPage
[out] StreamId
Ruft den Datenstrombezeichner ab. Dieser Parameter verweist auf eine vom Aufrufer zugewiesene UCHAR-Variable, in die die Routine den Datenstrombezeichner schreibt, den die Routine dem Datenstrom zuweist.
[out] FifoSize
Ruft die FIFO-Größe des DMA-Moduls in Bytes ab. Dieser Parameter verweist auf eine vom Aufrufer zugewiesene ULONG-Variable, in die die FIFO-Größe von der Routine geschrieben wird.
Rückgabewert
Die AllocateDmaBufferWithNotification
Routine 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ückgabefehlercodes 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 und noch nicht freigegeben wurde. |
Bemerkungen
Die AllocateDmaBufferWithNotification
Routine wird zusammen mit der FreeDmaBufferWithNotification Routine verwendet. Diese beiden Routinen sind nur in der HDAUDIO_BUS_INTERFACE_V2 Version des HD Audio DDI verfügbar. Im Gegensatz zu SetupDmaEngineWithBdl, das das DMA-Modul für die Verwendung eines zuvor zugewiesenen DMA-Puffers konfiguriert, weist AllocateDmaBufferWithNotification
einen DMA-Puffer zu und konfiguriert außerdem das DMA-Modul für die Verwendung des Puffers.
Wenn das DMA-Modul keinen Puffer der Größe verwenden kann, die im Parameter angefordert wird, requestedBufferSize, 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.
AllocateDmaBufferWithNotification
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 AllocateDmaBufferWithNotification
nacheinander aufgerufen werden, um neue DMA-Puffer zuzuweisen. Vor dem Aufrufen von AllocateDmaBufferWithNotification
müssen jedoch alle zuvor zugeordneten DMA-Puffer zuerst durch Aufrufen von FreeDmaBufferWithNotification freigegeben werden.
Bei Aufrufen von AllocateDmaBufferWithNotification
und FreeDmaBufferWithNotificationmuss sich das DMA-Modul im Zustand "Datenstrom zurücksetzen" befinden. Das DMA-Modul befindet sich unmittelbar nach dem Aufruf von AllocateCaptureDmaEngine oder AllocateRenderDmaEngineim Zustand "Datenstrom 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.
In Windows Vista und höheren Versionen von Windows ruft ein WaveRT-Miniporttreiber diese Routine auf, wenn er die KSPROPERTY_RTAUDIO_BUFFER_WITH_NOTIFICATION Eigenschaftsanforderung empfängt.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Verfügbar in Windows Vista und höheren Versionen von Windows. |
Zielplattform- | Desktop |
Header- | hdaudio.h (einschließlich Hdaudio.h) |
IRQL- | PASSIVE_LEVEL. |