Fungsi ScsiPortGetPhysicalAddress (srb.h)
Rutinitas ScsiPortGetPhysicalAddress mengonversi rentang alamat virtual tertentu ke rentang alamat fisik untuk operasi DMA.
Sintaks
SCSIPORT_API SCSI_PHYSICAL_ADDRESS ScsiPortGetPhysicalAddress(
[in] PVOID HwDeviceExtension,
[in] PSCSI_REQUEST_BLOCK Srb,
[in] PVOID VirtualAddress,
[out] ULONG *Length
);
Parameter
[in] HwDeviceExtension
Arahkan ke ekstensi perangkat keras. Ini adalah area penyimpanan per HBA yang dialokasikan dan diinisialisasi driver port atas nama driver miniport. Driver miniport biasanya menyimpan informasi khusus HBA dalam ekstensi ini, seperti status HBA dan rentang akses HBA yang dipetakan. Area ini tersedia untuk driver miniport di deviceExtension-HwDeviceExtension> anggota objek perangkat HBA segera setelah driver miniport memanggil ScsiPortInitialize. Driver port membebaskan memori ini ketika melepas perangkat.
[in] Srb
Arahkan ke blok permintaan SCSI jika VirtualAddress yang akan dikonversi berasal dari anggota DataBuffer SRB atau, mungkin, dari SenseInfoBuffer. Jika tidak, parameter ini harus NULL.
[in] VirtualAddress
Arahkan ke alamat virtual dasar yang akan dikonversi. Jika alamat virtual ini berada dalam rentang untuk DataBuffer yang disediakan SRB, pemanggil juga harus menyediakan penunjuk Srb .
[out] Length
Mengembalikan jumlah byte yang dipetakan, dimulai dari alamat fisik yang dikembalikan.
Nilai kembali
ScsiPortGetPhysicalAddress mengembalikan alamat fisik yang sesuai untuk VirtualAddress tertentu. Jika alamat yang diberikan tidak dapat dikonversi, alamat akan mengembalikan NULL.
Keterangan
Driver miniport HBA master bus memanggil ScsiPortGetPhysicalAddress untuk mendapatkan rentang alamat fisik yang dipetakan untuk digunakan selama operasi DMA. Misalnya, ScsiPortGetPhysicalAddress dapat digunakan untuk membuat daftar sebar/kumpulkan untuk transfer data yang mencakup halaman. Perhatikan bahwa Panjang yang dikembalikan bisa lebih besar dari ukuran DataBuffer dalam SRB tertentu.
Jika Srbnon-NULL diteruskan, VirtualAddress harus berada dalam rentang DataBuffer SRB atau harus menjadi penunjuk dari SenseInfoBuffer. Jika tidak, VirtualAddress yang diberikan harus berada di ekstensi driver miniport yang tidak di-cache, SrbExtension, atau SenseInfoBuffer.
Driver miniport dapat memanggil ScsiPortGetPhysicalAddress untuk menerjemahkan alamat ekstensi hanya jika driver miniport DriverEntry rutin mengatur NeedPhysicalAddresses ke TRUE di HW_INITIALIZATION_DATA ketika disebut ScsiPortInitialize.
Karena kendala pada beberapa bus, seperti ISA, alamat yang dikembalikan oleh rutinitas ini tidak dijamin cocok dengan alamat yang dikembalikan oleh rutinitas luar yang dianalogikan (seperti MmGetPhysicalAddress). Driver miniport hanya boleh memanggil rutinitas ScsiPortXxx menjadi portabel.
ScsiPortGetPhysicalAddress menggunakan SCSI_PHYSICAL_ADDRESS untuk mewakili alamat fisik.
typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;
Jenis SCSI_PHYSICAL_ADDRESS adalah jenis data independen sistem operasi yang digunakan driver miniport SCSI untuk mewakili alamat fisik atau alamat relatif bus.
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Desktop |
Header | srb.h (termasuk Miniport.h, Scsi.h) |
Pustaka | Scsiport.lib |