• Daniel Mack's avatar
    usb: musb: introduce dma_channel.rx_packet_done · ff3fcac9
    Daniel Mack authored
    The musb/cppi41 glue layer is capable of handling transactions that span
    over more than one USB packet by reloading the DMA descriptors
    partially. An urb is considered completed when either its transfer
    buffer has been filled entirely (actual_length ==
    transfer_buffer_length) or if a packet in the stream has less bytes than
    the endpoint's wMaxPacketSize.
    
    Once one of the above conditions is met, musb_dma_completion() is called
    from cppi41_trans_done(). However, the final decision whether or not to
    return the urb to its owner is made by the core and its determination of
    the variable 'done' in musb_host_rx(). This code has currently no way of
    knowing what the size of the last packet was, and whether or not to
    give back the urb due to a short read.
    
    Fix this by introducing a new boolean flag in 'struct dma_channel', and
    set it from musb_cppi41.c. If set, it will make the core do what the
    DMA layer decided and complete the urb.
    Signed-off-by: default avatarDaniel Mack <zonque@gmail.com>
    Acked-by: default avatarGeorge Cherian <george.cherian@ti.com>
    Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
    ff3fcac9
musb_host.c 73.3 KB