I need some help here, but I'm getting no response. Is someone even looking at this issue?
Further investigation seems to indicate that the musb host controller can only handle 16 devices at a time. This seems to be a limitation in the hardware. As requests for data from different devices come in urbs get allocated and i/o slots in the musb host controller are used for those transfers. If data from more than 16 endpoints at once is requested then the host controller returns the ENOSPC error. The problem is that you can have 16 devices (including hubs) which are doing an IN, but if there's no data available from the device it gets a NACK but doesn't remove the request. It continually does an IN until it receives data. This means that you could have 16 slots used up in the host controller and none of them are transmitting data. You now can't receive data from a 17th device because there aren't anymore slots available even though you might have data coming from that device.
I tried getting around this problem by creating a queue of transfers, submitting a transfer and, if there's no response for 10 milliseconds, cancelling the transfer and moving on to the next one. This works for awhile (several hours) but eventually the entire USB interface stops sending any data at all.
Does anyone have any suggestions?
Carl