Функция ScsiPortGetUncachedExtension (srb.h)
Подпрограмма ScsiPortGetUncachedExtension выделяет память, которая может использоваться как ЦП, так и master адаптером шины для DMA или общих данных.
Синтаксис
SCSIPORT_API PVOID ScsiPortGetUncachedExtension(
[in] PVOID HwDeviceExtension,
[in] PPORT_CONFIGURATION_INFORMATION ConfigInfo,
[in] ULONG NumberOfBytes
);
Параметры
[in] HwDeviceExtension
Указатель на расширение аппаратного устройства. Это область хранения для каждого адаптера, которую драйвер порта выделяет и инициализирует от имени драйвера мини-порта. Драйверы минипорта обычно хранят сведения, относящиеся к HBA, в этом расширении, например состояние адаптера шины и сопоставленные диапазоны доступа. Эта область доступна драйверу мини-порта в элементе DeviceExtension-HwDeviceExtension> объекта устройства HBA сразу после того, как драйвер минипорта вызывает ScsiPortInitialize. Драйвер порта освобождает эту память при удалении устройства.
[in] ConfigInfo
Указывает сведения о возможностях DMA HBA. В должны быть заполнены следующие элементы: DmaChannel или DmaPort, DmaWidth, DmaSpeed, MaximumTransferLength, ScatterGather, master , для параметра Master задано значение TRUE, NumberOfPhysicalBreaks, AdapterInterfaceType, Dma32BitAddresses, SystemIoBusNumber, AutoRequestSense и SrbExtensionSize.
Элементы, которые не относятся к адаптеру HBA, например DmaChannel для адаптера master шины EISA, должны быть оставлены как есть.
[in] NumberOfBytes
Указывает размер выделенного некэшированного расширения в байтах. Драйверы в Windows XP и более ранних операционных системах не должны выделять более 100 килобайт некэшированных расширений. Если они участвуют в операциях ввода-вывода в файле гибернации или файле аварийного дампа, они должны ограничить объем выделенного расширения без кэширования до 32 килобайт.
Возвращаемое значение
ScsiPortGetUncachedExtension возвращает указатель виртуального адреса на некэшированное расширение. Если не удается выделить запрошенную память, возвращается значение NULL.
Комментарии
ScsiPortGetUncachedExtension можно вызывать только из подпрограммы HwScsiFindAdapter драйвера miniport и только для master адаптера шины. Вызовы из других подпрограмм драйвера минипорта приведут к сбою системы или неправильной работе вызывающего объекта.
Так как высокопроизводительные компьютеры имеют кэши и большие памяти, любая память, совместно используемой между адаптером шины и ЦП, должна быть выделена специально. Примерами такого типа общей памяти являются почтовые ящики или очереди запросов ввода-вывода в системной памяти.
Драйвер мини-порта должен задать SrbExtensionSize. перед вызовом ScsiPortGetUncachedExtension , чтобы изменить размер хранилища для каждого запроса на основе NumberOfPhysicalBreaks.
Подпрограмма HwScsiFindAdapter может вызывать ScsiPortGetUncachedExtension только один раз для каждого master адаптера шины, поддерживаемый драйвером мини-порта.
Чтобы получить физический адрес для некэшированного расширения, которое может использовать HBA, вызовите ScsiPortGetPhysicalAddress.
Драйвер ScsiPort освободит память, выделенную ScsiPortGetUncachedExtension , когда устройство адаптера остановлено.
Требования
Требование | Значение |
---|---|
Целевая платформа | Персональный компьютер |
Верхняя часть | srb.h (включая Miniport.h, Scsi.h) |
Библиотека | Scsiport.lib |