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를 호출할 때 분산/수집 지원이 있는 버스 master 표시한 경우 MapTransfer에서 반환되는 Length 값은 매핑된 바이트 수를 나타냅니다. 그렇지 않으면 Length 의 입력 및 출력 값이 동일합니다.

[in] WriteToDevice

전송 작업의 방향을 나타냅니다. 잠긴 버퍼에서 디바이스로 전송하는 경우 TRUE 입니다.

반환 값

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

설명

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

DmaAdapter는 드라이버가 AllocateAdapterChannel을 이전에 호출한 결과로 이미 할당되어 있어야 합니다.

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

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

분산/수집 지원이 있는 버스 master 디바이스의 드라이버는 반환된 논리 주소와 업데이트된 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