Bagikan melalui


Fungsi ScsiPortGetPhysicalAddress (srb.h)

Rutinitas ScsiPortGetPhysicalAddress mengonversi rentang alamat virtual tertentu ke rentang alamat fisik untuk operasi DMA.

Catatan Driver port SCSI dan model driver miniport SCSI dapat diubah atau tidak tersedia di masa mendatang. Sebagai gantinya, sebaiknya gunakan driver Storport dan model driver miniport Storport .
 

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.

Catatan Driver port SCSI dan model driver miniport SCSI dapat diubah atau tidak tersedia di masa mendatang. Sebagai gantinya, sebaiknya gunakan driver Storport dan model driver miniport Storport .
 

Persyaratan

Persyaratan Nilai
Target Platform Desktop
Header srb.h (termasuk Miniport.h, Scsi.h)
Pustaka Scsiport.lib

Lihat juga

DriverEntry dari SCSI Miniport Driver

HW_INITIALIZATION_DATA (SCSI)

SCSI_REQUEST_BLOCK

ScsiPortGetUncachedExtension

ScsiPortGetVirtualAddress