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