Share via


Bus-Master DMA 디바이스에 대한 KMDF 드라이버에서 I/O 요청 처리

[KMDF에만 적용]

이 섹션의 이 topics 버스 master DMA 디바이스의 KMDF 드라이버가 I/O 요청을 처리하는 방법을 설명합니다. 시스템 모드 DMA를 구현하는 KMDF 드라이버를 작성하는 경우 System-Mode DMA 지원을 참조하세요.

버스 master DMA 디바이스에 대한 KMDF 드라이버의 I/O 요청을 처리하려면 다음 그림과 같이 드라이버의 이벤트 콜백 함수 중 몇 가지에 코드가 필요합니다.

KMDF 드라이버의 DMA 구현 프로세스를 보여 주는 순서도입니다.

위에서 설명한 것처럼 DMA 관련 처리는 다음 네 단계로 이루어집니다.

  1. 드라이버의 EvtDriverDeviceAdd 또는 EvtDevicePrepareHardware 콜백 함수는 드라이버가 프레임워크의 DMA 기능을 사용할 수 있도록 디바이스에 대한 DMA 트랜잭션을 사용하도록 설정 해야 합니다. 디바이스와 드라이버에서 공유 메모리 버퍼에 액세스해야 하는 경우에도 동일한 콜백 함수가 공통 버퍼를 만들어야 합니다.

  2. 드라이버가 디바이스에서 DMA 작업을 수행해야 하는 I/O 요청을 받으면 드라이버의 요청 처리기 중 하나가 새 DMA 트랜잭션을 만들고 초기화해야 합니다. (드라이버가 DMA 트랜잭션 개체를 다시 사용하는 경우 드라이버의 EvtDriverDeviceAdd 콜백 함수는 트랜잭션 개체를 만들 수 있습니다.) 그런 다음, 필요한 경우 프레임워크가 트랜잭션을 더 작은 DMA 전송으로 분리하기 시작하고 드라이버의 EvtProgramDma 콜백 함수를 호출할 수 있도록 요청 처리기가 DMA 트랜잭션을 시작해야 합니다.

  3. 드라이버의 EvtProgramDma 콜백 함수 는 단일 DMA 전송을 위해 DMA 하드웨어를 프로그래밍 하고 디바이스 인터럽트를 사용하도록 설정합니다.

  4. 디바이스가 중단되면 프레임워크는 드라이버의 EvtInterruptIsr 콜백 함수를 호출하여 휘발성 디바이스 정보를 저장하고 드라이버의 EvtInterruptDpc 콜백 함수 실행을 예약합니다.

    드라이버의 EvtInterruptDpc 콜백 함수는 하드웨어에서 처리를 완료한 후 각 DMA 전송을 완료 합니다. DMA 트랜잭션의 최종 전송이 완료되면 EvtInterruptDpc 콜백 함수 가 DMA 트랜잭션을 완료합니다.

드라이버가 DMA 트랜잭션 개체를 다시 사용하여 메모리 리소스가 부족할 때 작동할 수 있도록 할 수 있습니다.

드라이버는 DMA별 전원 관리 작업을 처리하는 콜백 함수 집합을 제공할 수 있습니다.

일부 드라이버는 디바이스와 드라이버가 모두 액세스할 수 있는 공통 버퍼를 사용합니다 .