¿Cómo decide el kernel de Linux cuánto ancho de banda asignar a los puntos finales USB isócronos?

Hasta donde yo sé, los puntos finales USB que usan transferencias isócronas tienen un parámetro 'wMaxPacketSize' asociado a ellos que es utilizado por el kernel para garantizar una cierta cantidad de ancho de banda para el punto final.

Si no me equivoco, este tamaño máximo de package puede oscilar entre 0 y 1024 bytes (para transferencias de alta velocidad). ¿Cómo se traduce este parámetro en la asignación de ancho de banda en términos de Mbps de un controller de alta velocidad (EHCI) en un sistema Linux?

¿Qué otros factores, si existen, depende de la asignación de ancho de banda USB?

¡Gracias!

Después de algunas investigaciones, ahora puedo responder mi propia pregunta. El tamaño máximo de package isócrono para dispositivos de alta velocidad es 1024 bytes. Puede haber hasta tres packages por microframe y un microframe de 125 microsegundos de ancho, lo que significa que puede haber 8 microftwigs transferidos por milisegundo.

Esto nos da una asignación máxima de ancho de banda de 3 * 1024 * 8 * 1000 = 23.438 MB / s (edite: solía decir mbps)

El parámetro wMaxPacketSize es un valor de dos bytes que contiene una asignación de bits tanto del tamaño máximo por package como del número de packages por cada microframe almacenado.

Por lo tanto, la asignación de ancho de banda es la siguiente:

(packages / microframe) * (max_packet_size) * (8 microframes / milisegundo) * (1000ms / s)

También es importante tener en count que, por especificación USB 2.0, solo el 80% de la cantidad total de ancho de banda se puede asignar a transferencias periódicas, como las transferencias isócronas y de interrupción.