Partager via


Fonction StorPortAllocateHostMemoryBuffer (storport.h)

StorPortAllocateHostMemoryBuffer alloue une ou plusieurs plages de mémoire physiquement contiguë à utiliser comme mémoire tampon de l’hôte (HMB).

Syntaxe

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
);

Paramètres

[in] HwDeviceExtension

Pointeur vers l’extension de périphérique matériel pour l’adaptateur de bus hôte (HBA).

[in] MinimumBytes

Quantité minimale de mémoire qui sera utile à l’appareil, en octets. La valeur 0 indique que toute taille de mémoire jusqu’à la taille préférée est acceptable.

[in] PreferredBytes

Quantité de mémoire préférée de l’appareil, en octets. Il doit s’agir d’un multiple de la taille de la page.

[in] UtilizationBytes

Nombre total de blocs alloués sur l’appareil, en octets.

[in] AlignmentBytes

Exigence d’alignement de la mémoire tampon de l’hôte à partir de l’appareil.

[in] LowestAcceptableAddress

Adresse physique la plus basse valide pour l’allocation. Par exemple, si l’appareil ne peut référencer la mémoire physique que dans la plage de 8 Mo à 16 Mo, cette valeur est définie sur 0x800000 (8 Mo).

[in] HighestAcceptableAddress

Adresse physique la plus élevée valide pour l’allocation. Par exemple, si l’appareil ne peut référencer que la mémoire physique inférieure à 16 Mo, cette valeur est définie sur 0xFFFFFF (16 Mo - 1).

[in, optional] BoundaryAddressMultiple

Multiple d’adresse physique que cette allocation ne doit pas croiser. Ce paramètre n’est actuellement pas utilisé et doit être défini sur 0.

[in, out] PhysicalAddressRanges

Tableau de plages d’adresses physiques qui composent la mémoire tampon de l’hôte. L’appelant doit fournir un tableau pré-alloué. StorPortAllocateHostMemoryBuffer remplit le tableau avec une ou plusieurs plages d’adresses physiques.

[in, out] PhysicalAddressRangeCount

Nombre d’entrées dans PhysicalAddressRanges. Cette fonction met à jour ce paramètre pour indiquer le nombre de plages d’adresses physiques qu’elle a renseignées.

Valeur retournée

StorPortAllocateHostMemoryBuffer retourne l’un des codes status suivants :

Code de retour Description
STOR_STATUS_SUCCESS Le tableau PhysicalAddressRanges contient une ou plusieurs plages d’adresses physiques valides qui représentent la mémoire tampon de l’hôte.
STOR_STATUS_INVALID_PARAMETER Cela peut indiquer une valeur minimale supérieure à une valeur maximale, une taille non alignée sur la page ou le fait que PhysicalAddressRanges est vide.
STOR_STATUS_INSUFFICIENT_RESOURCES La mémoire tampon de l’hôte n’a pas pu être allouée.

Remarques

HMB est la mémoire que l’appareil peut utiliser directement et exclusivement. L’appareil peut utiliser cette mémoire comme bon lui semble, mais il doit s’assurer qu’il n’y a pas de perte de données ou d’altération des données en cas de suppression surprise ou de perte de courant inattendue.

Selon la stratégie d’allocation, cette fonction peut allouer autant que la taille préférée de l’appareil, la taille minimale de l’appareil ou l’absence de mémoire.

Cette fonction tente d’allouer le moins possible de plages d’adresses contiguës physiquement, mais elle peut devoir utiliser plusieurs plages d’adresses physiques pour satisfaire la taille HMB souhaitée.

L’appelant doit ensuite appeler StorPortFreeHostMemoryBuffer lorsqu’il a terminé avec la mémoire tampon de l’hôte.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête storport.h (inclure Storport.h)

Voir aussi

StorPortFreeHostMemoryBuffer