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)

Vedi anche

StorPortFreeHostMemoryBuffer