| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> DCBAAP(设备上下文及地址数组指针 寄存器) -> 正文阅读 |
|
[数据结构与算法]DCBAAP(设备上下文及地址数组指针 寄存器) |
一、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)的空间。 |
|
|
上一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 21:34:32- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |