Condividi tramite


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)

Vedere anche

StorPortFreeHostMemoryBuffer