DMA 트랜잭션 개체 다시 사용

[KMDF에만 적용]

드라이버가 DMA 트랜잭션과 연결된 모든 DMA 전송을 처리한 후 드라이버는 트랜잭션 개체를 삭제하거나 다시 사용할 수 있습니다. 일반적으로 드라이버의 EvtInterruptDpc 콜백 함수는 WdfObjectDelete를 호출하여 트랜잭션 개체를 삭제합니다. 그런 다음 드라이버가 새 DMA 트랜잭션을 만들 때 WdfDmaTransactionCreate 를 호출하여 새 트랜잭션 개체를 만듭니다.

그러나 드라이버에서 트랜잭션 개체를 다시 사용하는 것이 유용한 경우도 있습니다. 이러한 경우 드라이버는 WdfObjectDelete 대신 WdfDmaTransactionRelease를 호출합니다.

예를 들어 컴퓨터 메모리 리소스가 부족할 때 드라이버와 디바이스가 작동해야 한다고 가정합니다. 이 메모리 문제를 처리하기 위해 드라이버는 다음 절차를 사용할 수 있습니다.

  1. 드라이버의 EvtDriverDeviceAdd 콜백 함수는 WdfDmaTransactionCreate 를 호출하여 하나 이상의 트랜잭션 개체를 만들 수 있습니다. 드라이버는 이러한 트랜잭션 개체에 핸들을 저장합니다.

  2. 드라이버가 새 트랜잭션을 만들고 초기화할 준비가 될 때마다 WdfDmaTransactionCreate를 호출합니다. 이 메서드가 STATUS_INSUFFICIENT_RESOURCES 반환하는 경우 드라이버는 저장된 트랜잭션 개체 중 하나를 사용할 수 있습니다.

  3. 드라이버가 저장된 트랜잭션 개체 중 하나를 사용하는 경우 트랜잭션이 완료되면 트랜잭션 개체를 삭제하는 대신 다시 사용해야 합니다. 드라이버는 WdfObjectDelete 대신 WdfDmaTransactionRelease를 호출하여 다시 사용할 트랜잭션 개체를 설정합니다.

PLX9x5x 샘플은 DMA 트랜잭션 개체를 다시 사용합니다.