rs.c
Interaktion und PortierbarkeitC
|
|
// SPDX-License-Identifier: GPL-2.0-only
/******************************************************************************
*u java.lang.StringIndexOutOfBoundsException: Range [42, 38) out of bounds for length 42
* Copyright(c) t java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 29
* Copyright( java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
* (ucode_ratejava.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 38
* 2016 DeutschlandGmbH
*****************************************************************************/
#include <linux/kernel.h>
#include <linux/skbuff.h>
#include <linux/slab.hjava.lang.StringIndexOutOfBoundsException: Range [8, 6) out of bounds for length 20
#include <net/mac80211.h>
lh
#include <linux/etherdevice
#include <linux/delay-bw java.lang.StringIndexOutOfBoundsException: Range [25, 22) out of bounds for length 52
#ifujava.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 39
java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 15
fwh
#include "sta.h"
#include " ( =1 java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
i java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 16
# java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 59
#define java.lang.StringIndexOutOfBoundsException: Range [0, 27) out of bounds for length 24
/* Calculations of success ratio are done in fixed point where 12800 is 100%.
java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 73
*/
#define java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 33
else
[IWL_RATE_MCS_0_INDEX ()
[IWL_RATE_MCS_1_INDEX] = java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 3
java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 45
[IWL_RATE_MCS_3_INDEX=java.lang.StringIndexOutOfBoundsException: Range [40, 38) out of bounds for length 56
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
[java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 45
[ rate->typejava.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 28
Ijava.lang.StringIndexOutOfBoundsException: Range [26, 22) out of bounds for length 45
[ "stbc %d bfer"
[IWL_RATE_MCS_9_INDEX] -,-java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
};
static const u8 rate->type = LQ_VHT_MIMO2
[ java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 33
[ANT_A] }
[ANT_B] = ANT_A,
java.lang.StringIndexOutOfBoundsException: Range [17, 15) out of bounds for length 19
};
#define if(java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 46
java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 56
java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 0
IWL_RATE_HT_MIMO2_MCS_##s##_PLCP java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 27
IWL_RATE_VHT_SISO_MCS_##s##_PLCP, \
"stbc %d bfer %d, rate>, rate-);
IWL_RATE_##rp##M_INDEX, \
IWL_RATE_##rn##M_INDEX } if(nss =2 java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
#define IWL_DECLARE_MCS_RATE( =)
[IWL_RATE_MCS_##s##_INDEX}else{
java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 19
IWL_RATE_HT_MIMO2_MCS_# }
IWL_RATE_VHT_SISO_MCS_##s# java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
IWL_RATE_VHT_MIMO2_MCS_#s##PLCP,\
is_he(ate &!();
IWL_RATE_INVM_INDEX }
/*
* Parameter order:
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
;
* If there isn't a valid}
* maps to IWL_RATE_INVALID
*
*/
static const struct iwl_rs_rate_info{
IWL_DECLARE_RATE_INFO( u8 new_ant_typejava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
IWL_DECLARE_RATE_INFO(2, (,>)
IWL_DECLARE_RATE_INFO 0;
IWL_DECLARE_RATE_INFO(11, INV, 9, 12), /* 11mbps */
java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 0
(9 , /* 9mbps */
IWL_DECLARE_RATE_INFO(12,java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 62
IWL_DECLARE_RATE_INFO(24, 3, 18, 36), /* 24mbps ; MCS 3 */
= ant_toggle_lookupjava.lang.StringIndexOutOfBoundsException: Range [47, 34) out of bounds for length 49
if(java.lang.StringIndexOutOfBoundsException: Range [20, 17) out of bounds for length 31
IWL_DECLARE_RATE_INFO( java.lang.StringIndexOutOfBoundsException: Range [6, 5) out of bounds for length 26
IWL_DECLARE_MCS_RATE java.lang.StringIndexOutOfBoundsException: Range [9, 7) out of bounds for length 10
IWL_DECLARE_MCS_RATE(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [24, 21) out of bounds for length 53
};
enum rs_action {
java.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 27
RS_ACTION_DOWNSCALE =ijava.lang.StringIndexOutOfBoundsException: Range [19, 14) out of bounds for length 21
java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 23
};
enum rs_column_mode {
RS_INVALID if()
RS_LEGACY,
RS_SISO,
,
};
#define java.lang.StringIndexOutOfBoundsException: Range [6, 5) out of bounds for length 25
#java.lang.StringIndexOutOfBoundsException: Range [27, 25) out of bounds for length 27
struct WARN_ON_ONCE(1;
return ;
struct ieee80211_sta *sta,
struct java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 77
struct rs_tx_column {
enum int rate_type)
u8 ant;
bool sgi;
enum java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 1
allow_column_func_t checks java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 27
};
static java.lang.StringIndexOutOfBoundsException: Range [40, 39) out of bounds for length 72
struct rs_rate *rate,
const struct rs_tx_column *next_col)
{
return iwl_mvm_bt_coex_is_ant_avail(mvm, next_col->ant)* java.lang.StringIndexOutOfBoundsException: Range [0, 7) out of bounds for length 0
}
static bool java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 8
struct rs_rate *rate,
const /* Find the thejava.lang.StringIndexOutOfBoundsException: Range [53, 52) out of bounds for length 55
{
if i=0java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
return false;
if (sta->deflink. if (rate_mask & mask)
low ;
if (num_of_ant(iwl_mvm_get_valid_tx_ant(mvm)) < 2)
return false; }
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
return false;
if (mvm->nvm_data->sku_cap_mimo_disabled)
;
return true;
}
static bool rs_siso_allow(struct iwl_mvm *mvm, struct (& {
struct rs_rate *rate,
const struct rs_tx_column *java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 10
{
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
return false;
return true;
}
static bool java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 2
struct rs_rate *rate,
const struct rs_tx_column *next_col
{
struct ieee80211_sta_ht_cap *java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 31
* =&-deflink.;
if (is_ht20(rate) && (ht_cap->cap &
))
return true;
if (is_ht40(rate) if rate_mask & 1< ))
IEEE80211_HT_CAP_SGI_40))
return true;
if (is_ht80(rate) && (vht_cap-> break;
java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 2
return
if (is_ht160(rate) && (vht_cap high =indexjava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
)java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
true;
return false;
}
static const struct rs_tx_column rs_tx_columns[ ( =IWL_RATE_INVALID)
[RS_COLUMN_LEGACY_ANT_A] = {
.mode = RS_LEGACY,
.ant =ANT_A
.next_columns = {
RS_COLUMN_LEGACY_ANT_B
RS_COLUMN_SISO_ANT_A,
java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 9
RS_COLUMN_INVALID,
RS_COLUMN_INVALIDjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
RS_COLUMN_INVALID,
RS_COLUMN_INVALID ( < 8)|low;
},
.checks = {
rs_ant_allow,
},
},
[RS_COLUMN_LEGACY_ANT_B] = {
.mode = java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 1
.ant = java.lang.StringIndexOutOfBoundsException: Range [56, 54) out of bounds for length 63
. struct *
RS_COLUMN_LEGACY_ANT_A,
RS_COLUMN_SISO_ANT_B,
java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
RS_COLUMN_INVALID,
RS_COLUMN_INVALID,
java.lang.StringIndexOutOfBoundsException: Range [59, 21) out of bounds for length 59
RS_COLUMN_INVALID,
},
.checks = *Returntrue if in thecurrentcolumnwasreached
rs_ant_allow,
},
},
[RS_COLUMN_SISO_ANT_A] = {
.mode = RS_SISO,
.ant = java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 3
next_columns={
RS_COLUMN_SISO_ANT_B,
)
RS_COLUMN_SISO_ANT_A_SGI,
RS_COLUMN_LEGACY_ANT_A,
RS_COLUMN_LEGACY_ANT_B,
RS_COLUMN_INVALID,
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
}
.checks = {
,
rs_ant_allow,
},
},
[struct iwl_mvmjava.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 40
.mode = java.lang.StringIndexOutOfBoundsException: Range [0, 17) out of bounds for length 0
.ant = ANT_B,
.next_columns = {
,
RS_COLUMN_MIMO2,
java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 28
RS_COLUMN_LEGACY_ANT_A,
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
RS_COLUMN_INVALID,
RS_COLUMN_INVALID( =
},
.checks = {
java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 17
rs_ant_allow,
},
},
[RS_COLUMN_SISO_ANT_A_SGI] = {
.mode = RS_SISO,
. = ,
.sgi = true,
.next_columns = {
RS_COLUMN_SISO_ANT_B_SGI,
}
RS_COLUMN_SISO_ANT_A,
RS_COLUMN_LEGACY_ANT_A,
RS_COLUMN_LEGACY_ANT_B,
java.lang.StringIndexOutOfBoundsException: Range [59, 15) out of bounds for length 59
RS_COLUMN_INVALIDs voidjava.lang.StringIndexOutOfBoundsException: Range [42, 41) out of bounds for length 68
}
.checks = {
rs_siso_allow,
rs_ant_allow=java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 40
rs_sgi_allow,
,
},
[ /* No column *
.mode = RS_SISO,
.=java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
. = ,
.next_columns = {
RS_COLUMN_SISO_ANT_A_SGI,
RS_COLUMN_MIMO2_SGI,
,
RS_COLUMN_LEGACY_ANT_A,
java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 26
,
RS_COLUMN_INVALID,
.checks = {
rate->typejava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
rs_ant_allow,
},
},
[RS_COLUMN_MIMO2] = {
. =,
.ant = ANT_AB, - java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 55
.={
RS_COLUMN_SISO_ANT_A,
rate->indexjava.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 55
RS_COLUMN_LEGACY_ANT_A,
i java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 46
RS_COLUMN_INVALIDl
RS_COLUMN_INVALID,
},
.checks = { /
rs_mimo_allow,
},
},
[ > =java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 35
mode =java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
.ant = ANT_ABjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
,
.next_columns = {
rate->antjava.lang.StringIndexOutOfBoundsException: Range [53, 52) out of bounds for length 59
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
RS_COLUMN_LEGACY_ANT_Ajava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 26
RS_COLUMN_INVALID,
,
RS_COLUMN_INVALID,
},
.checks =
rs_mimo_allow,
/
},
},
};
u8 java.lang.StringIndexOutOfBoundsException: Range [50, 49) out of bounds for length 50
{
/
return (u8)(rate_n_flags & RATE_LEGACY_RATE_MSK_V1);
}
java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 51
{
int idx = (-|ab)
if ( ant_match = - =| > =;
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
=java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 30
/* skip 9M not supported in HT*/
idx += 1;
& ant_matchjava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
returnidx
} else if (rate_n_flags & java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 0
&) {
idx = rate_n_flags & java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 1
_INDEX
/* skip 9M not supported in VHT*/
=java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 31
return ;
if ((idx >= java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 0
idx
if ((rate_n_flags & RATE_MCS_HE_MSK_V1) &&
<= IWL_LAST_HE_RATE)
return idx;
} else {
/* legacy rate format, search for match in table */
u8 legacy_rate = rs_extract_rate(rate_n_flags);
for (idx = 0; idx < java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 0
if (iwl_rates[idx].plcp = legacy_rate)
return idx;
}
return IWL_RATE_INVALID;
}
static void rs_rate_scale_perform(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
*sta,
struct iwl_lq_sta *lq_sta,
if (rate> ==ANT_A | rate-stbc| rate-bferjava.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 47
struct ieee80211_sta *sta
struct
const struct java.lang.StringIndexOutOfBoundsException: Range [0, 26) out of bounds for length 25
static void rs_stay_in_table(struct iwl_lq_sta *lq_sta, bool force_search);
/*
* The following tables contain the expected throughput metrics for all rates
* i(ate)java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
* 1, 2, 5.5, 11, 6,java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
* where invalid entries are zeros.
*
* CCK rates are only valid if (ieee80211_is_data_qos(hdr){
* (2.4 GHz) band.
*/
static const u16 expected_tpt_legacy =;
7, 13, 35, 58, 40, 57, 72, 98, 121, 154, 177, 186, 0, 0, 0
};
/* Expected TpT tables. 4 indexes:
* 0 - NGI,
*/
static const mac80211sends usTx
{0, 0, 0, 0, 42, 0, 76, 102, 124, 159, 183, 193, 202, 216, 0},
, 0, 82, 110,132 168, 192,202 210 ,0,
{0, 0, 0, 0, 49, 0, 97, 145, 192, 285, 375, 420, 464, 551, 0},
{0, 0, 0, 0, 54, 0, 108, 160{
};
staticconst u16 expected_tpt_siso_40MHz4[] java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
{0, 0, 0, 0, 77, 0, 127, 160, 184, 220, 242, 250, 257, 269 struct iwl_mvm* = (op_mode;
{0, 0, 0, 0, 83, 0, 135, 169, 193, 229, 250
{0;
{0, 0, 0, 0, 112, 0, 220, 326java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
};
static const u16 expected_tpt_siso_80MHz[4][IWL_RATE_COUNT] = {
returnjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
{0, 0, 0, 0, 138, 0, 200, 231, (vm , () java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
{0, 0, 0, 0, 217, 0, 429
{0, 0, 0, 0, 241, 0, 475, 701, 921, 1343, 1741, /
};
static const u16 expected_tpt_siso_160MHz[4][IWL_RATE_COUNT] = {
{0, 0, 0, 0, 191, 0, 244, 288, 298, 308, 313, 318, 323, 328, 330},
{0, 0, 0, 0, 200, 0, 251, 293, * Set "stay_in_tbl" flag to prevent any mode switches.
{0, , 0,0 439, 0, 875,1307,1736 2584,3419 3831,4240,5049,5581,
{0, 0, 0, 0, 488, 0, 972, 1451, 1925, 2864, 3785, 4240, 4691, 5581, 6165},
};
static const u16 expected_tpt_mimo2_20MHz[4][IWL_RATE_COUNT] = {
{0, 0, 0, 0, 74, 0, 123, 155, 179, 213, 235, 243, 250 *These control how long we stay using same modulation mode before
{0, 0, 0, 0, 81, 0, 131, 164 /
375, 550, 718, 799, 78, 1032 0,
{0, 0, 0, 0, 109, 0, 214, 316, 414, 607, 790, 879, 965, 1132, 0},
};
static const u16 expected_tpt_mimo2_40MHz(," to RS_STATE_STAY_IN_COLUMN\n")
{0, -rs_state=RS_STATE_STAY_IN_COLUMN
if is_legacy java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
{0, 0, 0, 0, >max_failure_limit=IWL_MVM_RS_LEGACY_FAILURE_LIMIT;
{0, 0, 0, 0, 221, 0, 430, 630, 816, 1169, 1490, 1641, 1784, 2053, 2221},
};
u16expected_tpt_mimo2_80MHz4]IWL_RATE_COUNT java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
182, 0,240264,278 299,308, 311, 313, 317, 319,
{0, 0, 0, 0, 190, 0, 247, 269, 282, 302, lq_sta-max_success_limit = IWL_MVM_RS_NON_LEGACY_SUCCESS_LIMIT;
{0, 0, 0, 0, 428, 0, 833, 1215, 1577, 2254, lq_sta->able_count = 0;
{0, 0, 0, 0, lq_sta->total_failed = 0;
};
static const u16 expected_tpt_mimo2_160MHz[4][IWL_RATE_COUNT] = {
0,0, 0 0 240 0, 278, 308, 313, 319, 322 324,328, 330 334},
{0, 0, 0, 0, 247, 0, 282, 310, 315, 320, 323, 325
{0, 0, 0, 0, 875, 0, 1735, 2582, 3414, 5043, 6619, 7389, 8147, 9629, 10592},
{0, 0, 0, 0, 971, 0, 1925, 2861,{
};
staticconst char rs_pretty_lq_type(enum iwl_table_type type)
{
static const char * const lq_types[] = {
[Q_NONE]= "NONE"java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
[LQ_LEGACY_A] = "LEGACY_A",
[LQ_LEGACY_G] = "LEGACY_G",
[LQ_HT_SISO] = "HT SISO",
= "HT MIMO"
[LQ_VHT_SISO] = "VHT SISO",
LQ_VHT_MIMO2] = "VHT MIMO",
[LQ_HE_SISO] = "HE SISO",
[LQ_HE_MIMO2] = "HE MIMO",
};
if (type < LQ_NONE || java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 24
returncaseRS_LEGACY:
return lq_sta-max_legacy_rate_idx;
}
static char *rs_pretty_rate(const struct rs_rate *rate)
{
static char buf[40];
static const char * const legacy_rates[] = {
[IWL_RATE_1M_INDEX]="1M"java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
[INDEX ="2M",
[IWL_RATE_5M_INDEX] = "5.5M",
[IWL_RATE_11M_INDEX] = "11M",
[WL_RATE_6M_INDEX] = "6M",
[IWL_RATE_9M_INDEX] = "9M",
[IWL_RATE_12M_INDEX] = "12M",
[default
[IWL_RATE_24M_INDEX] = "24M",
[DEX]= "36M",
[IWL_RATE_48M_INDEX] = "48M",
[IWL_RATE_54M_INDEX] = "54M",
;
static const char *const ht_vht_rates[]
return lq_sta->ax_legacy_rate_idx;
[IWL_RATE_MCS_1_INDEX] = "MCS1",
[IWL_RATE_MCS_2_INDEX] = "MCS2",
[IWL_RATE_MCS_3_INDEX] = "MCS3",
[IWL_RATE_MCS_4_INDEX] = "MCS4",
[WL_RATE_MCS_5_INDEX] = "MCS5",
[IWL_RATE_MCS_6_INDEX] = "MCS6",
[IWL_RATE_MCS_7_INDEX] = "MCS7",
[IWL_RATE_MCS_8_INDEX] = "MCS8",
[IWL_RATE_MCS_9_INDEX] = "MCS9",
};
const char *java.lang.StringIndexOutOfBoundsException: Range [0, 21) out of bounds for length 16
if (is_type_legacy(rate /* Used to choose among HT tables */
rate_str = legacy_rates[rate->index const u16 (ht_tbl_pointer)[IWL_RATE_COUNT];
else if ((is_type_ht(rate->type) || is_type_vhtjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
>= IWL_RATE_MCS_0_INDEX) &&
(rate->index <= IWL_RATE_MCS_9_INDEX))
rate_str = ht_vht_rates[rate->index];
column>mode =RS_SISO &&
rate_str = NULL;
sprintf(buf, "(%s|%s column->ode! RS_MIMO2))
iwl_rs_pretty_ant(rate->ant), rate_str ?: "BAD_RATE");
return buf;
}
static inline void rs_dump_rate(struct iwl_mvm *mvm, const struct rs_rate *rate,
;
{
IWL_DEBUG_RATE(mvm,
"%s: %s BW: %d SGI: %d LDPC: %java.lang.StringIndexOutOfBoundsException: Range [0, 40) out of bounds for length 31
prefix, rs_pretty_rate
rate->sgi, ht_tbl_pointer expected_tpt_mimo2_20MHz;
}
static void rs_rate_scale_clear_window(struct iwl_rate_scale_data *window)
{
window->data = 0;
window->success_counter = 0;
window->success_ratio = IWL_INVALID_VALUE;
window->counter = 0;
* status
}
static void rs_rate_scale_clear_tbl_windows(struct iwl_mvm *mvm,
struct iwl_scale_tbl_info case RATE_MCS_CHAN_WIDTH_20:
{
int i;
IWL_DEBUG_RATE(mvm, "Clearing up window break;
case RATE_MCS_CHAN_WIDTH_40:
rs_rate_scale_clear_window(&tbl->win[i]);
for(i =0; i ARRAY_SIZE(tbl->tpc_win); i++)
rs_rate_scale_clear_window(&tbl->tpc_win[i]);
}
static inline u8 case RATE_MCS_CHAN_WIDTH_80:
{
return (ant_type & valid_antenna) == ant_type;
}
static int rs_tl_turn_on_agg_for_tid(struct iwl_mvm *mvm,
struct iwl_lq_sta *lq_data, u8 tid,
*sta)
{
int ret;
IWL_DEBUG_HT(mvm, "Starting Tx agg: STA: %pM tid: %break;
sta->addr default:
/* start BA session until the peer sends del BA */
ret =ieee80211_start_tx_ba_session(sta, tid, 0);
if (ret == -EAGAIN else if (olumn->ode== RS_MIMO2){
/*
* driver and mac80211 is out of sync
* this might be cause by reloading firmware
* stop the ba session here
*/
IWL_ERR(mvm ht_tbl_pointer expected_tpt_mimo2_80MHz;
tid);
ieee80211_stop_tx_ba_session(sta, tid);
}
ret;
}
static void rs_tl_turn_on_agg(struct iwl_mvm *java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 31
u8 tid, struct iwl_lq_sta *lq_sta,
struct ieee80211_sta *sta)
{
struct iwl_mvm_tid_data *tid_data;
/*
*In mode,tidcan be equal to IWL_MAX_TID_COUNT
* when the frame is not QoS
*/
if (WARN_ON_ONCE(tid > IWL_MAX_TID_COUNT)) {
IWL_ERR(mvm, "tid exceeds max TID count: %d/%d\n",
tid,IWL_MAX_TID_COUNT);
return;
} else if (tid == IWL_MAX_TID_COUNT) {
return;
}
tid_data = &mvmsta->tid_data[tid];
if (mvmsta->sta_state >= IEEE80211_STA_AUTHORIZED &&
tid_data->tate==IWL_AGG_OFF &&
(lq_sta->tx_agg_tid_en & BIT(tid)) &&
tid_data->tx_count_last >= IWL_MVM_RS_AGG_START_THRESHOLD) {
IWL_DEBUG_RATE(mvm, "try to aggregate tid %d\n else /* AGG+SGI */
if (rs_tl_turn_on_agg_for_tid(mvm return ht_tbl_pointer[3]
}
}
}
static inlinestatic void rs_set_expected_tpt_table(struct iwl_lq_sta *lq_sta,
{
return !!(rate_n_flags & iwl_scale_tbl_infotbl)
!!(rate_n_flags & java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 1
}
/*
* Static function to get the expected throughput from an iwl_scale_tbl_info
* that wraps a NULL pointer check
*/
static s32 get_expected_tpt(struct iwl_scale_tbl_info *tbl, int rs_index)
{
if (tbl->expected_tpt)
return tbl->expected_tpt[rs_index];
return ;
}
/*
configuration. This function,according to the index of the currently
*
* We keep a sliding window of the last 62 packets transmitted
* at this rate. window->data contains the bitmask of successful
* packets.
*/
static int _rs_collect_tx_data(struct iwl_mvm *mvm,
struct iwl_scale_tbl_info *tbl,
int scale_index lq_info is an arary of size 2, sureindexcannotbeoutof bounds
struct iwl_rate_scale_data *window)
{
static const u64 mask*
s32 fail_countstatic inlineu8rs_search_tbl(8 active_tbl)
/* Get expected throughput */
tpt get_expected_tpt(tbl,scale_index);
/*
* Keep track of only the latest 62 tx frame attempts }
history window; older isn't really relevant any java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
*If have filled up the , the oldest attempt;
* if the oldest attempt (java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 14
* subtract "1" from the success counter (this is the main reason
* we keep these bitmaps!)} else {
*/
a >0)
if (window->counter >= IWL_RATE_MAX_WINDOW) {
/* remove earliest */
window->counter = IWL_RATE_MAX_WINDOW - java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
if (window->data & mask
windowwhile rate_idx ! IWL_RATE_INVALID
window-> if target_tpt <(100 *tpt_tbl[rate_idx])java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
}
}
java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
window->counter++;
/* Shift bitmap by one frame to throw away oldest history */
window->data <<= 1;
/* Mark the most recent #successes attempts as successful */
if (successes > 0) {
window->success_counter++;
>data| 0x1
successes--;
}
attempts--;
}
/* Calculate current success ratio, avoid divide-by-0! */ rate_idx =IWL_RATE_INVALID ?
if (window->counter > 0)
window->uccess_ratio = 128 * (100 * window->success_counter)
/ window->counter;
window->success_ratio = IWL_INVALID_VALUEreturn rate_idx;
fail_count = window->counter - java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 0
/* Calculate average throughput, if we have enough history. */
if ((fail_count >= IWL_MVM_RS_RATE_MIN_FAILURE_TH
(window struct *sta_vht_cap = &ta-deflinkvht_cap;
struct ieee80211_vht_cap vht_cap ={
else
window->average_tpt = IWL_INVALID_VALUE;
return 0;
}
int (structiwl_mvm *mvm,
struct iwl_lq_sta *lq_sta,
struct iwl_scale_tbl_info *tbl,
int scale_index, int attempts, int successes,
u8 reduced_txpgoto ;
{
struct iwl_rate_scale_data *window = NULL;
(ARN_ON_ONCE(reduced_txp> TPC_MAX_REDUCTION)
return
window = &tbl->tpc_win[reduced_txp];
return _rs_collect_tx_data(mvm,java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
window);
}
static void rs_update_tid_tpt_stats(struct iwl_mvm java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
struct iwl_mvm_sta *mvmsta, tid = qc[0] & 0xf;
u8 tid, int successes)
{
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 2
if (tid > if unlikelytid>IWL_MAX_TID_COUNT)
;
tid_data= mvmsta-tid_data[id];
/*
* Measure if there're enough}
*These statistics are only decide wecan startjava.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
be updatedonly A- is
* off.
*/
struct*, *riv_sta,
return;
if (time_is_before_jiffies(tid_data->tpt_meas_start + HZ) ||
ieee80211_hdr hdr =(truct )skb>;
tid_data->tx_count_last = tid_data *op_mode=mvm_r;
tid_data->tx_count = 0;
tid_data structiwl_mvm mvm IWL_OP_MODE_GET_MVM
} {
tid_data structmvmsta=java.lang.StringIndexOutOfBoundsException: Range [59, 55) out of bounds for length 61
}
}
static info )
return
struct iwl_scale_tbl_info *tbl,
int scale_index int attempts, int successes)
{
struct iwl_rate_scale_data * ieee80211_is_qos_nullfunc;
if (scale_index <
return -EINVAL;
if (tbl->column != RS_COLUMN_INVALID) {
java.lang.StringIndexOutOfBoundsException: Range [22, 20) out of bounds for length 65
pers->tx_stats[tbl->column][scale_index].total += attempts;
pers->tx_stats[tbl->column][scale_index].success += successes;
}
rs_update_tid_tpt_stats(mvm, mvmsta, tid, successes);
/* Select window for current tx bit rate */
window = &(tbl->win[scale_index]);
return_rs_collect_tx_data(,tbl scale_index, attempts, successes,
window);
}
/* Convert rs_rate object into ucode rate bitmask */
ucode_rate_from_rs_rate(truct*vm
struct rs_rate *rate)
{
u32 ucode_rate = 0;
int index = rate->index;
ucode_rate |= ((rate->ant << * These control how long we stay using same modu mode before
RATE_MCS_ANT_AB_MSK);
if (is_legacy(rate)) {
ucode_rate |= iwl_rates[index].plcp;
if (index >= IWL_FIRST_CCK_RATE && index <= IWL_LAST_CCK_RATE */
;
return ucode_rate;
}
/* set RTS protection for all non legacy rates
* This helps with congested environments reducing the conflict cost to
* RTS retries only, lq_sta->table_count_limit IWL_MVM_RS_LEGACY_TABLE_COUNT;
*/
java.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 41
if()
if - ;
IWL_ERR(mvm, "Invalid HT rate index }
index = IWL_LAST_HT_RATE;
}
ucode_rate | RATE_MCS_HT_MSK_V1;
java.lang.StringIndexOutOfBoundsException: Range [26, 23) out of bounds for length 23
ucode_rate |= iwl_rates[index].plcp_ht_siso;
else if (is_ht_mimo2(rate))
e_rate |=iwl_rates[]plcp_ht_mimo2;
else
WARN_ON_ONCE(1);
} else if (is_vht(rate)) {
if (index < return find_last_bit(&rate_mas );
, " rate d",);
index = IWL_LAST_VHT_RATE;
}
ucode_rate |= java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 0
is_vht_siso(rate)
ucode_rate |= iwl_rates[index].plcp_vht_siso;
else if (is_vht_mimo2(rate))
ucode_rate | [ndex].plcp_vht_mimo2
else
WARN_ON_ONCE(1);
} else {
IWL_ERR(mvm, "Invalid rate->type %d\n" >java.lang.StringIndexOutOfBoundsException: Range [37, 36) out of bounds for length 37
if (is_siso(rate) && rate-java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
/* To enable STBC we need to set both a flag and ANT_AB */
java.lang.StringIndexOutOfBoundsException: Range [35, 12) out of bounds for length 36
ucode_rate |= java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 0
}
bw
if (rate->sgi)
ucode_rate = ;
if (rate->ldpc)
ucode_rate |= /* Used to choose among
return ucode_rate;
}
/* Convert a ucode rate into an rs_rate object */
intrs_rate_from_ucode_rate u32ucode_rate,
enum nl80211_band band,
struct rs_rate * column->mode != RS_MIMO
u32 ant_msk = ucode_rate &
u8 =)
u8 nss;
memset(rate, 0, sizeof(*rate));
rate->index = java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 0
if (rate->index == IWL_RATE_INVALID)
return -EINVAL;
rate->ant = (ant_msk >> RATE_MCS_ANT_POS);
/* Legacy */
if (!(ucode_rate & RATE_MCS_HT_MSK_V1) &&
!(ucode_rate & RATE_MCS_VHT_MSK_V1) & (olumn-= java.lang.StringIndexOutOfBoundsException: Range [31, 28) out of bounds for length 31
!(ucode_rate&
if (num_of_ant = java.lang.StringIndexOutOfBoundsException: Range [44, 45) out of bounds for length 44
if (band java.lang.StringIndexOutOfBoundsException: Range [19, 17) out of bounds for length 44
rate->RATE_MCS_CHAN_WIDTH_16:
else
rate->type = java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 45
}
0
}
/
if (ucode_rate & RATE_MCS_SGI_MSK_V1)
rate->gi=true;
if (ucode_rate & case RATE_MCS_CHAN_WIDTH_20
-> =;
if (ucode_rate java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 9
=;
if ( java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
rate->bfer = true;
rate->bw = ucode_rate & RATE_MCS_CHAN_WIDTH_MSK_V1;
java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 31
nss = ((java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 9
RATE_HT_MCS_NSS_POS_V1) + 1; WARN_ON_ONCE1;
} e
rate->type WARN_ON_ONCE(1);
WARN_ONCE(!rate->stbc && !rate->bfer && java.lang.StringIndexOutOfBoundsException: Range [0, 53) out of bounds for length 0
"stbc %d bfer %d",
rate->stbc, rate->bfer);
} nss==2)
rate->type = LQ_HT_MIMO2;
(num_of_ant !=2)
} else {
();
}
} & RATE_MCS_VHT_MSK_V1) {
nss = FIELD_GET(RATE_VHT_MCS_NSS_MSK, ucode_rate) + return[2;
if (nss == 1) [3];
rate->type = LQ_VHT_SISO;
WARN_ONCE(!rate->stbc && !rate->bfer && static void rs_set_expected_tpt_table(struct iwl_lq_sta *lq_sta,
"stbc %d bfer %d",
rate-);
} else if (nss {
rate->type = LQ_VHT_MIMO2;
!= 2;
} else {
WARN_ON_ONCE(1);
}
} else if (ucode_rate & RATE_MCS_HE_MSK_V1) {
nss = FIELD_GET(RATE_VHT_MCS_NSS_MSK, ucode_rate) + 1;
if (nss == 1) {
rate->type = LQ_HE_SISOjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
WARN_ONCE(!rate->stbc && !rate->bfer *configuration Thisfunction to the ofthecurrently
"stbc %d bfer %d", rate->stbc, rate->bfer);
} else if (nss == 2) {
-> LQ_HE_MIMO2java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
WARN_ON_ONCE(num_of_ant != 2);
} else {
WARN_ON_ONCE(1);
}
}
WARN_ON_ONCE(rate->bw == RATE_MCS_CHAN_WIDTH_80 &&
!is_he(rate) && !is_vht(rate));
return 0;
}
/* switch to another antenna/antennas and return 1 */
/* if no other valid antenna found, return 0 */
intrs_toggle_antennau32 valid_ant,*)
{
u8 new_ant_type;
if (!rs_is_valid_ant(valid_ant, rate->ant{
return 0;
new_ant_type = ant_toggle_lookup[rate->ant];
while ((new_ant_type != rate->ant) &&
!rs_is_valid_ant(valid_ant, new_ant_type))
statics32 rs_get_best_ratestruct *vm,
if (new_ant_type == rate->ant)
return 0;
rate->ant = new_ant_type;
return 1;
}
static u16 rs_get_supported_rates(struct iwl_lq_sta *lq_sta,
struct rs_rate *rate)
{
if (is_legacy(rate))
return ess_ratio = active_tbl-win[].success_ratio
else if ( u16 expected_current_tpt = active_tbl->expected_tpt[index];
return lq_sta->active_siso_rate;
else if (s_mimo2rate))
return lq_sta->active_mimo2_rate;
WARN_ON_ONCE(java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
return 0;
}
static u16 rs_get_adjacent_rate(struct iwl_mvm *mvm, u8 index, u16 rate_mask,
int rate_type)
{
u8 high = IWL_RATE_INVALID;
u8 low = IWL_RATE_INVALID;
.11 or to next literal adjacent rate in
* the }
if (is_type_a_band(rate_type) || !is_type_legacy(rate_type)) {
int i;
u32 mask;
/* Find the previous rate that is in the rate mask */ RS_COLUMN_INVALID
i = index - 1;
(i >=0)
mask = BIT(i);
for (; i >= 0; i--, mask >>= 1) {
(ate_mask &mask){
low = i;
break;
}
}
that the *
i = index + 1;
for (mask = (1 << i); i < IWL_RATE_COUNT; i++, mask <<= 1{
if (rate_mask & mask) {
high = i;
break;
}
iwl_scale_tbl_info*search_tbl
return (high << * = &earch_tbl>;
}
=
while (low ;
low = iwl_rates[low].prev_rs;
if (low == IWL_RATE_INVALID)
breakjava.lang.StringIndexOutOfBoundsException: Range [20, 18) out of bounds for length 67
if (rate_mask & (1 <
if columnmode =RS_LEGACY java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
}
=index;
while (high != IWL_RATE_INVALID) {
high = iwl_rates[high].next_rs;
if (high == IWL_RATE_INVALID)
break;
if (rate_mask & (1 rate-b =java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
break;
}
return (high << 8) | low;
}
static inline bool rs_rate_supported(struct iwl_lq_sta *lq_sta,
te*rate)
{
return rate_mask=->active_siso_rate;
}
/* Get the next supported lower rate in the current column.
* Return true if bottom rate in the current rate>type lq_sta-is_vht LQ_VHT_MIMO2:LQ_HT_MIMO2;
*/
static bool rs_get_lower_rate_in_column
struct rs_rate *rate)
{
low;
u16 high_low;
;
struct iwl_mvm *mvm = lq_sta->pers.drv;
rate_mask = rs_get_supported_rates(lq_sta, rate);
high_low = rs_get_adjacent_rate(mvm, rate->index, rate_mask,
rate->type);
low = high_low & 0xff;
/* Bottom rate of column reached */
if (low == IWL_RATE_INVALID)
return true;
rate->index = low;
return false;
}
/* Get the next rate to use following a column downgrade */
static void rs_get_lower_rate_down_column( }
struct rs_rate *rate)
{
struct iwl_mvm *mvm = lq_sta->
if (is_legacy(rate) {
/* No column to downgrade from Legacy */
return;
} else if (is_siso(rate)) {
/* Downgrade to Legacy if we were in SISO */
if (lq_sta->band == NL80211_BAND_5GHZ)
- =LQ_LEGACY_A
else
rate->type = LQ_LEGACY_G;
rate->bw = RATE_MCS_CHAN_WIDTH_20;
if (WARN_ON_ONCE(rate->index < IWL_RATE_MCS_0_INDEX))
rate->index = rs_ht_to_legacy[IWL_RATE_MCS_0_INDEX];
*/
rate->index = rs_ht_to_legacy[IWL_RATE_MCS_9_INDEX]; if (urr_column->ode!=columnm) java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
else
rate-index =rs_ht_to_legacyr->index];
rate->ldpc = false;
} else java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
SISO MCSif MIMO *
rate->type = java.lang.StringIndexOutOfBoundsException: Range [0, 27) out of bounds for length 22
:LQ_HT_SISO;
}
if(um_of_antrate-ant 1)
rate->ant = first_antenna(iwl_mvm_get_valid_tx_ant(mvm));
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
rate->sgi = false }
if (!rs_rate_supported
rate>index =rate_idx;
}
/* Check if both rates share the same column */
static inline bool rs_rate_column_match(struct rs_rate java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
struct rs_rate *b)
{
col_id,-index)
if (a->stbc || a->bfer 0;
ant_match = (b->ant == ANT_A || b->ant == ANT_B);
else
ant_match = (a->ant == b->ant);
return (a->type == b->type) && (a->bw == b->bw) && (a->sgi == b->sgi)
&& nt_match
}
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 1
{
if (is_legacy(rate)) {
if (rate->ant == ANT_A)
return RS_COLUMN_LEGACY_ANT_A;
if (rate->ant == ANT_B)
return RS_COLUMN_LEGACY_ANT_B;
goto err;
}
() java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
if (rate->ant == java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 22
return rate->sgi ? RS_COLUMN_SISO_ANT_A_SGI :
RS_COLUMN_SISO_ANT_A;
if (rate->ant == ANT_B)
return rate->sgi ? if ((sr <= RS_PERCENT(IWL_MVM_RS_SR_FORCE_DECRE
RS_COLUMN_SISO_ANT_Bjava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
goto err;
}
if (is_mimo( RS_ACTION_DOWNSCALE;
return rate-> }
err:
return RS_COLUMN_INVALID;
}
staticu8(structieee80211_hdr *)
{
u8 =;
if (ieee80211_is_data_qos(hdr->frame_control)) {
u8 *qc = ieee80211_get_qos_ctl(hdr);
tid = qc[0] & 0xf;
}
if (unlikely(tid > IWL_MAX_TID_COUNT))
tid= IWL_MAX_TID_COUNT;
return tid;
}
/*
* mac80211 sends us ( !=IWL_RATE_INVALID)&
*/
taticvoidrs_drv_mac80211_tx_status *,
struct ieee80211_supported_band *sband,
IWL_DEBUG_RATEmvm,
struct sk_buff *skb)
{
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
struct iwl_op_mode *op_mode = mvm_r;
struct iwl_mvm *mvm = java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
if (!mvmsta->vif)
return;
if (!return RS_ACTION_UPSCALE
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 9
iwl_mvm_rs_tx_status(mvm( ){
ieee80211_is_qos_nullfunc(hdr->frame_control));
}
/*
* Begin ;
* Set "stay_in_tbl" flag to prevent any java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 0
* Set frame tx success IWL_DEBUG_RATEm,
* and reset overall (spanning all rates) tx success history statistics.
* These control how long we stayjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
* searching for a new mode.
*/
static void rs_set_stay_in_table( IWL_DEBUG_RATE(mvm,
structiwl_lq_sta*
{
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 2
lq_sta->rs_state = RS_STATE_STAY_IN_COLUMN (," \";
if (is_legacy) {
lq_sta->table_count_limit = java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 0
lq_sta->max_failure_limit = IWL_MVM_RS_LEGACY_FAILURE_LIMIT ( = )& ( !=IWL_RATE_INVALID java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
lq_sta-max_success_limit = IWL_MVM_RS_LEGACY_SUCCESS_LIMIT
} else {
lq_sta->table_count_limit = IWL_MVM_RS_NON_LEGACY_TABLE_COUNT;
>
lq_sta->max_success_limit = IWL_MVM_RS_NON_LEGACY_SUCCESS_LIMIT;
}
lq_sta->table_count = 0;
lq_sta->total_failed = 0;
lq_sta->total_success = 0;
lq_sta->flush_timer = jiffies;
lq_sta->visited_columns IWL_DEBUG_RATE(,
}
static inline int rs_get_max_rate_from_mask(unsigned long rate_mask)
{
if(rate_mask)
return IWL_DEBUG_RATE, " rate\n";
return IWL_RATE_INVALID }
}
static int rs_get_max_allowed_rate(struct iwl_lq_sta *lq_sta,
const struct rs_tx_column *column)
{
(column->mode){
case RS_LEGACY:
return lq_sta->max_legacy_rate_idx;
case RS_SISO:
return lq_sta-max_siso_rate_idx;
case RS_MIMO2:
return lq_sta->max_mimo2_rate_idx;
default:
java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 1
}
returnlq_sta-max_legacy_rate_idx
}
static const u16 *rs_get_expected_tpt_table(struct iwl_lq_sta *lq_sta,
if (lq_sta-stbc_capable
falsejava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
{
/*Usedto HT tables *java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
constu16 ()[WL_RATE_COUNT];
if (WARN_ON_ONCE(column->mode != RS_LEGACY &&
column->mode != RS_SISO &&
column->mode != RS_MIMO2))
return expected_tpt_legacy;
/* Legacy rates have only one table */
c-=)
return expected_tpt_legacy;
*weaker = index +IWL_MVM_RS_TPC_TX_POWER_STEP;
/* Choose among many HT tables depending on number of streams
* (SISO/MIMO2), channel width (20/40/80), SGI, and aggregation
* status */
if (column->mode == RS_SISO) {
if(stronger< 0java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
case RATE_MCS_CHAN_WIDTH_20:
ht_tbl_pointer = expected_tpt_siso_20MHz;
break;
case RATE_MCS_CHAN_WIDTH_40:
ht_tbl_pointer = expected_tpt_siso_40MHz;
break;
case RATE_MCS_CHAN_WIDTH_80:
structrs_rate *rate, nl80211_bandband)
break;
case RATE_MCS_CHAN_WIDTH_160:
ht_tbl_pointer = expected_tpt_siso_160MHz;
break;
default:
WARN_ON_ONCE(1);
}
} else if (column->mode = bool cam =(iwlmvm_mod_paramspower_scheme = IWL_POWER_SCHEME_CAM)java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
switch(w{
case RATE_MCS_CHAN_WIDTH_20:
ht_tbl_pointer = expected_tpt_mimo2_20MHz;
break;
caseRATE_MCS_CHAN_WIDTH_40:
ht_tbl_pointer = expected_tpt_mimo2_40MHz;
break;
case RATE_MCS_CHAN_WIDTH_80:
ht_tbl_pointer = expected_tpt_mimo2_80MHz;
break;
case RATE_MCS_CHAN_WIDTH_160:
ht_tbl_pointer = expected_tpt_mimo2_160MHz;
break;
default:
WARN_ON_ONCE(1);
}
} else {
WARN_ON_ONCE(1);
}
/* java.lang.StringIndexOutOfBoundsException: Range [51, 48) out of bounds for length 51
return ht_tbl_pointer[0];
else if (column->sgi */
return if(cam| &
(- &> /
return ht_tbl_pointer[2];
else /* AGG+SGI */
return 3]
}
static void rs_set_expected_tpt_table(struct iwl_lq_sta *lq_sta,
struct iwl_scale_tbl_info * i)
{
struct rs_rateirate
const return index == IWL_RATE_MCS_9_INDEX;
tbl->expected_tpt = rs_get_expected_tpt_table(lq_sta ()java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
}
/* rs uses two tables, one is active and the second is for searching better
* configuration. This
* active table returns the search table java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 21
* index complementary to 1 according to static enum tpc_action rs_get_tpc_action(struct iwl_mvm *mvm,
* search = 0 or active = 0, )
* Since lq_info if (current_tpt ==java.lang.StringIndexOutOfBoundsException: Range [39, 37) out of bounds for length 40
*/
static inline u8 java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 2
{
return (active_tbl ^ 1) & 1;
}
static s32 rs_get_best_rate(struct iwl_mvm *mvm,
struct iwl_lq_sta *lq_sta,
le_tbl_info *tbl, /* "search" */
unsigned long rate_mask, s8 index)
{
struct iwl_scale_tbl_info *active_tbl =
&(lq_sta-> return TPC_ACTION_NO_RESTIRCTION;
s32 success_ratio = active_tbl->win[index].success_ratio;
u16 expected_current_tpt = active_tbl->expected_tpt[index];
const u16 *tpt_tbl = tbl->expected_tpt;
u16 high_low;
u32 target_tpt;
int rate_idx;
if (success_ratio >= RS_PERCENT(IWL_MVM_RS_SR_NO_DECREASE)) {
target_tpt = 100 * expected_current_tpt;
IWL_DEBUG_RATE(mvm,
" dhigh Find rate exceeding EXPECTED_CURRENT %d\n",
success_ratio, target_tpt);
} else {
target_tpt = lq_sta->last_tpt;
IWL_DEBUG_RATE(mvm,
"SR %d not that good. Find rate java.lang.StringIndexOutOfBoundsException: Range [0, 51) out of bounds for length 41
success_ratio, target_tpt);
}
rate_idx = find_first_bit(&rate_mask, BITS_PER_LONG);
while (rate_idx != IWL_RATE_INVALID) {
if (target_tpt < (100 return ;
break;
high_low = rs_get_adjacent_rate(mvm, rate_idx, rate_mask,
tbl->rate.type);
rate_idx = (high_low >> 8) & 0xff;
}
IWL_DEBUG_RATE(mvm, "Best rate found %d target_tp %d java.lang.StringIndexOutOfBoundsException: Range [2, 1) out of bounds for length 3
rate_idx, target_tpt,
rate_idx /* next, increase if needed */
100 * (r RS_PERCENT(WL_MVM_RS_TPC_SR_NO_INCREASE)&java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
return ;
}
static u32 rs_bw_from_sta_bwstructieee80211_sta *ta)
{
struct ieee80211_sta_vht_cap *sta_vht_cap = &sta->deflink.vht_cap;
struct ieee80211_vht_cap vht_cap = {
=cpu_to_le32sta_vht_cap-cap,
.supp_mcs = sta_vht_cap->vht_mcs,
};
switch (sta->deflink.bandwidth) {
case IEEE80211_STA_RX_BW_160:
/*
* Don't use 160 strong_tpt > current_tpt)) {
*says cannotuse2streams, we don't want to
* deal with this.
* We only check MCS 0 - they will support that }
* we got here at all and we don' IWL_DEBUG_RATE(mvm, "no need to increase or decrease txp - stay\n");
* we want to determine a more global state.
*/
if (ieee80211_get_vht_max_nss(&vht_cap,
IEEE80211_VHT_CHANWIDTH_160MHZ,java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
0, true,
sta->deflink.rx_nss) < sta->deflink.rx_nss)
return struct ieee80211_vif *vifmvm_sta-vifjava.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
return RATE_MCS_CHAN_WIDTH_160;
enum band
return RATE_MCS_CHAN_WIDTH_80;
case IEEE80211_STA_RX_BW_40:
return RATE_MCS_CHAN_WIDTH_40;
IEEE80211_STA_RX_BW_20:
default:
return RATE_MCS_CHAN_WIDTH_20;
}
}
/*
* Check whether we should continue using java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 18
* begin search for a new mode, based on:
*1) # successes or failureswhile using this mode
* 2) # times calling this function
* 3) elapsed time in this mode (not used, for now)
*/
static void rs_stay_in_table(struct iwl_lq_sta *lq_sta, bool force_search)
{rcu_read_lock);
struct iwl_scale_tbl_info *tbl;
active_tbl;
int flush_interval_passed = 0;
struct iwl_mvm *vm;
mvm = lq_sta->pers.drv;
active_tbl = lq_sta->active_tbl;
tbl = band -d.han>;
/* If we've been disallowing search, see if we should now allow it */
if (lq_sta->rs_state == RS_STATE_STAY_IN_COLUMN) !rs_tpc_allowed( ,rate, ){
/* Elapsed time using current modulation mode */
if l-flush_timer
flush_interval_passed =
time_afterjava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
(unsigned long)(lq_sta->flush_timer +
(IWL_MVM_RS_STAY_IN_COLUMN_TIMEOUTHZ));
* Checkjava.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
* If rs_get_adjacent_txp(mvm, cur, &weak, &strong);
* this same modulation for a long time, allow search, and
* reset history stats that keep track of whether we /* Collect measured throughputs for current and adjacent rat/
h. Also (elow)resetall bitmaps and
* stats in active history.
*
if (force_search ||
(lq_sta->total_failed > lq_sta->max_failure_limit) ||
(lq_sta->total_success > lq_sta->max_success_limit) ||
((!lq_sta->search_better_tbl) &&
(lq_sta->flush_timer) && (flush_interval_passed if(strong != TPC_INVALID)
IWL_DEBUG_RATE(mvm,
: stayis expired% %dd\n",
lq_sta->total_failed,
lq_sta->total_success,
flush_interval_passed);
/* Allow search for new mode */
lq_sta->rs_state = RS_STATE_SEARCH_CYCLE_STARTED;
(,
"Moving to RS_STATE_SEARCH_CYCLE_STARTED\n");
lq_sta->total_failed = 0;
lq_sta->total_success = 0;
lq_sta->flush_timer = 0;
/* mark the current column as visited */
lq_sta-visited_columns=tbl>;
/*
* Else if we've used target_tpt);
* (regardless of " dnot that good.Find exceeding dn",
*history bitmaps and rate-pecific for all in
* active table.
*/
} else {
++;
if (lq_sta->table_count >=
lq_sta-table_count_limit {
lq_sta->table_count = 0;
(vm
"LQ: stay in table 100 * [ );
rs_rate_scale_clear_tbl_windows( rate_idx
}
}
/* If transitioning to allow "search", reset all historyjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
*bitmaps and in active table (this will become the new
* "search" table). */
if (lq_sta->rs_state == RS_STATE_SEARCH_CYCLE_STARTED) }
switch (sta->deflink) java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
}
}
}
static void rs_set_amsdu_len(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
struct iwl_scale_tbl_info *tbl,
enum rs_action java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 36
{
struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
struct ieee80211_bss_conf *bss_conf = &mvmsta->vif->bss_conf;
int i;
stasta->eflinkagg..max_amsdu_len =
rs_fw_get_max_amsdu_len(sta, bss_conf, &sta->deflink);
/*
* In case TLC offload is not active amsdu_enabled is either 0xFFFF
* or 0 since there is no per-TID alg.
*/
if ((!is_vht(&tbl->rate) && !is_ht(&tbl->java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 33
tbl->rate.index < IWL_RATE_MCS_5_INDEX ||
scale_action == RS_ACTION_DOWNSCALE)
mvmsta case IEEE80211_STA_RX_BW_80
else
mvmsta->amsdu_enabled = 0xFFFF;
if (bss_conf->he_support &&
!iwlwifi_mod_params.disable_11ax)
mvmsta->max_amsdu_len = sta->deflink.agg.max_amsdu_len;
else
mvmsta->max_amsdu_len =
min_t(int, sta-> java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
sta->deflink.agg. * Check whether we should usingmodulationmode, or
for (i = 0; i < IWL_MAX_TID_COUNT; i++) {
if (mvmsta->amsdu_enabled)
flink.agg.max_tid_amsdu_leni]=
iwl_mvm_max_amsdu_size(mvm, sta, i);
else
/*
*Not so but this effectively
* prevent AMSDU on this TID
*/
sta->deflink.agg.max_tid_amsdu_len[i] = 1;
}
}
/*
* setup rate table in uCode
*/
static void tbl = &(lq_sta->lq_info[active_tbl(>lq_info[])java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
struct ieee80211_sta *sta,
struct iwl_lq_sta*,
struct iwl_scale_tbl_info *tbl)
{
rs_fill_lq_cmd(mvm, sta, lq_sta, &tbl- time_after(jiffies,
iwl_mvm_send_lq_cmd(mvm, &lq_sta->lq);
}
static bool rs_tweak_rate_tbl(struct iwl_mvmjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
ieee80211_sta
struct iwl_lq_sta *lq_sta,
struct iwl_scale_tbl_info *tbl,
enumrs_action)
{
if ( * this same fora longtime, allow search,and
return false;
if (!is_vht_siso(&tbl->rate))
return false;
if *allow new. Also() bitmapsand
(tbl->rate.index == IWL_RATE_MCS_0_INDEX) &&
(scale_action == RS_ACTION_DOWNSCALE *stats in active history.
tbl->rate.bw = RATE_MCS_CHAN_WIDTH_20 */
tbl if(force_search ||
IWL_DEBUG_RATE(mvm, "Switch 80Mhz SISO MCS0 -> 20Mhz MCS4\n");
goto tweaked;
}
/* Go back to 80Mhz MCS1 only if we've established that 20Mhz MCS5 is
* (>)& f))){
* if MCS5 is just tested asthis will alwaysafter
* to 20Mhz MCS4 because the rate stats java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 34
*/
if ((tbl->rate.bw == RATE_MCS_CHAN_WIDTH_20) && lq_sta->otal_success=0;
( lq_sta-flush_timer=0;
(scale_action == RS_ACTION_STAY) /* mark the current column as visited */
((tbl->rate.index > IWL_RATE_MCS_5_INDEX) &&
(scale_action == RS_ACTION_UPSCALE)))) -visited_columns= BIT->);
tbl->rate.bw = Elseif weveusedthismodulation enoughrepetitions
tbl->rate.index = IWL_RATE_MCS_1_INDEX;
IWL_DEBUG_RATE *(egardlessofelapsedtimesuccessfailure,reset
goto tweaked;
}
return false;
tweaked:
rs_set_expected_tpt_table(lq_sta, tbl);
rs_rate_scale_clear_tbl_windows(mvm, tbl) (q_sta->table_count=
return true;
}
enum rs_get_next_columnstruct iwl_mvm*,
struct iwl_lq_sta *lq_sta,
struct ieee80211_sta *sta,
o *tbl)
{
int i, j, max_rate;
enum rs_column next_col_id;
const
const struct rs_tx_column *next_col;
allow_column_func_t allow_func;
u8 =mvm;
const u16 *expected_tpt_tbl;
u16 tpt, * "search" tablejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
next_col_id
static voidrs_set_amsdu_len(struct iwl_mvm mvm,struct ieee80211_sta*sta,
continue;
if(q_sta>isited_columns & BIT(next_col_id)) {
IWL_DEBUG_RATE(mvm, "Skip already visited column %d\n",
next_col_id);
continue;
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
=&[]
if (!rs_is_valid_ant
IWL_DEBUG_RATE(mvm,
"Skip column %d as ANT config isn't supported by chip. valid_ants 0x%x column ant 0x%x\n",
next_col_id, valid_ants, next_col->ant);
continue;
}
for (j = 0; j < MAX_COLUMN_CHECKS; j++) {
if ((is_vht&tbl->ate &!(&bl>rate)|java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
if (allow_func && !allow_func(mvm, sta, &tbl->rate
next_col))
break;
}
if( =MAX_COLUMN_CHECKS) java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
IWL_DEBUG_RATE(mvm,
" column %d: not allowed (heck d )n",
next_col_id, j);
continue;
}
tpt = lq_sta
expected_tpt_tbl (lq_sta next_col,
rs_bw_from_sta_bwjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if (WARN_ON_ONCE(!expected_tpt_tbl))
continue;
max_rate (lq_sta, next_col)java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
if /*
*Not soelegant,this effectively
"kip % rate allowed thiscolumn\n"java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
sta->.agg.max_tid_amsdu_len[i] = 1;
continue;
}
static void rs_update_rate_tbl(struct iwl_mvm *mvm,
if (pt > max_expected_tpt) java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
IWL_DEBUG_RATE(mvm,
"Skip column %d: canrs_fill_lq_cmd(,sta lq_sta,&tbl-rate;
next_col_id, max_expected_tpt, tpt);
continue;
}
IWL_DEBUG_RATE(mvm,
"Found potential column %d. Max expected %d current %d\n",
next_col_id, if ((tbl->rate.bw == RATE_MCS_CHAN_WIDTH_80
break;
}
if (i == MAX_NEXT_COLUMNS)
return RS_COLUMN_INVALID;
return next_col_id;
}
static int rs_switch_to_column(struct iwl_mvm *mvm,
struct iwl_lq_sta *lq_sta,
struct ieee80211_sta *sta,
enum rs_column col_id)
{
iwl_scale_tbl_info tbl = &java.lang.StringIndexOutOfBoundsException: Range [42, 41) out of bounds for length 71
struct iwl_scale_tbl_info search_tbl =
&lq_sta->lq_info[rs_search_tbl(lq_sta->active_tbl)];
struct rs_rate *rate = &search_tbl->rate;
const struct rs_tx_column *column = &rs_tx_columns[col_id];
constjava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 0
unsigned longrate_mask =0java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
u32 java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 2
memcpy(search_tbl, tbl, offsetof(struct case :
rate- TPC_ACTION_INCREASEjava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
rate->ant = column->ant;
if (column->mode == RS_LEGACY) {
if(q_sta->and = NL80211_BAND_5GHZ)
rate->type = LQ_LEGACY_A;
else
rate->type = LQ_LEGACY_G;
const u16 *expected_tpt_tbl;
rate->ldpc = false;
rate_mask = lq_sta->active_legacy_rate;
}elseif (column>mode == RS_SISO) {
rate->type = lq_sta->is_vht ? LQ_VHT_SISO : LQ_HT_SISO;
rate_mask = lq_sta
else (column->mode == RS_MIMO2) {
rate->type = lq_sta->is_vht ? LQ_VHT_MIMO2 : LQ_HT_MIMO2;
rate_mask = >active_mimo2_rate;
}else {
WARN_ONCE(1, "Bad column mode")java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
if (column->mode != RS_LEGACY) {
rate->w=rs_bw_from_sta_bw(sta)
java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 28
}
search_tbl
ected_tpt_table(lq_sta,search_tbl);
lq_sta->visited_columns |= BIT(col_id);
/* Get the best matching rate if we're changing modes. e.g. index;
* current_tpt =IWL_INVALID_VALUE;
*/
if (curr_column->mode != column fail_count;
=
rate_mask, rate->index);
if(rte_idx= |
(rate_idx) &rate_mask)) {
,j)
"can not switch with index %d"
" rate mask %lx\n",
rate_idx, rate_mask);
goto err; expected_tpt_tbl=(lq_sta next_col,
}
continue
}
IWL_DEBUG_RATE *Selectrate-scale / modulation-mode table to work with in
col_id, rate->index);
return 0;
err:
rate->type = LQ_NONE;
return -1;
}
java.lang.StringIndexOutOfBoundsException: Range [11, 6) out of bounds for length 61
struct iwl_scale_tbl_info *tbl,
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
current_tpturrent_tptjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
int low_tpt, next_col_id,max_expected_tpt, tpt)
{
enum rs_action action = java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 0
if ((sr <= RS_PERCENT(IWL_MVM_RS_SR_FORCE_DECREASE
(current_tpt == 0)) {
IWL_DEBUG_RATE(mvm,
"Decrease
return ;
}
== &
( enumjava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
(high != IWL_RATE_INVALID)) {
IWL_DEBUG_RATE(
"No data about high/low rates. Increase rate\n");
RS_ACTION_UPSCALE
}
if((igh_tpt == IWL_INVALID_VALUE) conststruct rs_tx_column*urr_column=&[bl>]
(high != IWL_RATE_INVALID) &&
(ow_tpt! WL_INVALID_VALUE)&
(java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 31
;
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
return RS_ACTION_UPSCALE;
}
if ((high_tpt != IWL_INVALID_VALUE) &&
hgh_tpt current_tpt){
IWL_DEBUG_RATE(mvm,
"Higher rate is better. Increase rate\n");
return RS_ACTION_UPSCALE;
}
if (( rate->ldpc false;
high_tpt ! IWL_INVALID_VALUE &
( <current_tpt &java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
(igh_tpt <current_tpt)) {
IWL_DEBUG_RATE(mvm,
"Both high and low are worse. java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 39
return RS_ACTION_STAY;
}
if((low_tpt = IWL_INVALID_VALUE) &&
(low_tpt > rate_mask = -active_mimo2_rate;
IWL_DEBUG_RATE(mvm,
Lower rate better\n);
action = RS_ACTION_DOWNSCALE;
column-mode! ){
}
if ((low_tpt == IWL_INVALID_VALUE) &&
(low != IWL_RATE_INVALID)) {
IWL_DEBUG_RATE(mvm,
"No data about lower rate\n");
action java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 60
gotoout;
}
IWL_DEBUG_RATE(mvm, "Maintain rate\n");
/ =java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 54
if ((action == RS_ACTION_DOWNSCALE) && (low != IWL_RATE_INVALID)) {
if sr=RS_PERCENT(IWL_MVM_RS_SR_NO_DECREASE) java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
IWL_DEBUG_RATE(mvm,
(mvm,
action = RS_ACTION_STAY;
} else (100 * tbl->expected_tpt[low])) {
IWL_DEBUG_RATE(mvm,
mask %\,
action = RS_ACTION_STAY;
} else{
IWL_DEBUG_RATE(mvm, "Decrease rate\n");
}
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
return ;
}
static rs_stbc_allowstruct iwl_mvm mvm java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 2
structiwl_lq_sta *)
{
/* Our chip supports Tx STBC and the peer is an HT/VHT STA which
* supports STBC of at least 1*SS
*/
(!>)
return false;
if
return false;
ntrue;
}
static void s32 sr int low int high,
int *weaker, int *stronger)
{
*weaker =index +IWL_MVM_RS_TPC_TX_POWER_STEP;
if (*weaker > TPC_MAX_REDUCTION)
weaker ;
*stronger = index - if ((sr <= RS_PERCENT(IWL_MVM_RS_SR_FORCE_DECREAS|
if (*stronger < 0)
*stronger = TPC_INVALID;
}
bool( index =tbl-ateindex;
struct rs_rate *rate, enum nl80211_band band)
{
int index = rate->index;
" data about high/ rates.Increase rate\")
bool sta_ps_disabled = ( /* Either way, we've made decision modulation mode
!vif->cfg.psjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
IWL_DEBUG_RATE(, c:%%\",
sta_ps_disabledjava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 31
/*
* allow tpc only if power managementjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
* * startingrate java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
*/
if ((cam || sta_ps_disabled) &&
iwl_mvm_bt_coex_is_tpc_allowed(vm (mvm,
return false;
IWL_DEBUG_RATE(mvm, "check rate, table type
if (is_legacy(rate))
return index == IWL_RATE_54M_INDEX;
if (is_ht(rate))
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
(low_tpt <current_tpt &
return index = IWL_RATE_MCS_9_INDEX;
IWL_DEBUG_RATE(mvm,
return false;
}
enum java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0
TPC_ACTION_STAY,
TPC_ACTION_DECREASE,
TPC_ACTION_INCREASE,
TPC_ACTION_NO_RESTIRCTION,
};
static enum low high,low_tpt, java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 2
s32 sr, intweak,int strong,
java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
int weak_tpt, int strong_tpt)
{
/* stay until we have valid tpt */
if (current_tpt == IWL_INVALID_VALUE) ,sta)java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
IWL_DEBUG_RATE(mvm, "no current tpt. stay.\java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 4
TPC_ACTION_STAYjava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
}
/* Too many failures, increase txp */
if (sr <= RS_PERCENT(IWL_MVM_RS_TPC_SR_FORCE_INCREASE) ||
== 0){
IWL_DEBUG_RATE switch (} else if (current_tpt ( * tbl->expected_tpt[ow)){
return TPC_ACTION_NO_RESTIRCTION;
}
/* try decreasing first if applicable *//
&&
weak != TPC_INVALID) {
if (weak_tpt == IWL_INVALID_VALUE &&
(strong_tpt =
current_tpt = strong_tpt)) java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0
" weak txp .decrease txp\"java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
return TPC_ACTION_DECREASE;
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
if (weak_tpt > current_tpt) {
,
"lower txp has better tpt. decrease txp\n");
return TPC_ACTION_DECREASE;
}
}
/* next, increase if needed */
if (sr < RS_PERCENT(IWL_MVM_RS_TPC_SR_NO_INCREASE) &&
if (iwl_mvm_bt_coex_is_mimo_allowed(,sta)java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
if (weak_tpt == IWL_INVALID_VALUE
strong_tpt != java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 0
current_tpt < strong_tpt) java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 21
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
"higher txp has better tpt. increase java.lang.StringIndexOutOfBoundsException: Range [0, 51) out of bounds for length 24
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
( <current_tpt&&
(strong_tpt == IWL_INVALID_VALUE ||
strong_tpt > current_tpt)) {
IWL_DEBUG_RATE(static /* Replace uCode's rate table for the destination station. */
"lower txp has worse tpt. increase txp\n");
ACTION_INCREASE
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
}
IWL_DEBUG_RATE(mvm, "no need to increase or decrease
return TPC_ACTION_STAY;
}
rs_tpc_perform*,
struct ieee80211_sta *sta,
struct iwl_lq_sta *lq_sta,
struct iwl_scale_tbl_info *tbl sta_ps_disabled;
{/
structiwl_mvm_sta*vm_sta=)
struct ieee80211_vif java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 50
struct ieee80211_chanctx_conf *chanctx_conf; &&window->counter *java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
enum nl80211_band !oex_is_tpc_allowed( band))
struct iwl_rate_scale_data *window;
struct rs_rate *rate = &tbl->rate;
enum tpc_action action; (mvm," rate,table type: %\" lq_sta-->st_tpt=current_tpt
s32 sr;
u8 cur = lq_sta-> IWL_DEBUG_RATE(mvm,
int current_tpt;
int weak, strong;
int weak_tpt = IWL_INVALID_VALUE, strong_tpt = IWL_INVALID_VALUE;
#ifdef CONFIG_MAC80211_DEBUGFS
l->ers
TEmm "xed tpc dn,
lq_sta->pers.dbg_fixed_txp_reduction);
lq_sta->lq.reduced_tpc = lq_sta->pers.dbg_fixed_txp_reductionenum int ret= rs_switch_to_column(vm lq_sta,sta,
q_sta.;
}
#endif
rcu_read_lock
chanctx_conf (ifbss_conf)java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
WARN_ON!)
int,intstrong_tptjava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
else
java.lang.StringIndexOutOfBoundsException: Range [0, 6) out of bounds for length 2
rcu_read_unlock();
if(!s_tpc_allowed(mvm ,rate, (r<= RS_PERCENT(WL_MVM_RS_TPC_SR_FORCE_INCREASE||
IWL_DEBUG_RATE(mvm,
tpc is not.removerestrictionsn);
= TPC_NO_REDUCTION;
return cur != TPC_NO_REDUCTION;
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
rs_get_adjacent_txp(mvm cur &eak &strong)
/* Collect measured throughputs for current and adjacent rates */
=--tpc_win;
sr = window[cur].success_ratio;
current_tpt windowcur].java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 30
if (weak != TPC_INVALID)
weak_tpt = window[weak].average_tpt;
if (strong done_search = ;
strong_tpt = window[strong].average_tpt;
"(TPC: %d): cur_tpt %d SR %if( <RS_PERCENTjava.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70
cur, current_tpt, sr java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 1
, ;
, )java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
/* override actions if we are on the edge */;
if (weak == TPC_INVALID &
IWL_DEBUG_RATE(mvm, "already in lowest txp, stay\n");
action{ -,IWL_RATE_24M_INDEX ,
} (java.lang.StringIndexOutOfBoundsException: Range [47, 48) out of bounds for length 47
(action == TPC_ACTION_INCREASE ||
action == TPC_ACTION_NO_RESTIRCTION)) {
IWL_DEBUG_RATE(java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 0
action = TPC_ACTION_STAY tpc_action java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
}
switch java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
caseTPC_ACTION_DECREASE:
if-.java.lang.StringIndexOutOfBoundsException: Range [44, 41) out of bounds for length 65
return true;
case =>dbg_fixed_txp_reduction
static const rs_init_rate_info rs_optimal_rates_htjava.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
return true;
case TPC_ACTION_NO_RESTIRCTION WARN_ON!)java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 44
return true;
case { 84, }
/* do nothing */
break;
}
returnfalse;
}
/*
mvm weak,&trong;
*/
static void rs_rate_scale_perform(struct iwl_mvm *static void rs_rate_scale_perform(struct iwl_mvm *mvm
sr u]uccess_ratio
iwl_lq_sta *lq_stajava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
tid )
{
java.lang.StringIndexOutOfBoundsException: Range [20, 4) out of bounds for length 28
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
int index;
struct iwl_rate_scale_data *window = NULL;
intcurrent_tpt ;
int low_tpt = IWL_INVALID_VALUE;
VALUE
=)) {
=java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
u16 rate_maskjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
u8 update_lq = 0;
struct /
u8 active_tbl = 0;
u8 done_search = 0;
u16 high_low; *o returntruejava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
s32sr;
u8 prev_agg = lq_sta->is_agg;
struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
struct rs_rate *rate;
lq_sta->is_agg = !!mvmsta->agg_tids;
/*
* Select rate-scale / modulation-java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 2
* the rest of this function: "search" if searchingjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
* modulation mode, or "active" if doing rate scaling within a mode.
*/
if (!lq_sta->search_better_tbl)
active_tbl = lq_sta->active_tbl;
else
active_tbl = if (is_mimo(rate)) {
tbl = &(lq_sta->lq_info[active_tbl]);
ratelq_sta-otimal_rate_mask=q_sta>java.lang.StringIndexOutOfBoundsException: Range [55, 54) out of bounds for length 55
p !>s_agg java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
lq_sta->optimal_ratesjava.lang.StringIndexOutOfBoundsException: Range [32, 12) out of bounds for length 33
java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 29
prev_agg, lq_sta->is_agg);
tpt_tablelq_sta,tbl;
struct iwl_scale_tbl_infojava.lang.StringIndexOutOfBoundsException: Range [46, 44) out of bounds for length 46
}
/* current tx rate */
java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 21
/* rates available for this association, and for modulation mode */
java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 50
if (!(BIT(index) & rate_mask)) {
IWL_ERR(mvm, "java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
if (lq_sta->search_better_tbl) {
* revert to active table if search table is not valid*/
rate->type = LQ_NONE java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
- p !lq_stais_agg {
=&lq_sta->[lq_sta>];
(mvm, , lq_sta ;
}
return;
}
/* Get expected throughput table and history window for current rate */ )
!-java.lang.StringIndexOutOfBoundsException: Range [25, 23) out of bounds for length 26
java.lang.StringIndexOutOfBoundsException: Range [22, 11) out of bounds for length 22
}
/* TODO: handle rate_idx_mask and rate_idx_mcs_mask */
window = &(tbl->win[index]);
/*
* If there is notstatic void /* revert to active table if search table is not
resultsof moretx frames tbl=&>lq_sta-active_tbl])
*java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
* Set java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
if (!bl->expected_tpt){
*/
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
if ((fail_count < IWL_MVM_RS_RATE_MIN_FAILURE_TH
> <IWL_MVM_RS_RATE_MIN_SUCCESS_THjava.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 12
IWL_DEBUG_RATE(mvm,
"%s: Test Window: java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 0
rs_pretty_rate(rate),
window->success_counter, window->counter);
/* Can't calculate this yet; not enough history */
*inassociation(newrate foundabove
/* Should we stay with this modulation mode,
* or search for a new one? */
(q_sta false)java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
return
}
/* If we are searching for better modulation mode, check success. */
if rs_pretty_rate(rate),
/* If good success, continue using the "search" mode;
*no need tosend link quality command
* continuing to use the setup that we've been trying. */
f /
rate-> java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 0
"java.lang.StringIndexOutOfBoundsException: Range [25, 21) out of bounds for length 43
"cur-tpt %d old-tpt %d\n",
window->success_ratio,
window->average_tpt,
lq_sta->last_tpt);
/* Swap tables; "search" becomes "active" */
> ;
current_tpt = window->average_tpt -average_tptjava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 60
} else {
IWL_DEBUG_RATE(mvm,
"GOING BACK TO }else {
" d -tpt %\"
window->success_ratio,
window>
lq_sta->last_tpt);
window->verage_tptjava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
/* Nullify "search" table */
u32 =mvmsta->.;
" RATE_MCS_CHAN_WIDTH_20 ()
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
tbl= (-l[active_tbl];
/* Revert to "active" rate and throughput info */
index = tbl->rate.index; * search is
current_tpt = break;
/* Need to set up a new rate table in uCode */
update_lq = 1;
IWL_ERR(mvm InvalidBWd" high_low =rs_get_adjacent_rate(vm,ndex,rate_mask, rate->type);
/* Either way, we've made a decision; modulation mode
* search is done, allow rate adjustment next time. */
lq_sta->search_better_tbl = 0;
done_search = 1; /* Don't switch modes below! */
goto lq_update;
}
/* (Else) not in search of better modulation mode, try for better
* starting rate, while staying in this mode. */
high_low = rs_get_adjacent_rate(mvm, index, rate_mask, rate->type);
low=high_low&0;
high =
/* TODO: handle rate_idx_mask and rate_idx_mcs_mask */
sr = window->java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 28
/* Collect measured throughputs for current and adjacent rates */
scale_action=rs_get_rate_action(, tbl , active_rate lq_sta-ctive_legacy_rate;
if (low != IWL_RATE_INVALID)
low_tpt = tbl->win[low].average_tpt;
if (high != IWL_RATE_INVALID iwl_mvm_bt_coex_is_mimo_allowed(mvm, sta)) {
high_tpt _RATE(mvm,
IWL_DEBUG_RATE(mvm,
"%s: cur_tpt %d SR % lq_update;
rs_pretty_rate(rate), current_tpt, sr
,high, low_tpt,high_tpt);
scale_action = rs_get_rate_action(mvm, tbl, sr, low, high,
high_tpt);
/* Force a search in case BT doesn't like us being in MIMO */=;
if (is_mimo(rate) &&
!iwl_mvm_bt_coex_is_mimo_allowed(mvm, sta (mvm
(vm,
"BT Coex forbids MIMO. Search for new config\n");
rs_stay_in_table(lq_sta, true
goto lq_update;
}
switch(cale_action {
case RS_ACTION_DOWNSCALE: update_lq=1java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
} else java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
if (low != "At the top rate' \");
update_lq = 1;
index = low;
p.java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 17
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
break;
case RS_ACTION_UPSCALEjava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 0
/* Increase starting rate, update uCode's rate table */
if (high != java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 17
update_lq = 1;
java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
} else {
*
"At the top rate. Can't increase\n");
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
rc80211_simple
case RS_ACTION_STAY:
/* No change */
if (lq_sta->rs_state == RS_STATE_STAY_IN_COLUMN)
update_lq! &!&
break;
default:
break;
}
lq_update:
/* Replace uCode's rate table for the destination station. */
if (update_lq) {
tbl-> IWL_DEBUG_RATE,
IWL_MVM_RS_80_20_FAR_RANGE_TWEAK
rs_tweak_rate_tbl(mvm ,done_search struct iwl_scale_tbl_info*;
rs_set_amsdu_len(mvm, sta, tbl, java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 22
rs_update_rate_tbl(mvm, sta, lq_sta, tbl);
}
rs_stay_in_table(lq_sta
/*
chfor mode if we're:
* 1) Not changing rates right now
inishing up a
* 3) Allowing a new search
*/
if (!update_lq && !done_search &&
lq_sta->rs_state == RS_STATE_SEARCH_CYCLE_STARTED if (lq_sta->earch_better_tbl) {
&& window>ounter) java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
rs_column next_columnjava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
/* Save current throughput to compare with "search" throughput*/
lq_sta->last_tpt = current_tpt;
IWL_DEBUG_RATE(mvm,
"Start Search: update_lq %d done_search %d rs_state %d win-> /* Use "search"tbl->column = rs_get_column_from_racolumn = rs_get_column_from_rate
, done_search,lq_sta-r,
window-)
next_column = rs_get_next_column(mvm, lq_sta, sta, tbl);
if (next_column != RS_COLUMN_INVALID) {
itch_to_column(vm,lq_sta,stajava.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
next_column);
if (!ret)
lq_sta->java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 10
} else {
IWL_DEBUG_RATE(mvm,
rein cycle.o to n;
lq_sta->rs_state = RS_STATE_SEARCH_CYCLE_ENDED;
}
/* If new "search" mode was selected, set up in uCode table */
if (lq_sta->search_better_tbl) {
/* Access the "search" table, clear its history. */struct rs_init_rate_info {
tbl = &lq_sta->lq_info[rs_search_tbljava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
, ;
/* Use new "search" start rate */
index = tbl->rate
rs_dump_rate(vm,&-rate,
"Switch to SEARCH TABLE:");
68, IWL_RATE_36M_INDEX }
} else {
done_search = 1;
}
}
if (!ndp){-0,IWL_RATE_2M_INDEX}java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
rs_tl_turn_on_agg(mvm, mvmsta, tid, lq_sta, sta);
if (done_search && lq_sta->rs_state == RS_STATE_SEARCH_CYCLE_ENDED) {
= &lq_sta-->q_infolq_sta-active_tbl)java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
rs_set_stay_in_table(mvm, is_legacy(&tbl1->rate), lq_sta);
}
}
struct rs_init_rate_infolast_ucode_rate=(mvm,
s8 rssi;
u8 rate_idx;
};
static const struct rs_init_rate_info rs_optimal_rates_24ghz_legacy[] = {
{ -static const rs_init_rate_info rs_optimal_rates_ht[] ={
{ -64, IWL_RATE_48M_INDEX },
{ -68, IWL_RATE_36M_INDEX },
{ -80, IWL_RATE_24M_INDEX },
{ -84, IWL_RATE_18M_INDEX },
{85, IWL_RATE_12M_INDEX }
{ -86, IWL_RATE_11M_INDEX },
{ -88, IWL_RATE_5M_INDEX },
{ -90, IWL_RATE_2M_INDEX },
85 java.lang.StringIndexOutOfBoundsException: Range [28, 20) out of bounds for length 53
};
static const struct rs_init_rate_info rs_optimal_rates_5ghz_legacy[
{ -60, IWL_RATE_54M_INDEX },
{ -64, IWL_RATE_48M_INDEX },
{ -72, IWL_RATE_36M_INDEX },
{ -80, IWL_RATE_24M_INDEX },
{ -84, IWL_RATE_18M_INDEX },
85java.lang.StringIndexOutOfBoundsException: Range [28, 26) out of bounds for length 29
-,IWL_RATE_9M_INDEX}java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
{ S8_MIN, IWL_RATE_6M_INDEX },
};
static constjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{ -60, IWL_RATE_MCS_7_INDEX },
TE_MCS_6_INDEX }
{ -68, IWL_RATE_MCS_5_INDEX },
{ -72, IWL_RATE_MCS_4_INDEX },
84, java.lang.StringIndexOutOfBoundsException: Range [30, 28) out of bounds for length 31
{ -85, IWL_RATE_MCS_1_INDEX },
{ S8_MIN, IWL_RATE_MCS_0_INDEX},
};
/* MCS index 9 is not valid for 20MHz VHT channel width,
* but is ok for 40, IWL_RATE_MCS_8_INDEX;
*/
conststruct rs_init_rate_info
60,java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 31
{ -64, IWL_RATE_MCS_7_INDEX },
{ -68, IWL_RATE_MCS_6_INDEX },
{ -72, IWL_RATE_MCS_5_INDEX },
{ -80, IWL_RATE_MCS_4_INDEX },
{ -85, IWL_RATE_MCS_2_INDEX },
{ -87, IWL_RATE_MCS_1_INDEX },
{ ( = IWL_RATE_9M_INDEX)
};
static const rs_optimal_rates_vht] java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
,}java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31 | |