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