HW_INITIALIZATION_DATA结构(srb.h)

每个 SCSI 微型端口驱动程序的 DriverEntry 例程都必须使用零初始化,然后填写特定于 OS 的端口驱动程序的相关HW_INITIALIZATION_DATA(SCSI)信息。

注意 SCSI 端口驱动程序和 SCSI 微型端口驱动程序模型将来可能会更改或不可用。 相反,我们建议使用 Storport 驱动程序Storport 微型端口 驱动程序模型。
 

语法

typedef struct _HW_INITIALIZATION_DATA {
  ULONG               HwInitializationDataSize;
  INTERFACE_TYPE      AdapterInterfaceType;
  PHW_INITIALIZE      HwInitialize;
  PHW_STARTIO         HwStartIo;
  PHW_INTERRUPT       HwInterrupt;
  PHW_FIND_ADAPTER    HwFindAdapter;
  PHW_RESET_BUS       HwResetBus;
  PHW_DMA_STARTED     HwDmaStarted;
  PHW_ADAPTER_STATE   HwAdapterState;
  ULONG               DeviceExtensionSize;
  ULONG               SpecificLuExtensionSize;
  ULONG               SrbExtensionSize;
  ULONG               NumberOfAccessRanges;
  PVOID               Reserved;
  BOOLEAN             MapBuffers;
  BOOLEAN             NeedPhysicalAddresses;
  BOOLEAN             TaggedQueuing;
  BOOLEAN             AutoRequestSense;
  BOOLEAN             MultipleRequestPerLu;
  BOOLEAN             ReceiveEvent;
  USHORT              VendorIdLength;
  PVOID               VendorId;
  union {
    USHORT ReservedUshort;
    USHORT PortVersionFlags;
  };
  USHORT              DeviceIdLength;
  PVOID               DeviceId;
  PHW_ADAPTER_CONTROL HwAdapterControl;
} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;

成员

HwInitializationDataSize

指定此结构的大小(以字节为单位),sizeof() 返回。 实际上,此成员指示微型端口驱动程序正在使用的此结构的版本。 微型端口驱动程序的 DriverEntry 例程应为端口驱动程序设置此成员的值。

AdapterInterfaceType

指定 HBA 连接到的 I/O 总线类型,可以是下列类型之一:内部IsaEisaMicroChannelTurboChannelPCIBus。 但是,将来将支持其他类型的公共汽车。 支持的总线类型的上限始终 MaximumInterfaceType

如果设置为 PCIBus,则微型端口驱动程序必须提供 VendorIdLengthVendorIdDeviceIdLength以及 DeviceId 成员的值。

HwInitialize

指向微型端口驱动程序 HwScsiInitialize 例程的指针,这是所有微型端口驱动程序所需的入口点。 此例程的原型 PHW_INITIALIZE

HwStartIo

指向微型端口驱动程序的 HwScsiStartIo 例程的指针,这是所有微型端口驱动程序所需的入口点。 此例程的原型 PHW_STARTIO

HwInterrupt

指向微型端口驱动程序的 HwScsiInterrupt 例程的指针,这是生成中断的 HBA 的任何微型端口驱动程序所需的入口点。 如果微型端口驱动程序不需要 ISR,则设置为 NULL。 此例程的原型 PHW_INTERRUPT

HwFindAdapter

指向微型端口驱动程序 HwScsiFindAdapter 例程的指针,这是所有微型端口驱动程序所需的入口点。 此例程的原型 PHW_FIND_ADAPTER

HwResetBus

指向微型端口驱动程序的 HwScsiResetBus 例程的指针,这是所有微型端口驱动程序所需的入口点。 此例程的原型 PHW_RESET_BUS

HwDmaStarted

如果微型端口驱动程序的 HwScsiDmaStarted 例程(即系统 DMA 控制器)使用系统 DMA,则指向微型端口驱动程序的指针。 如果 HBA 是总线主数据库或使用 PIO,则设置为 NULL。 此例程的原型 PHW_DMA_STARTED

