структура ACCESS_RANGE (srb.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 диапазон находится в пространстве ввода-вывода.

Комментарии

Каждый 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)

См. также раздел

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortConvertUlongToPhysicalAddress

ScsiPortGetBusData

ScsiPortGetDeviceBase

ScsiPortValidateRange