mac80211: extend AQL aggregation estimation to HE and fix unit mismatch
[linux-2.6-microblaze.git] / net / mac80211 / airtime.c
index 3149730..45140e5 100644 (file)
@@ -668,20 +668,26 @@ u32 ieee80211_calc_expected_tx_airtime(struct ieee80211_hw *hw,
                 * This will not be very accurate, but much better than simply
                 * assuming un-aggregated tx in all cases.
                 */
-               if (duration > 400) /* <= VHT20 MCS2 1S */
+               if (duration > 400 * 1024) /* <= VHT20 MCS2 1S */
                        agg_shift = 1;
-               else if (duration > 250) /* <= VHT20 MCS3 1S or MCS1 2S */
+               else if (duration > 250 * 1024) /* <= VHT20 MCS3 1S or MCS1 2S */
                        agg_shift = 2;
-               else if (duration > 150) /* <= VHT20 MCS5 1S or MCS3 2S */
+               else if (duration > 150 * 1024) /* <= VHT20 MCS5 1S or MCS2 2S */
                        agg_shift = 3;
-               else
+               else if (duration > 70 * 1024) /* <= VHT20 MCS5 2S */
                        agg_shift = 4;
+               else if (stat.encoding != RX_ENC_HE ||
+                        duration > 20 * 1024) /* <= HE40 MCS6 2S */
+                       agg_shift = 5;
+               else
+                       agg_shift = 6;
 
                duration *= len;
                duration /= AVG_PKT_SIZE;
                duration /= 1024;
+               duration += (overhead >> agg_shift);
 
-               return duration + (overhead >> agg_shift);
+               return max_t(u32, duration, 4);
        }
 
        if (!conf)