mac80211: minstrel_ht: Increase the range of handled rate indexes
Since 5935839ad7
("mac80211: improve minstrel_ht rate sorting by
throughput & probability"), the rate indexes are manipulated via u8's
and hence allow for a maximum of 256 mcs_group entries in
minstrel_mcs_groups.
ATM, minstrel_ht advertizes support up to 3HTSS@40MHz, consuming:
8(MCS_GROUP_RATES) * (3(SS)*2(GI)*2(BW)+1(CCK)), i.e. 104 entries.
Support for 3VHTSS@80MHz will require:
10(MCS_GROUP_RATES) * (3(SS)*2(GI)*2(BW)+1(CCK)) +
10(MCS_GROUP_RATES) * (3(SS)*2(GI)*3(BW)), i.e. 130 + 180 entries.
This change moves from u8s to u16s where necessary.
Signed-off-by: Karl Beldan <karl.beldan@rivierawaves.com>
Cc: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
8fa74e3aa6
commit
d4d141cae8
|
@ -240,8 +240,8 @@ minstrel_ht_calc_tp(struct minstrel_ht_sta *mi, int group, int rate)
|
||||||
* MCS groups, CCK rates do not provide aggregation and are therefore at last.
|
* MCS groups, CCK rates do not provide aggregation and are therefore at last.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
minstrel_ht_sort_best_tp_rates(struct minstrel_ht_sta *mi, u8 index,
|
minstrel_ht_sort_best_tp_rates(struct minstrel_ht_sta *mi, u16 index,
|
||||||
u8 *tp_list)
|
u16 *tp_list)
|
||||||
{
|
{
|
||||||
int cur_group, cur_idx, cur_thr, cur_prob;
|
int cur_group, cur_idx, cur_thr, cur_prob;
|
||||||
int tmp_group, tmp_idx, tmp_thr, tmp_prob;
|
int tmp_group, tmp_idx, tmp_thr, tmp_prob;
|
||||||
|
@ -278,7 +278,7 @@ minstrel_ht_sort_best_tp_rates(struct minstrel_ht_sta *mi, u8 index,
|
||||||
* Find and set the topmost probability rate per sta and per group
|
* Find and set the topmost probability rate per sta and per group
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
minstrel_ht_set_best_prob_rate(struct minstrel_ht_sta *mi, u8 index)
|
minstrel_ht_set_best_prob_rate(struct minstrel_ht_sta *mi, u16 index)
|
||||||
{
|
{
|
||||||
struct minstrel_mcs_group_data *mg;
|
struct minstrel_mcs_group_data *mg;
|
||||||
struct minstrel_rate_stats *mr;
|
struct minstrel_rate_stats *mr;
|
||||||
|
@ -321,8 +321,8 @@ minstrel_ht_set_best_prob_rate(struct minstrel_ht_sta *mi, u8 index)
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
minstrel_ht_assign_best_tp_rates(struct minstrel_ht_sta *mi,
|
minstrel_ht_assign_best_tp_rates(struct minstrel_ht_sta *mi,
|
||||||
u8 tmp_mcs_tp_rate[MAX_THR_RATES],
|
u16 tmp_mcs_tp_rate[MAX_THR_RATES],
|
||||||
u8 tmp_cck_tp_rate[MAX_THR_RATES])
|
u16 tmp_cck_tp_rate[MAX_THR_RATES])
|
||||||
{
|
{
|
||||||
unsigned int tmp_group, tmp_idx, tmp_cck_tp, tmp_mcs_tp;
|
unsigned int tmp_group, tmp_idx, tmp_cck_tp, tmp_mcs_tp;
|
||||||
int i;
|
int i;
|
||||||
|
@ -386,8 +386,8 @@ minstrel_ht_update_stats(struct minstrel_priv *mp, struct minstrel_ht_sta *mi)
|
||||||
struct minstrel_mcs_group_data *mg;
|
struct minstrel_mcs_group_data *mg;
|
||||||
struct minstrel_rate_stats *mr;
|
struct minstrel_rate_stats *mr;
|
||||||
int group, i, j;
|
int group, i, j;
|
||||||
u8 tmp_mcs_tp_rate[MAX_THR_RATES], tmp_group_tp_rate[MAX_THR_RATES];
|
u16 tmp_mcs_tp_rate[MAX_THR_RATES], tmp_group_tp_rate[MAX_THR_RATES];
|
||||||
u8 tmp_cck_tp_rate[MAX_THR_RATES], index;
|
u16 tmp_cck_tp_rate[MAX_THR_RATES], index;
|
||||||
|
|
||||||
if (mi->ampdu_packets > 0) {
|
if (mi->ampdu_packets > 0) {
|
||||||
mi->avg_ampdu_len = minstrel_ewma(mi->avg_ampdu_len,
|
mi->avg_ampdu_len = minstrel_ewma(mi->avg_ampdu_len,
|
||||||
|
@ -517,7 +517,7 @@ minstrel_next_sample_idx(struct minstrel_ht_sta *mi)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
minstrel_downgrade_rate(struct minstrel_ht_sta *mi, u8 *idx, bool primary)
|
minstrel_downgrade_rate(struct minstrel_ht_sta *mi, u16 *idx, bool primary)
|
||||||
{
|
{
|
||||||
int group, orig_group;
|
int group, orig_group;
|
||||||
|
|
||||||
|
|
|
@ -34,8 +34,8 @@ struct minstrel_mcs_group_data {
|
||||||
u8 supported;
|
u8 supported;
|
||||||
|
|
||||||
/* sorted rate set within a MCS group*/
|
/* sorted rate set within a MCS group*/
|
||||||
u8 max_group_tp_rate[MAX_THR_RATES];
|
u16 max_group_tp_rate[MAX_THR_RATES];
|
||||||
u8 max_group_prob_rate;
|
u16 max_group_prob_rate;
|
||||||
|
|
||||||
/* MCS rate statistics */
|
/* MCS rate statistics */
|
||||||
struct minstrel_rate_stats rates[MCS_GROUP_RATES];
|
struct minstrel_rate_stats rates[MCS_GROUP_RATES];
|
||||||
|
@ -52,8 +52,8 @@ struct minstrel_ht_sta {
|
||||||
unsigned int avg_ampdu_len;
|
unsigned int avg_ampdu_len;
|
||||||
|
|
||||||
/* overall sorted rate set */
|
/* overall sorted rate set */
|
||||||
u8 max_tp_rate[MAX_THR_RATES];
|
u16 max_tp_rate[MAX_THR_RATES];
|
||||||
u8 max_prob_rate;
|
u16 max_prob_rate;
|
||||||
|
|
||||||
/* time of last status update */
|
/* time of last status update */
|
||||||
unsigned long stats_update;
|
unsigned long stats_update;
|
||||||
|
|
Loading…
Reference in New Issue