Thanks for the technical details Bernie, I always appreciate that. Before posting I had tried to track down the issue in code; some of the pieces are actually open source. If you don’t mind, I’ll try to document what I went through here:
The actual error message (“There is not enough USB isochronous”…) comes from the IOUSBPipe class (CMD+F is our friend):
http://opensource.apple.com/source/IO…
This error appears to be triggered when no bandwidth can be allocated of “type” isoc. From there we track down the OpenPipe implementation. We don’t know which type of controller object we’re dealing with (IOUSBControllerV3, IOUSBControllerV2 or just IOUSBController). Those class files are as follows:
http://opensource.apple.com/source/IO…
http://opensource.apple.com/source/IO…
http://opensource.apple.com/source/IO…
It appears that IOUSBController doesn’t actually implement OpenPipe, and therefore we’re led to V2 or V3 for the implementation. Luckily for us the V3 controller hands off to V2. Again we’re faced with a problem: even though this is a USB 3 hub, is it operating as USB 2 - or rather, is it considered SS? In both cases we make a call to the _commandGate (make note of DoCreateEP), just with different parameters.
http://www.opensource.apple.com/sourc…
I can’t quite follow that logic but it looks like eventually it calls DoCreateEP (back from IOUSBControllerV2). I assume we’re looking at the case of kUSBIsoc which just eventually calls one of 2 functions:
UIMCreateIsochEndpoint
UIMCreateSSIsochEndpoint
I can’t find the implementation of either method, and so alas we’re at a stopping point. I haven’t been able to figure out how to enable more detailed logging (getting the output of those USBLog calls would probably be very helpful in tracing this).
Jeff, as far as the spx file I can’t help but notice that there appears to be 2 VIA hubs. One is 3.0 hi-speed, the other is 3.0 super speed. All of the devices are listed under hi-speed, and then under a USB 2 hub within that. Any insight would be nice.