PMAP_TRANSFER Rückruffunktion (wdm.h)
Die MapTransfer Routine richtet Kartenregister für ein Adapterobjekt ein, um eine DMA-Übertragung von einem gesperrten Puffer zuzuordnen.
Syntax
PMAP_TRANSFER PmapTransfer;
PHYSICAL_ADDRESS PmapTransfer(
[in] PDMA_ADAPTER DmaAdapter,
[in] PMDL Mdl,
[in] PVOID MapRegisterBase,
[in] PVOID CurrentVa,
[in, out] PULONG Length,
[in] BOOLEAN WriteToDevice
)
{...}
Parameter
[in] DmaAdapter
Zeiger auf das DMA-Adapterobjekt, das von IoGetDmaAdapter zurückgegeben und zuvor an AllocateAdapterChannel für die Übertragungsanforderung des aktuellen IRP übergeben wurde.
[in] Mdl
Zeigen Sie auf einen der folgenden Elemente: Die MDL, die den Puffer bei MdlAddress im aktuellen IRP oder der MDL beschreibt, der den allgemeinen Puffer beschreibt, der vom Treiber eines untergeordneten Geräts (Automatischer Initialisierungsmodus) eingerichtet wurde.
[in] MapRegisterBase
Gibt die Zuordnungsregister an, die für den DMA-Vorgang zugeordnet sind. Das System übergibt diesen Wert an die AdapterControl Routine des Treibers.
[in] CurrentVa
Zeigen Sie auf die aktuelle virtuelle Adresse der Daten, die für einen DMA-Übertragungsvorgang übertragen werden sollen.
[in, out] Length
Gibt die Länge in Bytes an, die zugeordnet werden soll. Wenn der Treiber angegeben hat, dass sein Gerät ein Busmaster mit Punkt/Erfassungsunterstützung war, wenn es IoGetDmaAdapteraufgerufen hat, gibt der Wert der Length bei der Rückgabe von MapTransfer an, wie viele Bytes zugeordnet wurden. Andernfalls sind die Eingabe- und Ausgabewerte Length identisch.
[in] WriteToDevice
Gibt die Richtung des Übertragungsvorgangs an: TRUE für eine Übertragung vom gesperrten Puffer zum Gerät.
Rückgabewert
MapTransfer- gibt die logische Adresse der zugeordneten Region zurück, die der Treiber eines Busmasteradapters verwenden kann. Treiber von Geräten, die einen System-DMA-Controller verwenden, können diesen Wert nicht verwenden und sollten ihn ignorieren.
Bemerkungen
MapTransfer ist keine Systemroutine, die direkt nach Namen aufgerufen werden kann. Diese Routine kann nur durch Zeiger von der in einer DMA_OPERATIONS Strukturzurückgegebenen Adresse aufgerufen werden. Treiber rufen die Adresse dieser Routine ab, indem sie IoGetDmaAdapteraufruft.
Die DmaAdapter- muss bereits aufgrund des vorherigen Aufrufs des Treibers an AllocateAdapterChannelzugewiesen worden sein.
Die Anzahl der Kartenregister, die eingerichtet werden können, darf die maximale Rückgabe nicht überschreiten, wenn der Treiber IoGetDmaAdapteraufgerufen wird.
Ein Treiber kann die anfängliche CurrentVa- für den Start einer paketbasierten DMA-Übertragung abrufen, indem MmGetMdlVirtualAddressaufgerufen wird. Der zurückgegebene Wert ist jedoch ein Index in der Mdlanstelle einer gültigen virtuellen Adresse. Wenn der Treiber eine große Übertragungsanforderung in mehrere DMA-Vorgänge aufteilen muss, muss er CurrentVa- und Length- für jeden DMA-Vorgang aktualisieren.
Der Treiber eines Busmastergeräts mit XY/Gather-Unterstützung kann die zurückgegebene logische Adresse verwenden und Length Wert aktualisiert werden, um eine Punkt-/Sammelliste zu erstellen, wobei Map Transfer wiederholt aufgerufen wird, bis alle verfügbaren Kartenregister für den Übertragungsvorgang verwendet wurden. Ein solcher Treiber könnte jedoch einfacher die GetScatterGatherList Routine verwenden.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Ab Windows 2000 verfügbar. |
Zielplattform- | Desktop |
Header- | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL- | <= DISPATCH_LEVEL |
DDI-Complianceregeln | IrqlDispatch(wdm) |