赞
踩
(November 2017 Revision 1.1)
最多支持255个USB设备或集线器,其中阵列中的每个元素都是指向设备上下文数据结构的指针。
设备上下文基地址阵列(DCBAA)为xHC提供了基于Slot ID的查找表,用于访问与每个插槽关联的设备上下文数据结构。该数据结构由指向设备上下文数据结构的指针数组组成。当检测到设备连接时:系统软件会初始化设备上下文数据结构,从xHC请求Slot ID,然后在Slot ID指示的位置将指向新创建的设备上下文的指针插入DCBAA。
设备上下文数据结构由xHC管理,用于向系统软件报告设备配置和状态信息。设备上下文数据结构由32个数据结构的数组组成。第一个上下文数据结构(索引=“0”)是Slot Context数据结构。其余上下文数据结构是“端点上下文”数据结构
在枚举USB设备的过程中,系统软件会在主机内存中为该设备分配设备上下文数据结构,并将其初始化为“0”。然后,使用地址设备命令将数据结构的所有权传递给xHC。xHC保留对设备上下文的所有权,直到使用“禁用插槽命令”禁用了设备插槽为止。设备上下文数据结构由xHC拥有时,应被系统软件视为只读。
这个比较抽象,Slot主要是有关 包含与整个设备有关的信息,或影响USB设备的所有端点的信息。Slot Context提供的信息包括: 控制,状态,寻址和电源管理。
端点上下文数据结构定义特定USB端点的配置和状态。该数据结构被定义为设备上下文和输入上下文数据结构的成员。
端点上下文的大多数字段包含与端点相关的类型,控制,状态和带宽信息,这些信息与设备报告的与端点相关的关联描述符中的信息相对应。
端点上下文还定义了TR出队指针字段,该字段通常提供指向与通道关联的 Transfer Ring的指针。
USB3批量(Bulk)端点有一种特殊情况,其中Stream可能与端点关联。
Stream允许设备在 Transfer Ring 之间多路复用端点的数据流
大多数设备仅声明少量端点,这意味着设备上下文或输入上下文中的许多端点上下文数据结构可能未使用。
作为设备上下文成员,xHC使用端点上下文数据结构将端点相关参数的当前值报告给系统软件。
在本文档中,设备上下文的端点上下文数据结构也称为“输出端点上下文”。
如果引用输入上下文的命令成功执行,则xHC将更新输出端点上下文,以反映在生成Command Completion Event 之前它正在主动用于管理端点的参数值。
端点上下文的xHCI保留区域可用作xHC实现定义的暂存器。
流上下文数组用于定义支持流的USB3端点的 Transfer Ring。流上下文数组由流上下文数据结构组成。主要的流上下文数组中的流上下文数据结构的数量及其位置由父端点上下文中的字段定义。
在上图示例中,为了访问特定的Stream Context,xHCI将Stream ID分为两个子字段; 主流ID(Primary Stream ID, PSID)和辅助流ID(SSID)。主流ID用作主流阵列的索引。如果次要流ID等于“0”,则主要流数组中的流上下文应包含一个指向 Transfer Ring的指针(例如,主要流上下文1或15,SCT =“1”)。如果次要流ID不为零,则主要流阵列中的流上下文应包含一个指向次要流阵列的指针(例如,主要流上下文0或2,SCT =‘3’),并且次要流ID为 用作次要流数组的索引。另请注意,辅助流上下文数组0(SSID = 0,PSID = 0)中的第0个元素并不指向 Transfer Ring,因为它保留了流ID 0,但是辅助流上下文数组2中的第0个元素确实指向了环。Transfer Ring,因为它表示流ID 2(SSID = 0,PSID = 2)。
PSID和SSID子字段之间的边界由端点上下文的MaxPStreams字段定义。PSID位于流ID的低位,而SSID位于高位。
所有声明流的端点都应初始化为指向主流数组。辅助流数组可以在初始化或运行时定义。
软件应将流ID的分配与端点的主要/次要流阵列布局相协调。请注意,在图4-20的示例中,主流上下文数组中的流上下文0和2指向辅助流上下文数组。为了访问由主流上下文0引用的辅助流数组中的流上下文,软件应将主流ID设置为0,并将辅助流ID设置为辅助流上下文的索引。请注意,流ID值“0”(即PSID和SSID =“0”)是USB3规范保留的,并且绝不应该由声明流端点的设备提供给xHC。因此,在图4-20的示例中,辅助流上下文数组0中的流上下文0被保留,并且不得由xHC访问。
注意:
如果启用了次要流阵列,则主要流上下文阵列的流上下文0将始终引用次要流阵列(即SCT>“1”)。SCT值“0”或“1”可能会导致行为不确定。
MaxPStreams的值通知xHC主流阵列的大小。如果启用了次要流,则主要流阵列的最大大小为256个条目(MaxPStreams =“7”)。每个流上下文中的流上下文类型(SCT)字段标识主流阵列中的上下文指向 Transfer Ring 还是辅助流阵列。SCT字段还标识辅助流阵列中的条目数。这种灵活的机制必须由软件仔细管理,以确保其生成的SID不会导致xHC引用超出范围的辅助流上下文。
xHC实现所支持的最大大小的主流阵列由HCCPARAMS1寄存器中的MaxPSASize字段定义。
系统软件使用输入上下文数据结构来定义设备配置和状态信息,这些信息将由地址设备,配置端点或评估上下文命令传递给xHC。它由一个输入控制上下文数据结构,一个Slot Context和端点上下文数据结构组成。
输入控制上下文数据结构确定该命令会影响其余的哪些上下文。命令完成后,软件可以重新使用或释放输入上下文数据结构。
在整个文档中,输入上下文中包含的插槽上下文或端点上下文也称为“输入”插槽或端点上下文。
Ring是数据结构的循环队列。——>TRB(传输请求块)Ring定义了一个队列,该队列用于在生产者(Producer)实体和消费者(Consumer)实体之间传输工作项目
作用:
注意:
xHC使用三种类型的环来通信和执行USB操作:
传输请求块(TRB)是一种通过软件在内存中构造的数据结构,其主要用于在主机内存和xHC之间传输单个物理上连续的数据块。
入队指针和出队指针是用于指代TRB Ring中有效条目的逻辑开头和结尾的术语。
xHC拥有出队指针和入队指针之间的TRB。
入队指针:
出队指针:
生产者(Producer)
一般管理入队指针。生产者维护一个“生产者循环状态”(PCS)标志,该标志标识它应写入TRB Cycle bit的值。
消费者(Consumer)
一般管理出队指针。消费者维护一个消费者循环状态(CCS)标志,将其与它所获取的TRB中的Cycle bit进行比较。
规则
TRB中的链标志用于标识组成TD的TRB。因此,TD指的是Transfer Ring上连续的TRB数据结构集(其中在TD的最后一个TRB之外的所有TRB中都设置了Chain标志)。
注意:
Command和Event TRB不支持链位(CH),因此所有命令描述符(CD)和事件描述符(ED)仅包含一个TRB。
错误状态
注意:
处于“已停止”状态的端点不得生成“Transfer Event”
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。