Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Version 3 der DMA-Betriebsschnittstelle ist ab Windows 8 verfügbar. Die DMA_OPERATIONS-Struktur für diese Schnittstelle enthält eine Reihe neuer Routinen, die in früheren Versionen dieser Schnittstelle nicht definiert sind. Eine Liste der Routinen in Version 3 finden Sie unter DMA_OPERATIONS.
Obwohl Version 3 der DMA-Betriebsschnittstelle auf allen Windows-Hardwareplattformen verfügbar ist, verfügt diese Schnittstelle über viele Funktionen, mit denen Kernelmodustreiber die erweiterten Funktionen von System-DMA-Controllern in integrierten SoC-Leitungen (System on a Chip) nutzen können. Zu diesen Funktionen gehört in der Regel die Möglichkeit, DMA-Übertragungen zu punktieren/zu sammeln. Im Gegensatz dazu beschränken frühere Versionen der DMA-Betriebsschnittstelle die Scatter/Gather-DMA-Übertragungen auf Bus-master-Geräte. Die Version-3-Schnittstelle vereinfacht die Verwaltung von Scatter/Gather-Listen und reduziert den Bedarf an Treibereingriffen bei komplexen DMA-Übertragungen.
Um Version 3 der DMA-Betriebsschnittstelle zum Ausführen einer DMA-Übertragung zu verwenden, ruft ein Treiber in der Regel die folgenden Routinen auf:
IoGetDmaAdapter
Weist ein DMA-Adapterobjekt zu und gibt einen Zeiger auf eine DMA_ADAPTER-Struktur zurück, die die DMA-Betriebsschnittstelle enthält.
GetDmaTransferInfo
Enthält eine Beschreibung der Ressourcen, die zum Ausführen der vom Aufrufer beschriebenen DMA-Übertragung erforderlich sind.
AllocateAdapterChannelEx
Weist die für die DMA-Übertragung erforderlichen Ressourcen zu und weist diese Ressourcen dem DMA-Adapterobjekt zu.
MapTransferEx
Initialisiert die Kartenregister und den Scatter/Gather-Puffer für die DMA-Übertragung und startet die Übertragung.
FlushAdapterBuffersEx
Führt alle Cachevorgänge aus, die möglicherweise am Ende der DMA-Übertragung erforderlich sind.
FreeAdapterChannel
Gibt den DMA-Kanal und die Kartenregister frei.
PutDmaAdapter
Gibt das Adapterobjekt frei.
Diese Routinen werden sowohl für Bus-master-Geräte verwendet, die dedizierte DMA-Controller verwenden, als auch für untergeordnete Geräte, die einen System-DMA-Controller verwenden. Eine schrittweise Beschreibung der Aufrufe, die ein Treiber während einer typischen DMA-Übertragung durchführt, finden Sie unter Grundlegendes Anrufmuster für DMA-Routinen der Version-3.
Hinweis In Version 3 der DMA-Betriebsschnittstelle sind Aufrufe der KeFlushIoBuffers-Routine weder vor noch nach DMA-Übertragungen erforderlich. Der Grund ist, dass die folgenden Routinen die Notwendigkeit des Leerens von Datencaches auf Plattformen abdecken, die die Cachekohärenz in der Hardware nicht erzwingen:
- MapTransferEx stellt sicher, dass Prozessordatencaches vor der Übertragung von Schreibvorgängen (Speicher zu Gerät) geleert werden.
- FlushAdapterBuffersEx stellt sicher, dass Caches nach der Übertragung von Lesevorgängen (Device-to-Memory) ungültig werden.
Auf einem x86- oder x64-Prozessor führt der KeFlushIoBuffers-Aufruf keine Vorgänge aus, und dieser Aufruf ist zwar unnötig, beeinträchtigt aber nicht den Betrieb der Hardwareplattform. Auf einem Arm-Prozessor führen Aufrufe von KeFlushIoBuffers während DMA-Übertragungen Cachevorgänge aus, die unnötig sind und die Leistung beeinträchtigen können.