Funzione ScsiPortGetPhysicalAddress (srb.h)

La routine ScsiPortGetPhysicalAddress converte un intervallo di indirizzi virtuali specificato in un intervallo di indirizzi fisici per un'operazione DMA.

Nota I modelli di driver di porta SCSI e miniport SCSI potrebbero essere modificati o non disponibili in futuro. È invece consigliabile usare il driver Storport e i modelli di driver miniport Storport .
 

Sintassi

SCSIPORT_API SCSI_PHYSICAL_ADDRESS ScsiPortGetPhysicalAddress(
  [in]  PVOID               HwDeviceExtension,
  [in]  PSCSI_REQUEST_BLOCK Srb,
  [in]  PVOID               VirtualAddress,
  [out] ULONG               *Length
);

Parametri

[in] HwDeviceExtension

Puntatore all'estensione del dispositivo hardware. Si tratta di un'area di archiviazione per HBA che il driver di porta alloca e inizializza per conto del driver miniport. I driver Miniport archivia in genere informazioni specifiche dell'HBA in questa estensione, ad esempio lo stato dell'HBA e gli intervalli di accesso mappati dell'HBA. Questa area è disponibile per il driver miniport nel membro DeviceExtension-HwDeviceExtension> dell'oggetto dispositivo HBA subito dopo che il driver miniport chiama ScsiPortInitialize. Il driver della porta libera questa memoria quando rimuove il dispositivo.

[in] Srb

Puntatore al blocco di richiesta SCSI se VirtualAddress da convertire proviene dal membro DataBuffer di tale SRB o, possibilmente, da SenseInfoBuffer. In caso contrario, questo parametro deve essere NULL.

[in] VirtualAddress

Puntatore all'indirizzo virtuale di base da convertire. Se questo indirizzo virtuale rientra nell'intervallo per un DataBuffer fornito da SRB, il chiamante deve anche fornire il puntatore Srb .

[out] Length

Restituisce il numero di byte mappati, a partire dall'indirizzo fisico restituito.

Valore restituito

ScsiPortGetPhysicalAddress restituisce l'indirizzo fisico corrispondente per un oggetto VirtualAddress specificato. Se l'indirizzo specificato non può essere convertito, restituisce NULL.

Commenti

I driver miniport degli HBA master del bus chiamano ScsiPortGetPhysicalAddress per ottenere intervalli di indirizzi fisici mappati da usare durante le operazioni DMA. Ad esempio, ScsiPortGetPhysicalAddress può essere usato per creare un elenco di dispersione/raccolta per i trasferimenti di dati che si estendono su pagine. Si noti che la lunghezza restituita può essere maggiore delle dimensioni di DataBuffer in un determinato SRB.

Se viene passato uno Srb non NULL, VirtualAddress deve essere compreso nell'intervallo di DataBuffer di SRB o deve essere un puntatore da SenseInfoBuffer. In caso contrario, l'oggetto VirtualAddress specificato deve trovarsi nell'estensione non memorizzata nella cache del driver miniport, nell'oggetto SrbExtension o in SenseInfoBuffer.

Un driver miniport può chiamare ScsiPortGetPhysicalAddress per convertire un indirizzo di estensione solo se la routine DriverEntry del driver miniport imposta NeedPhysicalAddresses su TRUE nel HW_INITIALIZATION_DATA quando ha chiamato ScsiPortInitialize.

A causa di vincoli su alcuni autobus, ad esempio ISA, l'indirizzo restituito da questa routine non è garantito che corrisponda all'indirizzo restituito da una routine esterna analoga (ad esempio MmGetPhysicalAddress). Un driver miniport deve chiamare solo routine ScsiPortXxx per essere portabili.

ScsiPortGetPhysicalAddress usa SCSI_PHYSICAL_ADDRESS per rappresentare gli indirizzi fisici.

typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;

Il tipo SCSI_PHYSICAL_ADDRESS è un tipo di dati indipendente dal sistema operativo usato dai driver miniport SCSI per rappresentare indirizzi fisici o un indirizzo relativo al bus.

Nota I modelli di driver di porta SCSI e miniport SCSI potrebbero essere modificati o non disponibili in futuro. È invece consigliabile usare il driver Storport e i modelli di driver miniport Storport .
 

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione srb.h (include Miniport.h, Scsi.h)
Libreria Scsiport.lib

Vedi anche

DriverEntry del driver miniport SCSI

HW_INITIALIZATION_DATA (SCSI)

SCSI_REQUEST_BLOCK

ScsiPortGetUncachedExtension

ScsiPortGetVirtualAddress