High-bandwidth/multiple transactions per microframe in usb audio?
Hi,
Please does the current USB audio driver support multiple transactions per microframe (high-bandwidth mode)? I could not find it in endpoint.c but it may be there or somewhere else :-)
Thanks a lot,
Pavel.
В Пт, 24/04/2020 в 11:42 +0200, Pavel Hofman пишет:
Hi,
Please does the current USB audio driver support multiple transactions per microframe (high-bandwidth mode)? I could not find it in endpoint.c but it may be there or somewhere else :-)
This should be transparent for the driver. See usb_submit_urb() function from drivers/usb/core/urb.c. It allows packets larger than 1024 for isochronous transfers over High Speed and Super Speed buses.
Dne 25. 04. 20 v 14:06 Alexander Tsoy napsal(a):
В Пт, 24/04/2020 в 11:42 +0200, Pavel Hofman пишет:
Hi,
Please does the current USB audio driver support multiple transactions per microframe (high-bandwidth mode)? I could not find it in endpoint.c but it may be there or somewhere else :-)
This should be transparent for the driver. See usb_submit_urb() function from drivers/usb/core/urb.c. It allows packets larger than 1024 for isochronous transfers over High Speed and Super Speed buses.
Alexander, thanks a lot for the info and hint, indeed at https://github.com/torvalds/linux/blob/master/drivers/usb/core/urb.c#L444
Best regards,
Pavel.
В Сб, 25/04/2020 в 20:06 +0200, Pavel Hofman пишет:
Dne 25. 04. 20 v 14:06 Alexander Tsoy napsal(a):
В Пт, 24/04/2020 в 11:42 +0200, Pavel Hofman пишет:
Hi,
Please does the current USB audio driver support multiple transactions per microframe (high-bandwidth mode)? I could not find it in endpoint.c but it may be there or somewhere else :-)
This should be transparent for the driver. See usb_submit_urb() function from drivers/usb/core/urb.c. It allows packets larger than 1024 for isochronous transfers over High Speed and Super Speed buses.
Alexander, thanks a lot for the info and hint, indeed at https://github.com/torvalds/linux/blob/master/drivers/usb/core/urb.c#L444
And I just noticed that USB-audio driver can't properly parse max packet size for SuperSpeed and SuperSpeed+ devices yet. See audio_format_alloc_init().
Dne 25. 04. 20 v 21:50 Alexander Tsoy napsal(a):
В Сб, 25/04/2020 в 20:06 +0200, Pavel Hofman пишет:
And I just noticed that USB-audio driver can't properly parse max packet size for SuperSpeed and SuperSpeed+ devices yet. See audio_format_alloc_init().
Very good catch. IIUC there are two basically equivalent calculations for HighSpeed -
https://elixir.bootlin.com/linux/v5.6.7/source/drivers/usb/core/urb.c#L445
https://elixir.bootlin.com/linux/v5.6.7/source/sound/usb/stream.c#L691
And audio_format_alloc_init missing the sections for SS, SS+ in usb_submit_urb . Perhpas a common method to make the calculation for all cases would make it more robust?
Thanks,
Pavel.
On Sun, 26 Apr 2020 10:55:32 +0200, Pavel Hofman wrote:
Dne 25. 04. 20 v 21:50 Alexander Tsoy napsal(a):
В Сб, 25/04/2020 в 20:06 +0200, Pavel Hofman пишет:
And I just noticed that USB-audio driver can't properly parse max packet size for SuperSpeed and SuperSpeed+ devices yet. See audio_format_alloc_init().
Very good catch. IIUC there are two basically equivalent calculations for HighSpeed -
https://elixir.bootlin.com/linux/v5.6.7/source/drivers/usb/core/urb.c#L445
https://elixir.bootlin.com/linux/v5.6.7/source/sound/usb/stream.c#L691
And audio_format_alloc_init missing the sections for SS, SS+ in usb_submit_urb . Perhpas a common method to make the calculation for all cases would make it more robust?
Yes, a common USB helper function sounds like a good idea.
thanks,
Takashi
participants (3)
-
Alexander Tsoy
-
Pavel Hofman
-
Takashi Iwai