projects
/
linux-2.6-microblaze.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
mac80211: extend AQL aggregation estimation to HE and fix unit mismatch
[linux-2.6-microblaze.git]
/
net
/
mac80211
/
airtime.c
diff --git
a/net/mac80211/airtime.c
b/net/mac80211/airtime.c
index
3149730
..
45140e5
100644
(file)
--- a/
net/mac80211/airtime.c
+++ b/
net/mac80211/airtime.c
@@
-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.
*/
* 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;
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;
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;
agg_shift = 3;
- else
+ else
if (duration > 70 * 1024) /* <= VHT20 MCS5 2S */
agg_shift = 4;
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 *= len;
duration /= AVG_PKT_SIZE;
duration /= 1024;
+ duration += (overhead >> agg_shift);
- return
duration + (overhead >> agg_shift
);
+ return
max_t(u32, duration, 4
);
}
if (!conf)
}
if (!conf)