Функция ScsiPortGetDeviceBase (srb.h)

Подпрограмма ScsiPortGetDeviceBase возвращает сопоставленный логический базовый адрес, который можно использовать для взаимодействия с HBA. Каждый драйвер мини-порта должен передавать сопоставленные адреса логического доступа в ScsiPort.. ПортXxx и ScsiPort.. Зарегистрируйте подпрограммы Xxx для взаимодействия с HBA.S.

Примечание Модели драйверов портов SCSI и драйверов мини-портов SCSI могут быть изменены или недоступны в будущем. Вместо этого рекомендуется использовать модели драйверов Storport и драйверов для мини-портов Storport .
 

Синтаксис

SCSIPORT_API PVOID ScsiPortGetDeviceBase(
  [in] PVOID                 HwDeviceExtension,
  [in] INTERFACE_TYPE        BusType,
  [in] ULONG                 SystemIoBusNumber,
  [in] SCSI_PHYSICAL_ADDRESS IoAddress,
  [in] ULONG                 NumberOfBytes,
  [in] BOOLEAN               InIoSpace
);

Параметры

[in] HwDeviceExtension

Указатель на расширение аппаратного устройства. Это область хранения для каждого HBA, которую драйвер порта выделяет и инициализирует от имени драйвера мини-порта. Драйверы мини-портов обычно хранят сведения, относящиеся к HBA, в этом расширении, такие как состояние HBA и сопоставленные диапазоны доступа HBA. Эта область доступна драйверу мини-порта в элементе DeviceExtension-HwDeviceExtension> объекта устройства HBA сразу после вызова драйвером мини-порта ScsiPortInitialize. Драйвер порта освобождает эту память при удалении устройства.

[in] BusType

Указывает тип интерфейса шины ввода-вывода, к которой подключен адаптер HBA. Подпрограмма HwScsiFindAdapter драйвера miniport получает значение этого параметра из элемента AdapterInterfaceType входного PORT_CONFIGURATION_INFORMATION.

[in] SystemIoBusNumber

Указывает назначенный системой номер шины ввода-вывода, к которой подключен адаптер HBA. Подпрограмма HwScsiFindAdapter получает значение этого параметра из элемента SystemIoBusNumber входного PORT_CONFIGURATION_INFORMATION.

[in] IoAddress

Указывает базовый адрес диапазона, используемого адаптером шины, относительно шины. Подпрограмма HwScsiFindAdapter получает значение для этого параметра из одного из элементов AccessRanges в PORT_CONFIGURATION_INFORMATION, если драйвер порта предоставляет сведения о конфигурации диапазона. В противном случае этот адрес может быть значением, возвращаемым ScsiPortGetBusData , или значением по умолчанию, предоставленным драйвером мини-порта. Не используйте базовый адрес, равный нулю, так как состояние успешного возврата может конфликтовать с состоянием ошибки (NULL).

[in] NumberOfBytes

Указывает размер диапазона в байтах, который должно охватывать сопоставление. Подпрограмма HwScsiFindAdapter получает значение этого параметра из того же элемента AccessRanges , что и IoAddress , если драйвер порта предоставляет сведения о конфигурации диапазона. В противном случае это значение может быть возвращено ScsiPortGetBusData или предоставленным драйвером мини-порта по умолчанию. В любом случае драйвер не должен обращаться к оборудованию за пределами возвращаемого сопоставленного диапазона.

[in] InIoSpace

Значение TRUE указывает, что диапазон для сопоставления находится в пространстве ввода-вывода, а драйвер мини-порта передает сопоставленные адреса в этом диапазоне в ScsiPort... ПортXxx для связи с HBA. Подпрограмма HwScsiFindAdapter получает значение этого параметра из того же элемента AccessRanges, что и IoAddress. Обратите внимание, что драйвер мини-порта должен инвертировать значение элемента InMemorySpace в элементе типа ACCESS_RANGE перед его передачей в ScsiPortGetDeviceBase в качестве аргумента InIoSpace . ЗНАЧЕНИЕ FALSE указывает, что диапазон, который необходимо сопоставить, находится в пространстве памяти.

