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 返回以下状态代码之一:
返回代码 | 描述 |
---|---|
STOR_STATUS_SUCCESS | PhysicalAddressRanges 数组包含一个或多个表示主机内存缓冲区的有效物理地址范围。 |
STOR_STATUS_INVALID_PARAMETER | 这可能指示大于最大值、非页面对齐大小或 PhysicalAddressRanges 为空的最小值。 |
STOR_STATUS_INSUFFICIENT_RESOURCES | 无法分配主机内存缓冲区。 |
言论
HMB 是设备可以直接和独占使用的内存。 设备可能使用此内存,但认为它适合,但它必须确保在意外删除或意外断电时没有数据丢失或数据丢失。
根据分配策略,此函数可以分配与设备的首选大小一样多、设备最小大小或根本不分配内存。
此函数将尝试尽可能少地分配物理连续地址范围,但可能需要使用多个物理地址范围来满足所需的 HMB 大小。
调用方随后应在主机内存缓冲区完成后调用 StorPortFreeHostMemoryBuffer。
要求
要求 | 价值 |
---|---|
目标平台 | 普遍 |
标头 | storport.h (包括 Storport.h) |