Storport 的接口与 Storport 微型端口驱动程序

Storport 驱动程序与 Storport 微型端口驱动程序之间的通信通过 SCSI 请求块 (SDB) 和微型端口驱动程序回调例程进行。 有关 Storport 微型端口驱动程序回调例程的详细讨论,请参阅 Storport 微型端口驱动程序例程

有关各个 SRB 函数、SRB 标志和 SRB 状态值的概述和定义,请参阅 SCSI_REQUEST_BLOCK

有关微型端口驱动程序必须如何响应每个 SRB 函数的讨论,请参阅 HwStorStartIo

Storport 将 SRB 转发到 Storport 微型端口驱动程序进行异步处理。 通常,微型端口驱动程序需要一些时间才能实际完成请求。 支持标记队列的主机总线适配器 (HBA) 可以在内部将请求排队,并按照 Storport 分配给每个请求的标记指示的顺序处理这些请求。 SCSI_REQUEST_BLOCK (SRB) 结构包含两个成员,Storport 和微型端口驱动程序使用这些成员来指定在主机适配器的内部队列中应如何排序 SRB:

  • QueueTag:Storport 将计数或 “tag” 值分配给每个 SRB 的 QueuedTag 成员。 此标记指示适配器处理数据包的顺序。 标记值还允许 Storport 跟踪哪些 SRB 仍然未完成、已成功完成以及哪些 SRB 已超时。

  • QueueAction:指示在 SRB 中设置SRB_FLAGS_QUEUE_ACTION_ENABLE标志时要使用的标记队列消息 。SrbFlags。 微型端口使用 QueueAction 是特定于微型端口的。 如果 HBA 支持 SCSI 规范,则基于 SCSI 的微型端口可以遵循该规范。 QueueAction 可以是以下值之一:

含义
SRB_SIMPLE_TAG_REQUEST 将所有较旧的SRB_HEAD_OF_QUEUE_TAG_REQUEST和SRB_ORDERED_QUEUE_TAG_REQUEST请求都结束后,将请求排入队列,并按任意顺序执行该请求。
SRB_ORDERED_QUEUE_TAG_REQUEST 仅当所有较旧的SRB_HEAD_OF_QUEUE_TAG_REQUEST和所有旧请求都已完成之后,才执行请求。
SRB_HEAD_OF_QUEUE_TAG_REQUEST 将请求放在队列的前面,并在队列中的所有其他请求之前执行该请求,包括所有其他SRB_HEAD_OF_QUEUE_TAG_REQUEST标记的请求。

有关详细信息,请参阅 SCSI 规范。