PGET_DMA_TRANSFER_INFO fungsi panggilan balik (wdm.h)

Rutinitas GetDmaTransferInfo menghitung persyaratan alokasi untuk transfer DMA sebar/kumpulkan.

Sintaks

PGET_DMA_TRANSFER_INFO PgetDmaTransferInfo;

NTSTATUS PgetDmaTransferInfo(
  [in]      PDMA_ADAPTER DmaAdapter,
  [in]      PMDL Mdl,
  [in]      ULONGLONG Offset,
  [in]      ULONG Length,
  [in]      BOOLEAN WriteOnly,
  [in, out] PDMA_TRANSFER_INFO TransferInfo
)
{...}

Parameter

[in] DmaAdapter

Penunjuk ke struktur DMA_ADAPTER . Struktur ini adalah objek adaptor yang mewakili perangkat DMA master bus driver atau saluran DMA sistem. Penelepon memperoleh pointer ini dari panggilan sebelumnya ke rutinitas IoGetDmaAdapter .

[in] Mdl

Penunjuk ke rantai MDL yang menjelaskan halaman memori yang akan ditransfer. Untuk informasi lebih lanjut, lihat bagian Keterangan.

[in] Offset

Offset awal untuk transfer DMA sebar/kumpulkan. Parameter ini adalah offset byte dari awal buffer di MDL pertama dalam rantai MDL. Jika MDL dalam rantai MDL menentukan total N byte ruang buffer, nilai Offset yang valid berada dalam rentang 0 hingga N–1.

[in] Length

Panjang, dalam byte, dari transfer DMA. Jika rantai MDL menentukan total N byte ruang buffer, nilai Panjang yang valid berada dalam rentang 1 hingga N–Offset.

[in] WriteOnly

Menunjukkan apakah transfer adalah operasi tulis-saja (yaitu, transfer ke perangkat dari memori). Jika WriteOnly TRUE, informasi yang dikembalikan tentang transfer mungkin tidak valid untuk transaksi baca. Parameter ini mungkin menunjukkan bahwa operasi kontrol cache tambahan diperlukan pada batas buffer untuk memberlakukan koherensi cache.

[in, out] TransferInfo

Penunjuk ke struktur DMA_TRANSFER_INFO yang dialokasikan penelepon. Pemanggil harus mengatur anggota Versi struktur ke DMA_TRANSFER_INFO_VERSION1 sebelum memanggil GetDmaTransferInfo.

Nilai kembali

GetDmaTransferInfo mengembalikan STATUS_SUCCESS jika panggilan berhasil. Kemungkinan nilai pengembalian kesalahan mencakup kode status berikut.

Menampilkan kode Deskripsi
STATUS_NOT_SUPPORTED
Rutinitas tidak mendukung versi struktur DMA_TRANSFER_INFO_XXX yang ditentukan.

Keterangan

GetDmaTransferInfo bukanlah rutinitas sistem yang dapat dipanggil langsung berdasarkan nama. Rutinitas ini hanya dapat dipanggil dengan penunjuk dari alamat yang dikembalikan dalam struktur DMA_OPERATIONS. Driver mendapatkan alamat rutin ini dengan memanggil IoGetDmaAdapter dengan anggota Versi parameter DeviceDescription diatur ke DEVICE_DESCRIPTION_VERSION3. Jika IoGetDmaAdapter mengembalikan NULL, rutinitas tidak tersedia di platform Anda.

Gunakan GetDmaTransferInfo untuk menghitung ukuran buffer sebar/kumpulkan untuk mengalokasikan untuk rutinitas BuildScatterGatherListEx dan MapTransferEx .

GetDmaTransferInfo menggantikan rutinitas CalculateScatterGatherList dan lebih nyaman digunakan dengan BuildScatterGatherListEx.

Parameter Mdl, Offset, dan Length bersama-sama menentukan kumpulan wilayah memori fisik yang akan digunakan sebagai buffer untuk transfer DMA sebar/kumpulkan. Setiap wilayah memori fisik biasanya merupakan halaman atau bagian dari halaman. GetDmaTransferInfo menentukan persyaratan alokasi untuk transfer ini. Persyaratan ini meliputi:

  • Jumlah elemen dalam daftar sebar/kumpulkan. Setiap elemen adalah struktur SCATTER_GATHER_ELEMENT yang menggambarkan blok memori yang berdekatan secara fisik.
  • Jumlah memori yang akan dialokasikan untuk menyimpan daftar sebar/kumpulkan yang ditentukan. (Alokasi memori ini mencakup ruang yang diperlukan untuk daftar sebar/kumpulkan yang menjelaskan buffer I/O tetapi tidak untuk buffer I/O itu sendiri.)
  • Jumlah register peta yang diperlukan untuk menerjemahkan alamat fisik dalam daftar sebar/kumpulkan ke alamat logis.
Untuk informasi tentang informasi transfer DMA yang disediakan oleh versi 1 dari struktur DMA_TRANSFER_INFO_XXX , lihat DMA_TRANSFER_INFO_V1.

MDL menjelaskan halaman memori fisik yang mendasar blok memori virtual yang terkunci dan berdekatan. Biasanya, halaman memori fisik ini tidak bersebelahan. Rantai MDL adalah kumpulan MDL yang diurutkan yang menjelaskan memori yang dapat digunakan untuk menyangga data I/O. Biasanya, wilayah memori virtual yang dijelaskan oleh MDL dalam rantai tidak berdekatan. Untuk informasi selengkapnya tentang MDL dan rantai MDL, lihat Menggunakan MDL.

Persyaratan

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

Lihat juga

BuildScatterGatherListEx

CalculateScatterGatherList

DMA_OPERATIONS

DMA_TRANSFER_INFO

DMA_TRANSFER_INFO_V1

IoGetDmaAdapter

MapTransferEx