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) |