Hmm. QEMU is interesting. The ECHI controller appears to be running already when I start up the machine.
So, I can reset it, set everything up, enable the controller, and that works fine.
When I reset the port and setup the Async List and QH/TD structure, and then set the Async List Address register, and enable the Async schedule, nothing happens. The Async List register doesn't change. It remains at zero, and the status register also doesn't change from 0x100C. Retrying a few times yields the same results, but then after like 4 retries, it starts working, and the registers will then match VirtualBox and VMWare.
This ECHI controller does have a PCI extended register area, unlike VirtualBox and VMWare, so it may have a BIOS -> OS handoff that needs to be done, but so far it appears to work about the same as the other two VMs, except for not working the first few times.
Maybe there's a clue in there somewhere. I'll try to play around with it more tonight.
Thanks, guys.
EDIT: I just realized that whoever set up the EHCI controller in QEMU left everything in memory configured properly, so I'm going to just walk through their registers and queues and capture everything and start analyzing it
EDIT2: SONOFA~~~
I knew it was going to be something stupid...
QH has a "TD Work Area" that contains a copy of the current TD, but before that it has the address of the current TD. I was setting the current TD address to my first TD.
Instead of setting the "Next TD" inside the work area to my first TD address...
Which makes perfect sense.... now...
Thanks for the help, guys