xHCI1.1-DCBAAP(设备上下文及地址数组指针 寄存器)

4 篇文章 7 订阅

一、DCBAAP(设备上下文及地址数组指针 寄存器):

xhci里面的Operational 寄存器组里面的设备上下文基地址数组指针寄存器(Device Context Base Address Array Pointer Register,DCBAAP),用于保存设备上下文基地址数组(DCBAA)的指针(也就是这个数组的首地址)。

P418

二、DCBAA(设备上下文基地址数组,内存数据结构):

DCBAA和xHCI的设备槽相关联(Device Slot),也就是一个Slot对应DCBAA里面的一个条目,可以通过Slot ID来索引对应的设备上下文(Device Context)数据结构,也就是可以将DCBAA看为是一个查找表。在初始化xHCI时每个条目都会初始化为0。注意DCBAA的首个条目(Slot ID=0)是被xHCI的暂存机制(xHCI Scratchpad Mechanism)使用的。

并且设备上下文基地址数组的首地址,在xHCI被设置为“run”模式(也就是USBCMD寄存器的R/S bit位置1)之前,应该被写入到DCBAAP寄存器中,同时Scratchpad Buffer Array的首地址也要在此之前放入到设备上下文及地址数组的第0个条目。如下图xHCI协议中所示。

每个slot又会对应一个Doorbell寄存器,软件可以通过写对应的寄存器,来告知xHCI使用对应slot,所对应的设备上下文。

当使用某个slot,也即是enable某个slot后,需要构造对应的设备上下文数据结构,然后将其首地址放入DCBAA数组里面对应的条目中。

三、DC(设备上下文数据结构,内存数据结构)

设备上下文数据结构(Device Context data structure)被xHC管理并用来向系统软件报告设备配置和状态信息。 设备上下文数据结构由32个数据结构的数组组成。 第一个上下文数据结构(索引=“ 0”)是Slot上下文数据结构(6.2.2)。 其余上下文数据结构(索引1-31)是端点上下文数据结构(6.2.3)。

作为枚举USB设备的一部分,系统软件分配一个设备上下文数据结构给在Host内存中的设备并且将它初始化为“0”。数据结构的归属权就传给了xHC通过一个地址设备命令(Address Device Command)。xHC保持着设备上下文信息的归属权直到设备slot因为Disable Slot命令不能使用。

设备上下文数据结构由xHC拥有时,应被系统软件视为只读。

DCBAA里面的每个条目存放的是一个设备上下文数据结构的地址(首地址,因为设备上下文也是一个数组),设备上下文的数据结构如下图所示:

如图所示,设备上下文数据结构,也相当于是一个数组,这里面一共有32个条目,第0个条目是槽上下文(Slot Context),第一个条目是端点0对应的端点上下文(Endpoint Context)(也就是Default Control endpoint,每个USB设备都会有这样一个默认端点,用来最初配置设备,该端点是支持双向的)。

3.1 槽上下文(Slot Context)的结构如下:

槽上下文包含与整个设备相关的信息,或影响一个USB设备的所有端点。这个数据结构作为设备上下文的成员(也作为Input Context的成员,这里我们只讲作为设备上下文的成员)。槽上下文数据结构提供的信息包括:控制(Control),状态(State),寻址(Addressing),和功耗管理(Power Management)。xHC使用Slot State来标识当前设备的状态并映射到USB协议中描述的USB 设备的状态(如下图)。

xHC分配的USB设备地址,可以被开发者使用总线分析仪来跟踪设备相关的USB活动。Route String被hubs用来路由Packets到下游端口,即定位Super Speed Packet的目标。Route Srting的形式在USB3协议规范的8.9节有介绍。Speed, TT Port Number和TT Hub Slot ID允许xHC执行address连接到高速hub后面的低速(low)和全速(full)设备时所必须的拆分事务(Split Transactions)。功耗管理信息包括Max Exit Latency,被xHC用于总线上等时包(Isoch packets)的调度。

3.2 端点上下文(Endpoint Context)数据结构如下:

端点上下文数据结构定义一个具体USB端点(Endpoint)的配置(Configuration)和状态(State),这个数据结构作为设备上下文的成员(也作为Input Context的成员,这里我们只讲作为设备上下文的成员)。端点上下文数据结构被xHC用来向系统软件报告端点相关的参数值。

大多数端点上下文(Endpoint Context)包含端点相关的类型(Type),状态(State),带宽(Bandwidth)的信息,这些信息对应着设备报告的相关的端点描述符中的信息。在端点描述符中,也定义了TR Dequeue Pointer字段,这个指针指向与Pipe相关联的Transfer Ring。对于USB3的Bulk端点有一个特殊的情况,因为USB3的Bulk Pipe支持Streams,所以TR Dequeue Pointer也可能指向一个Stream Context Array。

注意设备上下文提供USB设备所能声明的31个端点的设备上下文。但是大多数设备只有声明少部分的端点,也就说设备上下文中大部分端点上下文是没有被使用的。

端点上下文也包含一些和Debug与Pip相关的Transfer操作的字段。Error Counter(CErr)字段可以用来强制对USB事务的无限制的Retry。

3.2.1 Stream Context Array

流山下文数组被用来定义USB3中支持Streams的端点的Transfer Ring。一个流上下文数组(Stream Context Array)由流上下文数据结构组成(Streams Context Data Structures)。在一个主流上下文数组(Primary Streams Context Array)中,其流上下文数据结构(Streams Context Data Structures)数量和其位置,都是被定义在其父端点上下文数据结构中(Parent Endpoint Context)。

3.2.1.1 Stream Context

Stream上下文数据结构提供了一个指针,该指针指向流的Transfer Ring,并向xHC提供一些不透明(Opaque)(暂存,Scratchpad)的空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值