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 空间中。
Reserved
言论
每个ACCESS_RANGE都是传递给微型端口驱动程序 HwScsiFindAdapter 例程的 PORT_CONFIGURATION_INFORMATION 结构中的 AccessRanges 数组元素。
如果可能,特定于 OS 的端口驱动程序在调用微型端口驱动程序的 HwScsiFindAdapter 例程之前,为微型端口驱动程序设置每个访问范围元素的相对于总线的 HBA 范围。 否则,端口驱动程序将为其提供配置信息的范围元素进行零。
如果端口驱动程序确实提供范围,微型端口驱动程序的 HwScsiFindAdapter 例程应仅使用提供的地址,并且 绝不 尝试使用自己设计的地址在同一总线上查找其他 HBA。 当端口驱动程序提供范围信息时,尝试访问其他总线相对端口或内存范围,尤其是在某些设备在 x86 实际模式下初始化的仅限 x86 的系统中,可能会导致总线上的其他设备无法初始化,甚至导致系统无法启动进程。
每个微型端口驱动程序都应有一组相对于总线的默认范围,以尝试是否特定于 OS 的端口驱动程序无法提供信息。 微型端口驱动程序必须调用 ScsiPortValidateRange,以检查任何微型端口驱动程序提供的访问范围的安全性 ,然后 它尝试映射具有 ScsiPortGetDeviceBase 的此类范围,并使用返回的逻辑地址访问适配器,尤其是其中一个 HBA 具有 BIOS 时。
微型端口驱动程序为PORT_CONFIGURATION_INFORMATION中特定于 OS 的端口驱动程序填充的任何访问范围都必须将 RangeStart 成员设置为相对于总线的地址,例如由 ScsiPortGetBusData返回的值。
应存储由 ScsiPortGetDeviceBase 返回的相应基逻辑地址, 通常位于微型端口驱动程序的设备扩展中,作为映射的 I/O 端口或内存地址范围的 RangeStart 地址,用于调用 ScsiPortReadXxx 和 ScsiPortWriteXxx 例程。
要求
| 要求 | 价值 |
|---|---|
| 标头 | strmini.h (包括 Srb.h、Storport.h、Strmini.h) |
另请参阅
PORT_CONFIGURATION_INFORMATION (SCSI)