WDI TX 路径
TX 路径组件
下图显示了 TX 路径组件。
TX 描述符
TAL 使用目标 TX 描述符 (TTD) 通知目标帧的大小和位置。
不同的目标 WLAN 设备可能具有不同的 TTD 定义。 因此,TTD 编程是在 TAL 中根据 WDI 提供的信息完成的。 为了对 TTD 进行编程,WDI 指定一个 NET_BUFFER_LIST (NBL) ,可通过该NET_BUFFER_LIST访问帧元数据,例如帧 ID、扩展 TID、适用的任务卸载和加密豁免操作。
TAL 将 TTD 和 TX 帧传输到目标。 从 TTD 中的元数据和帧标头中的字段,目标可以确定传输帧的预期接收方及其传输方式。
最终,目标将传输帧,并在传输 (并可能完成传输) 时通知主机。 目标使用一条 TX 完成消息,该消息指定传输是否成功,以及已完成传输的帧的 ID。
基本操作
传输数据帧涉及 WLAN 主机 TX 软件中的以下步骤。
- WDI 从 NDIS 获取 NBL,如果 WDI 在对等TID 队列模式下) 运行,则执行 TX 分类 (。
- NBL 链接到通过查询 TAL 获取的 TTD。 为了提高效率,TAL 可能会从旁观列表预先分配 TTD。
- TxMgr 根据 PeerTID 或端口对传输帧进行排队,具体取决于 TargetPriorityQueueing 模式。
- TxMgr 将 NBL 和附加的 TTD 提供给 TxEngine,后者又将其传递给 TIL 以传输到目标。 例如,TxEngine/TIL 在使帧可用于 DMA) 之前,不会对帧 (排队。
- TxEngine 使用传输完成 (和传输完成指示(如果适用) )指示 TxEngine/目标拥有的帧的更新 TX 状态。
- 当帧既是 Transfer Complete (并且如果需要,则 TX Complete) ,TxMgr 使用帧 ID 查找 NBL,将 TTD 返回到 TxEngine 的池,并将帧发送到 NDIS。
主机 - 目标 TX 流控制
TX 流控制是必要的,以避免 TIL 和目标资源过多。
目标信用计划和暂停/恢复机制
TxMgr 根据基于额度的方案排队并将 TX 帧传输到目标。 目标为 TX 引擎提供信用更新指示,指定可用于目标上其他帧的资源。 目标上每个帧用尽的点数在 TTD 编程时确定。 作为给定队列发送操作的一部分传递给 TxEngine 的帧数受可用额度和 FIFO 顺序行头的帧成本的限制。
对 TxMgr,信用额度有一个抽象单元。 Target/TxEngine 应使用对特定实现最有用的任何信用定义。
TAL 使用暂停/恢复指示来停止/恢复来自给定端口或发往具有给定 TID 的特定接收器的 TX 流量流。 如果 TxEngine 在可用额度低于最大帧成本时收到发送请求,则 TxEngine 会暂停来自 TxMgr (跨所有端口) 的流量,直到目标进行下一次信用更新。
当 WDI 处于端口排队模式 (TargetPriorityQueueing 等于 TRUE) 时,由于不存在对等、TID 分类和队列,仅在端口或适配器级别允许/定义暂停/恢复指示。
限制发送操作的最大帧计数
为了避免在 TIL ((例如,DMA 速率匹配队列) )中使用临时队列,TxMgr 在发送操作中传递给 TxEngine 的帧数受 TxEngine 指定的最大计数的限制。 此限制可能特定于 TxMgr 尝试发送的队列,并且随着 TIL 中的可用空间增加而随时间推移而更改。
主机 - 目标 TX 传输计划
TxMgr 使用单个 TX 线程将帧提交到 TxEngine。 只要存在积压队列,就会有一个 TX 线程主动向 TxEngine 提交帧。
TxMgr 根据队列模式按以下方式计划队列。
对于 WDI 端口排队 (TargetPriorityQueueing 等于 TRUE) ,TxMgr 服务队列使用赤字轮循机制 (DRR 在所有积压端口队列中) 。
对于 WDI PeerTID 队列 (TargetPriorityQueueing 等于 FALSE) ,TxMgr 服务根据 AC 优先级排队,而不会耗尽任何队列,并确保 TIL 和目标中的任何瓶颈资源以公平的方式在 RA-TID 流之间共享。 它可以防止慢速流占用此类资源的不成比例份额。
通常,计划程序使用 DRR 来选择要在任何给定时间从中传输的对等 TID 队列。 对于每个队列,DRR 关联一个量子参数,该参数限制每轮从队列发送的八位字节数。 TxEngine 在涉及队列的每个发送操作中更新此参数,以匹配一个或两个传输机会的预期大小。
通常,DRR 计划程序仅服务与优先级最高的积压 AC 关联的 RA-TID 队列。 为了防止饥饿,计划程序会定期对所有积压队列执行 DRR。
IHV 保留扩展 TID 的优先级映射
IHV 在 IHV 保留范围内注入的具有扩展 TID 的帧映射到以下扩展的AC,以便进行优先级计划。 该表按优先级递增的顺序排列。
扩展 TID | 扩展 AC |
---|---|
17 | AC_BK |
18 | AC_BE |
19 | AC_VI |
20 | AC_VO |
21 | AC_PR0 |
22 | AC_PR1 |
23 | AC_PR2 |
24 | AC_PR3 |
对于 WDI 端口队列,无论扩展的 TID 如何,所有注入的帧都受到同等处理。
TxMgr-TxEngine 接口
对 TxEngine 的请求
- MINIPORT_WDI_TX_ABORT
- MINIPORT_WDI_TX_DATA_SEND
- MINIPORT_WDI_TX_TAL_QUEUE_IN_ORDER
- MINIPORT_WDI_TX_TAL_SEND
- MINIPORT_WDI_TX_TAL_SEND_COMPLETE
- MINIPORT_WDI_TX_TARGET_DESC_DEINIT
- MINIPORT_WDI_TX_TARGET_DESC_INIT
来自 TxEngine 的指示
- NDIS_WDI_TX_DEQUEUE_IND
- NDIS_WDI_TX_TRANSFER_COMPLETE_IND
- NDIS_WDI_TX_SEND_COMPLETE_IND
- NDIS_WDI_TX_QUERY_RA_TID_STATE
特定于 TX 的控制请求
特定于 TX 的控制指示
- NDIS_WDI_TX_SEND_PAUSE_IND
- NDIS_WDI_TX_SEND_RESTART_IND
- NDIS_WDI_TX_RELEASE_FRAMES_IND
- NDIS_WDI_TX_INJECT_FRAME_IND