DMA 작업 인터페이스 버전 3

DMA 작업 인터페이스 버전 3은 Windows 8 시작해서 사용할 수 있습니다. 이 인터페이스의 DMA_OPERATIONS 구조에는 이 인터페이스의 이전 버전에서 정의되지 않은 여러 새 루틴이 포함되어 있습니다. 버전 3의 루틴 목록은 DMA_OPERATIONS 참조하세요.

DMA 운영 인터페이스 버전 3은 모든 Windows 하드웨어 플랫폼에서 사용할 수 있지만, 이 인터페이스에는 커널 모드 드라이버가 SoC(System on a Chip) 통합 회로에서 시스템 DMA 컨트롤러의 고급 기능을 사용할 수 있도록 하는 많은 기능이 있습니다. 이러한 기능에는 일반적으로 분산/수집 DMA 전송을 수행하는 기능이 포함됩니다. 반면, 이전 버전의 DMA 작업 인터페이스는 버스 master 디바이스로의 분산/수집 DMA 전송을 제한합니다. 버전 3 인터페이스는 분산/수집 목록의 관리를 간소화하고 복잡한 DMA 전송 중에 드라이버 개입의 필요성을 줄입니다.

DMA 작업 인터페이스 버전 3을 사용하여 DMA 전송을 수행하기 위해 드라이버는 일반적으로 다음 루틴을 호출합니다.

IoGetDmaAdapter
DMA 어댑터 개체를 할당하고 DMA 작업 인터페이스를 포함하는 DMA_ADAPTER 구조체에 대한 포인터를 반환합니다.

GetDmaTransferInfo
호출자가 설명하는 DMA 전송을 수행하는 데 필요한 리소스에 대한 설명을 제공합니다.

AllocateAdapterChannelEx
DMA 전송에 필요한 리소스를 할당하고 이러한 리소스를 DMA 어댑터 개체에 할당합니다.

MapTransferEx
DMA 전송을 위해 맵 레지스터 및 분산/수집 버퍼를 초기화하고 전송을 시작합니다.

FlushAdapterBuffersEx
DMA 전송이 끝날 때 필요할 수 있는 캐시 작업을 수행합니다.

FreeAdapterChannel
DMA 채널 및 지도 레지스터를 해제합니다.

PutDmaAdapter
어댑터 개체를 해제합니다.

이러한 루틴은 전용 DMA 컨트롤러를 사용하는 버스 master 디바이스와 시스템 DMA 컨트롤러를 공유하는 하위 디바이스 모두에 사용됩니다. 드라이버가 일반적인 DMA 전송 중에 수행하는 호출에 대한 단계별 설명은 버전 3 DMA 루틴에 대한 기본 호출 패턴을 참조하세요.

참고 DMA 작업 인터페이스 버전 3에서 KeFlushIoBuffers 루틴에 대한 호출은 DMA 전송 전후에 필요하지 않습니다. 그 이유는 다음 루틴이 하드웨어에서 캐시 일관성을 적용하지 않는 플랫폼에서 데이터 캐시를 플러시해야 하는 필요성을 다루기 때문입니다.

  • MapTransferEx 는 쓰기(메모리-디바이스) 전송 전에 프로세서 데이터 캐시가 플러시되도록 합니다.
  • FlushAdapterBuffersEx 는 읽기(디바이스-메모리) 전송 후 캐시가 무효화되도록 합니다.

x86 또는 x64 프로세서에서 KeFlushIoBuffers 호출은 작업을 수행하지 않으며 이 호출은 불필요하지만 하드웨어 플랫폼의 작동을 방해하지 않습니다. Arm 프로세서에서 DMA 전송 중에 KeFlushIoBuffers 에 대한 호출은 불필요하고 성능을 저하시킬 수 있는 캐시 작업을 수행합니다.