Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wersja 3 interfejsu operacji DMA jest dostępna od systemu 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.
Mimo że wersja 3 interfejsu operacji DMA jest dostępna na wszystkich platformach sprzętowych systemu Windows, ten interfejs ma wiele funkcji, aby umożliwić sterownikom trybu jądra korzystanie z zaawansowanych funkcji kontrolerów DMA systemu w systemie na układach układowych (SoC). Te możliwości zwykle obejmują możliwość wykonywania transferów punktowych/zbierania dma. Z kolei poprzednie wersje interfejsu operacji DMA ograniczają rozpraszanie/zbieranie transferów DMA do urządzeń magistrali master. Interfejs version-3 upraszcza zarządzanie listami punktowymi/zbieranymi i zmniejsza potrzebę interwencji kierowcy podczas złożonych transferów DMA.
Aby użyć wersji 3 interfejsu operacji DMA do wykonania transferu DMA, sterownik zwykle wywołuje następujące procedury:
IoGetDmaAdapter
Allocates a DMA adapter object and returns a pointer to a DMA_ADAPTER structure that contains the DMA operations interface.
GetDmaTransferInfo
Zawiera opis zasobów wymaganych do wykonania transferu DMA opisanego przez obiekt wywołujący.
AllocateAdapterChannelEx
Przydziela zasoby wymagane do transferu DMA i przypisuje te zasoby do obiektu karty DMA.
MapTransferEx
Inicjuje rejestry mapy i bufor punktowy/zbieraj dla transferu DMA i uruchamia transfer.
FlushAdapterBuffersEx
Wykonuje wszelkie operacje pamięci podręcznej, które mogą być wymagane na końcu transferu DMA.
FreeAdapterChannel
Zwalnia kanał DMA i rejestruje mapy.
PutDmaAdapter
Zwalnia obiekt adaptera.
Te procedury są używane zarówno w przypadku urządzeń magistrali master, które używają dedykowanych kontrolerów DMA, jak i dla urządzeń podrzędnych, które współużytkują systemowy kontroler DMA. Aby uzyskać szczegółowy opis wywołań, które sterownik wykonuje podczas typowego transferu DMA, zobacz Podstawowy wzorzec wywoływania dla procedur DMA w wersji 3.
Note In version 3 of the DMA operations interface, calls to the KeFlushIoBuffers routine are not required either before or after DMA transfers. Powodem jest to, że następujące procedury obejmują potrzebę opróżniania pamięci podręcznych danych na platformach, które nie wymuszają współistnienia pamięci podręcznej na sprzęcie:
- 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.