i首先为USB鼠标和键盘设备实施了XHCI驱动程序,主要例程进入了一个无限循环以检查(民意调查)事件环正面和捕获设备事件TRB。
下一个任务是启用MSI中断PCI接口,以便主循环不再直接对事件戒指进行轮询。为了在QEMU中模仿这一点,我使用了-device nec-usb-xhci
选项(因为-device qemu-xhci
可能有什么可能有区别,我如何激活MSI中断?
我的调试尝试是:我检查了
-trace "pci_cfg_write"
选项,我的写作是pci_cfg_write nec-usb-xhci 04:0 @0x70 <- 0x890005
pci_cfg_write nec-usb-xhci 04:0 @0x74 <- 0xfee00000
pci_cfg_write nec-usb-xhci 04:0 @0x78 <- 0x0
pci_cfg_write nec-usb-xhci 04:0 @0x7c <- 0xc040
(
0x40
i还尝试在主循环中插入
int 0x40
以手动生成所需的(但不会生成)中断,并且鼠标像以前一样正常移动。这意味着我已经正确设置了IDT,正在生成事件,并且只有在
0x40
中断已经生成的情况下,中断处理程序才能完成其作业。
问题可能是您使用的0xC0XX
值。我使用
0x40XX
,因为我想要触发模式(15)= 0,for Edge,Level(14)= 1 forLow