• Loic Poulain's avatar
    wcn36xx: Add chained transfer support for AMSDU · a224b47a
    Loic Poulain authored
    WCNSS RX DMA transfer support is limited to 3872 bytes, which is
    enough for simple MPDUs (single MSDU), but not enough for cases
    with A-MSDU (depending on max AMSDU size or max MPDU size).
    
    In that case the MPDU is spread over multiple transfers, with the
    first transfer containing the MPDU header and (at least) the first
    A-MSDU subframe and additional transfer(s) containing the following
    A-MSDUs. This can be handled with a series of flags to tagging the
    first and last A-MSDU transfers.
    
    In that case we have to bufferize and re-linearize the A-MSDU buffers
    into a proper MPDU skb before forwarding to mac80211 (in the same way
    as it is done in ath10k).
    
    This change also includes sanity check of the buffer descriptor to
    prevent skb overflow.
    Signed-off-by: default avatarLoic Poulain <loic.poulain@linaro.org>
    Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/1634557705-11120-1-git-send-email-loic.poulain@linaro.org
    a224b47a
main.c 43.7 KB