다음을 통해 공유


PMAP_TRANSFER 콜백 함수(wdm.h)

MapTransfer 루틴은 어댑터 개체에 대한 맵 레지스터를 설정하여 잠긴 버퍼에서 DMA 전송을 매핑합니다.

통사론

PMAP_TRANSFER PmapTransfer;

PHYSICAL_ADDRESS PmapTransfer(
  [in]      PDMA_ADAPTER DmaAdapter,
  [in]      PMDL Mdl,
  [in]      PVOID MapRegisterBase,
  [in]      PVOID CurrentVa,
  [in, out] PULONG Length,
  [in]      BOOLEAN WriteToDevice
)
{...}

매개 변수

[in] DmaAdapter

IoGetDmaAdapter 반환되고 현재 IRP의 전송 요청에 대해 AllocateAdapterChannel 전달된 DMA 어댑터 개체에 대한 포인터입니다.

[in] Mdl

다음 중 하나에 대한 포인터: 현재 IRP의 MdlAddress 버퍼를 설명하는 MDL 또는 하위 디바이스의 드라이버에서 설정한 공통 버퍼를 설명하는 MDL(자동 초기화 모드).

[in] MapRegisterBase

DMA 작업에 할당된 지도 레지스터를 지정합니다. 시스템은 이 값을 드라이버의 AdapterControl 루틴에 전달합니다.

[in] CurrentVa

DMA 전송 작업을 위해 전송할 데이터의 현재 가상 주소에 대한 포인터입니다.

[in, out] Length

매핑할 길이(바이트)를 지정합니다. 드라이버가 IoGetDmaAdapter호출할 때 해당 디바이스가 분산/수집 지원을 사용하는 버스 마스터라고 표시한 경우 MapTransfer 반환 시 Length 값은 매핑된 바이트 수를 나타냅니다. 그렇지 않으면 Length 입력 및 출력 값이 동일합니다.

[in] WriteToDevice

전송 작업의 방향을 나타냅니다. 잠긴 버퍼에서 디바이스로 전송하기 위한 TRUE.

반환 값

MapTransfer 버스 마스터 어댑터의 드라이버에서 사용할 수 있는 매핑된 지역의 논리적 주소를 반환합니다. 시스템 DMA 컨트롤러를 사용하는 디바이스의 드라이버는 이 값을 사용할 수 없으며 무시해야 합니다.

발언

MapTransfer 이름으로 직접 호출할 수 있는 시스템 루틴이 아닙니다. 이 루틴은 DMA_OPERATIONS 구조반환된 주소의 포인터로만 호출할 수 있습니다. 드라이버는 IoGetDmaAdapter호출하여 이 루틴의 주소를 가져옵니다.

DmaAdapterAllocateAdapterChannel대한 드라이버의 이전 호출의 결과로 이미 할당되어 있어야 합니다.

설정할 수 있는 맵 레지스터 수는 IoGetDmaAdapter라는 드라이버가때 반환되는 최대값을 초과할 수 없습니다.

드라이버는 MmGetMdlVirtualAddress호출하여 패킷 기반 DMA 전송의 시작에 대한 초기 CurrentVa 가져올 수 있습니다. 그러나 반환되는 값은 유효한 가상 주소가 아닌 Mdl인덱스입니다. 드라이버가 큰 전송 요청을 둘 이상의 DMA 작업으로 분할해야 하는 경우 각 DMA 작업에 대해 CurrentVaLength 업데이트해야 합니다.

분산/수집 지원을 사용하는 버스 마스터 디바이스의 드라이버는 반환된 논리 주소와 업데이트된 Length 값을 사용하여 분산/수집 목록을 작성할 수 있으며, 전송 작업에 사용 가능한 모든 지도 레지스터를 사용할 때까지 MapTransfer 반복적으로 호출합니다. 그러나 이러한 드라이버는 GetScatterGatherList 루틴을 더 간단하게 사용할 수 있습니다.

요구 사항

요구
지원되는 최소 클라이언트 Windows 2000부터 사용할 수 있습니다.
대상 플랫폼 바탕 화면
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
IRQL <= DISPATCH_LEVEL
DDI 규정 준수 규칙 IrqlDispatch(wdm)

참고 항목

ADDRESS_AND_SIZE_TO_SPAN_PAGES

AllocateAdapterChannel

AllocateCommonBuffer

DMA_ADAPTER

FlushAdapterBuffers

freeAdapterChannel

freeMapRegisters

IoGetDmaAdapter

KeFlushIoBuffers

MmGetMdlVirtualAddress