Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Verze 3 operačního rozhraní DMA je k dispozici od systému Windows 8. The DMA_OPERATIONS structure for this interface contains a number of new routines that are not defined in previous versions of this interface. For a list of the routines in version 3, see DMA_OPERATIONS.
I když je operační rozhraní DMA verze 3 dostupné na všech hardwarových platformách Windows, má toto rozhraní mnoho funkcí, které umožňují ovladačům v režimu jádra používat pokročilé funkce řadičů DMA v systému v integrovaných obvodech Chip (SoC). Mezi tyto funkce obvykle patří možnost provádět bodové a shromažďovat přenosy DMA. Naproti tomu předchozí verze operačního rozhraní DMA omezují přenosy DMA do hlavních sběrnicových zařízení. Rozhraní verze 3 zjednodušuje správu seznamů bodového/shromažďování a snižuje potřebu zásahu ovladače během složitých přenosů DMA.
Pokud chcete k provedení přenosu DMA použít verzi 3 operačního rozhraní DMA, ovladač obvykle volá následující rutiny:
IoGetDmaAdapter
Allocates a DMA adapter object and returns a pointer to a DMA_ADAPTER structure that contains the DMA operations interface.
GetDmaTransferInfo
Obsahuje popis prostředků potřebných k provedení přenosu DMA, který je popsán volajícím.
AllocateAdapterChannelEx
Přidělí prostředky potřebné pro přenos DMA a přiřadí tyto prostředky k objektu adaptéru DMA.
MapTransferEx
Inicializuje mapový registr a bodový/shromážděný vyrovnávací paměť pro přenos DMA a spustí přenos.
FlushAdapterBuffersEx
Provádí všechny operace mezipaměti, které mohou být vyžadovány na konci přenosu DMA.
FreeAdapterChannel
Uvolní kanál DMA a registru map.
PutDmaAdapter
Uvolní objekt adaptéru.
Tyto rutiny se používají jak pro zařízení hlavní sběrnice, která používají vyhrazené řadiče DMA, tak pro podřízená zařízení, která sdílejí systémový řadič DMA. Podrobný popis volání, která ovladač provádí během typického přenosu DMA, najdete v tématu Základní model volání pro rutiny DMA verze 3.
Note In version 3 of the DMA operations interface, calls to the KeFlushIoBuffers routine are not required either before or after DMA transfers. Důvodem je, že následující rutiny pokrývají potřebu vyprázdnění mezipaměti dat na platformách, které nevynucují koherenci mezipaměti v hardwaru:
- MapTransferEx ensures that processor data caches are flushed before write (memory-to-device) transfers.
- FlushAdapterBuffersEx ensures that caches are invalidated after read (device-to-memory) transfers.
On an x86 or x64 processor, the KeFlushIoBuffers call performs no operations, and this call, while unnecessary, does not interfere with the operation of the hardware platform. On an Arm processor, calls to KeFlushIoBuffers during DMA transfers perform cache operations that are unnecessary and can degrade performance.