usb: cdc_acm: TX memory and performance improvements

Currently the cdc_acm implementation pass the data to usb_transfer() by
a chunk of IN endpoint MPS. This has 2 drawbacks:
- at higher throughput, each transfer needs 2 packets due to the need of
  an extra ZLP;
- a temporary buffer of size USB MPS is needed.

This patch improves the memory consumption and performances by passing
the ring buffer directly to usb_transfer(). It only has a small
performance degradation when the ring buffer wraps and less than a IN
endpoint MPS has to be sent.

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
1 file changed