Поделиться через


структура 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)

ScsiPortGetBusData

ScsiPortGetDeviceBase

ScsiPortValidateRange

ScsiPortConvertUlongToPhysicalAddress

HwScsiFindAdapter