• Sara Sharon's avatar
    iwlwifi: pcie: do not pad QoS AMSDU · c772a3d3
    Sara Sharon authored
    We insert padding if the MAC header's size is not a multiple of 4
    to ensure that the SNAP header is DWORD aligned. When we do so, we
    let the firmware know by setting a bit in Tx command
    (TX_CMD_FLG_MH_PAD) which will instruct the firmware to drop those
    2 bytes before sending the frame.
    However, this is not needed for AMSDU as the sub frame header (14B)
    complements the MAC header (26B) so that the SNAP header is DWORD
    aligned without adding any pad.
    
    Until 9000, the firmware didn't check the TX_CMD_FLG_MH_PAD bit
    but rather checked the length of the MAC header itself and
    assumed the entity that enqueued the frame (driver or internal
    firmware code) added the pad.
    Since the driver inserted the pad even for AMSDU this logic applied.
    Note that the padding is a DMA optimization but it's not strictly
    needed, so we could pad even if it was not needed.
    
    However, the CSUM hardware introduced for the 9000 devices requires
    to not pad AMSDU as it is not needed, and will fail if such a pad
    exists.
    Due to older FW not checking the padding bit but checking the mac
    header size itself - we cannot do this adjustments for older
    generations.
    Do not align the size if it is an AMSDU and HW checksum is enabled -
    which will only happen on 9000 devices and on.
    Signed-off-by: default avatarSara Sharon <sara.sharon@intel.com>
    Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
    c772a3d3
tx.c 66 KB