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