我正在开发 EHCI 控制器的主机控制器驱动程序。在扩展功能中向 BIOS 请求控制(从 HCCParams 寄存器位 15:8 偏移),然后重置 HC 并设置周期列表和异步列表后,我设法让它运行。我已经设法将其设置到必须在 EHCI 控制器寄存器中设置配置标志的程度。在 Qemu 上测试我没有遇到任何奇怪的问题,但是当我在我的硬件上测试它时,设置配置标志后我的电脑会立即重新启动。
这是我尝试设置配置标志之前操作寄存器的状态:
0x00 - 00080031 -USBCMD
0x04 - 0000E008 - USBSTS
0x08 - 00000007 - USBINTR
0x0C - 00001C3D - 帧索引
0x10 - 00000000 - CTRLDSSEGMENT
0x14 - 00032000 - 周期列表库
0x18 - 00033000 - 异步列表地址
...
0x40 - 00000000 - 配置标志
0x44 - 00003000 - 端口 1
0x48 - 00003000 - 端口 2
0x4C - 00003000 - 端口 3
...还有更多值为 0x00003000 的端口。
我尝试在启动计划的情况下设置配置,也尝试在不启动计划的情况下进行配置,但结果相同。
我已经将 PCI 中断线上的中断设置为 0xB,并且我有一个处理程序(ISR),但它仅将信息打印到屏幕上,以便我可以调试。
我还注意到,当我在 USBLEGSUP 寄存器中设置位 24 时,位 16 确实会自行关闭(我写入 0x01010000)。但是我没有在 USBLEGCTLSTS 中获得所有权更改状态位 29。