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) |