다음을 통해 공유


WdfDmaTransactionSetDeviceAddressOffset 함수(wdfdmatransaction.h)

[KMDF에만 적용]

WdfDmaTransactionSetDeviceAddressOffset 메서드는 DMA 작업을 수행할 때 시스템 DMA 컨트롤러가 액세스할 레지스터의 오프셋을 지정합니다.

구문

void WdfDmaTransactionSetDeviceAddressOffset(
  [in] WDFDMATRANSACTION DmaTransaction,
  [in] ULONG             Offset
);

매개 변수

[in] DmaTransaction

수정할 트랜잭션을 지정하는 DMA 트랜잭션 개체에 대한 핸들입니다.

[in] Offset

WDF_DMA_SYSTEM_PROFILE_CONFIG 지정된 DeviceAddress에서 DMA가 수행되어야 하는 레지스터의 오프셋입니다.

반환 값

없음

설명

WdfDmaTransactionSetDeviceAddressOffset 은 시스템 모드 DMA 프로필을 지정하는 DMA 인에이블러와 함께 사용해야 합니다.

프레임워크 기반 드라이버는 DMA 트랜잭션을 초기화한 후 실행하기 전에 WdfDmaTransactionSetDeviceAddressOffset 을 호출합니다.

드라이버는 이 메서드를 사용하여 디바이스의 레지스터 파일 내에서 여러 레지스터에 액세스할 수 있습니다.

예를 들어 드라이버는 DMA를 사용하여 디바이스의 레지스터 파일에서 별도의 읽기 및 쓰기 레지스터에 액세스할 수 있습니다.

이를 위해 드라이버는 인에이블러를 구성할 때 디바이스의 레지스터 파일의 기본 주소를 지정한 다음 트랜잭션을 실행하기 전에 필요에 따라 읽기 또는 쓰기 레지스터의 오프셋을 설정합니다.

드라이버가 Windows 8 이전 운영 체제에서 이 메서드를 호출하는 경우 프레임워크의 검증 도구에서 오류를 보고합니다.

예제

다음 코드 예제에서는 DMA 트랜잭션을 초기화합니다. 그런 다음 시스템 DMA 컨트롤러가 액세스할 레지스터의 오프셋을 설정하고, 전송 완료 콜백 루틴을 제공하고, DMA 트랜잭션을 실행합니다.

status = WdfDmaTransactionInitialize(
                                     RequestContext->DmaTransaction,
                                     EvtProgramDma,
                                     direction,
                                     mdl,
                                     startingVa,
                                     length
                                     );

if(!NT_SUCCESS(status)) {
    goto Complete;
}

WdfDmaTransactionSetDeviceAddressOffset(
                                        RequestContext->DmaTransaction,
                                        READ_DATA_REGISTER_OFFSET
                                        );

WdfDmaTransactionSetTransferCompleteCallback(
                                             RequestContext->DmaTransaction,
                                             EvtDmaTransactionDmaTransferComplete,
                                             RequestContext
                                             );

status = WdfDmaTransactionExecute(
                                  RequestContext->DmaTransaction, 
                                  RequestContext );

if(!NT_SUCCESS(status)) {
    goto Complete;
}

return status;

Complete:

WdfDmaTransactionRelease(
                         RequestContext->DmaTransaction
                         );

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8
대상 플랫폼 유니버설
최소 KMDF 버전 1.11
머리글 wdfdmatransaction.h(Wdf.h 포함)
라이브러리 Wdf01000.sys(프레임워크 라이브러리 버전 관리 참조)
IRQL <=DISPATCH_LEVEL
DDI 규정 준수 규칙 DriverCreate(kmdf)

추가 정보

WDF_DMA_SYSTEM_PROFILE_CONFIG