Возвращаемое значение

ScsiPortGetDeviceBase возвращает сопоставленный логический базовый адрес для заданного IoAddress , если он успешно сопоставил заданный диапазон от IoAddress до NumberOfBytes. Если не удается сопоставить заданный диапазон, ScsiPortGetDeviceBase возвращает значение NULL.

Комментарии

Платформы операционных систем на основе NT могут иметь несколько типов автобусов ввода-вывода и несколько автобусов ввода-вывода одного типа. Кроме того, HAL может сопоставлять пространство ввода-вывода с памятью на некоторых платформах.

Следовательно, водитель мини-порта не может использовать адреса диапазона доступа относительно шины для связи со своим адаптером безопасности. Чтобы обеспечить переносимость драйверов мини-портов на компьютерах на основе CISC и RISC, адреса, которые они используют для доступа к HBA, должны быть преобразованы с помощью ScsiPortGetDeviceBase.

Каждый драйвер мини-порта должен использовать адреса логического диапазона системного пространства, сопоставленные с помощью ScsiPortGetDeviceBase, для взаимодействия со своими адаптерами HBA. Вызовы ScsiPort... Подпрограммам Port/RegisterXxx требуются эти сопоставленные логические адреса.

ScsiPortGetDeviceBase можно вызывать несколько раз в зависимости от того, сколько HBA поддерживает драйвер мини-порта и сколько диапазонов доступа требуется каждому адаптеру HBA. Каждый сопоставленный диапазон соответствует диапазону адресов устройств относительно шины, указанным в элементе типа ACCESS_RANGE массива AccessRanges .

ScsiPortGetDeviceBase можно вызывать только из подпрограммы HwScsiFindAdapter драйвера мини-порта или из HwScsiAdapterControl, если тип элемента управления — ScsiSetRunningConfig. Вызовы из других подпрограмм драйвера мини-порта приводят к сбою системы или неправильной работе вызывающего объекта.

Следуйте приведенным ниже рекомендациям по вызову ScsiPortGetDeviceBase.

  • Если HwScsiFindAdapter использует предоставленный драйвером минипорта набор диапазонов доступа относительно шины по умолчанию или значений, возвращаемых ScsiPortGetBusData, он должен вызвать ScsiPortValidateRange перед попыткой вызова ScsiPortGetDeviceBase.
  • Если HwScsiFindAdapter определяет, что конкретный адаптер HBA не поддерживается драйвером мини-порта, он должен вызвать ScsiPortFreeDeviceBase , чтобы освободить сопоставления, настроенные для взаимодействия с этим адаптером HBA.
Логический адрес, возвращаемый ScsiPortGetDeviceBase , должен использоваться для всех последующих ссылок на оборудование, но не должен добавляться в спецификацию AccessRanges в PORT_CONFIGURATION_INFORMATION. Модули записи драйверов miniport не должны делать предположений о том, сколько битов используется в логическом базовом адресе, возвращаемом ScsiPortGetDeviceBase.

ScsiPortGetDeviceBase использует SCSI_PHYSICAL_ADDRESS для представления адресов относительно шины.

typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;

Тип SCSI_PHYSICAL_ADDRESS — это независимый от операционной системы тип данных, который драйверы мини-порта SCSI используют для представления физических адресов или адресов относительно шины.

Примечание Модели драйверов портов SCSI и драйверов мини-портов SCSI могут быть изменены или недоступны в будущем. Вместо этого рекомендуется использовать модели драйверов Storport и драйверов для мини-портов Storport .
 

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть srb.h (включая Miniport.h, Scsi.h)
Библиотека Scsiport.lib

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

ACCESS_RANGE

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortFreeDeviceBase

ScsiPortGetBusData

ScsiPortValidateRange