I use the qemu-2.7 and seabios-1.10.1 to start the windows 7 guest. And the xhci controller is passthroughed to the guest. When the safe mode interface of the windows 7 appears, keyboard sometimes doesn't work and I can not choose any mode. I have referred to seabios code about xhci configuration and find that after initializing USB keyboard, the timer ISR will check usb event periodically. Normally, the "xhci_process_events" function can process the keyboard events, but now TRB_C bit of xhci controller has been unchanged and "xhci_process_events" function derectly return. So keyboard didn't work. I want to know why TRB_C bit of xhci controller is always unchanged. Hope somebody can help me. Sorry for my poor English.
static void xhci_process_events(struct usb_xhci_s *xhci) { struct xhci_ring *evts = xhci->evts;
for (;;) { /* check for event */ u32 nidx = evts->nidx; u32 cs = evts->cs; struct xhci_trb *etrb = evts->ring + nidx; u32 control = etrb->control; if ((control & TRB_C) != (cs ? 1 : 0)) return;//stop here .... ....}