Поделиться через


Функция 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 МБ до 16 МБ, это значение будет иметь значение 0x800000 (8 МБ).

[in] HighestAcceptableAddress

Самый высокий физический адрес, допустимый для выделения. Например, если устройство может ссылаться только на физическую память ниже 16 МБ, это значение будет иметь значение 0xFFFFFF (16 МБ – 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 (include Storport.h)

См. также

StorPortFreeHostMemoryBuffer