Funzione StorPortAllocateHostMemoryBuffer (storport.h)
StorPortAllocateHostMemoryBuffer alloca uno o più intervalli di memoria fisicamente contigui 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 la scheda bus host (HBA).
[in] MinimumBytes
Quantità minima di memoria che sarà utile per il dispositivo, in byte. Il valore 0 indica che qualsiasi dimensione di memoria fino alla dimensione preferita è accettabile.
[in] PreferredBytes
La quantità di memoria che il dispositivo preferisce, in byte. Deve essere un multiplo delle dimensioni della pagina.
[in] UtilizationBytes
Numero totale di blocchi allocati nel dispositivo, in byte.
[in] AlignmentBytes
Requisito di allineamento 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 non è attualmente utilizzato 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 preallocata. 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 | Questo potrebbe indicare un valore minimo maggiore di un valore massimo, una dimensione non allineata alla pagina o che PhysicalAddressRanges è vuoto. |
STOR_STATUS_INSUFFICIENT_RESOURCES | Impossibile allocare il buffer di memoria host. |
Osservazioni
HMB è memoria che il dispositivo può usare direttamente ed esclusivamente. Il dispositivo può usare questa memoria, ma deve assicurarsi che non ci siano perdite 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 tutte le dimensioni preferite del dispositivo, fino alla dimensione minima del dispositivo o nessuna memoria.
Questa funzione tenterà di allocare il minor numero possibile di intervalli di indirizzi fisicamente contigui, 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.
Fabbisogno
Requisito | Valore |
---|---|
piattaforma di destinazione | Universale |
intestazione | storport.h (include Storport.h) |