1. 命令操作
只有命令环用于发出特定于xHC的命令或与设备槽相关的命令。 命令环控制寄存器定义在操作寄存器空间中。所有xHC命令都是通过将所需的命令TRB放置在命令环上, 然后响铃xHC命令门铃寄存器, 即将主机控制器命令代码写入门铃寄存器0的DB目标字段来发出的。
2. 主机控制器初始化
当系统启动时, 枚举主机控制器, 为xHC寄存器空间分配一个基地址, 系统软件将帧长度调整(FLADJ)寄存器设置为系统特定的值。
以下是系统软件使用MSI(Message Signaled Interrupts)-X作为中断机制来初始化xHC的操作:
- 如果支持的话,初始化系统I/O内存映射。
- 芯片复位后,等待USBSTS寄存器中的Controller Not Ready(CNR)标准置为0,然后再对xHC进行操作。
- 编辑CONFIG寄存器中的Max Device Slots Enable(MaxSlotsEn)域,使能软件将要用到的device slots。
- 编辑Device Context Base Address Array Pointer(DCBAAP)寄存器,写入指向Device Context Base Address Array所在位置的64位的地址。
- 定义 Command Ring Dequeue 指针,编辑Command Ring Control 寄存器,写入指向控制环的第一个TRB的64位起始地址。
- 初始化中断:
- 初始化并分配MSI-X信息表,设置信息地址和信息数据,并使能向量。
- 初始化并分配MSI-X Pending Bit Array。
- 将 MSI-X Capability Structure 中的 Table 偏移地址和 P