HwAdapterState

指向微型端口驱动程序的 HwScsiAdapterState 例程的指针,该例程是 HBA 的微型端口驱动程序的必需入口点,这些驱动程序与依赖于作系统的 x86 平台仅端口驱动程序相关联,这些驱动程序必须在 x86 受保护模式和实际处理器模式之间切换。 如果微型端口驱动程序不需要 HwScsiAdapterState 例程,请将此成员设置为 NULL。 具有 BIOS 的 HBA 的微型端口驱动程序必须具有 HwScsiAdapterState 例程才能与仅限 x86 的端口驱动程序兼容,并且可移植到仅 x86 的作系统环境。 此例程的原型 PHW_ADAPTER_STATE

DeviceExtensionSize

指定微型端口驱动程序为其每个 HBA 设备扩展所需的大小(以字节为单位)。 微型端口驱动程序使用其设备扩展作为驱动程序确定的 HBA 信息的存储。 特定于 OS 的端口驱动程序使用零初始化它分配的每个设备扩展,并在每次调用微型端口驱动程序时将指针传递给特定于 HBA 的设备扩展,但 DriverEntry 例程除外。 给定的大小不包括每个逻辑单元存储请求的任何微型端口驱动程序,如下所述。

SpecificLuExtensionSize

指定微型端口驱动程序在其每逻辑单元存储(如果有)时所需的大小(以字节为单位)。 微型端口驱动程序可以使用其 LU 扩展作为存储,以存储有关总线上的 SCSI 外围设备的驱动程序确定的逻辑单元信息。 特定于 OS 的端口驱动程序使用零初始化它分配的每个 LU 扩展。 如果微型端口驱动程序不维护需要存储的每个 LU 信息,请将此成员保留为零。 此值基于 HBA 能够接收 32 位地址的假设,无论控制器实际支持什么。 如果在 LUN 或 SRB 扩展中需要额外的空间来处理 64 位地址,则必须在将此值与例程(如 ScsiPortGetUncachedExtension)一起使用之前对其进行适当的调整。

SrbExtensionSize

指定微型端口驱动程序在其每个请求存储(如果有)所需的大小(以字节为单位)。 微型端口驱动程序可以将 SRB 扩展用作驱动程序确定的特定于请求的信息的存储,例如处理特定请求所需的数据。 特定于 OS 的端口驱动程序不会初始化 SRB 扩展,而是在它发送到微型端口驱动程序的每个 SRB 中设置指向此存储的指针。 HBA 硬件可以安全地访问 SRB 扩展。 如果微型端口驱动程序不维护需要存储的每个 SRB 信息,请将此成员保留为零。 此值基于 HBA 能够接收 32 位地址的假设,无论控制器实际支持什么。 如果在 LUN 或 SRB 扩展中需要额外的空间来处理 64 位地址,则必须在将此值与例程(如 ScsiPortGetUncachedExtension)一起使用之前对其进行适当的调整。

NumberOfAccessRanges

指定适配器使用的访问范围。 每个地址都是内存地址或 I/O 端口地址的范围。 典型的 HBA 使用两个范围,一个用于其 I/O 端口,另一个用于其设备内存范围。

Reserved

保留供系统使用,不能供微型端口驱动程序使用。

MapBuffers

指示当 TRUE时,所有数据缓冲区地址都必须映射到虚拟地址,以便微型端口驱动程序访问。 FALSE时,数据缓冲区地址不必映射到虚拟地址。

NeedPhysicalAddresses

指示当 TRUE时,微型端口驱动程序需要根据 HBA 的要求将其设备、任何每 LU 和任何每个 SRB 扩展地址以及 SRB 缓冲区地址转换为物理地址。 FALSE时,这些地址都不必转换为物理地址。

TaggedQueuing

指示当 TRUE时,微型端口驱动程序可以支持 SCSI 标记队列。 FALSE时,微型端口驱动程序不支持 SCSI 标记的队列。

AutoRequestSense

