• Seth Forshee's avatar
    brcmsmac: Remove internal tx queue · e041f65d
    Seth Forshee authored
    The brcmsmac internal tx buffering is problematic. The amount of
    buffering is excessive (228 packets in addition to the 256 slots in each
    DMA ring), and frames may be dropped due to a lack of flow control.
    
    This patch reworks the transmit code path to remove the internal
    buffering. Frames are immediately handed off to the DMA support rather
    than passing through an intermediate queue. Non-aggregate frames are
    queued immediately into the tx rings, and aggregate frames are queued
    temporarily in an AMPDU session until ready for transmit.
    
    Transmit flow control is also added to avoid dropping packets when the
    tx rings are full. Conceptually this is a separate change, but it's
    included in this commit because removing the tx queue without adding
    flow control could cause significant problems.
    Signed-off-by: default avatarSeth Forshee <seth.forshee@canonical.com>
    Reviewed-by: default avatarPieter-Paul Giesberts <pieterpg@broadcom.com>
    Reviewed-by: default avatarArend van Spriel <arend@broadcom.com>
    Tested-by: default avatarDaniel Wagner <wagi@monom.org>
    Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
    e041f65d
main.c 219 KB