系列文章目录
XHCI 1.2b 规范摘要(一)
XHCI 1.2b 规范摘要(二)
XHCI 1.2b 规范摘要(三)
XHCI 1.2b 规范摘要(四)
XHCI 1.2b 规范摘要(五)
XHCI 1.2b 规范摘要(六)
文章目录
- 系列文章目录
- 4 运营模式(Operational Model)
- 4.14 管理传输环(Managing Transfer Rings)
- 4.14.1 通用调度模型(General Scheduling Model)
- 4.14.1.1 系统总线带宽调度(System Bus Bandwidth Scheduling)
- 4.14.2 周期传输环调度(Periodic Transfer Ring Scheduling)
- 4.14.2.1 同步传输环调度(Isochronous Transfer Ring Scheduling)
- 4.14.2.1.1 高速端点(High-speed endpoints)
- 4.14.2.1.2 全速/高速端点(Full-speed or High-speed endpoints)
- 4.14.2.1.3 增强的SuperSpeed端点(Enhanced SuperSpeed endpoints)
- 4.14.2.1.4 同步调度阈值(Isochronous Scheduling Threshold)
- 4.14.3 中断传输环调度(Interrupt Transfer Ring Scheduling)
- 4.14.3.1 低、全、高速端点(Low-, Full-, and High-speed Endpoints)
- 4.14.3.2 增强的SuperSpeed端点(Enhanced SuperSpeed Endpoints)
- 4.14.4 异步传输环调度(Asynchronous Transfer Ring Scheduling)
- 4.14.4.1 增强的超高速突发事务(Enhanced SuperSpeed Burst Transactions)
- 4.15 挂起-恢复(Suspend-Resume)
- 4.15.1 端口挂起(Port Suspend)
- 4.15.1.1 选择性挂起(Selective Suspend)
- 4.15.1.2 功能挂起(Function Suspend)
- 4.15.2 端口恢复(Port Resume)
- 4.15.2.1 设备初始化(Device Initiated)
- 4.15.2.2 主机初始化(Host Initiated)
- 4.15.2.3 唤醒事件(Wakeup Events)
- 4.16 带宽管理(Bandwidth Management)
- 4.16.1 带宽协商(Bandwidth Negotiation)
- 4.16.2 带宽域(Bandwidth Domains)
- 4.17 中断(Interrupters)
- 4.17.1 中断器映射(Interrupter Mapping)
- 4.17.2 中断管理(Interrupt Moderation)
- 4.17.3 中断引脚支持(Interrupt Pin Support)
- 4.17.4 中断目标识别(Interrupter Target Identification)
- 4.17.5 中断阻塞(Interrupt Blocking)
- 4.18 传输定义和属性(Transfer Definition and Attributes)
- 4.18.1 禁止窥探(No snoop)
- 4.18.2 无窥探和宽松的 USB 流量排序
- 4.18.2.1 负载没有 Snoop 选项(No Snoop option for payload)
- 4.18.2.2 Scratchpad 引用没有 Snoop 选项
4 运营模式(Operational Model)
4.14 管理传输环(Managing Transfer Rings)
本节概述了主机控制器如何与传输环交互。
系统软件应将设备端点描述符(和 SuperSpeed 端点伴侣描述符)字段转换为适当的端点上下文间隔、最大数据包大小、最大突发大小和倍数值。请参阅 Section 6.2.3 以了解 Endpoint Context 的定义。
xHC 使用端点上下文中的最大数据包大小和最大突发大小字段来管理 USB 上的事务。
传输描述符 (TD) 允许软件定义由非连续主机内存缓冲区构成的连续数据块,这些数据块应传递到 USB 设备或从 USB 设备传递。
TD 传输大小由组成 TD 的所有 TRB 中的 TRB 传输长度字段的总和定义。
对于 IN 管道,设备可以通过在 TD 耗尽之前发出短数据包来截断与 TD 相关的数据传输。在这种情况下,xHC 应退出接收短数据包的 TD,并前进到传输环或入队指针(即循环位转换)上的下一个 TD,以先遇到的为准。
如果在接收短数据包的 TRB 中设置了完成时中断 (IOC) 或短数据包中断 (ISP) 标志,则应生成传输事件,并将完成代码设置为短数据包。
当端点在 xHC 的管道调度中时,它被视为活动端点,否则被视为非活动端点。按响运行状态端点的门铃将激活它,xHC 应将端点置于其管道调度中。当端点处于活动状态时,xHC 应主动处理其传输环上的 TD。如果端点的传输环已耗尽或端点退出运行状态,则端点将从 xHC 的管道调度中拉出并置于非活动状态。软件可以按响运行状态端点的门铃,以激活非活动端点。
总线实例 (BI) 表示 BI 支持速度的“单位”总线带宽。USB 总线的比特率(例如 SS 5Gb/s、HS 480Mb/s 等)不应与“总可用带宽”相混淆,后者是实际通过 BI 移动数据的最大可用带宽。
总可用带宽确定 BI 移动实际数据的能力。根据经验,总可用带宽将至少比 BI 的比特率低 20%,甚至更多,具体取决于数据包大小的组合。另请注意,多个根集线器端口可能共享单个 BI 的带宽。BI 到根集线器端口的映射取决于 xHC 实现,不会暴露给软件。
在每个 IN 事务期间,xHC 应使用最大数据包大小来检测数据包杂音错误。如果检测到串扰错误,则应为有问题的 TRB 生成传输事件,并将完成代码设置为“串扰检测到错误”。
当 xHC 检测到传输环在执行 TP 或 DP 后将耗尽时(例如,传输环上最后一个 TD 的最后一个 TRB 的最后一个数据包),它应将 ACK TP 或 DP 数据包待处理 (PP) 位清除为“0”。如果最大退出延迟大于“0”,则 xHC 应清除每个 Isoch TD 的最后一个数据包中的数据包待处理标志。在 xHC 生成的所有其他 ACK TP 或 DP 中,数据包待处理位应设置为“1”。
4.14.1 通用调度模型(General Scheduling Model)
当正在运行的端点的门铃响起时,xHC 会将端点放在管道调度中。xHC 通常为每个总线实例维护两个管道调度,一个用于周期性管道(Isoch 和中断端点),另一个用于异步管道(控制和批量)。
每次通过管道调度时,端点都会获得一个“服务机会”。服务机会 (SO) 是 xHC 为特定端点在 USB 上移动数据包分配的时间段。
根据端点类型和设置,服务机会 (SO) 期间可能会执行 1 到 3 个 USB 事务。USB 标准事务传输单个数据包 (DP),但单个 USB 突发事务可以传输多个 DP。
最大服务机会数据包数 (MSOPC) 是 xHC 在一个服务机会 (SO) 期间应安排的最大 DP 数。端点的 MSOPC 值由端点上下文字段定义的数据包数设置; (最大突发大小 +1)(乘数 + 1)。
传输描述符数据包计数 (TDPC) 是移动 TD 定义的所有数据所需的数据包数量。请注意,部分或零长度数据包会将此计数增加 1。
传输环数据包计数 (TRPC) 是传输环上所有 TD 的 TDPC 的总和。
服务机会数据包计数 (SOPC) 是 xHC 在 SO 期间实际调度的数据包数量。SOPC 值应在 SO 开始时初始化,并在 SO 的每个事务或重试完成时递减。当 SOPC 达到零时,当前端点的 SO 已完成,xHC 应为计划中的下一个端点启动 SO。重试可能会终止当前 SO 并继续下一个 SO。
通常 SOPC 小于或等于 MSOPC,但 xHC 可以将 SOPC 限制为小于 MSOPC 的值。如果只有一个端点在管道调度中,SOPC 可能会大于 MSOPC,例如,总线上的连续突发。有关 SOPC 使用的更多详细信息,请参阅下面的各个管道类型讨论。
分配给定期调度的端点由 xHC 通过寻址设备和配置端点命令严格控制,以确保定期管道调度消耗的总可用带宽不超过最大百分比。任何未被定期管道消耗的 USB 带宽都可用于异步管道。
注意:总可用带宽的“最大百分比”取决于定期管道的速度。有关更多信息,请参阅第 4.14.2 节。
分配给异步调度的端点被视为“尽力而为”,可能会消耗任何未被定期管道消耗的 USB 带宽。异步管道调度中的每个端点在每次通过调度时都会获得一个服务机会 (SO)。
4.14.1.1 系统总线带宽调度(System Bus Bandwidth Scheduling)
系统总线带宽是有限的,尤其是在 xHC 通过总线连接到系统的情况下,该总线提供的带宽低于它支持的 USB 总线实例。为确保 USB 端点的一致和可靠运行,xHC 应使用类似于管理与端点关联的 USB 带宽的方法来管理与端点关联的系统总线活动。
4.14.2 周期传输环调度(Periodic Transfer Ring Scheduling)
Isoch 和 Interrupt 端点定义 “定期” 传输。定期传输可在 USB 上提供有保证的带宽。
周期性 TD(Periodic TD) 是 Isoch TD 或中断端点传输环上调度的 TD。
周期性管道(Periodic Pipe)是 Isoch 或中断端点。
微帧索引寄存器 (MFINDEX,Microframe Index Register) 在最小间隔时间 (MIT,Minimum Interval Time) 时前进。MIT 等于 125 µs,对应于高速和增强型超高速微帧时序。微帧索引寄存器前进的时间定义为 MIT 边界(MIT Boundary)。
MIT 乘以端点上下文 Interval 字段作为底数为 2 的指数,定义端点服务间隔时间 (ESIT,Endpoint Service Interval Time)。
E
S
I
T
=
2
I
n
t
e
r
v
a
l
∗
125
µ
s
ESIT = 2^{Interval} * 125 µs
ESIT=2Interval∗125µs
所有 ESIT 在时间上都与 MIT 边界对齐。
xHC 使用端点上下文中的最大端点服务时间间隔有效负载 (Max ESIT Payload) 和间隔(Interval)字段来计算它应为周期性端点保留的 USB 带宽。周期性管道可能会持续使用比保留带宽更少的带宽。如果需要,USB 设备会通过其正常的非 USB 定义机制报告实际使用的带宽。
软件应定义每个 ESIT 的最大定期负载,如下所示 USB2 定期端点:
M a x E S I T P a y l o a d i n B y t e s = M a x P a c k e t S i z e ∗ ( M a x B u r s t S i z e + 1 ) Max\ ESIT\ Payload\ in\ Bytes = Max Packet Size * (Max Burst Size + 1) Max ESIT Payload in Bytes=MaxPacketSize∗(MaxBurstSize+1)
4.14.2.1 同步传输环调度(Isochronous Transfer Ring Scheduling)
如果 Isoch 端点上下文处于活动状态,则 xHC 应在每个 ESIT 中处理来自其传输环的一个 Isoch TD 。
软件不得为超过最大 ESIT 有效负载(Max ESIT Payload)的 Isoch 端点 TD 定义 TD 传输大小。
xHC 可以为每个 ESIT 安排多个服务机会 (SO,Service Opportunities)。SOPC 设置为 TDPC 或 MSOPC 中较小的一个。
xHC 应在处理 TD 时计算 TD 传输大小。如果在执行 TD 的 TRB 的过程中,TD 传输大小超过了最大 ESIT 有效负载(Max ESIT Payload)或允许的最大 ESIT 有效负载(Maximum Allowed ESIT Payload),则应为有问题的 TRB 生成带宽超限错误(Overrun Error),并且 xHC 应将其出队指针推进到下一个 Isoch TD 边界或入队指针(即循环位转换),以先遇到的为准。请注意,管道在此错误之后保持活动状态,xHC 只是截断传输并前进到下一个 TD。
如果传输环为空,且未定义 TD 来接收 Isoch IN 数据,则 xHC 应从定期计划中移除该端点,并生成单个传输事件,并将完成代码设置为环溢出(Ring Overrun)。
如果传输环为空,且未定义 TD 来传输 Isoch OUT 数据,则 xHC 应从定期计划中移除该端点,并生成单个传输事件,并将完成代码设置为环欠载(Ring Underrun)。
响起遇到环溢出或环欠载情况的定期端点的门铃应将其重新置于定期计划中。
间隔(Interval)值限制为 2 的倍数。ESIT 边界由 MFINDEX 寄存器的最低有效位转换为 “0” 时定义。例如,如果间隔等于 2 微帧,则 ESIT 边界由 MFINDEX 寄存器的最低有效位转换为 “0” 时定义。如果间隔等于 4 微帧,则 ESIT 边界由 MFINDEX 寄存器的最低有效两位转换为 “0” 来定义。依此类推。
注意:USB3 规范第 8.12.6 节规定 “如果在服务间隔期间没有数据要发送到等时 OUT 端点,则主机不会在间隔期间发送任何内容。” USB2 规范对此问题保持沉默。当 xHC 在传输环上遇到零长度 Isoch OUT TD 时,无论总线速度如何,它都应将零长度 DP 传输到 USB 总线,并在服务间隔内消耗 Isoch TD。如果在 xHC 尝试为 Isoch TD 提供服务时传输环为空,则不应发送任何 DP,并应生成欠载事件(Underrun Event)。
4.14.2.1.1 高速端点(High-speed endpoints)
4.14.2.1.2 全速/高速端点(Full-speed or High-speed endpoints)
4.14.2.1.3 增强的SuperSpeed端点(Enhanced SuperSpeed endpoints)
4.14.2.1.4 同步调度阈值(Isochronous Scheduling Threshold)
4.14.3 中断传输环调度(Interrupt Transfer Ring Scheduling)
端点上下文间隔(Interval)字段的值被 xHC 视为中断端点的限制参数或截止时间。中断传输环调度适用以下规则:
- 如果中断传输环处于空闲状态,则 xHC 接收端点的门铃响铃和为第一个发布到传输环的 TD 在 USB 上调度第一个相关中断事务之间的最大时间应等于 IST + ESIT。
- 如果有多个中断 TD 发布到中断端点传输环,则 xHC 在每个 ESIT 中消耗的 TD 不应超过一个。
- 软件可以为超过最大 ESIT 有效负载的中断端点 TD 定义 TD 传输大小。
- 中断管道每个 ESIT 执行一个 SO。
- SOPC 设置为 TDPC 或 MSOPC 中较小的一个。
- 中断管道应在每个 ESIT 上传输或接收不超过一个最大 ESIT 有效负载,例如,如果中断 TD 传输大小大于最大 ESIT 有效负载,则 TD 可能需要多个 ESIT 才能完成。
- 短数据包应终止 IN 中断 TD,下一个 TD(如果存在)应安排在下一个 ESIT 中。
- 意外的 ERDY 应被默默丢弃。
注意:由于中断管道提供可靠的数据传输,但每个 ESIT 的数据包(包括重试)数量受 MSOPC 值限制,因此数据包重试可能会导致中断 TD 需要比预期更多的 ESIT 才能完成。如果在发生这种情况时传输环上有第二个 TD 处于待处理状态,则应延迟到第一个 TD 成功传输为止。为了最大限度地减少重试对中断管道的延迟影响,即使初始 SOPC 值小于 MSOPC,也可以在 ESIT 中传输最多 MSOPC 数据包(包括退出)。如果 xHC 实现能够保证额外的数据包不会影响与其他周期性端点建立的带宽保证,则其可能超过每个 ESIT 的 MSOPC 数据包。
4.14.3.1 低、全、高速端点(Low-, Full-, and High-speed Endpoints)
4.14.3.2 增强的SuperSpeed端点(Enhanced SuperSpeed Endpoints)
4.14.4 异步传输环调度(Asynchronous Transfer Ring Scheduling)
4.14.4.1 增强的超高速突发事务(Enhanced SuperSpeed Burst Transactions)
4.15 挂起-恢复(Suspend-Resume)
xHC 提供与 USB 集线器中单个端口定义的挂起和恢复模型相同的挂起和恢复模型。提供控制机制以允许系统软件挂起和恢复单个端口。这些机制允许通过软件启动完全恢复单个端口。提供其他控制机制以参数化主机控制器对外部恢复事件的响应(或敏感度)。在此讨论中,主机启动或软件启动的恢复称为恢复事件/操作(Resume Events/Actions)。总线启动的恢复事件称为唤醒事件。唤醒事件的类别包括:
-
支持远程唤醒的设备断言恢复信号,类似于 USB 集线器,xHC 应始终响应明确的设备恢复信号并唤醒系统(如有必要)。
-
端口连接和断开以及过流事件。可以使用 PORTSC(Port Status and Control Register) 寄存器中的每个端口控制位打开或关闭对这些事件的敏感度。
选择性挂起是每个 PORTSC 寄存器都支持的功能。它用于将特定端口置于挂起模式。此功能用作功能组件,用于在特定操作系统中实施适当的电源管理策略。
当系统软件打算暂停整个总线时,它应该有选择地暂停所有启用的端口,然后通过将 USBCMD 寄存器中的运行/停止 (R/S) 位设置为 “0” 来关闭主机控制器。然后可以通过 PCI 电源管理接口将 xHC 置于较低的设备状态(请参阅附录 A 和 PCI PM)。
当发生唤醒事件时,系统软件最终将运行/停止 (R/S) 位设置为 “1” ,并通过将 “0” 写入其 PLS 字段来恢复暂停的端口。在确认主机控制器的时钟稳定之前,软件不应将运行/停止 (R/S) 位设置为 “1” 。这通常在系统实施中得到确认,因为在重新启动 CPU 之前系统中的所有时钟都是稳定的。因此,根据定义,如果软件正在运行,系统中的时钟是稳定的,并且 USBCMD 寄存器中的运行/停止 (R/S) 位可以设置为 “1” 。PCI PM 规范中还定义了最小系统软件延迟。有关更多信息,请参阅此规范。
4.15.1 端口挂起(Port Suspend)
系统软件通过将 “3” 写入相应的 PORTSC 寄存器端口链路状态 (PLS) 字段(请参阅第 5.4.8 节)将各个端口置于挂起模式。当端口处于启用状态时,软件应仅将 PLS 字段设置为 “3” 。
xHC 可以立即评估 PLS 字段写入,也可以等到出现微帧或帧边界。如果立即评估,则端口不会挂起,直到当前事务(如果正在执行)完成。因此,在 xHC 评估 PLS 字段之前,端口上可能会有多个微帧的活动。xHC 应至少在每个帧边界评估 PLS 字段。有关更多信息,请参阅表 5-27 中 PLS 的描述。当 PLS 字段写入 U3(“3”)时,PLS 位的状态不会更改为目标 U 状态 U3,直到挂起信号已完成发送到连接的设备(可能长达 10 毫秒)。除非端口报告其处于启用状态(PED = ‘1’,PLS < ‘3’),否则软件不应尝试暂停端口(有关 PED 和 PLS 的更多信息,请参阅第 5.4.8 节)。请注意,端口链路状态写入选通脉冲 (LWS) 位应设置为‘1’以写入 PLS 字段。
软件需要等待 U3 转换完成,然后才能将 xHC 置于低功耗状态,并恢复端口。软件可以轮询 PLS 字段以了解 U3 转换是否完成;但是,紧密的轮询循环可能会阻止处理器上的任何其他活动,从而减慢断电过程。启用 OS 计时器也会减慢断电过程,因为最小 OS 超时(~15 毫秒)与 U3 转换时间相比很长,因此软件要么最终占用 CPU,要么给主机控制器的 D3 条目增加显着的延迟。 U3 进入功能 (U3C) 通过在 PLS 转换到 U3 时断言 PLC 来消除这些延迟,其中 PLC 的断言会生成端口状态更改事件。如果 HCCPARAMS2 寄存器支持 U3 进入功能 (U3C)(U3C =“1”),则软件可以通过将 CONFIG 寄存器中的 U3 进入启用 (U3E) 标志设置为 “1” 来启用 PLS 转换到 U3 时断言 PLC。
Port Link State (PLS) – RWS 。
4.15.1.1 选择性挂起(Selective Suspend)
软件应在选择性挂起设备之前,使用 Stop Endpoint 命令并将挂起 (SP) 标志设置为“1”来停止设备的所有端点。设备恢复后,软件应按端点的门铃以重新启动它。有关使用 Stop Endpoint 命令的更多信息,请参阅第 3.3.8 节。
4.15.1.2 功能挂起(Function Suspend)
在向设备发出 SetFeature(FUNCTION_SUSPEND) 请求之前,软件应通过使用 Stop Endpoint Command 并将 Suspend (SP) 标志设置为“1”来停止与该功能关联的设备的端点。功能恢复后,软件应按端点的门铃以重新启动它。有关使用 Stop Endpoint 命令的更多信息,请参阅第 3.3.8 节。
4.15.2 端口恢复(Port Resume)
4.15.2.1 设备初始化(Device Initiated)
以下步骤描述了典型的设备启动的端口恢复过程:
-
当端口处于 U3 状态并且检测到来自设备的恢复信号时,端口将转换为恢复(Resume)状态 (PLS = ‘15’),并且端口链路状态更改 (PLC) 标志设置为 ‘1’。如果 PLC 的断言导致 PSCEG,Port Status Change Event Generation (4.19.2) 从 ‘0’ 转换为 ‘1’,则 xHC 将生成端口状态更改事件。
请注意,USB3 U3 唤醒需要 LFPS 握手。设备生成 LFPS 以启动恢复过程。在 U3 状态下检测到 LFPS 将使 USB3 端口转换为恢复状态1。xHC 不得向设备发送 LFPS 响应,这将允许 LFPS 握手完成,直到软件发出指令。 -
收到端口状态更改事件后,系统软件将评估端口 ID 字段以确定生成事件的端口。
-
然后,系统软件读取生成事件的端口的 PORTSC 寄存器。如果事件是由于设备启动的恢复引起的,则 PLC = ‘1’ 且 PLS = Resume:
-
对于 USB3 协议端口,软件应将 ‘0’ 写入 PLS 字段,以指示 xHC 向设备启动 LFPS 并启动 LFPS 握手。
-
对于 USB2 协议端口,当检测到来自设备的恢复信号时,xHC 应在 1 毫秒内传输恢复信号 (TURSM)。软件应确保恢复信号至少持续 20 毫秒 (TDRSMDN)。请参阅 USB2 规范的第 7.1.7.7 节。软件应从通知转换到恢复状态开始计时 TDRSMDN。TDRSMDN 完成后,软件应将‘0’写入 PLS 字段。
-
-
恢复信号的完成应导致端口转换到 U0 状态,即 PORTSC 寄存器 PLS 字段应设置为 U0(“0”),PLC 标志应设置为 “1” 。如果 PLC 的断言导致 PSCEG(4.19.2)从 “0” 转换为 “1” ,则 xHC 应生成端口状态更改事件。
注意:在将根集线器端口从恢复状态转换为 U0 状态之前,软件应确保 xHC 处于运行(R/S =“1”)模式。此操作可确保 xHC 能够在设备进入 U0 状态时传输 ITP 并立即接收数据包。
4.15.2.2 主机初始化(Host Initiated)
系统软件可以通过写入 PLS 字段启动选择性暂停端口的恢复(请参阅第 4.15.2 节)。除非端口报告其处于暂停(PED =“1”,PLS =“3”)状态(请参阅第 5.4.8 节),否则软件不得尝试恢复已启动暂停过程的端口。
如果系统软件在端口未处于暂停状态 (U3),而是处于低功耗链路状态(例如 U2 或 U1)时将 “0” 写入 PLS 字段,则端口应生成适当的信号,如果成功,则应转换到 U0 状态(PLS =“0”)。PLS 字段从 U3 到 U0 的转换应导致端口链路状态更改 (PLC) 位从 “0” 转换为 “1” 。如果 PLC 的断言导致 PSCEG(端口状态更改生成)从 “0” 转换为 “1” ,则应生成端口状态更改事件以反映链路状态的变化。如果中断器 0 未被屏蔽,事件的生成也会导致主机中断。
以下步骤描述了典型的主机启动端口恢复过程:
-
当端口处于 U3 状态时:
- 对于 USB3 协议端口,软件应将 “0”(U0)写入 PLS 字段以启动恢复信号。端口应转换到 U3Exit 子状态,xHC 应立即启动设备的 LFPS 生成。
- 对于 USB2 协议端口,软件应将 “15” (恢复)写入 PLS 字段以启动恢复信号。端口应转换到恢复子状态,xHC 应在 1 毫秒内传输恢复信号(TURSM)。软件应确保恢复信号至少持续 20 毫秒(TDRSMDN)。软件应从将 “15”(恢复)写入 PLS 开始计时 TDRSMDN。 TDRSMDN 完成后,软件应将“0”(U0)写入 PLS 字段。
-
恢复信号的完成应导致端口从 U3 状态转换为 U0 状态,即 PORTSC 寄存器 PLS 字段应设置为 U0(“0”),PLC 标志应设置为 “1”。如果 PLC 的断言导致 PSCEG(端口状态变化生成)从“0”转换为“1”,则 xHC 应生成端口状态变化事件。
4.15.2.3 唤醒事件(Wakeup Events)
4.16 带宽管理(Bandwidth Management)
通过 xHCI 确定可用带宽更加复杂,因为接口可以支持多个 USB 速度,每个速度都有自己的带宽限制。枚举 USB 设备时可用带宽的计算取决于根集线器端口分配给的 xHCI 的哪个内部 USB 实例,以及已连接到该 USB 实例的其他设备的带宽要求。
4.16.1 带宽协商(Bandwidth Negotiation)
4.16.2 带宽域(Bandwidth Domains)
4.17 中断(Interrupters)
Interrupter 管理事件及其向主机发送的通知。xHCI 最多支持 1024 个中断器。HCSPARAMS1 中的 MaxIntrs 字段确定在 xHC 中实现的 Interrupter 数量。每个 Interrupter 都由一个 Interrupter Management Register、一个 Interrupter Moderation Register 和一个 Event Ring 组成。每个 Interrupter 应映射到单个 MSI 或 MSI-X 中断向量。如果 Interrupter 已启用,并且其关联的 Event Ring 包含需要中断的事件 TRB,则 Interrupter 应断言中断。
4.17.1 中断器映射(Interrupter Mapping)
4.17.2 中断管理(Interrupt Moderation)
4.17.3 中断引脚支持(Interrupt Pin Support)
4.17.4 中断目标识别(Interrupter Target Identification)
4.17.5 中断阻塞(Interrupt Blocking)
4.18 传输定义和属性(Transfer Definition and Attributes)
4.18.1 禁止窥探(No snoop)
4.18.2 无窥探和宽松的 USB 流量排序
No Snoop and Relaxed Ordering for USB Traffic 。
4.18.2.1 负载没有 Snoop 选项(No Snoop option for payload)
4.18.2.2 Scratchpad 引用没有 Snoop 选项
No Snoop option for Scratchpad reference 。
☆
请参阅 Section 4.19.1.2.13 以了解有关 Resume 状态的更多信息。 ↩︎