Funzione StorPortAllocateHostMemoryBuffer (storport.h)
StorPortAllocateHostMemoryBuffer alloca uno o più intervalli di memoria fisicamente contigua da usare come buffer di memoria host (HMB).
Sintassi
ULONG StorPortAllocateHostMemoryBuffer(
[in] PVOID HwDeviceExtension,
[in] SIZE_T MinimumBytes,
[in] SIZE_T PreferredBytes,
[in] ULONGLONG UtilizationBytes,
[in] ULONG AlignmentBytes,
[in] PHYSICAL_ADDRESS LowestAcceptableAddress,
[in] PHYSICAL_ADDRESS HighestAcceptableAddress,
[in, optional] PHYSICAL_ADDRESS BoundaryAddressMultiple,
[in, out] PACCESS_RANGE PhysicalAddressRanges,
[in, out] PULONG PhysicalAddressRangeCount
);
Parametri
[in] HwDeviceExtension
Puntatore all'estensione del dispositivo hardware per l'adattatore del bus host (HBA).
[in] MinimumBytes
Quantità minima di memoria che sarà utile per il dispositivo, in byte. Un valore pari a 0 indica che qualsiasi dimensione della memoria fino alla dimensione preferita è accettabile.
[in] PreferredBytes
Quantità di memoria preferita dal dispositivo, in byte. Questo deve essere un multiplo delle dimensioni della pagina.
[in] UtilizationBytes
Numero totale di blocchi allocati nel dispositivo, in byte.
[in] AlignmentBytes
Requisito di allineamento del buffer di memoria host dal dispositivo.
[in] LowestAcceptableAddress
Indirizzo fisico più basso valido per l'allocazione. Ad esempio, se il dispositivo può fare riferimento solo alla memoria fisica nell'intervallo da 8 MB a 16 MB, questo valore verrà impostato su 0x800000 (8 MB).
[in] HighestAcceptableAddress
Indirizzo fisico più alto valido per l'allocazione. Ad esempio, se il dispositivo può fare riferimento solo alla memoria fisica inferiore a 16 MB, questo valore verrà impostato su 0xFFFFFF (16 MB - 1).
[in, optional] BoundaryAddressMultiple
Indirizzo fisico multiplo che questa allocazione non deve attraversare. Questo parametro attualmente non viene usato e deve essere impostato su 0.
[in, out] PhysicalAddressRanges
Matrice di intervalli di indirizzi fisici che costituiscono il buffer di memoria host. Il chiamante deve fornire una matrice pre-allocata. StorPortAllocateHostMemoryBuffer riempirà la matrice con uno o più intervalli di indirizzi fisici.
[in, out] PhysicalAddressRangeCount
Numero di voci in PhysicalAddressRanges. Questa funzione aggiornerà questo parametro per indicare il numero di intervalli di indirizzi fisici compilati.
Valore restituito
StorPortAllocateHostMemoryBuffer restituisce uno dei codici di stato seguenti:
Codice restituito | Descrizione |
---|---|
STOR_STATUS_SUCCESS | La matrice PhysicalAddressRanges contiene uno o più intervalli di indirizzi fisici validi che rappresentano il buffer di memoria host. |
STOR_STATUS_INVALID_PARAMETER | Ciò potrebbe indicare un valore minimo maggiore di un valore massimo, una dimensione non allineata a pagina o che PhysicalAddressRanges è vuoto. |
STOR_STATUS_INSUFFICIENT_RESOURCES | Impossibile allocare il buffer di memoria host. |
Commenti
HMB è memoria che il dispositivo può usare direttamente ed esclusivamente. Il dispositivo può usare questa memoria, ma deve assicurarsi che non vi sia perdita di dati o danneggiamento dei dati in caso di rimozione di sorprese o perdita di energia imprevista.
A seconda dei criteri di allocazione, questa funzione può allocare quanto le dimensioni preferite del dispositivo, quanto le dimensioni minime del dispositivo o nessuna memoria.
Questa funzione tenterà di allocare quanto più intervalli di indirizzi contigui fisicamente possibili, ma potrebbe dover usare più intervalli di indirizzi fisici per soddisfare le dimensioni HMB desiderate.
Il chiamante deve successivamente chiamare StorPortFreeHostMemoryBuffer quando viene eseguito con il buffer di memoria host.
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Universale |
Intestazione | Storport.h (include Storport.h) |