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)

另请参阅

StorPortFreeHostMemoryBuffer