StorPortAllocateHostMemoryBuffer-Funktion (storport.h)
StorPortAllocateHostMemoryBuffer einem oder mehreren Bereichen von physisch zusammenhängendem Speicher zugeordnet wird, der als Hostspeicherpuffer (Host Memory Buffer, HMB) verwendet werden soll.
Syntax
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
);
Parameter
[in] HwDeviceExtension
Ein Zeiger auf die Hardwaregeräteerweiterung für den Hostbusadapter (HBA).
[in] MinimumBytes
Die minimale Menge an Arbeitsspeicher, die für das Gerät in Byte nützlich sein wird. Ein Wert von 0 gibt an, dass jede Größe des Arbeitsspeichers bis zur bevorzugten Größe akzeptabel ist.
[in] PreferredBytes
Der vom Gerät bevorzugte Arbeitsspeicher in Byte. Dies muss ein Vielfaches des Seitenformats sein.
[in] UtilizationBytes
Die Gesamtanzahl der auf dem Gerät zugewiesenen Blöcke in Byte.
[in] AlignmentBytes
Die Ausrichtung des Hostspeicherpuffers vom Gerät.
[in] LowestAcceptableAddress
Die niedrigste physische Adresse, die für die Zuordnung gültig ist. Wenn das Gerät beispielsweise nur auf physischen Speicher im Bereich von 8 MB bis 16 MB verweisen kann, wird dieser Wert auf 0x800000 (8 MB) festgelegt.
[in] HighestAcceptableAddress
Die höchste physische Adresse, die für die Zuordnung gültig ist. Wenn das Gerät beispielsweise nur auf physischen Speicher unter 16 MB verweisen kann, wird dieser Wert auf 0xFFFFFF (16 MB - 1) festgelegt.
[in, optional] BoundaryAddressMultiple
Die physische Adresse, die von dieser Zuordnung nicht überschritten werden darf. Dieser Parameter wird derzeit nicht verwendet und muss auf 0 festgelegt werden.
[in, out] PhysicalAddressRanges
Ein Array von physischen Adressbereichen, aus denen der Hostspeicherpuffer besteht. Der Aufrufer sollte ein vorab zugeordnetes Array bereitstellen. StorPortAllocateHostMemoryBuffer füllt das Array mit mindestens einem physischen Adressbereich aus.
[in, out] PhysicalAddressRangeCount
Die Anzahl der Einträge in PhysicalAddressRanges. Diese Funktion aktualisiert diesen Parameter, um anzugeben, wie viele physische Adressbereiche es ausgefüllt hat.
Rückgabewert
StorPortAllocateHostMemoryBuffer einen der folgenden Statuscodes zurück:
Rückgabecode | Beschreibung |
---|---|
STOR_STATUS_SUCCESS | Das PhysicalAddressRanges Array enthält mindestens einen gültigen physischen Adressbereich, der den Hostspeicherpuffer darstellt. |
STOR_STATUS_INVALID_PARAMETER | Dies könnte einen Minimalwert angeben, der größer als ein Maximalwert ist, eine nicht seitenausgeglichene Größe oder dass PhysicalAddressRanges leer ist. |
STOR_STATUS_INSUFFICIENT_RESOURCES | Der Hostspeicherpuffer konnte nicht zugeordnet werden. |
Bemerkungen
HMB ist Speicher, den das Gerät direkt und ausschließlich verwenden kann. Das Gerät kann diesen Speicher jedoch verwenden, aber es muss sichergestellt werden, dass im Falle einer Überraschungsentfernung oder unerwartetem Stromausfall kein Datenverlust oder Datenbeschädigung vorhanden ist.
Je nach Zuweisungsrichtlinie kann diese Funktion so viel zuordnen wie die bevorzugte Größe des Geräts, so wenig wie die Mindestgröße des Geräts oder überhaupt kein Arbeitsspeicher.
Diese Funktion versucht so wenig physische zusammenhängende Adressbereiche wie möglich zuzuordnen, muss jedoch möglicherweise mehrere physische Adressbereiche verwenden, um die gewünschte HMB-Größe zu erfüllen.
Anschließend sollte der Aufrufer StorPortFreeHostMemoryBuffer aufrufen, wenn er mit dem Hostspeicherpuffer abgeschlossen ist.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Universal |
Header- | storport.h (include Storport.h) |