系列文章目录
XHCI 1.2b 规范摘要(一)
XHCI 1.2b 规范摘要(二)
XHCI 1.2b 规范摘要(三)
XHCI 1.2b 规范摘要(四)
XHCI 1.2b 规范摘要(五)
XHCI 1.2b 规范摘要(六)
XHCI 1.2b 规范摘要(七)
XHCI 1.2b 规范摘要(八)
XHCI 1.2b 规范摘要(九)
XHCI 1.2b 规范摘要(十)
XHCI 1.2b 规范摘要(11)
XHCI 1.2b 规范摘要(12)
文章目录
- 系列文章目录
- 6 数据结构(Data Structures)
- 6.3 TRB 环(TRB Ring)
- 6.4 传输请求块 (TRB)
- 6.4.1 传输 TRB(Transfer TRBs)
- 6.4.1.1 普通 TRB(Normal TRB)
- 6.4.1.2 控制 TRB(Control TRBs)
- 6.4.1.2.1 Setup Stage TRB
- 6.4.1.2.2 Data Stage TRB
- 6.4.1.2.3 Status Stage TRB
- 6.4.1.3 Isoch TRB
- 6.4.1.4 无操作 TRB(No Op TRB)
- 6.4.2 事件 TRB(Event TRBs)
- 6.4.2.1 传输事件 TRB(Transfer Event TRB)
- 6.4.2.2 命令完成事件 TRB(Command Completion Event TRB)
- 6.4.2.3 端口状态改变事件 TRB
- 6.4.2.4 带宽请求事件 TRB
- 6.4.2.5 门铃事件 TRB
- 6.4.2.6 主机控制器事件 TRB
- 6.4.2.7 设备通知事件 TRB
- 6.4.2.8 MFINDEX 包裹事件 TRB
- 6.4.3 命令 TRB
- 6.4.4 其他 TRB
- 6.4.5 TRB 完成代码(TRB Completion Codes)
- 6.4.6 TRB 类型
- 6.5 事件环分段表(Event Ring Segment Table)
- 6.6 暂存器缓冲区数组(Scratchpad Buffer Array)
6 数据结构(Data Structures)
6.3 TRB 环(TRB Ring)
TRB Ring 是一组 TRB (Transfer Request Block) 结构,xHCI 会将其用作循环队列,与主机进行通信。有关 Ring 操作的详细说明,请参阅第 4.9 节。
6.4 传输请求块 (TRB)
Transfer Request Block (TRB) 。
传输请求块 (TRB)是构建所有 xHC USB 传输的基本构建块。所有传输请求块都应在 16 字节边界上对齐。
每个 TRB 都具有第 4.11.1 节中描述的基本格式。TRB 用于 xHC 执行的所有事务,包括发送到主机控制器的命令、主机控制器生成的事件以及与 USB 端点相关的事务。
注意:供应商定义的 TRB 应支持 TRB 类型和周期位字段。
6.4.1 传输 TRB(Transfer TRBs)
传输 TRB 应位于传输环上。传输环上的工作项称为传输描述符 (TD,Transfer Descriptor),由一个或多个传输 TRB 数据结构组成。本节介绍与传输相关的 TRB。
注意:如果指定了零长度传输,则 xHC 将忽略数据缓冲区指针字段,无论 IDT 标志的状态如何。
注意:传输 TRB 引用的数据缓冲区不得跨越 64KB 边界。如果物理数据缓冲区跨越 64KB 边界,则软件应链接多个 TRB 来描述缓冲区。
6.4.1.1 普通 TRB(Normal TRB)
普通 TRB 有多种用途;专门用于批量和中断传输环的 normal (普通)和 Scatter/Gather (分散/聚集)操作,为 Isoch 传输环上的细粒度和粗粒度 Scatter/Gather (分散/聚集)操作定义附加数据缓冲区,以及为控制传输环定义数据阶段信息。有关普通 TRB 的使用信息,请参阅第 4.11.2.1 节。有关 xHCI 分散/聚集支持的概述,请参阅第 3.2.8 节。
6.4.1.2 控制 TRB(Control TRBs)
控制传输需要两个或三个 TD 来定义它们: Setup Stage (设置阶段)TD 后跟 Status Stage (状态阶段)TD ,如果传输需要数据阶段,则可选的 Data Stage (数据阶段)TD 将位于设置阶段和状态阶段 TD 之间。本节定义组成各个 TD 的 TRB。有关 xHCI 控制传输的更多信息,请参阅第 4.11.2.2 节。
注意:IOC 标志应仅在控制传输的状态阶段 TRB 中设置。
6.4.1.2.1 Setup Stage TRB
Setup Stage TRB 由系统软件创建,用于在控制端点上启动 USB Setup 数据包。有关设置阶段 TRB 和控制端点操作的更多信息,请参阅第 3.2.9 节。另请参阅 USB2 规范中的第 8.5.3 节,了解有关 “控制传输” 的描述。
6.4.1.2.2 Data Stage TRB
数据阶段 TRB 用于生成 USB 控制传输的数据阶段事务。有关控制传输和控制端点操作的更多信息,请参阅第 3.2.9 节。另请参阅 USB2 规范中的第 8.5.3 节,了解“控制传输”的描述。
6.4.1.2.3 Status Stage TRB
状态阶段 TRB 用于生成 USB 控制传输的状态阶段事务。有关控制传输和控制端点操作的更多信息,请参阅第 3.2.9 节。
此 TRB 生成的传输事件应反映来自 USB 设备的状态响应。
6.4.1.3 Isoch TRB
Isoch TRB 定义同步数据传输。有关 Isoch TRB 和同步端点操作的更多信息,请参阅第 3.2.11 节。
6.4.1.4 无操作 TRB(No Op TRB)
No Op TRB 提供了一种简单的方法来验证 xHCI 提供的基本传输环机制的操作。可以将其插入到 Transfer Ring 上以生成 Transfer Event 。
6.4.2 事件 TRB(Event TRBs)
事件 TRB 应位于事件环上。事件环上的工作项称为事件描述符 (ED,Event Descriptor)。ED 应仅由一个事件 TRB 数据结构组成。本节介绍与事件相关的 TRB。
6.4.2.1 传输事件 TRB(Transfer Event TRB)
Transfer Event (传输事件)提供与 Transfer TRB (传输 TRB )相关的完成状态。有关 Transfer Event 的使用和操作的更多信息,请参阅第 4.11.3.1 节。
注意:主事件环 (0) 或次要事件环可能会接收 Transfer Event TRB。通常,xHC 应使用原始 Transfer TRB 的 Interrupter Target (中断器目标)字段来确定应接收此事件的 Event Ring (事件环)。有关使用槽上下文中断器目标字段的异常情况,请参阅第 4.17.4 节。
6.4.2.2 命令完成事件 TRB(Command Completion Event TRB)
当命令在命令环上完成时,xHC 应生成命令完成事件 TRB。有关命令完成事件使用的更多信息,请参阅第 4.11.4 节。
注意:主事件环 (0) 应接收所有命令完成事件。
6.4.2.3 端口状态改变事件 TRB
Port Status Change Event TRB 。
每当 PSCEG (Port Status Change Event Generation,端口状态更改事件生成) 变量从 “0” 转换为 “1” 时,xHC 应生成 Port Status Change Event TRB (端口状态更改事件 TRB),例如,状态更改位转换为非零值(CSC、PEC、OCC 等)。有关端口状态更改事件的使用和生成的更多信息,请参阅第 4.19.2 节。有关端口状态更改位的更多信息,请参阅第 5.4.8 节。
注意:主事件环 (0) 应接收所有端口状态更改事件。
6.4.2.4 带宽请求事件 TRB
Bandwidth Request Event TRB 。
当收到 Negotiate Bandwidth Command (协商带宽命令)时,xHC 应生成 Bandwidth Event TRB (带宽事件 TRB)。有关带宽请求事件的更多信息,请参阅第 4.6.13 节。
注意:主事件环 (0,Primary Event Ring) 或次要事件环(Secondary Event Ring)可能会收到 Bandwidth Request Event TRB (带宽请求事件 TRB)。xHC 应使用 Bandwidth Request Event TRB 中 Slot ID 字段索引的 Slot Context 中 Interrupter Target 字段来确定应接收事件的事件环。
6.4.2.5 门铃事件 TRB
Doorbell Event TRB 。
当模拟门铃写入 VF(Virtual Function) 时,xHC 应生成 Doorbell Event TRB (门铃事件 TRB)。如果将相应的 VF 设备插槽分配寄存器的插槽模拟位设置为 “1”,则模拟门铃。请参阅第 7.7.3 节。
注意:主事件环 (0) 应接收所有门铃事件。
6.4.2.6 主机控制器事件 TRB
Host Controller Event TRB 。
主机控制器事件 TRB 是通用 TRB,用于报告 xHC 状态变化和错误情况。
注意:主事件环 (0) 或次事件环可能会接收主机控制器事件 TRB,例如,事件环已满错误。
6.4.2.7 设备通知事件 TRB
Device Notification Event TRB 。
Device Notification Event TRB (设备通知事件 TRB )用于报告从 USB 设备收到的 USB 设备通知 (DEV_NOTIFICATION) 事务数据包中的信息。有关设备通知的更多信息,请参阅第 4.13 节。
注意:主事件环 (0) 或次事件环可能会接收设备通知事件 TRB。如果在 DNCTRL 寄存器 (5.4.4) 中启用,xHC 应使用由 Device Notification Event TRB Slot ID 字段索引的 Slot Context 中 Interrupter Target 字段来确定应接收事件的事件环。
6.4.2.8 MFINDEX 包裹事件 TRB
MFINDEX Wrap Event TRB 。
6.4.3 命令 TRB
6.4.4 其他 TRB
6.4.5 TRB 完成代码(TRB Completion Codes)
6.4.6 TRB 类型
6.5 事件环分段表(Event Ring Segment Table)
6.6 暂存器缓冲区数组(Scratchpad Buffer Array)
☆