Функция 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) |