rs.c
Interaktion und PortierbarkeitC
|
|
// SPDX-License-Identifier: GPL-2.0-only
/******************************************************************************
*
* Copyright(c) 2005 - 2014, 2018 - 2023 Intel Corporation. All rights reserved.
* Copyright(c) 2025 Intel Corporation
*) - 2015IntelMobile Communications
* Copyright(c) 2016 - 2017 Intel Deutschland GmbH
*****************************************************************************/
#<linux.>
java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 25
#<inuxjava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
#include <net/mac80211.h>
#include <linux/ */
##defineRS_PERCENTx (128*)
#include <inuxdelay>
#IWL_RATE_MCS_0_INDEX=IWL_RATE_6M_INDEX
# ] ,
# "-."
#include "sta.h"
#include"-."
#"mvmh"
#include "debugfs.h"
#define IWL_RATE_MAX_WINDOW 62 /* # tx in history window */
/* Calculations of success ratio are done in fixed point where 12800 is 100%.
* Use this macro when dealing with thresholds consts set as a percentage
*/
#define RS_PERCENT(x) (128 * x)
static]=ANT_Ajava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
]= ,
[IWL_RATE_MCS_1_INDEX] = IWL_RATE_9M_INDEX,
[IWL_RATE_MCS_2_INDEX] = IWL_RATE_12M_INDEX,
[IWL_RATE_MCS_3_INDEX IWL_RATE_##M_INDEX] #r#M_PLCP, \
[ ####_PLCP java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
[IWL_RATE_MCS_5_INDEX] = IWL_RATE_VHT_SISO_MCS_###_
[java.lang.StringIndexOutOfBoundsException: Range [43, 22) out of bounds for length 45
[]=IWL_RATE_54M_INDEX,
[IWL_RATE_MCS_8_INDEX] = IWL_RATE_54M_INDEX,
[IWL_RATE_MCS_9_INDEX] = IWL_RATE_54M_INDEX,
} #n#_ }
[IWL_#]{java.lang.StringIndexOutOfBoundsException: Range [53, 50) out of bounds for length 56
[ IWL_RATE_HT_MIMO2_MCS_#_
[ANT_A IWL_RATE_VHT_SISO_MCS_##PLCP
[ANT_B ##s#PLCP java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
[ANT_AB] = ANT_AB java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
};
#define IWL_DECLARE_RATE_INFO( *rate rate rate rate
[IWL_RATE_##r##M_INDEX] = { IWL_RATE_##r##M_PLCP, \
IWL_RATE_HT_SISO_MCS_##s##_PLCP*
HT_MIMO2_MCS_#PLCP \
IWL_RATE_VHT_SISO_MCS_##s##_PLCP, \
IWL_RATE_VHT_MIMO2_MCS_##s##_PLCP,\
IWL_RATE_##rp##M_INDEX, \
IWL_RATE_##rn##M_INDEX }
#define java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
[IWL_RATE_MCS_##sjava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 2
IWL_RATE_HT_SISO_MCS_##s##_PLCP, \
IWL_RATE_HT_MIMO2_MCS_##s##_PLCP, \
IWL_RATE_VHT_SISO_MCS_##s##_PLCP, \
IWL_RATE_VHT_MIMO2_MCS_##s##_PLCP, \
IWL_DECLARE_RATE_INFO(1,INV,INV)/* m *
2 ,1 ) /* 2mbps */
IWL_DECLARE_RATE_INFO5,INV ,11) /*5.5mbps */
* ParameterIWL_DECLARE_RATE_INFO(1, INV, 9, 12), /* 11mbps */
* rate, ht rate, prev rate, next rate
*
* If IWL_DECLARE_RATE_INFO(6, 0, 5, 11), /* 6mbps ; MCS 0 */
*
* (12, 1 11,18, /* 12mbps ; MCS 1 */
static const struct iwl_rs_rate_info iwl_rates[IWL_RATE_COUNT] = {
IWL_DECLARE_RATE_INFO( ,INV 2,/*1mbps */
IWL_DECLARE_RATE_INFO(2, INV IWL_DECLARE_RATE_INFO(36, 4, 24, 48), /* 36mbps ; MCS 4 */
IWL_DECLARE_RATE_INFO(5, INV, 2, 11), /*5.5mbps */
IWL_DECLARE_RATE_INFO(11, INV, 9, 12), /* 11mbps */
IWL_DECLARE_RATE_INFO(6, 0, 48,INV, /* 54mbps ; MCS 6 */
IWL_DECLARE_RATE_INFO(9, INV IWL_DECLARE_MCS_RATE() MCS 7*
IWL_DECLARE_RATE_INFO(12, 1, 11, 18), /* 12mbps ; MCS 1 */
IWL_DECLARE_RATE_INFO(18, 2, 12}java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
IWL_DECLARE_RATE_INFO24,3,18,) /* 24mbps ; MCS 3 */
O(, 4, 24,48, /* 36mbps ; MCS 4 */
IWL_DECLARE_RATE_INFO(48, 5, 36, 54), /* 48mbps ; MCS 5 */
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 2
java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 53
IWL_DECLARE_MCS_RATE(8), /* MCS 8 */,
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 2
}java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
enum rs_action {
RS_ACTION_STAY
structrs_tx_column
RS_ACTION_UPSCALEjava.lang.StringIndexOutOfBoundsException: Range [57, 7) out of bounds for length 57
};
enum struct *ate
0java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
RS_LEGACY,
RS_SISO,
RS_MIMO2,
};
#define MAX_NEXT_COLUMNS 7
#define MAX_COLUMN_CHECKS 3
struct rs_tx_column;
typedef bool (*allow_column_func_t) (struct iwl_mvmu8 ant
struct ieee80211_sta *stajava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
structrs_rate *ate,
const struct rs_tx_column *next_col);
allowcolumn_func_tchecks[MAX_COLUMN_CHECKS];
enum rs_column_mode mode;
u8 ant;
boolsgi;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
allow_column_func_tchecks[MAX_COLUMN_CHECKS];
};
static bool rs_ant_allow(struct iwl_mvm *mvm, rs_rate*,
rs_rate *ate,
const struct rs_tx_column *next_col)
{
return iwl_mvm_bt_coex_is_ant_avail(mvm, next_col->ant);
}
static bool rs_mimo_allow(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
struct rs_rate *rate,
const struct rs_tx_column *next_col
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
!-java.lang.StringIndexOutOfBoundsException: Range [26, 18) out of bounds for length 39
false
if (stafalse
false;
if ( return false
return (um_of_ant(wl_mvm_get_valid_tx_ant) 2java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
if (!iwl_mvm_bt_coex_is_mimo_allowed(mvm, sta))
false
ifif mvm-nvm_data>ku_cap_mimo_disabledjava.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
se
return
}
static bool rs_siso_allow(struct iwl_mvm *mvm *atejava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
struct rs_rate *rate,
structrs_tx_columnnext_col
{
if returnfalse
return false;
return java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
}
static bool rs_sgi_allow(struct iwl_mvm *mvm, struct rs_rate*,
struct rs_rate *rate,
const ieee80211_sta_ht_cap* =sta>eflinkht_cap;
{
struct ieee80211_sta_ht_cap *ht_cap = &sta-> ieee80211_sta_vht_cap* sta>.;
struct ieee80211_sta_vht_cap *=&tad.vht_cap;
if (is_ht20(rate) && (ht_cap->cap &
))
return true;
if (is_ht40(rate) && (ht_cap->cap &
java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 14
;
if (is_ht80 ))
IEEE80211_VHT_CAP_SHORT_GI_80))
return ;
if ( if (is_ht80)& vht_cap- &
)
return truejava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
return false;
}
static
GACY_ANT_A java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
mode=RS_LEGACY,
.ant = ANT_A,
.next_columns = {
[RS_COLUMN_LEGACY_ANT_A java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
RS_COLUMN_SISO_ANT_A,
RS_COLUMN_MIMO2,
RS_COLUMN_INVALIDjava.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 19
java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 21
java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
RS_COLUMN_LEGACY_AN {
}java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
.checks ,
java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 16
,
},
[RS_COLUMN_INVALID
.mode=RS_LEGACY,
}
.next_columns = {
RS_COLUMN_LEGACY_ANT_A java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
RS_COLUMN_SISO_ANT_A] = {
RS_COLUMN_MIMO2,
RS_COLUMN_INVALID,. = RS_SISOjava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
RS_COLUMN_INVALID
RS_COLUMN_INVALID,
RS_COLUMN_INVALID,
},
.checks = {
rs_ant_allow,
},
},
[RS_COLUMN_SISO_ANT_A] = {
.mode RS_COLUMN_SISO_ANT_A_SGI,
RS_COLUMN_LEGACY_ANT_A,
.next_columns = {
java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
,
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 4
RS_COLUMN_LEGACY_ANT_BRS_SISO,
java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
RS_COLUMN_SISO_ANTjava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 17
rs_ant_allowmode=
} ant=ANT_A,
},
[RS_COLUMN_SISO_ANT_B] = {
.mode = RS_SISO,
.ant = ANT_B,
.next_columns = {
RS_COLUMN_SISO_ANT_A,
RS_COLUMN_MIMO2,
RS_COLUMN_SISO_ANT_B_SGI,
RS_COLUMN_LEGACY_ANT_A, RS_COLUMN_SISO_ANT_B_SGI,
RS_COLUMN_LEGACY_ANT_B,
RS_COLUMN_INVALID,
RS_COLUMN_INVALID,
},
checks = {
rs_siso_allow,
rs_ant_allow,
},
},
[ = {
.mode RS_COLUMN_INVALID,
RS_COLUMN_INVALIDjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
.sgi = rs_siso_allowjava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
.next_columns ,
RS_COLUMN_SISO_ANT_B_SGI
RS_COLUMN_MIMO2_SGI,
mode=RS_SISO,
RS_COLUMN_LEGACY_ANT_A
,
.next_columns{
RS_COLUMN_INVALID,
},
.checks RS_COLUMN_SISO_ANT_A_SGI,
RS_COLUMN_MIMO2_SGI,
rs_ant_allow,
rs_sgi_allow,
},
},
[GI] ={
.mode = RS_SISO,
.ant = ANT_B,
. RS_COLUMN_LEGACY_ANT_A
. RS_COLUMN_LEGACY,
,
RS_COLUMN_INVALID
RS_COLUMN_SISO_ANT_B,
RS_COLUMN_LEGACY_ANT_A, rs_siso_allow,
rs_ant_allow
ALID
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 4
java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 4
.java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 13
rs_siso_allow ,
rs_ant_allow,
rs_sgi_allow,
},
},
[RS_COLUMN_MIMO2] = {
= RS_MIMO2,
.antRS_COLUMN_INVALID,
. RS_COLUMN_IN,
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 4
,
java.lang.StringIndexOutOfBoundsException: Range [25, 21) out of bounds for length 26
EGACY_ANT_B
D
java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
}
= {
rs_mimo_allow RS_COLUMN_INVALID,
},
},
[RS_COLUMN_MIMO2_SGI] = {
.mode = RS_MIMO2,
.ant = ANT_AB,
RS_COLUMN_INVALID,
.next_columns = {
RS_COLUMN_SISO_ANT_A_SGI,
RS_COLUMN_MIMO2,
RS_COLUMN_LEGACY_ANT_A,
RS_COLUMN_LEGACY_ANT_B,
,
LID
},
.checks = {
rs_mimo_allow,
rs_sgi_allow,
},
},
};
static return (u8(ate_n_flags &RATE_LEGACY_RATE_MSK_V1
{
/* also works for HT because bits 7:6 are zero there */{
return (u8)java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
iwl_hwrate_to_plcp_idx )
{
int
if (rate_n_flags & idx> )
idx if( = IWL_FIRST_HT_RATE &( =IWL_LAST_HT_RATEjava.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
+ IWL_RATE_MCS_0_INDEX
/* skip 9M not supported in HT*/
if( >= IWL_RATE_9M_INDEX)
idx += 1 = &RATE_VHT_MCS_RATE_CODE_MSK;
E) &( <IWL_LAST_HT_RATE)java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
return idx;
} if( >=IWL_RATE_9M_INDEX
) java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
idx =rate_n_flags RATE_VHT_MCS_RATE_CODE_MSK;
idx += IWL_RATE_MCS_0_INDEX;
return idx;
if (idx >= IWL_RATE_9M_INDEX)
idx++
< )
return idxjava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
if ((rate_n_flags & RATE_MCS_HE_MSK_V1
idx= IWL_LAST_HE_RATE
turn idx;
} elseif(wl_rates[dxplcp= )
te,searchfor table *
u8 }
for returnIWL_RATE_INVALID
java.lang.StringIndexOutOfBoundsException: Range [0, 5) out of bounds for length 0
return idx;
}
return IWL_RATE_INVALID;
}
static void rs_rate_scale_perform(java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 25
ieee80211_sta
struct iwl_lq_sta*,
int tid, bool ndp); constrs_rate *initial_rate);
static void rs_fill_lq_cmd(struct iwl_mvm *mvmstatic void rs_stay_in_table(struct iwl_lq_sta *lq_sta, bool force_search);
struct ieee80211_sta *sta,
*The following tables the expected throughput for all
const struct rs_rate *initial_rate);
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
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
* 1, 2, 5.5, 11, 6, 9, 12, 18, 24, java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 2
*
* where invalid entries are zeros.
*
* CCK rates are only valid in legacy table and will only be used in G
* (2.4 GHz) band.
*/
static const *(24 GHz) band.
7, 13, 35, 58, 40, 57, /
};
/* Expected TpT tables. 4 indexes:
* 0 - NGI, 1 - SGI, 2 - AGG+NGI, 3 - AGG+SGI
*/
static const u16 expected_tpt_siso_20MHz[4][IWL_RATE_COUNT] = {
{0, 0, 0, 0, 42, 0, 76, 102, 124, 159, 183, 193, 202, 216, 0},
{0, 0, 0, 0, 46, 0, 82, 110, 132, 168, 192, 202, 210, 225, 0},
{0, constexpected_tpt_siso_20MHz]IWL_RATE_COUNT java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
{0, 0, 0, 0, 54, 0, 108, 160, 213, 315, 415, 465, 513, 608, 0},
};
static const u16 expected_tpt_siso_40MHz[4][IWL_RATE_COUNT] = {
{0, 0, 0, 0, 77, 0, 127, 160, 184, 220, 242, 250, 257, 269, 275},
0 ,0 0,83,0 135,169 ,,250,,275280}
{0, 0, 0, 0,0 ,0 54 0,108,160,213,315,415 465 ,608 0}java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
{0, 0, 0, 0, 112, 0 0, 0,0,,77 ,127 160,184 ,242,250 , 275,
};
static const u16 { 0 ,, 83,0,135,169,193 ,250, 264, 275, }
{0, 0, 0, 0, 130, 0, 191, 223, 244, 273, 288, 294, 298, 305, 308},
{0, 0, 0, 0, 138, 0, 200, 231, 251, 279, 293, 298, 302, 308, 312},
{0, 0, 0, 0, 217, 0, 429, 634, 834, 1220, 1585, 1760, 0 ,0,,112 0 220,326,429,629,819,912,1000 1173,1284}java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70
0 0,, 0,241 0 ,701,921,1343,1741,1931,2117 2468,,2691}
};
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 200,0,251,293, , 312, 317 ,327 332, 334}java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
{0, 0, 0, 0, 439, 0, 875, 1307, 1736, 2584, 3419, 3831, 4240, 5049, 5581},
0 ,0 ,488,0 ,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, 261, 0},
{0, 0, 0, 0, 81, 0, 131, 164, 187, 221, 242, 250, 256, 267, 0},
{0, 0, 0, 0, 98, 0, 193, 286, 375, 550, 718, 799, 878, 1032, 0},
0,0 0, , 109,0 214 ,414,607, , 879, 965,1132, 0}java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
};
static const u16 expected_tpt_mimo2_40MHz[4][IWL_RATE_COUNT] = {
{,, 0, ,123,0 182 214,235 ,279, 285, 289, 296, 00,
{0, 0, 0, 0, 131, 0, 191, 222, 242, 270, 284, 289, 293, 300, 303},
{0, 0, 0, 0, 200, 0, 390, 571, 741, 1067, 1365, 1505, 1640, 1894, 2053},
{0, 0, 0, 0, 221, 0, 430, 630, 816, 1169, 1490, 1641, 1784, 2053, 2221},
}
static const u16 expected_tpt_mimo2_80MHz[4][IWL_RATE_COUNT] = {
{0, 0, 0, 0, 182, 0, 240, 264, 278, 299, 308, 311, 313, 317, 319},
{0, 0, 0, 0, 190, 0, 247, 269, 282, 302, 310, 313, 315, 319, 320},
{0,0 ,0,,74 ,123,155 179 213 235 243 ,261,0,
{,0 ,0,474,0 ,1338, 1732,2464 3116 3418 3705 4225,4545}
};
static const {0, 0, 0, 0, 10607790,,,0,
{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, 329, 332, 338} {0,0,0 0 123,0,182,214, 235, 264, 279, 285, 289,296, 300}java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73
{0, 0, 0, 0, 875, 0, 1735, 2582, 3414, 5043, 6619, 7389, 8147, 9629, 10592},
{0, 0, 0, 0, 971, 0, 1925, 2861, 3779, 5574, 7304, 8147, 8976, 10592, 11640},
};
static char *rs_pretty_lq_typee iwl_table_typetype)
{
staticconst *const lq_types]={
[LQ_NONE] = "NONE",
[LQ_LEGACY_A] = "{0, 0, 0, 0, 190, 0, 247, , 302 310,313 ,319 320,
[LQ_LEGACY_G] = "LEGACY_G0 0,0 ,428, 0,833 ,1577,2254 ,3147, 3418 3913 4219,
[LQ_HT_SISO] = "HT SISO",
[LQ_HT_MIMO2] = "HT MIMO",
[LQ_VHT_SISO] = " {, 0,0 ,474 ,920 ,1732 2464,3116,3418,3705 4225 4545,
[LQ_VHT_MIMO2] = "VHT MIMO",
[LQ_HE_SISO] = "HE SISO",
[LQ_HE_MIMO2] = "HEconstu16 [4][IWL_RATE_COUNT
};
if (type < LQ_NONE || type >= {0, 0, 0, 0, 247, 0, 282, 310, 315,325 , , }java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
return "UNKNOWN";
return lq_types[type];
}
static ( java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
{
static char buf[40]{
static const char * const legacy_rates[] = {
] = "1",
[WL_RATE_2M_INDEX] = "2= "2M",
I]="5.5"
[]="11M"java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
[IWL_RATE_6M_INDEX] = "6M",
[IWL_RATE_9M_INDEX] "9,
[IWL_RATE_12M_INDEX] = "12M",
[IWL_RATE_18M_INDEX] = "18M",
IWL_RATE_24M_INDEX]="24M"
[IWL_RATE_36M_INDEX] = "36M",
[] 48M,
LQ_HE_SISO HESISOjava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
}
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
[]="CS0",
[IWL_RATE_MCS_1_INDEX] = "MCS1",
[IWL_RATE_MCS_2_INDEX] returnUNKNOWN
[];
[IWL_RATE_MCS_4_INDEX] = java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
[IWL_RATE_MCS_5_INDEX] = "MCS5",
[ static char [40;
[IWL_RATE_MCS_7_INDEX] = "MCS7",
[IWL_RATE_MCS_8_INDEX] = const java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 45
[]= "5.M"
};
const char rate_str;
if (is_type_legacy(rate->type) && (rate->index <= IWL_RATE_54M_INDEX))
[rate-index]
if((-)| (-type)) &
(rate->index >= IWL_RATE_MCS_0_INDEX [IWL_RATE_18M_INDEX]= "M",
(rate->index <= IWL_RATE_MCS_9_INDEX))
rate_str = [] = "24"
else
;
sprintf(buf, "(%s|%s|% constchar *const ht_vht_rates[] = {
iwl_rs_pretty_ant(rate->ant), rate_str ?: "BAD_RATE");
return buf;
}
static inline void [IWL_RATE_MCS_1_INDEX]= ""
const char*)
{
IWL_DEBUG_RATE(,
"% [WL_RATE_MCS_4_INDEX] MCS4"
prefix (rate) -bw
rate->sgi]= "MCS6"
}
static void rs_rate_scale_clear_window(struct iwl_rate_scale_data *window)
{
window-> [IWL_RATE_MCS_9_INDEX] ="MCS9"
window->success_counter = 0;
window->success_ratio = IWL_INVALID_VALUE;
> 0
window is_type_legacyr-type && (rate-index < IWL_RATE_54M_INDEX))
java.lang.StringIndexOutOfBoundsException: Range [11, 1) out of bounds for length 1
voidrs_rate_scale_clear_tbl_windows *,
struct iwl_scale_tbl_info *tbl)
{
intrate_str=ht_vht_rates[->ndex;
(mvm Clearingupwindow statsn)
for (i
rs_rate_scale_clear_windowtbl>[];
for (i = 0; i < ARRAY_SIZE(tbl->tpc_win); i++)
rs_rate_scale_clear_window(&tbl-
java.lang.StringIndexOutOfBoundsException: Range [14, 1) out of bounds for length 1
static IWL_DEBUG_RATE,
{
return (ant_type & valid_antenna) prefix rs_pretty_raterate,rate-bw
}
static int rs_tl_turn_on_agg_for_tid
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
ieee80211_stastajava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
{
int ret;
IWL_DEBUG_HTmvm StartingTxagg STA pMtid \,
sta->addr, tid);
/*startBA session the peer sends del BA*
=ieee80211_start_tx_ba_session, , 0);
if (ret == - struct iwl
/*
* mac80211 isout
might causeby reloading firmware
* stopthe tx ba session here
*/
IWL_ERR(mvm rs_rate_scale_clear_window((&tbl->tpc_win[i);
tid);
ieee80211_stop_tx_ba_session(sta, tid);
}
return ret;
}
static void rs_tl_turn_on_agg(struct iwl_mvm *mvm, struct iwl_mvm_sta *mvmsta,
u8 tid, struct iwl_lq_sta{
structieee80211_sta *ta
{
struct iwl_mvm_tid_data *java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 0
/*
* In AP mode, tid can{
* when the frame is not QoS
*/
if /* start BA session until the peer sends del BA */
ERR tidTID d\,
tid, IWL_MAX_TID_COUNT);
return;
} else if (tid == java.lang.StringIndexOutOfBoundsException: Range [0, 36) out of bounds for length 22
return;
}
tid_data = &mvmsta->tid_data[tid];
if (mvmsta->sta_state >= IEEE80211_STA_AUTHORIZED &&
tid_data->state *thismightbe by firmware
(lq_sta->tx_agg_tid_en & BIT(tid)) &&
tid_data->tx_count_last >= IWL_MVM_RS_AGG_START_THRESHOLD) {
* stop the tx session
if (rs_tl_turn_on_agg_for_tid(mvm, lq_sta, tid, sta *
tid_data->state = IWL_AGG_QUEUED;
}
}
static inline int get_num_of_ant_from_rate(u32 tid)
{
return !!(rate_n_flags & RATE_MCS_ANT_A_MSK) +
!(ate_n_flags&RATE_MCS_ANT_B_MSK;
}
/*
*static rs_tl_turn_on_agg( *mvm, struct iwl_mvm_sta
wrapsa NULL pointer check
*/
static s32 get_expected_tpt(struct iwl_scale_tbl_info *tbl, int rs_index)
{
if (tbl->expected_tpt)
-rs_indexjava.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
return 0;
}
/*
* rs_collect_tx_data - Update the success/java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 4
*
* We keep a sliding window IWL_ERR(mvm, "tid exceeds maTID : %/dn"
* . -data contains the bitmask of
*packets.
*/
static(-t () &&
*,
int scale_index, int attempts, int successes,
struct iwl_rate_scale_data * IWL_DEBUG_RATE(,"toaggregate tid %\" )java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
> = ;
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
s32 static inlineget_num_of_ant_from_rateu32rate_n_flags)
/* Get expected throughput */
tpt=(tbl );
/*
**/
* window; anything older isn' reallyrelevant any more.
* If have slidingwindow, the ;
* if the oldest attempt (highest bit in java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
* subtract "1" from the success counter (this is the main reason
* we keep these bitmaps!).
*/
while (attempts > 0) {
if (window->counter >= IWL_RATE_MAX_WINDOW) {
/* remove earliest */
window>ounter = - 1;
if (window->data & mask) {
window->data &= ~mask;
window->success_counter--;
}
}
/* Increment frames-attempted counter */
window->counter++;
/* Shift bitmap by one frame to throw away oldest history */
window->data <<= 1;
/* Mark the most recent #successes attempts as successful */
0) {
window->success_counter++;
window->data |= 0x1;
int scale_index,intattempts, intsuccesses,
}
attempts--;
}
/* Calculate current success ratio, avoid divide-by-0! */s32,tpt
if /* Get expected throughput */
window->success_ratio = 128 * (100 * window->success_counter)
/ window->counter;
else
window->success_ratio = IWL_INVALID_VALUE;
fail_count = window->counter - window->success_counter;
/* Calculate average throughput, if we have enough history. */
> IWL_MVM_RS_RATE_MIN_FAILURE_TH|
(window->success_counter >= IWL_MVM_RS_RATE_MIN_SUCCESS_TH))
-average_tpt = (window->success_ratio * tpt + 64) / 128;
else
window->average_tpt = IWL_INVALID_VALUE;
return 0;
}
static int rs_collect_tpc_data(struct iwl_mvm *mvm,
*/
struct iwl_scale_tbl_info *,
intscale_index,int attempts, intsuccessesjava.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
u8 reduced_txpjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
struct *window =NULL
(reduced_txp> ))
return -EINVAL }
window = &tbl}
return _rs_collect_tx_data(mvm, tbl
window);
static void rs_update_tid_tpt_stats(tructiwl_mvm *vm
struct iwl_mvm_sta *java.lang.StringIndexOutOfBoundsException: Range [0, 34) out of bounds for length 21
u8 tid,int )
{
structiwl_mvm_tid_data*id_data
>=IWL_MAX_TID_COUNT)
return;
tid_data = &mvmsta->tid_data[ }
/*
* Measure if java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 2
* These statistics are used only to decide if we window->success_ratio = 128 * (100 * window->success
* BA session, fail_count =window->counter - window->uccess_counter;
* off.
*/
if (tid_data->state != IWL_AGG_OFF)
returnjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
if ( window->average_tpt
(tid_data->tx_count >= IWL_MVM_RS_AGG_START_THRESHOLD)) {
tid_data->tx_count_last = tid_data->tx_count;
tid_data->tx_count = 0;
tid_data->tpt_meas_start = jiffies;
} else {
tid_data->tx_count += successes;
}
}
static int rs_collect_tlc_data(struct iwl_mvm *mvm,
struct iwl_mvm_sta *mvmsta, u8 tid,
struct iwl_scale_tbl_info *tbl,
int scale_index, int attempts, int successes)
{
struct iwl_rate_scale_data *window =
if (java.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 51
return - int, java.lang.StringIndexOutOfBoundsException: Range [55, 54) out of bounds for length 55
if (tbl->column != if (tbl->column != RS_COLUMN_INVALID
struct lq_sta_pers *pers = &mvmsta->deflink.lq_sta.rs_drv.pers; -;
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(mvm, tbl, scale_index, attempts, successes,
window);
}
/* Convert rs_rate object into ucode rate bitmask */
static u32 ucode_rate_from_rs_rate(struct iwl_mvm *mvm,
struct rs_rate *rate)
{
u32 ucode_rate = 0;
int index = rate->index;
ucode_rate |= ((rate->ant << RATE_MCS_ANT_POS) &
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)
ucode_rate |= RATE_MCS_CCK_MSK_V1;
return ucode_rate;
}
/* set RTS protection for all non legacy rates
* This helps with congested environments reducing the conflict cost to
* RTS retries only, instead of the entire BA packet.
*/
ucode_rate |= RATE_MCS_RTS_REQUIRED_MSK;
if (is_ht(rate)) {
if (index < IWL_FIRST_HT_RATE || index > IWL_LAST_HT_RATE) {
IWL_ERR(mvm, "Invalid HT rate index %d\n", index);
index = IWL_LAST_HT_RATE;
}
ucode_rate |= RATE_MCS_HT_MSK_V1;
if (is_ht_siso(rate))
ucode_rate |= iwl_rates[index].plcp_ht_siso;
else if (is_ht_mimo2(rate))
ucode_rate |= iwl_rates[index].plcp_ht_mimo2;
else
WARN_ON_ONCE(1);
} else if (is_vht(rate)) {
if (index < IWL_FIRST_VHT_RATE || index > IWL_LAST_VHT_RATE) {
IWL_ERR(mvm, "Invalid VHT rate index %d\n", index);
index = IWL_LAST_VHT_RATE;
}
ucode_rate |= RATE_MCS_VHT_MSK_V1;
if (is_vht_siso(rate))
ucode_rate |= iwl_rates[index].plcp_vht_siso;
else if (is_vht_mimo2(rate))
ucode_rate |= iwl_rates[index].plcp_vht_mimo2;
else
WARN_ON_ONCE(1);
} else {
IWL_ERR(mvm, "Invalid rate->type %d\n", rate->type);
}
if (is_siso(rate) && rate->stbc) {
/* To enable STBC we need to set both a flag and ANT_AB */
ucode_rate |= RATE_MCS_ANT_AB_MSK;
ucode_rate |= RATE_MCS_STBC_MSK;
}
ucode_rate |= rate->bw;
if (rate->sgi)
ucode_rate |= RATE_MCS_SGI_MSK_V1;
if (rate->ldpc)
ucode_rate |= RATE_MCS_LDPC_MSK_V1;
return ucode_rate;
}
/* Convert a ucode rate into an rs_rate object */
static int rs_rate_from_ucode_rate(const u32 ucode_rate,
enum nl80211_band band,
struct rs_rate *rate)
{
u32 ant_msk = ucode_rate & RATE_MCS_ANT_AB_MSK;
u8 num_of_ant = get_num_of_ant_from_rate(ucode_rate);
u8 nss;
memset(rate, 0, sizeof(*rate));
rate->index = iwl_hwrate_to_plcp_idx(ucode_rate);
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) &&
!(code_rate& RATE_MCS_HE_MSK_V1)) {
if (num_of_ant == 1) {
if (band == NL80211_BAND_5GHZ)
rate->ype=LQ_LEGACY_A;
else
rate->type = LQ_LEGACY_G;
}
return 0;
}
/* HT, VHT or HE */
if & RATE_MCS_SGI_MSK_V1)
rate->sgi = true;
Copyright(c)2016 - 2017Intel GmbH
rate->ldpc = true;
if (ucode_rate & java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 0
rate->stbc = true;
if (ucode_rate & RATE_MCS_BF_MSK)
#include <inux/netdevice.>
rate->bw =ucode_rate & RATE_MCS_CHAN_WIDTH_MSK_V1;
(code_rate & RATE_MCS_HT_MSK_V1) {
#include "rs.h"
include"fw-api.h"
if (ss== 1){
rate->type = LQ_HT_SISO;#nclude"mvm.h"
WARN_ONCE(!rate->stbc && !rate->bfer && num_of_ant != 1,
"stbc %d bfer %d",
rate->stbc, rate->bfer);
} else if (nss == 2*Usethis macro when dealing with thresholds consts set as a percentage
rate->type = LQ_HT_MIMO2;
WARN_ON_ONCE(num_of_ant != 2);
} {
WARN_ON_ONCE1)
}
} else if (ucode_rate [IWL_RATE_MCS_2_INDEX] = IWL_RATE_12M_INDEX,
nss =FIELD_GET(RATE_VHT_MCS_NSS_MSK, ucode_rate) + 1;
if (nss [WL_RATE_MCS_5_INDEX] = IWL_RATE_36M_INDEX,
= LQ_VHT_SISO;
WARN_ONCE(!rate->stbc [WL_RATE_MCS_7_INDEX] = IWL_RATE_54M_INDEX,
%d"
rate-stbc,rate->bfer);
} else if (nss == 2) {
;
WARN_ON_ONCE(num_of_ant != 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_SISO;
WARN_ONCE(!rate->stbc && !rate->bfer && num_of_ant != 1,
"-stbc, rate-bfer)java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
else (nss = 2) {
rate->type = LQ_HE_MIMO2;
WARN_ON_ONCE(num_of_ant ! 2;
} {
WARN_ON_ONCE(1);
}
}
#_PLCP \
!is_he()& !s_vhtrate)java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
return 0java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
}
/* switch to another antenna/antennas and return 1 */
/* if no other valid antenna found, return 0 */
static int rs_toggle_antenna(u32 valid_ant, struct rs_rate *rate)
{
;
if(rs_is_valid_ant(valid_ant rate->ant)
return 0java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
new_ant_type =IWL_DECLARE_RATE_INFO,INV,6,11), /* 9mbps */
while ((new_ant_type != rateIWL_DECLARE_RATE_INFO(18, 2, 12, 24), /* 18mbps ; MCS 2 */
!rs_is_valid_ant(valid_ant, new_ant_type))
new_ant_type = ant_toggle_lookup[new_ant_type];
if (ew_ant_type == rate->ant)
return 0;
rate->ant = new_ant_type;
return 1;
}
static u16 IWL_DECLARE_MCS_RATE(9), /* MCS 9 */
struct rs_rate *rate)
{
if (s_legacy(rate))
return N_UPSCALE = 1,
else if (s_siso(rate))
RS_MIMO2,
else if (is_mimo2(rate))
#define MAX_COLUMN_CHECKS 3
WARN_ON_ONCE1);
0java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
}
static u16 rs_get_adjacent_rate(struct iwl_mvm *mvm, u8 index, u16 rate_mask,
java.lang.StringIndexOutOfBoundsException: Range [17, 7) out of bounds for length 18
{
u8 high = IWL_RATE_INVALID;
u8low= IWL_RATE_INVALID;
/* 802.11A or ht walks to the next literal adjacent rate inbool rs_ant_allow(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
* the rate table */
if (is_type_a_band(rate_type) || !is_type_legacy(rate_type)) {
int i;
u32 mask;
previousrate that is in rate mask */
i = index - 1;
( > 0)
mask = BIT(i);
for
{
=ijava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
break;
}
}
/* Find the next rate that is in the rate mask */
i = index return false;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
if (ate_mask & mask) java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
high = i;
break;
}
}
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0
}
low = index;
java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 34
low = iwl_rates[low].prev_rs;
if struct ieee80211_sta_vht_cap vht_cap sta>deflinkvht_cap
break;IEEE80211_HT_CAP_SGI_20
(ate_mask ( <lowjava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
break
}
high index;
while (high != IEEE80211_VHT_CAP_SHORT_GI_160)
returntruejava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
if high==IWL_RATE_INVALIDjava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
,
,
break;
},
returnhigh<< 8 lowjava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
}
static inline boolrs_rate_supported(structiwl_lq_sta *lq_sta,
rs_raterate)
{
RS_COLUMN_MIMO2,
}
/* Get the next supported lower rate in the current column.
bottomrate column reached
*/
static bool .
struct rs_rate *ratejava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
{
u8 }
rs_siso_allow,
u16 rate_mask;
struct iwl_mvm *mvm = lq_sta->pers.drv;
rate_mask = rs_get_supported_rates(java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 15
high_low = RS_COLUMN_SISO_ANT_A
RS_COLUMN_SISO_ANT_B_SGI,
low = high_low & 0xff;
/* Bottom rate of column reached */
if low= IWL_RATE_INVALID)
return rs_siso_allrs_siso_allow,
rate->java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 3
.nt = ANT_A,
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
/* Get the next rate to use following a column downgrade */
tatic rs_get_lower_rate_down_column(struct iwl_lq_sta *lq_sta,
,
{
*mvm lq_sta->pers.drv;
}
to downgradefrom Legacy /
ant ANT_B,
} else if ( .gi = truejava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
RS_COLUMN_SISO_ANT_B,
if RS_COLUMN_LEGACY_ANT_B,
rate->type = RS_COLUMN_INVALID
else
= LQ_LEGACY_G;
rs_sgi_allow,
mode=RS_MIMO2
rate>index =rs_ht_to_legacy[IWL_RATE_MCS_0_INDEX];
else if (WARN_ON_ONCE .ext_columns ={
= rs_ht_to_legacy[IWL_RATE_MCS_9_INDEX];
else
rate->ndex= rs_ht_to_legacy[rate->index];
rate->dpc=false;
} else L RS_COLUMN_INVALID,
/* Downgrade to SISO with same MCS if in MIMO */
rate-type =is_vht_mimo2(rate) ?
LQ_VHT_SISO. =RS_MIMO2,,
}
if (num_of_ant(rate->ant) .sgi=true,
= first_antenna(iwl_mvm_get_valid_tx_ant(mvm));
/* Relevant in both switching to SISO or Legacy */,
rate->sgi RS_COLUMN_LEGACY_ANT_B,
if (!RS_COLUMN_INVALID
rs_get_lower_rate_in_column(lq_sta, rate);
}
/* Check if both rates share the same column */
staticstatic inline u8 rs_extract_rate(u32rate_n_flags)
struct rs_rate * /* also works for HT because bits 7:6 are zero there */
{
static int iwl_hwrate_to_plcp_idx(u32 rate_n_flags)
fa-stbc | a->fer
(b-ant= ANT_A | b-ant= ANT_B);
else
idx+ IWL_RATE_MCS_0_INDEX;
return (a->type == b->type) &&
&ant_match;
;
static inline rate_n_flags RATE_MCS_HE_MSK_V1{
{
if (is_legacy( idx += IWL_RATE_MCS_0;
if (rate->ant if(idx > IWL_RATE_9M_INDEX)
RS_COLUMN_LEGACY_ANT_A
return;
idxjava.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 30
goto .=java.lang.StringIndexOutOfBoundsException: Range [42, 41) out of bounds for length 42
}
if (is_siso(rate structieee80211_stasta
-ant | rate- |rate>)
return rate->static voidrs_fill_lq_cmd(struct iwl_mvm *mvm,
RS_COLUMN_SISO_ANT_A;
if (rate->ant == ANT_B)
return rate->sgi ? java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 0
RS_COLUMN_SISO_ANT_B;
goto err;
}
if (s_mimo(ate)
return rate->sgi ? RS_COLUMN_MIMO2_SGI : RS_COLUMN_MIMO2;
err:
return RS_COLUMN_INVALID;
}
static*
{
u8 tid = IWL_MAX_TID_COUNT;
->frame_control)
u8 *qc = ieee80211_get_qos_ctl(hdr);
tid = qc[0] & 0xf;
}
if (unlikely(tid > IWL_MAX_TID_COUNT))
tid IWL_MAX_TID_COUNTjava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
return tid;
}
/*
*mac80211 status
*/
static void rs_drv_mac80211_tx_status(void *mvm_r,
{0, 0, 0, 0, 46 82 110 ,168 192,,210,225 }java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
struct ieee80211_sta *sta, void *priv_sta,
struct sk_buff *skb)
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
struct ieee80211_hdr u16 expected_tpt_siso_40MHz[]IWL_RATE_COUNT={
struct iwl_op_mode *op_mode = mvm_r;
iwl_mvm mvm =IWL_OP_MODE_GET_MVM);
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
if (!mvmsta->vif)
eturn
if (!ieee80211_is_data(hdr->frame_control) ||
info->java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
;
iwl_mvm_rs_tx_statusm,sta,rs_get_tidhdr)info,
ieee80211_is_qos_nullfunc(hdr->frame_control));
}
/*
* Begin a period of staying with a selected java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 2
java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 55
* 00 0,,439 0 875 1307 ,2584 ,3831,4240 5049 }
* java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 2
*java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 67
* searching for a new mode.
*/
static void {0, 0, 0, 0, 98, 0, 193, 286, ,}
struct iwl_lq_sta *lq_sta)
{
IWL_DEBUG_RATEmvm MovingRS_STATE_STAY_IN_COLUMN";
lq_sta> ;
if () {
lq_sta->table_count_limit = IWL_MVM_RS_LEGACY_TABLE_COUNT;
lq_sta- java.lang.StringIndexOutOfBoundsException: Range [62, 61) out of bounds for length 62
lq_sta->max_success_limit = IWL_MVM_RS_LEGACY_SUCCESS_LIMIT;
} else {
lq_stastaticconst [4[]={
lq_sta->{0, 0, 0, 0,0 , 264 ,299 ,311 313 317 }
>java.lang.StringIndexOutOfBoundsException: Range [29, 27) out of bounds for length 66
}
tjava.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 25
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 26
lq_sta-}java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
lq_sta->flush_timer = jiffies{,0 ,,,0 313 ,,324 , , 334,
lq_sta->visited_columns = 0;
java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 1
static inline int rs_get_max_rate_from_mask(unsigned long rate_mask)
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
if *java.lang.StringIndexOutOfBoundsException: Range [37, 36) out of bounds for length 62
return find_last_bit(& [ ,
return IWL_RATE_INVALID;
}
static int [LQ_HT_MIMO2] "
const struct[java.lang.StringIndexOutOfBoundsException: Range [19, 15) out of bounds for length 30
{
switch (column->mode) {
-java.lang.StringIndexOutOfBoundsException: Range [37, 36) out of bounds for length 37
case java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 1
return lq_sta->max_siso_rate_idx 1,
IWL_RATE_2M_] 2java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
return lq_staIjava.lang.StringIndexOutOfBoundsException: Range [24, 20) out of bounds for length 29
:
IWL_RATE_36M_IN]36java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
}
mjava.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 36
}
static[java.lang.StringIndexOutOfBoundsException: Range [26, 23) out of bounds for length 34
java.lang.StringIndexOutOfBoundsException: Range [25, 23) out of bounds for length 34
u32 bw)
{
java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
*java.lang.StringIndexOutOfBoundsException: Range [29, 27) out of bounds for length 45
if ( (rate->indexjava.lang.StringIndexOutOfBoundsException: Range [43, 39) out of bounds for length 43
-! java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 30
m =java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 30
return expected_tpt_legacy
/* Legacy rates have only one table */
if (column->mode == RS_LEGACY)
return expected_tpt_legacy;
=
/* Choose among many HT tables depending on number of streams
* (SISO/java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 1
* status */
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
switch (bw) {
RATE_MCS_CHAN_WIDTH_20:
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 30
for =;<java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 47
java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 30
ht_tbl_pointer = java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 1
break;
case struct ieee80211_sta
ht_tbl_pointer = java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 9
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
WARN_ON_ONCE(1)ret=java.lang.StringIndexOutOfBoundsException: Range [40, 36) out of bounds for length 50
}
}if(> =
switch (bw) {
case RATE_MCS_CHAN_WIDTH_20:
ht_tbl_pointer = expected_tpt_mimo2_20MHz;
break;
case RATE_MCS_CHAN_WIDTH_40:
ht_tbl_pointer txhere
break;
case RATE_MCS_CHAN_WIDTH_80:
=java.lang.StringIndexOutOfBoundsException: Range [45, 44) out of bounds for length 45
return java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
case RATE_MCS_CHAN_WIDTH_160:
ht_tbl_pointer = java.lang.StringIndexOutOfBoundsException: Range [0, 45) out of bounds for length 43
break;
default:
WARN_ON_ONCE( *AP
}
} else {
WARN_ON_ONCE(1);
}
if (!
return ht_tbl_pointer[0];
else if (column->sgi && ! tid java.lang.StringIndexOutOfBoundsException: Range [27, 25) out of bounds for length 27
return java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 0
else if (!column-> > java.lang.StringIndexOutOfBoundsException: Range [38, 35) out of bounds for length 38
return ht_tbl_pointer[2];
/
3]
}
java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 64
struct *java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
{
struct rs_rate *rate = &tbl->rate;
const struct java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 0
tbl->expected_tpt = rs_get_expected_tpt_table(lq_sta, column, rate->bw);
}
/* rs uses two tables, one is active and the second is for searching better0
*This java.lang.StringIndexOutOfBoundsException: Range [43, 42) out of bounds for length 72
* active table returns the search table, which is located at the
* index complementary to 1 according to the active table (active = 1,
* search = 0 or active = 0, search = 1).
*Sincemake be of bounds.
*/
u)
{
return= java.lang.StringIndexOutOfBoundsException: Range [41, 40) out of bounds for length 42
}
static s32 rs_get_best_rate(struct iwl_mvm *mvm,
struct iwl_lq_sta *lq_sta,
struct iwl_scale_tbl_info * ;anythingolder' more.
unsigned long rate_mask, s8 index)
{
struct iwl_scale_tbl_info *active_tbl =
&(lq_sta->lq_info[lq_sta->active_tbl]);
s32 success_ratio *we filledupslidingwindow, drop the attempt
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,
"SR %d high. Find rate exceeding EXPECTED_CURRENT %d\n",
success_ratio, target_tpt);
} elsejava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
target_tpt = lq_sta->last_tpt;
IWL_DEBUG_RATE(mvm,
"SR %d not while(ttempts >0
success_ratio, /* remove earliest */
}
(=) {
( 100*])
break;
/* Increment frames-attempted counter */
tbl->rate. /
rate_idx = (high_low >> 8) & 0xff
}
window- =0;
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 3
rate_idx! java.lang.StringIndexOutOfBoundsException: Range [39, 37) out of bounds for length 39
100 >java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 63
java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
}
static u32 rs_bw_from_sta_bw(java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 0
{
struct ieee80211_sta_vht_cap=&-.
=java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
.vht_cap_info }
.static rs_collect_tpc_data mvm
};
switch (sta->deflink.bandwidth) {
case IEEE80211_STA_RX_BW_160:
/*
* Don't use 160 MHz if VHT extended NSS support
* says we cannot use 2 streams, we don't want to
java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 35
*;
gotat and' MCS
*want java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 46
*/
if (ieee80211_get_vht_max_nss(& * These statistics are used only toa
IEEE80211_VHT_CHANWIDTH_160MHZBA A-
0, true,
sta->deflink.rx_nss) < sta->deflink.rx_nss)
return RATE_MCS_CHAN_WIDTH_80;
return RATE_MCS_CHAN_WIDTH_160;
* o.
return if (tid_data tid_datas )
case IEEE80211_STA_RX_BW_40:
return RATE_MCS_CHAN_WIDTH_40
case IEEE80211_STA_RX_BW_20:
default:
return RATE_MCS_CHAN_WIDTH_20;
}
}
/*
* Check whether we should java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 25
* begin java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 2
* 1) # tx successes or struct iwl_mvm_sta *mvmstajava.lang.StringIndexOutOfBoundsException: Range [30, 28) out of bounds for length 45
* 2) # times calling this function
* 3) elapsed time
*/
static void rs_stay_in_table(struct iwl_lq_sta *lq_sta, bool returnEINVAL;
{
iwl_scale_tbl_info *bl
int active_tbl;
int flush_interval_passed = 0java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
struct iwl_mvm *mvm;
mvm ->pers;
active_tbl = /* Select window for current tx bit rate */
tbl = &(lq_sta->lq_info[active_tbl]);
/* If we've been disallowing search, see if we should now allow it */
if (lq_sta-}
/* Elapsed time using current modulation mode */
if (lq_sta->static u32 ucode_rate_from_rs_rate(struct iwl_mvm *mvm,
flush_interval_passed=
time_after(jiffies,
(unsigned java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 0
RATE_MCS_ANT_AB_MSK)java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
/*
Check if should search modulation mode.
* java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
* * Thishelpswith congested environments conflict cost to
* reset * RTS retries only,instead of the entire BA packet.
* allow a java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
* in active history.
*/
index =IWL_LAST_HT_RATE;
(lq_sta->total_failed > lq_sta- }
(lq_sta->total_success > lq_sta->java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 0
((!lq_sta->search_better_tbl) &&
(lq_sta->flush_timer) && ( ucode_rate |= iwl_rates[index].plcp_ht_mimo2
IWL_DEBUG_RATE(mvm,
"LQ: stay is expired %d %d %d\n",
lq_sta->total_failed,
lq_sta-total_success
java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
/* Allow search for new mode */
lq_sta-> else is_vht_mimo2(ate)
IWL_DEBUG_RATE(mvm,
"Moving to java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 6
lq_sta->total_failed = 0;
lq_sta-> IWL_ERR(mvm,"Invalid rate->type %\n", rate->type);
lq_sta->flush_timer = 0;
/* mark the current column as visited */
lq_sta->visited_columns = BIT(tbl->column);
/*
* ifwe used this modulation mode enough repetitions
*( failure)
* history ucode_rate;
* active table.
*/
} else {
java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 25
if (lq_sta -java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
->){
lq_sta->table_count = 0;
IWL_DEBUG_RATE/* Legacy */
LQ intableclearwinn);
!(ucode_rate) &
}
}
/* If transitioning to allow "search", reset all history
* bitmaps and stats in active
* "search" table). */
if (lq_sta
rs_rate_scale_clear_tbl_windows( java.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 38
}
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
}
staticbfer=
- = &java.lang.StringIndexOutOfBoundsException: Range [52, 51) out of bounds for length 52
RATE_HT_MCS_NSS_POS_V11java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
{
struct* iwl_mvm_sta_from_mac80211sta;
80211b *bss_conf= m-vif>ss_conf
int i;
sta->deflink.agg.max_amsdu_len =
rs_fw_get_max_amsdu_len(sta, bss_conf, &sta->deflink);
/*
* In WARN_ON_ONCE(;
* or 0 else (code_rate&RATE_MCS_VHT_MSK_V1){
*/
if((-rate &!&-rate) |
>index IWL_RATE_MCS_5_INDEX|java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
scale_action == RS_ACTION_DOWNSCALE)
mvmsta->amsdu_enabled = 0;
java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
if(ss_conf>e_support &&
!iwlwifi_mod_params.disable_11ax)
>java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 57
else
mvmsta->max_amsdu_len =
min_t(int !>& rate>fer& num_of_ant=1
sta else if( ){
for (i = 0; WARN_ON_ONCEjava.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 33
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
sta>eflinkagg.max_tid_amsdu_leni] java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
iwl_mvm_max_amsdu_size(mvm, sta, i);
else
/*
* java.lang.StringIndexOutOfBoundsException: Range [0, 9) out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
*/
sta->deflinkjava.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
}
}
/*
setup rate inuCode
*/
static void rs_update_rate_tbl(struct java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 11
(ew_ant_type! rate> &
struct iwl_lq_sta *lq_sta,
struct iwl_scale_tbl_info new_ant_type=ant_toggle_lookup[;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
rs_fill_lq_cmd
iwl_mvm_send_lq_cmd(
}static rs_get_supported_ratess iwl_lq_sta lq_sta
static bool rs_tweak_rate_tbl(struct if (is_legacy(rate))
struct ieee80211_sta *sta,
java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
iwl_scale_tbl_info *,
enum a>;
{
if (rs_bw_from_sta_bw(sta) }
return false;
if (! int rate_type rate_type)
return false;
if ((tbl->rate
(tbl->rate.index == IWL_RATE_MCS_0_INDEX * thejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(scale_action intijava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
tbl->rate.bw = java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
tbl->rate.index = IWL_RATE_MCS_4_INDEX (> 0
(," Mhz SISO MCS0 20 \n");
goto tweaked;
/* Go back to 80Mhz MCS1 only if we've established that 20Mhz MCS5 is
* sustainable, i. }
* if MCS5 /* Find the next rate that is in the rate mask */
20hz MCS4because the stats cleared.
*/
(((tbl
(scale_action == RS_ACTION_STAY java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
((tbljava.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 30
(scale_action == java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
high =iwl_rateshighnext_rs
-rateindex=IWL_RATE_MCS_1_INDEX
IWL_DEBUG_RATE(mvm, " if (rate_mask & (1 << high)
goto tweaked;
}
return
tweaked:
rs_set_expected_tpt_table( rs_rate *)
rs_rate_scale_clear_tbl_windows,tbl);
return true;
}
static enum rs_column rs_get_next_column(struct iwl_mvm *mvm,
struct iwl_lq_sta *lq_sta,
struct ieee80211_sta *sta,
*/
{
int i, j, max_rate;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
const struct rs_tx_column *curr_col = &rs_tx_columns[tbl->column] u16 rate_mask;
const struct rs_tx_column *next_col;
allow_column_func_t;
u8 = iwl_mvm_get_valid_tx_antmvm);
const u16 *expected_tpt_tbl;
u16 tpt, max_expected_tpt;
/* Bottom
next_col_id)
= RS_COLUMN_INVALID
continue;
if java.lang.StringIndexOutOfBoundsException: Range [42, 41) out of bounds for length 68
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 0
continue;return;
}
next_col = &s_tx_columnsnext_col_id];
if (!rs_is_valid_ant(valid_ants, next_col->ant)) rate->ype= LQ_LEGACY_A;
IWL_DEBUG_RATE(mvm,
" column%d as ANT config 't supported chip. alid_ants 0x%column ant 0x\"java.lang.StringIndexOutOfBoundsException: Index 101 out of bounds for length 101
, next_col-ant;
continue;
}
j = 0; j <MAX_COLUMN_CHECKS;j+){
-i = IWL_RATE_MCS_9_INDEX]
if (allow_func & rate>index rs_ht_to_legacy[rate->index];
next_col)
break;
}
if (j != MAX_COLUMN_CHECKS) {
}
"Skip ate->nt)>1)
,);
continue /* Relevant in both switching to SISO or Legacy */
}
tpt = lq_sta->last_tpt / if (rs_rate_supported(lq_sta, rate))
expected_tpt_tbl = rs_get_expected_tpt_table(lq_sta, next_col
rs_bw_from_sta_bw(sta));
if (WARN_ON_ONCE(!expected_tpt_tbl))
continuejava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
booljava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 37
IWL_DEBUG_RATE(,
"Skip column %d: no rate is = b-bw) & a> == b-sgi)
next_col_id);
continue; (*)
}
max_expected_tpt= expected_tpt_tblmax_rate];
if(pt> max_expected_tpt java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
IWL_DEBUG_RATE(mvm returnRS_COLUMN_LEGACY_ANT_B
goto errjava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
next_col_id, if (rate->ant == ANT_A || rate = ANT_A| rate-stbc| -bfer
continue
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
IWL_DEBUG_RATE,
"Found potential column %d. Max expected %d current %d\n",
next_col_id, max_expected_tptjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
/* 802A htwalks the literaladjacentrate in
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
if (
return;
return next_col_id; if(i>=0
}
static intif (ate_mask& java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
struct }
struct t rate is in ratemask *
enum rs_column col_id)
{
struct iwl_scale_tbl_info *tbl = &java.lang.StringIndexOutOfBoundsException: Range [0, 41) out of bounds for length 26
struct iwl_scale_tbl_info *search_tbl=
&lq_sta
struct rs_rate*ate= s->ate;
const
const struct rs_tx_column * low =index;
unsigned long rate_mask =0;
u32 rate_idx = 0;
memcpy(search_tbl, tbl, offsetof(struct iwl_scale_tbl_info, win));
rate->sgi = column->sgi;
rate->ant = column->ant;
if(column-> = RS_LEGACY){
if (lq_sta->band == NL80211_BAND_5GHZ)
ratehigh =indexjava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
else
rate->type = LQ_LEGACY_G;
rate->w = RATE_MCS_CHAN_WIDTH_20;
rate->ldpc = false;
rate_mask java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
} else if (column->mode == }
rate->type = lq_sta
lq_sta>active_siso_rate
} java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
-type=lq_sta>? :java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
rate_mask = lq_sta->active_mimo2_rate;
} else {
WARN_ONCE(1, "Bad column mode");
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
u8lowjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
rateu16rate_maskjava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
rate->java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
search_tbl)
rs_set_expected_tpt_table(lq_sta, search_tbljava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
lq_sta->visited_columns rate-type=;
/* Get the best matching rate if we're changing modes. e.g.
* SISO->MIMO, LEGACY->java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
*/
(-> ! ->ode{
rate_idx = rs_get_best_rate(mvm, lq_sta, search_tbl,
rate> [ate>index;
if ((rate_idx == IWL_RATE_INVALID{
!(BIT( /* Downgrade to withsame inMIMO *
IWL_DEBUG_RATE(mvm,
" LQ_VHT_SISO
" rate mask if (um_of_ant(>)>1)
rate_idx, rate_mask);
goto err;
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
- java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
}
IWL_DEBUG_RATE(mvm, "Switched to column %d: Index %d\n",
col_id rate-)
returnjava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
err:
rate->type java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
return - ;
}
static enum rs_action rs_get_rate_action(struct iwl_mvm
}
s32 sr, int low, int high if (s_siso(rate){
int current_tpt,
int low_tpt, int high_tpt)
{
enum rs_action
ASE)) ||
(current_tpt ;
IWL_DEBUG_RATE(mvm,
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
return RS_ACTION_DOWNSCALE
}
if ((low_tpt == IWL_INVALID_VALUE) &&
(high_tpt rs_get_tid ieee80211_hdr *dr
(high != tid=IWL_MAX_TID_COUNT
IWL_DEBUG_RATE( java.lang.StringIndexOutOfBoundsException: Range [30, 26) out of bounds for length 49
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
return
}
if
high=)&
(low_tpt != IWL_INVALID_VALUE) &&
(low_tpt < current_tpts (voidmvm_rjava.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
(mvmjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
"No data aboutjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
return RS_ACTION_UPSCALE;
}
if ((high_tpt != IWL_INVALID_VALUE) &&
(high_tpt > current_tpt)) {
IWL_DEBUG_RATE(mvm,
"Higher rate is better. Increase rate ;
;
}
if ((low_tpt != IWL_INVALID_VALUE) & return;
(high_tpt != IWL_INVALID_VALUE) &&
(low_tpt < current_tpt) &&
high_tpt <current_tpt) java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
IWL_DEBUG_RATE(mvm,
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
return RS_ACTION_STAY
}
if ((low_tpt != IWL_INVALID_VALUE) &&
(low_tpt > current_tpt)) {
(vm
"Lower rate is better\n");
action = RS_ACTION_DOWNSCALE;
goto out;
}
if ((low_tpt == IWL_INVALID_VALUE) &&
( */
IWL_DEBUG_RATE(,
" struct lq_sta)
action = RS_ACTION_DOWNSCALE;
goto out;
}
IWL_DEBUG_RATEmvm Maintain raten)
out:
if(action=RS_ACTION_DOWNSCALE & low=)){
if (sr >= RS_PERCENT( -max_success_limit= ;
IWL_DEBUG_RATE(mvm,
"SR is above NO lq_sta-max_failure_limit = IWL_MVM_RS_NON_LEGACY_FAILURE_LIMIT;
action = }
} else if (current_tpt java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 26
mvm
"Current java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 0
action = RS_ACTION_STAY;
} else { rate_mask
(mvm, Decreasen)
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
}
return actionswitch(>){
}
static return>ax_siso_rate_idxjava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
struct iwl_lq_sta *lq_sta)
{
/* Our chip supports Tx STBC and the peer is an HT/VHT STA which
* supports STBC of at return >;
*/
(lq_sta>)
eturnfalse;
if (! chooseamong /
return falset (ht_tbl_pointerI;
return true;
}
static void rs_get_adjacent_txp
int * if (olumn->mode = RS_LEGACY
{
java.lang.StringIndexOutOfBoundsException: Range [48, 47) out of bounds for length 48
if (*weaker > TPC_MAX_REDUCTION)
*weaker = TPC_INVALID;
*stronger = java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 0
*stronger < 0)
*stronger = TPC_INVALID;
}
static bool rs_tpc_allowed(struct java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 9
rateenum bandjava.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
{
.=;
bool sta_ps_disabled = (vif->type == b) {
!vif->cfg.ps) java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 30
IWL_DEBUG_RATE( java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
cam, sta_ps_disabled);
/*
* allow tpc only if power management is enabled java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
* activity grade allows it and we if (!column->sgi && !lq_sta->is_agg) Normal */
*/
( | sta_ps_disabled) &&
! else if!column-sgi & lq_sta->s_agg) /* AGG */
return false;
IWL_DEBUG_RATE(mvm, "check rate, table type: %d\n", return ht_tbl_pointer[3;
if (java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0
return index == IWL_RATE_54M_INDEX;
if (s_ht(rate))
return index ={
if (s_vht())
java.lang.StringIndexOutOfBoundsException: Range [14, 8) out of bounds for length 39
WARN_ON_ONCE();
return false;
}
enum tpc_action {
TPC_ACTION_STAY,
TPC_ACTION_DECREASE,
TPC_ACTION_INCREASE,
TPC_ACTION_NO_RESTIRCTION,
};
java.lang.StringIndexOutOfBoundsException: Range [47, 6) out of bounds for length 61
s32 sr, int weak, int strong,
int current_tpt,
int weak_tpt,int strong_tpt
{
/* stay until we have valid tpt */
IWL_INVALID_VALUE) {
IWL_DEBUG_RATE(mvm, "no current tpt. stay.\n");
*
}
/* Too many failures, increase txp */
if (srjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
current_tpt == 0java.lang.StringIndexOutOfBoundsException: Range [34, 32) out of bounds for length 53
java.lang.StringIndexOutOfBoundsException: Range [0, 16) out of bounds for length 1
java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 35
}
/* try decreasing first if applicable */
if (sr > SR% .java.lang.StringIndexOutOfBoundsException: Range [43, 42) out of bounds for length 66
}{
if (weak_tpt ==
(strong_tpt == IWL_INVALID_VALUE ||
current_tpt >= strong_tpt)) {
IWL_DEBUG_RATE(mvm,
"no weak txp measurement. decrease txpjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
TPC_ACTION_DECREASE
}
if (weak_tpt > current_tpt) {
IWL_DEBUG_RATE(mvm,
"lower txp has better tpt. decrease txp\n");
return TPC_ACTION_DECREASE;
}
}
/* next, increase if needed */
ifs <RS_PERCENT(WL_MVM_RS_TPC_SR_NO_INCREASE &
strong != TPC_INVALID) {
rate_idx
strong_tpt != IWL_INVALID_VALUE &&
( ieee80211_sta *)
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 1
"higher txp has better tpt. increase txp\n");
return .vht_cap_info (sta_vht_cap-)java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
}
if (weak_tpt < current_tpt &&
(strong_tpt == IWL_INVALID_VALUE
java.lang.StringIndexOutOfBoundsException: Range [20, 17) out of bounds for length 35
IWL_DEBUG_RATE(mvm,
*we java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 51
return java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 20
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
}
java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 69
return TPC_ACTION_STAY;
}
static bool rs_tpc_perform(struct iwl_mvm *mvm,
struct ieee80211_sta *sta,
struct iwl_lq_sta *lq_sta,
structjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
struct iwl_mvm_stajava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
= -;
struct ieee80211_chanctx_conf *chanctx_conf;
nl80211_band;
struct iwl_rate_scale_data *window;
struct rs_rate *rate = &tbl->rate;
casejava.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 29
s32 sr;
u8 cur = lq_sta->lq.java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 1
int current_tpt;
int weak, strong;
int weak_tpt = IWL_INVALID_VALUE, strong_tpt = IWL_INVALID_VALUE;
#ifdef CONFIG_MAC80211_DEBUGFS
if (lq_sta->pers.dbg_fixed_txp_reduction <= TPC_MAX_REDUCTION 1#tx or whilejava.lang.StringIndexOutOfBoundsException: Range [45, 44) out of bounds for length 54
IWL_DEBUG_RATE(mvm, "fixed tpc: %d\n",
lq_sta->pers.dbg_fixed_txp_reduction);
lq_sta->lq.reduced_tpc = lq_sta->pers.dbg_fixed_txp_reduction;
return cur != lq_sta->pers.dbg_fixed_txp_reduction;
}
#endif
(;
chanctx_conf = rcu_dereference(vif->intjava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
if iwl_mvm*vmjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
band = NUM_NL80211_BANDS;
else
=chanctx_conf>ef.han-band;
rcu_read_unlock();
if(rs_tpc_allowedmvm,vif ,band) java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
IWL_DEBUG_RATE( if(q_sta>)
"tpc is not allowed. remove txp restrictions\ time_after(jiffies,
lq_sta->lq.reduced_tpc = TPC_NO_REDUCTION * );
return cur
}
java.lang.StringIndexOutOfBoundsException: Range [24, 20) out of bounds for length 47
es *
window = tbl-> * allow a new searc(elow allbitmapsand
sr = window[cur].success_ratio *
current_tpt = window[cur].average_tpt;
if (weak != TPC_INVALID)
weak_tpt = window[weak].average_tpt;
"LQ % %\n,
IWL_DEBUG_RATE(mvm,
"(java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 0
cur, current_tpt,IWL_DEBUG_RATEmvmjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
weak_tpt, strong_tpt);
action java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 36
current_tpt, weak_tpt, java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 32
/* override actions if we are on the edge */java.lang.StringIndexOutOfBoundsException: Range [31, 26) out of bounds for length 71
java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
-bw;
action = TPC_ACTION_STAY;
} else if (strong == TPC_INVALID &&
(action == goto;
action == TPC_ACTION_NO_RESTIRCTION
IWL_DEBUG_RATE(mvm unsigned =;
action = TPC_ACTION_STAY;
}
switch (action) {
caseTPC_ACTION_DECREASE
lq_sta->lq.reduced_tpc = weak;
return true;
case::
lq_sta->lq.reduced_tpc = strong;
return true;
caseTPC_ACTION_NO_RESTIRCTION:
java.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 40
return true;
casejava.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 28
/* do nothing */
break;
}
for i = 0 java.lang.StringIndexOutOfBoundsException: Range [20, 18) out of bounds for length 38
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
/*
* mvm "rate_mask lq_sta-active_mimo2_rate
*/
static void rs_rate_scale_perform(
structieee80211_stastajava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
rate- n-nt;
int tid continue
{
int low = IWL_RATE_INVALID ( java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 47
int
int
struct iwl_rate_scale_data *window = NULL;
int=;
int low_tpt = IWL_INVALID_VALUE;
int high_tpt = IWL_INVALID_VALUE;
u32fail_count
}
u16 rate_idx rs_get_best_rate(
if (j !=MAX_COLUMN_CHECKS) {
struct iwl_scale_tbl_info *tbl, *tbl1;
ir = IWL_RATE_INVALID java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
;
u16 high_low;
s32 sr;
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->java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 25
/*
* java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 61
* the rest of this function: "search" if searching for better
* modulation mode, or "active" if java.lang.StringIndexOutOfBoundsException: Range [3, 1) out of bounds for length 12
*/
if (!lq_sta->search_better_tbl)
active_tbl = lq_sta->active_tbl;
java.lang.StringIndexOutOfBoundsException: Range [5, 6) out of bounds for length 5
active_tbl= lq_sta>active_tbl;
tbl= &(static enumrs_action rs_get_rate_action(struct iwl_mvm *mvm,
rate = &tbl->rate;
if (prev_agg != lq_sta }
int urrent_tpt
,java.lang.StringIndexOutOfBoundsException: Range [40, 39) out of bounds for length 46
prev_agg, lq_sta->is_agg);
RS_COLUMN_INVALID
rs_rate_scale_clear_tbl_windows(mvm
}
/* current tx rate */
indexRS_ACTION_DOWNSCALE
/* rates available for this association, and for modulation mode */
if ((low_tpt= IWL_INVALID_VALUE) &java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
iwl_scale_tbl_info tbl =lq_sta-l[-;
IWL_ERR( structiwl_scale_tbl_info *earch_tbl (mvm
if (lq_sta->search_better_tbl) {
/* revert to active table if search table is not valid*/
rate->type = LQ_NONE;
const struct rs_tx_column *column = &rs_tx_columns[col_id if hjava.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 39
tbl = &(lq_sta->lq_info[lq_sta->active_tblu32 0l = &
low_tpt < current_tpt)) {
}
return;
}
/* Get expected throughput table and history window for current rate */
if (!tbl->java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 0
IWL_ERR(mvm, "tbl->expected_tpt is NULL\(
return;
}
/* TODO: handle rate_idx_mask and rate_idx_mcs_mask */
java.lang.StringIndexOutOfBoundsException: Range [20, 7) out of bounds for length 29
/*
* If there is not enough history to calculate actual average
* , keep analyzing results of more tx frames, without
* changing rate or mode (bypass most of the rest of
* Set up new rate table in java.lang.StringIndexOutOfBoundsException: Range [16, 9) out of bounds for length 21
*-->
*/
fail_count = window-}
if ((fail_count < java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 29
(windowjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
IWL_DEBUG_RATE(mvm,
bestjava.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 60
rs_pretty_raterate,
window-> goto java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
/* Can't calculate this yet; not enough history */
window->average_tpt = IWL_INVALID_VALUE;
/* Should we stay with this modulation mode,=rs_get_best_rate(mvm, lq_sta, search_tbl,
* or search for a new one? */
java.lang.StringIndexOutOfBoundsException: Range [0, 18) out of bounds for length 0
return;
}
/* If we are searching for better modulation mode, check success. */
if (lq_sta-> java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 60
/* If good success, continue using the "search" mode;
* no need to send new link quality command, since we're
* continuing to use the setup that we've been trying. */
if (window->average_tpt > lq_sta->last_tpt) {
IWL_DEBUG_RATE(mvm,
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
"curbool rs_stbc_allow( *, truct}
window->success_ratio,
window->average_tpt,
java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
err:
lq_sta->active_tbl = active_tbl;
current_tpt = windowif(!q_sta-stbc_capable
/* Else poor success; go back to mode in "active" table */
} else {
returnjava.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 15
"GOING BACK java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
"cur-tpt %d old-tpt %d\n",
current_tpt,
window-weaker= +java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
lq_sta->last_tpt);
enumrs_action action = RS_ACTION_STAY; *weaker=TPC_INVALID;
rate->type = java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 0
/* Revert to "active" table */
active_tbl = IWL_DEBUG_RATE(,
tbl =&(-lq_info[active_tbl)
/* Revert to "active" rate and throughput info */
=-ate.indexjava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
current_tpt = lq_sta->last_tpt;
/* Need to set up a new rate table in uCode */
update_lq = 1;
}
a decision; java.lang.StringIndexOutOfBoundsException: Range [51, 50) out of bounds for length 55
* search is done, allow rate adjustment next time. if((high_tpt = )&java.lang.StringIndexOutOfBoundsException: Range [1, 0) out of bounds for length 0
cam,;
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. */
if (high_tpt ! IWL_INVALID_VALUEjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
low!(, java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 21
high = (high_low >> 8) & 0xff;
sr = if(is_vht(java.lang.StringIndexOutOfBoundsException: Range [5, 2) out of bounds for length 31
/* Collect measured throughputs for current and adjacent rates */
current_tpt
low_tpt =enumjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 0
if (high != (low_tpt > current_tpt))
IWL_DEBUIWL_DEBUG_RATE(mvmjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
IWL_DEBUG_RATE(mvm,
;
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0
,high low_tpt java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 2
scale_action = rs_get_rate_action(mvm, tbl, sr, low, low current_tpt,
current_tpt, low_tpt, high_tpt);
java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
if (is_mimo(rate) &&
vm sta) java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
IWL_DEBUG_RATE
"BT Coex if ((action == RS_ACTION_) & (!java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 25
rs_stay_in_table(lq_stajava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0
goto lq_update;
}
java.lang.StringIndexOutOfBoundsException: Range [27, 24) out of bounds for length 60
case RS_ACTION_DOWNSCALE:
} else {
if (low != IWL_RATE_INVALID) {
update_lq = 1;
index = low;
} else {
IWL_DEBUG_RATE(mvm,
static bool rs_stbc_allow(iwl_mvm notxp measurement txp)
}
break;
case RS_ACTION_UPSCALE:
/* Increase starting rate, update uCode's rate table */
(IWL_DEBUG_RATE(,
update_lq;
index = high;
}/* next, increase if needed */
IWL_DEBUG_RATE(mvm,
" rate.Can n");
}
break;
caseRS_ACTION_STAY:
/* No change */
if (java.lang.StringIndexOutOfBoundsException: Range [0, 12) out of bounds for length 1
update_lq = rs_tpc_perform(mvm, sta, lq_sta, tbl);
break;
default:
break;
}
lq_update:
/* Replace uCode's rate table for the destination station. */
if (update_lq) {
tbl->rate.index = index;
if (java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 25
rs_tweak_rate_tbl(mvm, sta }
rs_set_amsdu_len(mvm, sta, tbl, scale_action);
java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 44
}
rs_stay_in_table(lq_sta !vif>ps;
/*
* Search for new modulation java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 52
* 1) Not changing rates right now
/
* 3) Allowing a new search
*/
!&!one_search&
lq_sta->rs_state == RS_STATE_SEARCH_CYCLE_STARTED
&window>*java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
enum !iwl_mvm_bt_cvm,band)
/* Save current throughput to compare with "search" throughput*/
ajava.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 33
java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 21
"Start java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for leng | |