指示当 TRUE时,HBA 可以执行请求感知作,而无需显式请求执行此作。 FALSE时,HBA 需要显式请求,然后才能执行请求感知作。 只有驱动具有内置固件执行请求感知作的 HBA 的微型端口驱动程序才能将此成员设置为 TRUE

MultipleRequestPerLu

指示当 TRUE时,微型端口驱动程序可以为每个逻辑单元(特别是 HBA 中的多个请求)排队。 FALSE时,微型端口驱动程序无法为每个逻辑单元排队多个请求。 请注意,HBA 必须支持其微型端口驱动程序的自动请求感知才能启用此功能。 如果微型端口驱动程序将此成员设置为 TRUE,则必须将此成员用于此类型的请求的每个 SRB QueueTag 成员,但在SCSI_REQUEST_BLOCK结构的 SrbFlags 成员中未设置SRB_FLAGS_QUEUE_ACTION_ENABLE。

ReceiveEvent

指示当 TRUE时,微型端口驱动程序会驱动支持 SCSI 异步事件的接收事件 SRB 的 HBA。 FALSE时,HBA 不支持 SCSI 异步事件的接收事件 SRB。

VendorIdLength

指定 VendorId 字符串的大小(以字节为单位)。下一步所述。

VendorId

指向标识 HBA 制造商的 ASCII 字节字符串的指针。 此成员与即插即用驱动程序无关。

如果给定的 AdapterInterfaceTypePCIBus,供应商 ID 是 PCI SIG 分配的 USHORT 值,该值必须由微型端口驱动程序转换为字节字符串。 例如,如果分配的 PCI 供应商 ID 值为 1001,则微型端口驱动程序提供的 VendorId 字符串将为 (“1”、“0”、“0”、“1”。

ReservedUshort

保留供系统使用,不能供微型端口驱动程序使用。

PortVersionFlags

DeviceIdLength

指定 DeviceId 字符串的大小(以字节为单位)。接下来介绍。

DeviceId

指向标识微型端口驱动程序支持的 HBA 模型的 ASCII 字节字符串的指针。 此成员与即插即用驱动程序无关。

如果给定的 AdapterInterfaceTypePCIBus,则设备 ID 是由 HBA 制造商分配的 USHORT 值。 微型端口驱动程序必须将 HBA 支持的任何 PCI 设备 ID 值(s)转换为 DeviceId 字节字符串(s),对于 VendorId 成员。 例如,如果微型端口驱动程序可以使用 PCI 设备 ID 8040 和 8050 支持 HBA,则它可能会使用指向字节字符串(“8”、“0”)的指针设置 DeviceId

HwAdapterControl

指向微型端口驱动程序 HwScsiAdapterControl 例程的指针,这是所有 PnP 微型端口驱动程序所需的入口点。 如果微型端口驱动程序不支持即插即用,则将其设置为 NULL

言论

每个微型端口驱动程序必须用零初始化HW_INITIALIZATION_DATA结构,然后才能设置此结构中相关成员的值,并调用 ScsiPortInitialize

Dma64BitAddresses 成员HW_INITIALIZATION_DATA已在 Windows 2000 中消除(请参阅PORT_CONFIGURATION_DATA下的讨论以了解更多详细信息)。

HW_INITIALIZATION_DATA和PORT_CONFIGURATION_INFORMATION都有一对 成员,称为 SpecificLuExtensionSizeSrbExtensionSize 其值处理方式不同于 Windows 2000 之前的两个成员。 微型端口驱动程序必须根据 HBA 能够处理 32 位地址的假设计算 SpecificLuExtensionSizeSrbExtensionSize HW_INITIALIZATION_DATA的初始值。 (有关更多详细信息,请参阅PORT_CONFIGURATION_DATA下的讨论。

要求

要求 价值
标头 srb.h (包括 Srb.h、Strmini.h)

另请参阅

SCSI 微型端口驱动程序 DriverEntry

HwScsiInitialize

SCSI_REQUEST_BLOCK

ScsiPortInitialize