структура ACCESS_RANGE (strmini.h)
В ACCESS_RANGE описывается диапазон портов памяти или операций ввода-вывода, используемый адаптером HBA.
В будущем модели драйвера портов SCSI и драйвера для минипорта SCSI могут быть изменены или недоступны. Вместо этого рекомендуется использовать модели драйверов Storport и драйверов для мини-портов Storport .
Синтаксис
typedef struct _ACCESS_RANGE {
SCSI_PHYSICAL_ADDRESS RangeStart;
ULONG RangeLength;
BOOLEAN RangeInMemory;
} ACCESS_RANGE, *PACCESS_RANGE;
Члены
RangeStart
Содержит адрес типа SCSI_PHYSICAL_ADDRESS , указывающий базовый адрес диапазона относительно шины. Это адрес, который можно передать в ScsiPortGetDeviceBase.
RangeLength
Указывает размер, в байтах или количество портов в диапазоне. Драйвер мини-порта должен убедиться, что это значение совпадает с диапазоном, фактически декодированным адаптером. Например, если HBA использует семь регистров, но отвечает на восемь, этот элемент должен иметь значение 8.
RangeInMemory
Указывает, что диапазон находится в памяти при значении TRUE, а не в пространстве ввода-вывода. При значении FALSE диапазон находится в пространстве ввода-вывода.
Reserved
Комментарии
Каждый ACCESS_RANGE является элементом массива AccessRanges в структуре PORT_CONFIGURATION_INFORMATION, который передается в подпрограмму HwScsiFindAdapter драйвера miniport.
По возможности драйвер портов для конкретной ОС настраивает каждый элемент диапазона доступа с диапазоном HBA относительно шины для драйвера мини-порта, прежде чем вызывать подпрограмму HwScsiFindAdapter драйвера мини-порта. В противном случае драйвер порта обнуляет элементы диапазона, для которых он не может предоставить сведения о конфигурации.
Если драйвер порта предоставляет диапазон, подпрограмма HwScsiFindAdapter драйвера мини-порта должна использовать только указанные адреса и никогда не пытаться найти другие адаптеры безопасности в той же шине с помощью собственных адресов разработки. Попытка получить доступ к другим диапазонам портов или памяти относительно шины, если драйвер порта предоставил сведения о диапазоне, особенно в системах с архитектурой x86, в которых некоторые устройства инициализируются в реальном режиме x86, может привести к сбою инициализации других устройств в шине или даже к сбою процесса загрузки системы.
Каждый драйвер минипорта должен иметь набор диапазонов по умолчанию относительно шины, чтобы попытаться, если драйвер порта операционной системы не может предоставить информацию. Драйвер мини-порта должен вызвать ScsiPortValidateRange, чтобы проверка безопасности любого диапазона доступа, предоставленного драйвером мини-порта, прежде чем попытаться сопоставить такой диапазон с ScsiPortGetDeviceBase и использовать возвращенные логические адреса для доступа к адаптеру, особенно если один из его адаптеров HBA имеет BIOS.
Для любого диапазона доступа, который драйвер мини-порта заполняет для драйвера портов для конкретной ОС в PORT_CONFIGURATION_INFORMATION, должен быть задан относительный адрес шины, например значение, возвращаемое ScsiPortGetBusData.
Соответствующий базовый логический адрес, возвращаемый ScsiPortGetDeviceBase , должен храниться, как правило, в расширении устройства драйвера мини-порта в качестве адреса RangeStart для сопоставленного диапазона портов ввода-вывода или адресов памяти, используемых для вызова процедур ScsiPortReadXxx и ScsiPortWriteXxx .
Требования
Требование | Значение |
---|---|
Заголовок | strmini.h (включая Srb.h, Storport.h, Strmini.h) |
См. также раздел
PORT_CONFIGURATION_INFORMATION (SCSI)