Partager via


StorPortAllocateHostMemoryBuffer, fonction (storport.h)

StorPortAllocateHostMemoryBuffer alloue une ou plusieurs plages de mémoire physiquement contiguë à utiliser comme mémoire tampon de mémoire 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 recommandée est acceptable.

[in] PreferredBytes

La quantité de mémoire que l’appareil préfère, en octets. Il doit s’agir d’un multiple de la taille de 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 que la mémoire physique 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

Adresse physique multiple que cette allocation ne doit pas traverser. 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 la mémoire hôte. L’appelant doit fournir un tableau pré-alloué. StorPortAllocateHostMemoryBuffer remplira 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 renseignées.

Valeur de retour

StorPortAllocateHostMemoryBuffer retourne l’un des codes d’état suivants :

Retourner le code Description
STOR_STATUS_SUCCESS Le tableau PhysicalAddressRanges contient une ou plusieurs plages d’adresses physiques valides qui représentent la mémoire tampon de mémoire 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 que PhysicalAddressRanges est vide.
STOR_STATUS_INSUFFICIENT_RESOURCES Impossible d’allouer la mémoire tampon de mémoire hôte.

Remarques

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

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

Cette fonction tente d’allouer autant de plages d’adresses contiguës physiquement que possible, mais il peut être nécessaire d’utiliser plusieurs plages d’adresses physiques pour satisfaire la taille de HMB souhaitée.

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

Exigences

Exigence Valeur
plateforme cible Universel
d’en-tête storport.h (include Storport.h)

Voir aussi

StorPortFreeHostMemoryBuffer