VideoPortStartDma-Funktion (video.h)

Die VideoPortStartDma-Funktion bereitet das System auf einen DMA-Vorgang vor. Sobald die entsprechende Ressource verfügbar ist, erstellt VideoPortStartDma eine Scatter/Gather-Liste, initialisiert die Systemressourcen und ruft die vom Video-Miniporttreiber bereitgestellte HwVidExecuteDma-Routine auf, um den DMA-Vorgang auszuführen.

Syntax

VIDEOPORT_DEPRECATED VIDEOPORT_API VP_STATUS VideoPortStartDma(
  [in]      IN PVOID           HwDeviceExtension,
  [in]      IN PVP_DMA_ADAPTER VpDmaAdapter,
  [in]      IN PVOID           Mdl,
  [in]      IN ULONG           Offset,
  [in, out] IN OUT PULONG      pLength,
  [in]      IN PEXECUTE_DMA    ExecuteDmaRoutine,
  [in]      IN PVOID           Context,
  [in]      IN BOOLEAN         WriteToDevice
);

Parameter

[in] HwDeviceExtension

Zeiger auf die Geräteerweiterung des Miniporttreibers.

[in] VpDmaAdapter

Zeiger auf die VP_DMA_ADAPTER-Struktur, die den Bus-master-Adapter darstellt. Diese Struktur wird von einem Aufruf von VideoPortGetDmaAdapter zurückgegeben.

[in] Mdl

Zeiger auf die MDL , die den Puffer beschreibt. Dieser Zeiger wird von einem Aufruf der VideoPortLockBuffer-Funktion des VideoPort-Treibers zurückgegeben.

[in] Offset

Gibt den Byteoffset im Puffer an, an dem der DMA-Vorgang beginnt. Der Mdl-Parameter beschreibt diesen Puffer.

[in, out] pLength

Zeiger auf eine Variable, die die angeforderte Übertragungsgröße in Byte angibt und die tatsächlich zu übertragende Größe empfängt. Die Variable wird aktualisiert, wenn eines der folgenden Ereignisse auftritt: VideoPortStartDma gibt zurück, oder HwVidExecuteDma wird aufgerufen. Daher ist es sicher, diese Variable innerhalb von HwVidExecuteDma zu lesen, noch bevor VideoPortStartDma zurückgegeben wird.

[in] ExecuteDmaRoutine

Zeiger auf eine vom Miniporttreiber bereitgestellte HwVidExecuteDma-Rückrufroutine . VideoPortStartDma ruft diese Routine auf, um die Hardwareregister zu programmieren und den eigentlichen DMA-Vorgang zu starten.

[in] Context

Zeiger auf den vom Treiber bestimmten Kontext, der an die HwVidExecuteDma-Rückrufroutine des Miniporttreibers übergeben werden soll. Da die HwVidExecuteDma-Rückrufroutine bei DISPATCH_LEVEL ausgeführt wird, sollten sich die Daten, auf die Context verweist, im Nicht-Auslagerspeicher befinden.

[in] WriteToDevice

Gibt die Richtung der DMA-Übertragung an. Der Wert TRUE gibt eine Übertragung vom Puffer zum Gerät an, und der Wert FALSE gibt eine Übertragung vom Gerät zum Puffer an.

Rückgabewert

VideoPortStartDma gibt einen der folgenden status-Codes zurück:

Rückgabecode Beschreibung
NO_ERROR Der Vorgang wurde erfolgreich ausgeführt.
ERROR_NOT_ENOUGH_MEMORY Es gibt nicht genügend Systemressourcen für diesen Vorgang.

Hinweise

Um einen DMA-Übertragungsvorgang vorzubereiten, VideoPortStartDma:

  • Leert den Arbeitsspeicherbereich in den Caches des Hostprozessors.
  • Erstellt eine Punkt-/Gather-Liste.
  • Ruft den HwVidExecuteDma-Rückruf des Video-Miniporttreibers auf.
Es ist möglich, dass nicht alle angeforderten Daten übertragen wurden, da die tatsächlich übertragene Speichermenge durch die Anzahl der dem Fahrer zur Verfügung stehenden Kartenregister begrenzt ist. Aufrufer dieser Funktion sollten die tatsächliche Übertragungsgröße überprüfen, die bei pLength zurückgegeben wird, um festzustellen, ob weitere Daten noch übertragen werden müssen. Wenn ja, sollte der Miniporttreiber VideoPortStartDma (und anschließend VideoPortCompleteDma) so oft wie nötig aufrufen, um die gesamte Übertragungsanforderung zu erfüllen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar in Windows XP und höheren Versionen der Windows-Betriebssysteme.
Zielplattform Desktop
Kopfzeile video.h (Video.h einschließen)
Bibliothek Videoprt.lib
DLL Videoprt.sys
IRQL <=DISPATCH_LEVEL

Weitere Informationen

HwVidExecuteDma

VP_DMA_ADAPTER

VideoPortCompleteDma

VideoPortGetDmaAdapter