Skip to content
  • Johannes Berg's avatar
    mac80211: release multiple ACs in uAPSD, fix more-data bug · f9f760b4
    Johannes Berg authored
    
    
    When a response for PS-Poll or a uAPSD trigger frame is sent, the
    more-data bit should be set according to 802.11-2012 11.2.1.5 h),
    meaning that it should indicate more data on the relevant ACs
    (delivery-enabled or nondelivery-enabled for uAPSD or PS-Poll.)
    
    In, for example, the following scenario:
     * 1 frame on VO queue (either in driver or in mac80211)
     * at least 1 frame on VI queue (in the driver)
     * both VO/VI are delivery-enabled
     * uAPSD trigger frame received
    
    The more-data flag to the driver would not be set, even though
    it should be.
    
    While fixing this, I noticed that we should really release frames
    from multiple ACs where there's data buffered in the driver for
    the corresponding TIDs.
    
    To address all this, restructure the code a bit to consider all
    ACs if we only release driver frames or only buffered frames.
    This also addresses the more-data bug described above as now the
    TIDs will all be marked as released, so the driver will have to
    check the number of frames.
    
    While at it, clarify some code and comments and remove the found
    variable, replacing it with the appropriate sw/hw release check.
    
    Reported-by: default avatarEliad Peller <eliad@wizery.com>
    Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    f9f760b4