Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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) |