1 xHCI结构概述
从图中可知,xHCI是可扩展主机控制器(xHC)的接口(Interface),为硬件部分。该接口面向系统及软件,与可扩展主机控制器驱动(xHCD)相连,用于系统及用户对USB Controller进行配置和管理。
xHCI具有广泛的兼容性,不论Device的类型及速度是什么,系统都可以通过xHCI进行配置,实现USB数据的传输。
1.1 接口结构
xHCI定义了三种接口空间:
主机配置空间(PCI Config Space)。每个xHC实现都应包括一种通过系统软件识别和枚举主控制器的方法。本规范提供了一个主机配置空间的PCI示例,它被称为PCI配置空间。PCI配置空间提供了用于系统xHC枚举和资源(中断、电源、虚拟化等)管理的工作示例。
寄存器空间(MMIO Spce)。寄存器空间表示由xHC呈现给系统软件的硬件寄存器。寄存器空间提供了在xHCI正常和扩展功能寄存器中定义的特定参数,操作和运行时的控制和状态寄存器,以及用于标记访问单个USB设备的门铃阵列。
主机内存(Host Memory)。该空间包括控制数据结构和数据缓冲区,这些数据结构由xHC驱动程序分配和管理,以启用单个设备的端点通路。这个空间是在内存地址空间的内核区和用户区分配的。
从上图中可知,PCI Config Space中的基地址寄存器(Base Address Registers)为寄存器接口基地址,该地址指向MMIO空间中的寄存器。具体说明如下:
Capability Registers:指定主机控制器实现的只读、限制和能力。这些值用作主机控制器驱动程序的参数。
Runtime Registers 和 Operational Registers:Runtime Registers 和 Operational Registers在MMIO中连接在一起,Runtime Registers是Operational Registers的扩展寄存器。这两个寄存器的功能是指定主控制器配置和运行时状态,系统软件使用它们来控制和监视主控制器的运行状态。为了更好地支持xHCI的虚拟化,这些寄存器被划分为运行期间大量访问的寄存器和仅在初始化时或运行时少量访问的寄存器。