tokusan wrote:
rdos wrote:
Reading the XHCI document again since I'm updating my driver, and No-Op is not allowed on the command ring, only on transfer rings.
Really? No-Op TRB for the Command Ring certainly exists. 4.6.2 and 6.4.3.1 of the xHCI manual revision 1.2 describes it.
That's a bit strange, but table 6-86 says that it's not supported on the command ring, only on the transfer ring.
Regardless of that, every command should result in a response on the event ring, and so if the controller doesn't support No op it should still send a response back on the event ring that it is unsupported. If that doesn't happen, your command ring probably is misconfigured given that you get other events.
Another thing you might want to check is if the controller wants a scratch-pad area. Apparently, some do while others don't. If you ignore this it could mean the controller doesn't work. You also need to program a few other settings, like the config reg that your emulator might not care about.
Real-world controllers also don't keep their registers page-aligned, and both I'm testing with now have all their registers in a single page.
Some controllers also need you to perform "BIOS handoff", which is relatively easy to do.