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