структура 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 драйвера минипорта должна использовать только указанные адреса и никогда не никогда не пытаться найти другие HBAs на той же шине, используя адреса собственной разработки. Попытка получить доступ к другим диапазонам портов или памяти, когда драйвер порта предоставил сведения о диапазоне, особенно в системах только x86, в которых некоторые устройства инициализированы в режиме реального времени x86, могут привести к сбою инициализации других устройств на шине или даже привести к сбою процесса загрузки системы.
Каждый минипорт-драйвер должен иметь набор диапазонов по умолчанию относительно шины, чтобы попытаться, если драйвер порта для конкретной ОС не может предоставить информацию. Минипорт-драйвер должен вызвать ScsiPortValidateRange, чтобы проверить безопасность любого диапазона доступа, предоставленного мини-драйвером, , прежде чем пытается сопоставить такой диапазон с ScsiPortGetDeviceBase и использовать возвращенные логические адреса для доступа к адаптеру, особенно если один из его HBAs имеет BIOS.
Любой диапазон доступа, заполняемый мини-драйвером порта для драйвера портов для конкретной ОС в PORT_CONFIGURATION_INFORMATION, должен иметь член RangeStart на относительный адрес шины, например значение, возвращаемое ScsiPortGetBusData.
Соответствующий базовый логический адрес, возвращаемый ScsiPortGetDeviceBase, должен храниться, как правило, в расширении устройства мини-порта, как адрес RangeStart RangeStart для сопоставленного диапазона портов ввода-вывода или адресов памяти, используемых для вызова ScsiPortReadXxx и подпрограмм ScsiPortWriteXxx.
Требования
Требование | Ценность |
---|---|
заголовка | strmini.h (include Srb.h, Storport.h, Strmini.h) |
См. также
PORT_CONFIGURATION_INFORMATION (SCSI)