StorPortAllocateHostMemoryBuffer 函式 (storport.h)
StorPortAllocateHostMemoryBuffer 會配置一或多個實體連續記憶體範圍,以作為主機記憶體緩衝區 (HMB) 。
語法
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
);
參數
[in] HwDeviceExtension
主機總線適配卡的硬體裝置擴充功能指標, (HBA) 。
[in] MinimumBytes
裝置的最小記憶體數量,以位元組為單位。 值為 0 表示可接受的記憶體大小上限為慣用大小。
[in] PreferredBytes
裝置偏好的記憶體數量,以位元組為單位。 這必須是頁面大小的倍數。
[in] UtilizationBytes
裝置上配置的區塊總數,以位元組為單位。
[in] AlignmentBytes
來自裝置的主機記憶體緩衝區對齊需求。
[in] LowestAcceptableAddress
對配置有效的最低實體位址。 例如,如果裝置只能參考 8 MB 到 16 MB 範圍內的實體記憶體,此值會設定為 0x800000 (8 MB) 。
[in] HighestAcceptableAddress
對配置有效的最高實體位址。 例如,如果裝置只能參考低於 16 MB 的實體記憶體,此值會設定為 0xFFFFFF (16 MB - 1) 。
[in, optional] BoundaryAddressMultiple
此配置不可跨越的實體位址倍數。 此參數目前未使用,且必須設定為 0。
[in, out] PhysicalAddressRanges
組成主機記憶體緩衝區的實體位址範圍陣列。 呼叫端應該提供預先配置的陣列。 StorPortAllocateHostMemoryBuffer 會將一或多個實體位址範圍填入陣列中。
[in, out] PhysicalAddressRangeCount
PhysicalAddressRanges 中的項目數目。 此函式會更新此參數,以指出其填入的實體位址範圍。
傳回值
StorPortAllocateHostMemoryBuffer 會傳回下列其中一個狀態代碼:
傳回碼 | Description |
---|---|
STOR_STATUS_SUCCESS | PhysicalAddressRanges 陣列包含一或多個代表主機記憶體緩衝區的有效實體位址範圍。 |
STOR_STATUS_INVALID_PARAMETER | 這可能表示大於最大值、非頁面對齊大小的最小值,或 PhysicalAddressRanges 是空的。 |
STOR_STATUS_INSUFFICIENT_RESOURCES | 無法配置主機記憶體緩衝區。 |
備註
HMB 是裝置可以直接和獨佔使用的記憶體。 不過,裝置可能會使用此記憶體,但必須確定在意外移除或意外電源遺失時不會遺失數據或數據損毀。
視配置原則而定,此函式可能會配置與裝置慣用大小一樣多、裝置的大小下限,或完全沒有記憶體。
此函式會儘可能嘗試配置最少的實體連續位址範圍,但可能需要使用多個實體位址範圍來滿足所需的 HMB 大小。
呼叫端應該會在使用主機記憶體緩衝區完成時呼叫 StorPortFreeHostMemoryBuffer 。
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
標頭 | storport.h (包含 Storport.h) |