Bagikan melalui


PMAP_TRANSFER fungsi panggilan balik (wdm.h)

Rutinitas MapTransfer menyiapkan register peta untuk objek adaptor untuk memetakan transfer DMA dari buffer terkunci.

Sintaks

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
)
{...}

Parameter

[in] DmaAdapter

Penunjuk ke objek adaptor DMA yang dikembalikan oleh IoGetDmaAdapter dan sebelumnya diteruskan ke AllocateAdapterChannel untuk permintaan transfer IRP saat ini.

[in] Mdl

Arahkan ke salah satu hal berikut: MDL yang menjelaskan buffer di MdlAddress di IRP saat ini atau MDL yang menjelaskan buffer umum yang disiapkan oleh driver perangkat subordinat (mode inisialisasi otomatis).

[in] MapRegisterBase

Menentukan register peta yang dialokasikan untuk operasi DMA. Sistem meneruskan nilai ini ke rutinitas AdapterControl driver.

[in] CurrentVa

Arahkan ke alamat virtual data saat ini yang akan ditransfer untuk operasi transfer DMA.

[in, out] Length

Menentukan panjang, dalam byte, yang akan dipetakan. Jika driver menunjukkan bahwa perangkatnya adalah master bus dengan dukungan sebar/kumpulkan ketika disebut IoGetDmaAdapter, nilai Length saat kembali dari MapTransfer menunjukkan berapa banyak byte yang dipetakan. Jika tidak, nilai input dan output Panjang identik.

[in] WriteToDevice

Menunjukkan arah operasi transfer: TRUE untuk transfer dari buffer terkunci ke perangkat.

Nilai kembali

MapTransfer mengembalikan alamat logis wilayah yang dipetakan, yang dapat digunakan oleh driver adaptor bus-master. Driver perangkat yang menggunakan pengontrol DMA sistem tidak dapat menggunakan nilai ini dan harus mengabaikannya.

Keterangan

MapTransfer bukanlah rutinitas sistem yang dapat dipanggil langsung berdasarkan nama. Rutinitas ini hanya dapat dipanggil oleh penunjuk dari alamat yang dikembalikan dalam strukturDMA_OPERATIONS. Driver mendapatkan alamat rutinitas ini dengan memanggil IoGetDmaAdapter.

DmaAdapter harus sudah dialokasikan sebagai akibat dari panggilan sebelumnya driver ke AllocateAdapterChannel.

Jumlah register peta yang dapat disiapkan tidak boleh melebihi maksimum yang dikembalikan ketika driver yang disebut IoGetDmaAdapter.

Driver bisa mendapatkan CurrentVa awal untuk awal transfer DMA berbasis paket dengan memanggil MmGetMdlVirtualAddress. Namun, nilai yang dikembalikan adalah indeks ke dalam Mdl, bukan alamat virtual yang valid. Jika driver harus membagi permintaan transfer besar menjadi lebih dari satu operasi DMA, driver harus memperbarui CurrentVa dan Length untuk setiap operasi DMA.

Driver perangkat master bus dengan dukungan sebar/kumpulkan dapat menggunakan alamat logis yang dikembalikan dan nilai Panjang yang diperbarui untuk membangun daftar sebar/kumpulkan, memanggil MapTransfer berulang kali sampai telah menggunakan semua register peta yang tersedia untuk operasi transfer. Namun, driver seperti itu lebih bisa menggunakan rutinitas GetScatterGatherList .

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia dimulai dengan Windows 2000.
Target Platform Desktop
Header wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h)
IRQL <= DISPATCH_LEVEL
Aturan kepatuhan DDI IrqlDispatch(wdm)

Lihat juga

ADDRESS_AND_SIZE_TO_SPAN_PAGES

AllocateAdapterChannel

AllocateCommonBuffer

DMA_ADAPTER

FlushAdapterBuffers

FreeAdapterChannel

FreeMapRegisters

IoGetDmaAdapter

KeFlushIoBuffers

MmGetMdlVirtualAddress