ACCESS_RANGE 结构 (srb.h)

ACCESS_RANGE描述 HBA 使用的内存或 I/O 端口范围。

注意 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 使用 7 个寄存器,但响应 8 个寄存器,则应将此成员设置为 8。

RangeInMemory

指示当 为 TRUE 时,范围在内存中,而不是在 I/O 空间中。 如果 为 FALSE,则范围在 I/O 空间中。

注解

每个ACCESS_RANGE都是PORT_CONFIGURATION_INFORMATION结构中的 AccessRanges 数组元素,该元素传递到微型端口驱动程序的 HwScsiFindAdapter 例程。

如果可能,特定于 OS 的端口驱动程序在调用微型端口驱动程序的 HwScsiFindAdapter 例程之前,为微型端口驱动程序设置每个具有总线相对 HBA 范围的访问范围元素。 否则,端口驱动程序会将无法提供配置信息的范围元素归零。

如果端口驱动程序确实提供范围,微型端口驱动程序的 HwScsiFindAdapter 例程应仅使用提供的地址,并且 不应 尝试使用自己设计的地址在同一总线上查找其他 HBA。 当端口驱动程序提供范围信息时,尝试访问其他相对于总线的端口或内存范围,尤其是在某些设备在 x86 实际模式下初始化的仅限 x86 的系统中,可能会导致总线上的其他设备初始化失败,甚至导致系统启动过程失败。

如果特定于 OS 的端口驱动程序无法提供信息,每个微型端口驱动程序应具有一组相对于总线的默认范围,以尝试。 微型端口驱动程序必须调用 ScsiPortValidateRange 以检查任何微型端口驱动程序提供的访问范围的安全性,然后才能尝试使用 ScsiPortGetDeviceBase 映射此类范围,并使用返回的逻辑地址访问适配器,尤其是当其中一个 HBA 具有 BIOS 时。

微型端口驱动程序为PORT_CONFIGURATION_INFORMATION中特定于 OS 的端口驱动程序填充的任何访问范围都必须将 RangeStart 成员设置为相对于总线的地址,例如 ScsiPortGetBusData 返回的值。

ScsiPortGetDeviceBase 返回的相应基逻辑地址通常存储在微型端口驱动程序的设备扩展中,作为映射范围的 I/O 端口或内存地址的 RangeStart 地址,用于调用 ScsiPortReadXxxScsiPortWriteXxx 例程。

要求

要求
Header srb.h (包括 Srb.h、Storport.h、Strmini.h)

另请参阅

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortConvertUlongToPhysicalAddress

ScsiPortGetBusData

ScsiPortGetDeviceBase

ScsiPortValidateRange