Функция 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 (включая Storport.h)

См. также раздел

StorPortFreeHostMemoryBuffer