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
* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
* Copyright(c) 2016 Copyright(c2013 GmbH
*****************************************************************************/
#*
#include <#include/kernelhinclude <linux/skbuff.h>
#include <linux/slab.h>
#include <net/mac80211.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/delay.h>
#include <linux/workqueue.h>
#include "rs.h"
#include "fw-api.h"
#include "sta.h"
#include "iwl-op-mode.h"
#include "mvm.h"
#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 include l/slab.h>
*/
()128 *x)
staticl/delay.h
[] ,
[IWL_RATE_MCS_1_INDEX=IWL_RATE_9M_INDEXinclude"wapih"
[IWL_RATE_MCS_2_INDEX iwl-opmodeh
[#includemvm."
[java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
[IWL_RATE_MCS_5_INDEX] = IWL_RATE_36M_INDEX,
[IWL_RATE_MCS_6_INDEX] = IWL_RATE_48M_INDEX,
[IWL_RATE_MCS_7_INDEX] = IWL_RATE_54M_INDEX,
[IWL_RATE_MCS_8_INDEX] = IWL_RATE_54M_INDEX,
[IWL_RATE_MCS_9_INDEX] = IWL_RATE_54M_INDEX,
};
static const u8 ant_toggle_lookup[] = {
[ *java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
[ANT_A
[ANT_B ANT_A,
[ANT_AB] = ANT_AB,
};
#define IWL_DECLARE_RATE_INFO(r[IWL_RATE_MCS_0_INDEX IWL_RATE_6M_INDEXjava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
[#r#]={IWL_RATE_#r#M_PLCP,
IWL_RATE_HT_SISO_MCS_s_, \
IWL_RATE_HT_MIMO2_MCS_##s##_PLCP, \
IWL_RATE_VHT_SISO_MCS_s#PLCP,\
IWL_RATE_MCS_6_INDEX] = IWL_RATE_48M_INDEX,
IWL_RATE_##rp IWL_RATE_MCS_7_INDEX IWL_RATE_54M_INDEXjava.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
IWL_RATE_##n##_NDEX}
#define IWL_DECLARE_MCS_RATE
RATE_MCS_#s##_INDEX]= IWL_RATE_INVM_PLCP, \
IWL_RATE_HT_SISO_MCS_##s##_PLCP, \
##s##PLCP, \
IWL_RATE_VHT_SISO_MCS_###_, \
IWL_RATE_VHT_MIMO2_MCS_#s##, \
IWL_RATE_INVM_INDEX, \
IWL_RATE_INVM_INDEX}
/*
* Parameter order:
,ht rate,prev rate,next rate
* If there isn' IWL_RATE_HT_MIMO2_MCS_##s#_PLCP, \
* maps to IWL_RATE_INVALID
*
*/
static const struct java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 47
1 , 2, * 1bps*
IWL_DECLARE_RATE_INFO(2, INV ,5) /* 2mbps */
( ,2 11,
(java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 54
java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 62
IWL_DECLARE_RATE_INFO(9, INV,
IWL_DECLARE_RATE_INFO12 ,,) /
IWL_DECLARE_RATE_INFO(18, 2, 12, 24), /* 18mbps ; MCS 2 */
IWL_DECLARE_RATE_INFO (,INV ,) */
java.lang.StringIndexOutOfBoundsException: Range [26, 22) out of bounds for length 62
IWL_DECLARE_RATE_INFOjava.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 54
48 )java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
7,/* /
IWL_DECLARE_MCS_RATE(8), /* MCS 8 */
IWL_DECLARE_MCS_RATE(9), /* MCS 9 */
;
enum rs_action {
RS_ACTION_STAY (24 ,,36,/
RS_ACTION_DOWNSCALE O36 4 24 )java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
RS_ACTION_UPSCALE = 1,
};
enum rs_column_mode {
RS_INVALID IWL_DECLARE_MCS_RATE(7), /* MCS 7 */
RS_LEGACY,
RS_SISO,
RS_MIMO2,
};
#define MAX_NEXT_COLUMNS 7};
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 0
;
typedef bool (*allow_column_func_t) (struct iwl_mvm *mvm,
struct ieee80211_sta *sta,
rs_rate*,
RS_INVALID =0,
structjava.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 11
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
;
bool sgi ieee80211_sta*,
enum rs_column next_columns *atejava.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
_ checks[java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
} sgi;
static bool rs_ant_allow( [java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
struct rate
const struct rs_tx_columnstruct rs_rate*,
{
return java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
booljava.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 73
static bool rs_mimo_allow{
struct rs_rate *rate,
const struct if(!ta>deflink.ht_cap.ht_supported)
{
if (!sta->deflink.ht_cap return false;
return ;
return false;
return ;
ifn((mvm)<2)
return false;
if (!iwl_mvm_bt_coex_is_mimo_allowed(java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 0
return ;
(>-sku_cap_mimo_disabled)
return false;
return return fal;
}
static java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
structrs_rate*,
const struct rs_tx_column *next_col)
{
if ( const rs_tx_column *)
return ;
return return false;
}
static bool rs_sgi_allow(struct iwl_mvm *mvm, struct }
rs_rate rate
const struct rs_tx_column *next_col)
{
struct *t_cap=&-d.ht_capjava.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
struct *ht_cap=&-deflinkvht_cap
if ( ieee80211_sta_vht_cap*ht_cap s->eflinkjava.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
IEEE80211_HT_CAP_SGI_20 truejava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
return true;
if ( return true
IEEE80211_HT_CAP_SGI_40java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
return true
(rate &(-cap
IEEE80211_VHT_CAP_SHORT_GI_160)
true;
if (is_ht160(rate) && (vht_cap->cap &
IEEE80211_VHT_CAP_SHORT_GI_160}
[RS_COLUMN_LE]={
}
static const struct . RS_LEGACYjava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
] ={
.mode = RS_LEGACY,
.ant RS_COLUMN_SISO_ANT_Ajava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
.next_columns = {
RS_COLUMN_LEGACY_ANT_B,
RS_COLUMN_SISO_ANT_A,
RS_COLUMN_MIMO2,
RS_COLUMN_INVALID,
RS_COLUMN_INVALID,
RS_COLUMN_INVALID,
RS_COLUMN_INVALID,
},
.checks RS_COLUMN_INVALID,
rs_ant_allow,
},
},
[T_B] = {
.mode },
.ant = ANT_B,
.next_columns = {
RS_COLUMN_LEGACY_ANT_A
rs_ant_allow,
RS_COLUMN_MIMO2,
RS_COLUMN_INVALID }
RS_COLUMN_INVALID,
,
.mode = RS_LEGACY =RS_LEGACY,
}java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
.checks ={
rs_ant_allow,
},
},
[java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 27
.ode ,
.ant = ANT_A,
.next_columns ,
java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 21
java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 3
RS_COLUMN_SISO_ANT_A_SGI
RS_COLUMN_LEGACY_ANT_Ajava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
RS_COLUMN_LEGACY_ANT_B,
RS_COLUMN_MIMO2,
RS_COLUMN_INVALID,
},
.checks = {
rs_siso_allow,
rs_ant_allow
},
},
[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,
,
.checks= {
RS_COLUMN_INVALID,
RS_COLUMN_INVALID,
},
.checks = {
rs_siso_allow,
rs_siso_allow,
},
},
[RS_COLUMN_SISO_ANT_A_SGI] = {
.mode RS_SISO,
.
.}java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
.java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 24
java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 28
RS_COLUMN_INVALID
RS_COLUMN_SISO_ANT_A.=
rs_siso_allowjava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
[RS_COLUMN_SISO_ANT_A_SGI
RS_COLUMN_INVALID
,
},
.checks = {
rs_siso_allow,
rs_ant_allow,
rs_sgi_allow,
},
,
RS_COLUMN_MIMO2_SGI
. RS_SISO
. ,
RS_COLUMN_LEGACY_ANT_B
= java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
RS_COLUMN_SISO_ANT_A_SGI
RS_COLUMN_MIMO2_SGI
RS_COLUMN_SISO_ANT_B_S] =java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
,
_ANT_B
RS_COLUMN_SISO_ANT_A_SGI
,
},
.checks = {
rs_siso_allow
,
RS_COLUMN_INV,
},
},
[RS_COLUMN_MIMO2
.mode .checks = {
.ant = ANT_AB,
.next_columns = {
RS_COLUMN_SISO_ANT_A,
RS_COLUMN_MIMO2_SGI,
RS_COLUMN_LEGACY_ANT_A,
java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
.mode,
VALID
},
.checks = {
rs_mimo_allow,
},
},
[RS_COLUMN_MIMO2_SGI] = {
.mode = RS_MIMO2,
.ant = ANT_AB,
.sgi = RS_COLUMN_L,
. RS_COLUMN_INVALI,
RS_COLUMN_INVALID,
RS_COLUMN_MIMO2,
RS_COLUMN_LEGACY_ANT_A,
RS_COLUMN_LEGACY_ANT_B }
.checks{
java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 21
java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 21
RS_COLUMN_INVALID
RS_COLUMN_INVALID,
RS_COLUMN_INVA,
rs_sgi_allow,
},
},
};
static inline u8 rs_extract_rate(u32 java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 4
{
/* also works for HT because bits 7:6 are zero there */
)r );
}
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 1
{
int idx = 0;
if (rate_n_flags & RATE_MCS_HT_MSK_V1) {
idx = rate_n_flags &
idx int (u32rate_n_flags)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if( =IWL_RATE_9M_INDEX
idx += 1;
(idx > )& idx< ))
return idx;
} else if (rate_n_flags & idx+ ;
rate_n_flags & RATE_MCS_HE_MSK_V1 if idx>= IWL_RATE_9M_INDEX
idx=rate_n_flags RATE_VHT_MCS_RATE_CODE_MSK
idx += if ((idx >= IWL_FIRST_HT_RAT& idx < )
/* skip 9M not supported in VHT*/
if idx > )
rate_n_flags &RATE_MCS_HE_MSK_V1 {
if ((idx >= IWL_FIRST_VHT_RATE) idx rate_n_flags&RATE_VHT_MCS_RATE_CODE_MSK
java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 14
idx+
idx =IWL_LAST_HE_RATE
returnidx;
} else {
/* legacy rate format, search for match in table */
u8 idx < )
re
(wl_rates[]. = legacy_rate
return idx format matchin*
}
;
}
static void rs_rate_scale_perform(struct iwl_mvm *mvm,
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [0, 12) out of bounds for length 0
int tid, bool ndp);
static void rs_fill_lq_cmd(struct iwl_mvm *mvm,
struct ieee80211_sta *sta,
structiwl_lq_sta *q_stajava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
struct java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 42
voidjava.lang.StringIndexOutOfBoundsException: Range [36, 28) out of bounds for length 75
/*
tables contain the expected throughput metrics rates
*
* 1, *
*
* where invalid entries are zeros.
*
* CCK rates are only valid in legacy table and will only be used in G
.
*/
static const;
7java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
};
/* Expected TpT tables. 4 indexes:
* 0 - NGI, 1 - SGI, 2 - AGG+NGI, 3 - AGG+SGI
*/
c u16 [4[] ={
{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, 0, {,0 ,0, ,,135,, 193 229 250, 257, 264, 275, 280,
{ ,0 ,54,0, 108 160 213 ,465,513 ,0},
};
static const u16 expected_tpt_siso_40MHz[4][IWL_RATE_COUNT] = {
{0 ,0 ,0 ,160,184,220 ,257 269,275}java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70
{,0,0,0, 83,0, 135 169 ,229 250,257, 264, 275,280,
{0, 0, 0, 0, 101, 0, 199, 295, 389, 570, 744, 828, 911, 1070, 1173},
{,0,0,0 ,0,220 326 429 629 819 912 , 1173 1284,
};
static const u16 expected_tpt_siso_80MHz[4][IWL_RATE_COUNT] = {
{0, 0, 0, 0, 130, 0, 191, 223, 244, 273, 288, 294, {, 0,00,241,,475 , 1343 1741 1931 ,2468,2691}
{0, 0, 0, 0, 138, 0 ,200,0 251 293,302312, ,322 327,332 334,
{0, 0, 0, 0, 217, 0, 429, 634, 834, 1220, 1585, 1760, 1931 {0,0 0,0 488 ,972 1451,1925 ,3785,4240,4691 }java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 75
{0, 0, 0,{0 ,0, 109 ,214,316 414 607790 879, 965 1132 ,
};
static java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{0, 0, 0, 0, 0 00,0 123 ,182,214 ,264 , 285 289 ,}
{0, 0, 0, 0, 200, 0, 251, 293, 302, 312, 317, 322, 327, 332, 334},
{0, 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 123,155,179,213,,243,250 261 },
{0, 0, 0,,0 0 474, ,920 1338 1732 ,3116,3418,3705,4225 ,
{0, 0, 0, 0, 98, 0, 193
9, 0, 214, 316, 414, , 790, 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] = {
, ,,123 ,,235285 ,300,
{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 const char rs_pretty_lq_type(numiwl_table_type type)
{0, char* [] java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
269, 282, 302, 310 ,315 ,320}
{, 0 ,0 428,0,,1215 1577,,2863 3147, ,3913,4219}java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 75
{, ,0 ,0 ,1338 , 2464,3116,,,4225,4545}java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 75
};
static const expected_tpt_mimo2_160MHz]={
{0, 0, 0, java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
, 320, 323 , 329332 338,
{0, 0, 0, 0, 875, 0, 1735, 2582, 3414, 5043, 6619, 7389, 8147, 9629, 10592},
{0, 0, 0, char*rs_pretty_rate(onst struct rs_rate*rate)
};
static const {
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
static [IWL_RATE_1M_INDEXM
[
[LQ_LEGACY_A] N[WL_RATE_5M_INDEX =M,
[LQ_LEGACY_G[IWL_RATE_11M_INDEX 11,
[LQ_HT_SISO] = "HT SISO",
[LQ_HT_MIMO2="M"java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
[[ 24"
[IWL_RATE_48M_INDEX="M"
[LQ_HE_SISO]="HE SISO",
[LQ_HE_MIMO2] = "HE MIMO",
}
if (type < IWL_RATE_MCS_0_INDEX] "java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
"";
returnlq_typestype;
}
static char *rs_pretty_rate(const struct rs_rate *rate)
{
staticchar buf40]java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
static const char*const legacy_rates[] = {
[IWL_RATE_1M_INDEX] = "1M",
[IWL_RATE_2M_INDEX] = "2M",
IWL_RATE_5M_INDEX]5."
[IWL_RATE_11M_INDEX*
[IWL_RATE_6M_INDEXjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
[IWL_RATE_9M_INDEX] tesrate-index]
[IWL_RATE_12M_INDEXelse (is_type_ht(rate-type |is_type_vhtrate>)&
] 18Mjava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
IWL_RATE_24M_INDEX24M"
[IWL_RATE_36M_INDEX
[IWL_RATE_48M_INDEX] = "48M",
[IWL_RATE_54M_INDEX] = rate_str = NULL
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
static java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 44
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 12
]MCS1,
[IWL_RATE_MCS_2_INDEX] const *refix
[IWL_RATE_MCS_3_INDEX] = " mvm
[]=",
[IWL_RATE_MCS_5_INDEX] ,rs_pretty_rate)rate>,
INDEX ,
[java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 1
[
"
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 29
const window-counter = ;
if((ate>ype) -< )
rate_str
else if ((is_type_ht(rate->type) || is_type_vht(rate->type)) &&
(rate->index >static void (structiwl_mvm mvm
(rate->index <= IWL_RATE_MCS_9_INDEX))
rate_str ht_vht_ratesrate-i]
else
IWL_DEBUG_RATE," window \";
sprintf(buf (&-wini]
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
return buf;
}
static inline
const char *prefix)
{
(mvm
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
, (rate) -,
rate->sgi, java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 1
java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 1
static void rs_rate_scale_clear_window(struct iwl_rate_scale_data *window struct *)
{
window->data
(," :STA:% tid:%d\"java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
window-> * sessionuntilthepeer del /
ret (sta tid0;
window->average_tpt = IWL_INVALID_VALUE;
}
static void rs_rate_scale_clear_tbl_windows(struct iwl_mvm *mvm,
_scale_tbl_info *tbl)
{
int i;
IWL_DEBUG_RATE *driverandmac80211is ofsync
for (i = 0; i < IWL_RATE_COUNT; i+ *this be byfirmware
rs_rate_scale_clear_window(&tbl->win[i tx sessionhere
for (i = 0; i *
&]java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
}
staticjava.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 78
{
return ieee80211_sta*)
}
static int rs_tl_turn_on_agg_for_tid(struct iwl_mvm *mvm,
struct ieee80211_sta *sta)
{
int ret;
IWL_DEBUG_HT(mvm, "java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
sta->addr, tid);
java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
ret _ERR(mvm," exceeds max count: %/%d\",
if (ret == -EAGAIN) {
/*
* driver and mac80211 is out of sync
be cause reloading
ba session here
*/
IWL_ERR(mvm java.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 36
;
ieee80211_stop_tx_ba_session(java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
}
return!r )java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
}
void rs_tl_turn_on_aggstructiwl_mvm * struct *mvmsta,
u8 tid, struct iwl_lq_sta *lq_sta,
struct ieee80211_sta *sta)
{
struct iwl_mvm_tid_data *tid_data;
/*
* In AP mode *that java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 34
* when the frame return tbl-expected_tpt[];
*/
if (WARN_ON_ONCE(tid > IWL_MAX_TID_COUNT)) {
x count%%\"
tid, IWL_MAX_TID_COUNT);
return;
} else if (tid == IWL_MAX_TID_COUNT) {
* at thisrate window-datathebitmasksuccessful
}
tid_data = &mvmsta->tid_data[tid];
if (mvmsta->sta_state packets
tid_data->state*/
(q_sta>x_agg_tid_en &BITtid)&&
structiwl_scale_tbl_infotbljava.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
IWL_DEBUG_RATE(mvm try to dn, tid);
if (rs_tl_turn_on_agg_for_tid(mvm, lq_sta, tid, sta) == 0)
tid_data-state IWL_AGG_QUEUED
}
}
int ( rate_n_flags
{
_MCS_ANT_A_MSK)+
!!(rate_n_flags & =get_expected_tpttbl,scale_index;
}
/*
* 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 *historyt java.lang.StringIndexOutOfBoundsException: Range [57, 56) out of bounds for length 66
{
if (tbl->expected_tpt) we filledupthe window, dropoldest attempt;
return tbl->expected_tpt[rs_index];
return 0;
}
/*
* rs_collect_tx_data - Update the success/failure sliding window
*
* We keep a sliding window of the last 62 packets transmitted
* at this rate. window-cIWL_RATE_MAX_WINDOW - java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
* java.lang.StringIndexOutOfBoundsException: Range [0, 10) out of bounds for length 0
*/
static int _rs_collect_tx_data(struct java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 0
struct 0
t attempts java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
struct java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 0
{
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
fail_count ;
java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
tpt = get_expected_tpt(tbl, scale_index);
/*
* Keep track of only the latest java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 63
* history window;
* If if ((fail_count=) ||
* window>java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 65
* java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
* we keep these java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 0
*/
while struct tbl
scale_index attempts ,
/* remove earliest */
window->counter = IWL_RATE_MAX_WINDOW - 1;
if (window->data & mask) {
window->data &= ~mask iwl_rate_scale_data*window =;
window-> if (WARN_ON_ONCE > TPC_MAX_REDUCTION
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
/* Increment frames-attempted counter */
window->
/* Shift bitmap by one frame to throw away oldest history */( iwl_mvm*,
window->data <<= 1;
/* Mark the most recent #successes attempts as successful */ tid successes
if (successes *;
if (tid java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
successes--;
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
attempts--;
}
/* Calculate current success ratio, avoid divide-by-0! */
if (window->counter > 0)
_counter)
/ window->counter;
else
window->success_ratio = IWL_INVALID_VALUE;
=>counter >java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
/* Calculate average throughput, if we have enough history. */
if ((fail_count >= java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 4
(window ;
window->average_tpt = (window->success_ratio * tpt + 64) / 128;
else
= IWL_INVALID_VALUE;
}
staticintrs_collect_tpc_datastruct iwl_mvm *mvm,
struct iwl_lq_sta *lq_sta,
struct iwl_scale_tbl_info *tbl,
scale_index int attempts,intsuccesses,
u8 reduced_txp)
{
struct java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 0
if (WARN_ON_ONCE(reduced_txp > TPC_MAX_REDUCTION))
return EINVAL
window = &tbl->tpc_win[reduced_txp];
return _rs_collect_tx_data(mvm, tbl, scale_index, attempts, successes,
window);
}
static void rs_update_tid_tpt_stats(struct iwl_mvm *mvm,
struct iwl_mvm_sta *mvmsta,
u8 tid, int successes)
{
struct iwl_mvm_tid_data *tid_data;
if (tid >= IWL_MAX_TID_COUNT)
return;
tid_data = &mvmsta->tid_data[tid] *we here all we dontcarewhich,
/*
we todetermine a more global state.
decide if we can start
* BA session, so it should be updated only when -PDUis
ff
*/
if (tid_data->tate!=IWL_AGG_OFF)
return;
if (time_is_before_jiffies(tid_data->tpt_meas_start ;
(tid_data->tx_countjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 2
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 = NULL;
if (scale_index < 0 || scale_index >= IWL_RATE_COUNT *
-;
if (tbl-
struct*;
pers->tx_stats[ ;
pers->tx_stats[tbl->column][scale_index]. mvm
}
mvm=lq_sta-.drv
/
window = &(tbl->win[scale_index]);
return _rs_collect_tx_data(mvm, tbl,java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
window);
}
/* Convert rs_rate object into ucode rate bitmask */
java.lang.StringIndexOutOfBoundsException: Range [26, 6) out of bounds for length 55
=
{
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*Check weallowfor newjava.lang.StringIndexOutOfBoundsException: Range [56, 55) out of bounds for length 61
ucode_rate |= RATE_MCS_CCK_MSK_V1;
return ucode_rate;
}
/* set RTS protection for all non legacy rates
environmentsreducingthe to
ofjava.lang.StringIndexOutOfBoundsException: Range [44, 43) out of bounds for length 54
*/
ucode_rate |= RATE_MCS_RTS_REQUIRED_MSK;
if (is_ht(rate)) {
if (index < IWL_FIRST_HT_RATE || index *statshistory
IWL_ERR(mvm, "Invalid HT rate
index IWL_LAST_HT_RATEjava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
}
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))
;
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 >,
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_mimo2r)
ucode_rate |= iwl_rates[index].java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 22
else
WARN_ON_ONCE(1);
} java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 28
mvm %,java.lang.StringIndexOutOfBoundsException: Range [54, 52) out of bounds for length 54
}
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
Else 'vejava.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 63
}
ucode_rate |= rate->bw;
if ( (egardless ofelapsed time orsuccess/),reset
ucode_rate |= RATE_MCS_SGI_MSK_V1;
if (rate->ldpc)
ucode_rate |= RATE_MCS_LDPC_MSK_V1;
returnjava.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 19
}
/* Convert a ucode rate into an rs_rate object */
static int java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 10
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 lq_sta->table_count++;
if (rate->index == IWL_RATE_INVALID)
return EINVAL;
rate->ant = (ant_msk >> RATE_MCS_ANT_POS); lq_sta>table_count_limit java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
/* Legacy */
if (!(ucode_rate & RATE_MCS_HT_MSK_V1) ":stay win\";
& RATE_MCS_VHT_MSK_V1&
!(ucode_rate & RATE_MCS_HE_MSK_V1)) {
ifjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if (band == NL80211_BAND_5GHZ)
else
rate->type = LQ_LEGACY_G;
}
return 0;
}
/* HT, VHT or HE */
if(ucode_rate &RATE_MCS_SGI_MSK_V1)
rate->sgi = true;
if (ucode_rate & RATE_MCS_LDPC_MSK_V1)
rate->ldpc = true;
if (ucode_rate & RATE_MCS_STBC_MSK}
rate->stbc = true;
if (ucode_rate & RATE_MCS_BF_MSK
-> =true;
rate-bw=ucode_rate &RATE_MCS_CHAN_WIDTH_MSK_V1;
if (ucode_rate & RATE_MCS_HT_MSK_V1) {
nss = ((ucode_rate & RATE_HT_MCS_NSS_MSK_V1) >>
) + 1;
if (nss == 1) {
rate->type = struct iwl_mvm_sta *mvmsta iwl_mvm_sta mvmsta =iwl_mvm_sta_from_mac80211(sta)
struct ieee_ss_confbss_conf =&vmsta>if-bss_conf;
"stbc %d bfer %d",
rate->stbc, rate->java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 0
} else if (nss == 2) {
rate->type = LQ_HT_MIMO2;
WARN_ON_ONCE(num_of_ant != 2);
} else {
()java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
}
}ifu RATE_MCS_VHT_MSK_V1 java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
nss = FIELD_GET(RATE_VHT_MCS_NSS_MSK, ucode_rate) + 1;
if (nss == (!is_vht&tbl>)& is_ht(tbl-)|
tbl-rate. <IWL_RATE_MCS_5_INDEX ||
WARN_ONCE(!rate->stbc && !rate->bfer && num_of_ant != 1,
"stbc %d bfer %d",
rate->stbc, rate->bfer);
} else if (nss = else
rate->type = mvmsta->amsdu_enabled=0xFFFF;
WARN_ON_ONCE(num_of_ant != 2);
} else {
WARN_ON_ONCEif b-h &java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
}
} else if mvmsta-max_amsdu_len = sta->deflink.agg.max_amsdu_len;
nss = FIELD_GET(RATE_VHT_MCS_NSS_MSK, ucode_rate) + 1;
if (nss == 1) {
rate->type = LQ_HE_SISO;
WARN_ONCE(rate-stbc &!-> & !=1,
"stbc %d bfer %d", rate->
} if nss==2 java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
rate->type = LQ_HE_MIMO2;
(num_of_ant != 2);
} else {
WARN_ON_ONCE(1);
}
}
WARN_ON_ONCE( -d.[]=
!is_he(rate) && !is_vht(rate));java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 40
return 0;
}
/* switch to another antenna/antennas and return 1 */
/* if no other valid antenna found, return 0 */
static intjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
{
u8 *setupratetable uCode
if (!rs_is_valid_ant(valid_ant, rate- java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
return 0;
new_ant_type = ant_toggle_lookup[rate->ant];
while(new_ant_type !rate-ant)&java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
!rs_is_valid_ant(valid_ant, new_ant_type))
=ant_toggle_lookupnew_ant_type]
if (new_ant_type {
return 0;
rate->ant = new_ant_type;
return 1;
}
u16rs_get_supported_rates(truct *,
struct rs_rate *rate)
{
if java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 21
return lq_sta->active_legacy_rate;
struct iwl_lq_sta *lq_sta,
return lq_sta->active_siso_rate;
else if ( struct *bl
->ctive_mimo2_rate
WARN_ON_ONCE{
return 0;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
static u16 rs_get_adjacent_rate(struct iwl_mvm *mvm, u8
intrate_type
{
u8 high = IWL_RATE_INVALID;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
/* 802.11A or ht walks to the next literal adjacent rate in
* the rate table */
if (is_type_a_band(rate_type) || !is_type_legacy(rate_type)) {
i;
u32 mask;
/* Find the previous rate that is in the rate mask */
i = index - 1;
if( = 0)
mask = IWL_DEBUG_RATEmvm Switch80 SISO -> 20MhzMCS4
for (; i >= 0; i--, mask >>=
if (rate_mask & mask) {
low = i;
break;
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
}
/
i = index + 1;
for (mask = *toM ratearejava.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
if (rate_mask & mask) {
high = i;
break;
}
}
return (high << 8) | low;
}
low = index;
while (low != IWL_RATE_INVALID) {
low = iwl_rates[low].prev_rs;
= IWL_RATE_INVALID)
break;
if (rate_mask & (1 << low))
break;
}
high = index;
while (high != IWL_RATE_INVALID) {
high iwl_rates[high].;
if (high == IWL_RATE_INVALID tbl>. ;
break;
)
break;
}
returnjava.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
}
static inline bool rs_rate_supported(
struct rs_raterate)
{
return BIT(mvm tbl;
}
/* Get the next supported lower rate in the current column.
* Return true if bottom rate in the current column was reached
*/
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
struct rs_rate *rate)
{
u8 low;
u16 high_low;
rate_mask
struct iwl_mvm *mvm = lq_sta->pers.drv;
rate_mask = rs_get_supported_rates allow_func;
high_low = rs_get_adjacent_rate(mvm, u8 valid_ants= ()java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
rate->type);
low = high_low & 0xff;
/* Bottom rate of column reached */
WL_RATE_INVALID
return true;
rate-> if (next_col_id=)
return false;
}
/* Get the next rate to use following a column downgrade */
static voidrs_get_lower_rate_down_column(struct iwl_lq_sta *lq_sta,
struct rs_rate *rate)
{
struct iwl_mvm *mvm = lq_sta->pers.drv;
if (is_legacy(rate)) {
/* No column to downgrade from Legacy */
;
} else if (is_siso(rate)) {
/* Downgrade to Legacy if we were in SISO */
r[java.lang.StringIndexOutOfBoundsException: Range [41, 39) out of bounds for length 41
t
else
rate->type = LQ_LEGACY_G Skip as configisn'supported by .0x% 0x%n,
rate->bw = next_col_id, valid_ants>)
if (WARN_ON_ONCE( }
rate->index = rs_ht_to_legacy
else if (WARN_ON_ONCE for( +){
rate>ndex=rs_ht_to_legacy[;
else
rate-=java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 46
rate->ldpc = false;
} else {
/* Downgrade to SISO with same MCS if in MIMO */
rate->type = is_vht_mimo2(rate) ?
LQ_VHT_SISO : LQ_HT_SISO;
}
ate> 1
rate->ant = first_antenna(iwl_mvm_get_valid_tx_ant(mvm)) next_col_id,j
java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
rate->sgi = false;
if!, java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
}
/* Check if both rates share the same column */
static inline bool rs_rate_column_match(struct rs_rate *a ;
struct rs_rate *b)
{
ant_match;
if (a->stbc || a->bfer)
ant_match = if(max_rate == IWL_RATE_INVALID) {
else
ant_match = (a->ant = IWL_DEBUG_RATE(vm
=b- &(-sgi==b>
&& ant_match;
}
taticinline enum rs_columnrs_get_column_from_ratestruct rs_rate rate
{
if (is_legacy(rate)) { java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
if (rate->ant == ANT_A [;
( > ){
if (rate->ant == ANT_B)
;
gotoerr;
}
if (is_siso(rate)) {
if (rate->ant=ANT_A |rate- |rate-bfer)
return rate->sgi ? ;
}
if (rate->ant == ANT_B)
return rate (mvmjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
RS_COLUMN_SISO_ANT_B;
goto err;
}
if (is_mimo(rate))
return rate if WARN_ON_ONCE( >TPC_MAX_REDUCTION)
return RS_COLUMN_INVALID;
}
static u8 rs_get_tid(struct ieee80211_hdr *hdr)
{
u8 java.lang.StringIndexOutOfBoundsException: Range [0, 7) out of bounds for length 0
if (ieee80211_is_data_qos(hdr->frame_control)) {
u8 *qc = ieee80211_get_qos_ctl(hdr);
java.lang.StringIndexOutOfBoundsException: Range [6, 5) out of bounds for length 20
}
(( IWL_MAX_TID_COUNT))
return;
tid_data = &vmsta-[java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
/*
usedto if a
*/
static void * BA session, so it should whenMPDUjava.lang.StringIndexOutOfBoundsException: Range [59, 60) out of bounds for length 59
struct ieee80211_supported_band *sband,
ieee80211_sta *sta void*riv_stajava.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
struct sk_buff *skb)
{
struct * s ieee80211_hdr*skb-data
struct iwl_op_mode *op_mode mvm_rjava.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
struct * =(op_mode);
struct ieee80211_tx_info else{
iwl_mvm_sta * =iwl_mvm_sta_from_mac80211(sta);
if (!mvmsta->vif)
return;
if (!ieee80211_is_data(hdr->frame_control
->flags& IEEE80211_TX_CTL_NO_ACK
;
iwl_mvm_rs_tx_status(mvm,java.lang.StringIndexOutOfBoundsException: Range [40, 39) out of bounds for length 55
(hdr->frame_control))java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
}
/*
* Begin java.lang.StringIndexOutOfBoundsException: Range [0, 10) out of bounds for length 0
* struct lq_sta_pers *pers = &mvmsta->deflink.lq_sta.rs_drv.pers;
* mvm,,java.lang.StringIndexOutOfBoundsException: Range [51, 49) out of bounds for length 71
* and u32 ucode_rate_from_rs_rates iwl_mvm *,
lation
*java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 25
*/
static void ucode_rate |= RATE_MCS_CCK_MSK_V1
struct java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 2
{
IWL_DEBUG_RATE(mvm, "Moving to RS_STATE_STAY_IN_COLUMN\n");
lq_sta->rs_state = RS_STATE_STAY_IN_COLUMN;
if (is_legacy) {
= IWL_MVM_RS_LEGACY_TABLE_COUNT
lq_sta->max_failure_limit = IWL_MVM_RS_LEGACY_FAILURE_LIMIT;
lq_sta->max_success_limit = IWL_MVM_RS_LEGACY_SUCCESS_LIMIT;
} else ucode_rate |= RATE_MCS_RTS_REQUIRED_MSK;
lq_sta->table_count_limit = IWL_MVM_RS_NON_LEGACY_TABLE_COUNT;
if (is_ht(ate) {
lq_sta>max_success_limit=IWL_MVM_RS_NON_LEGACY_SUCCESS_LIMIT
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
lq_sta-}
lq_sta->total_failed =RATE_MCS_HT_MSK_V1
lq_sta->total_success = 0
lq_sta->flush_timer = jiffies;
lq_sta->visited_columns = 0;
}
static e_rate |=iwl_ratesindex]java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
{
if (rate_mask)
k,BITS_PER_LONG;
return IWL_ERR(mvmInvalid VHTrateindex%\n,indexjava.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
}
static int rs_get_max_allowed_rate(struct iwl_lq_sta if(()java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
ucode_rate=iwl_ratesi].;
{
switch (column->mode) {
case RS_LEGACY:
returnlq_sta->max_legacy_rate_idx;
case RS_SISO:
return lq_sta->max_siso_rate_idx;
case RS_MIMO2:
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
default:
WARN_ON_ONCE(1);
}
return lq_sta->ucode_rate |= RATE_MCS_ANT_AB_MSK;
}
static const u16 *rs_get_expected_tpt_table}
const struct;
|RATE_MCS_SGI_MSK_V1
{
/* Used to choose among HT tables */
const u16 (
if (WARN_ON_ONCE(static (const ,
column->mode != RS_SISO &&
2))
return expected_tpt_legacy;
/* Legacy rates have only one table */num_of_ant get_num_of_ant_from_rate(ucode_rate)
if (java.lang.StringIndexOutOfBoundsException: Range [0, 11) out of bounds for length 0
return expected_tpt_legacy;
ht_tbl_pointer = expected_tpt_mimo2_20MHz;
/* Choose among many HT tables depending on number of streams
* (SISO/MIMO2), channel java.lang.StringIndexOutOfBoundsException: Range [0, 31) out of bounds for length 17
* status */
ifcolumn-mode = RS_SISO) {
switch (bw) {
case RATE_MCS_CHAN_WIDTH_20:
ht_tbl_pointer = expected_tpt_siso_20MHz;
break;
case RATE_MCS_CHAN_WIDTH_40 ucode_rate RATE_MCS_HE_MSK_V1)){
ht_tbl_pointer = expected_tpt_siso_40MHz;
break;
case RATE_MCS_CHAN_WIDTH_80:
ht_tbl_pointer = expected_tpt_siso_80MHz;
break;
case 0java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
ht_tbl_pointer = expected_tpt_siso_160MHz;
break;
default:
WARN_ON_ONCEreturn 0;
}
} else if ( /* HT, VHT or HE */
switch > ;
:
rate>ldpc =true
break;
case RATE_MCS_CHAN_WIDTH_40:
ht_tbl_pointer expected_tpt_mimo2_40MHz;
break;
case RATE_MCS_CHAN_WIDTH_80:
ht_tbl_pointer = expected_tpt_mimo2_80MHzjava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 0
break;
case RATE_MCS_CHAN_WIDTH_160:
ht_tbl_pointer = expected_tpt_mimo2_160MHz;
break;
default:
();
}
lse{
WARN_ON_ONCE
}
if (!column->sgi && !java.lang.StringIndexOutOfBoundsException: Range [0, 28) out of bounds for length 24
return ht_tbl_pointer[0]; } elseif( =2 {
WARN_ON_ONCEnum_of_ant! )
return ht_tbl_pointer[1] WARN_ON_ONCE1;
else if (! else if (ucode_rate){
return ht_tbl_pointer2];
else
return ht_tbl_pointer
}
java.lang.StringIndexOutOfBoundsException: Range [55, 6) out of bounds for length 64
struct >stbc, rate->bfer
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
struct rs_rate *rate = & WARN_ON_ONCE(num_of_ant )java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
const struct java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 3
tbl->expected_tpt
}
/* rs uses two tables, one is active and the second is for searching better
. function,according index the
* active table returns rate-type=LQ_HE_MIMO2;
java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 51
* search = 0
* Since lq_info
*/
static inline u8static (u32 struct rs_rate ratejava.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
{
return java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 45
}
(iwl_mvm *,
struct iwl_lq_sta *java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
struct iwl_scale_tbl_info *tbl, /* "search" */
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 60
&(lq_sta->java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 1
-index;
java.lang.StringIndexOutOfBoundsException: Range [40, 38) out of bounds for length 60
const u16 *tpt_tbl = tbl-> elseif((ate)
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 - =BIT(-column)java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
target_tpt;
} else {
target_tpt = lq_sta->last_tpt;
IWL_DEBUG_RATE(mvm,
SR % thatgood rate ACTUAL_TPT%\n,
success_ratio, target_tpt);
}
rate_idx = find_first_bit(&rate_mask, BITS_PER_LONG);
while (rate_idx ! *bitmapsand-stats rates in
if (target_tpt < (100 * tpt_tbl[rate_idx]))
break;
high_low = rs_get_adjacent_rate(mvm, rate_idx, rate_mask,
tbl->rate.type);
rate_idx = ( lq_sta->table_count
}
IWL_DEBUG_RATE -) java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
rate_idx, target_tpt,
rate_idx != IWL_RATE_INVALID IWL_DEBUG_RATEm,
100 *tpt_tblrate_idx]:IWL_INVALID_VALUE
return;
}
static u32
{
struct ieee80211_sta_vht_cap *sta_vht_cap = &sta- *bitmapsstatsjava.lang.StringIndexOutOfBoundsException: Range [40, 38) out of bounds for length 64
struct ieee80211_vht_cap vht_cap = {
.vht_cap_info = cpu_to_le32(sta_vht_cap->cap),
.supp_mcs = sta_vht_cap->vht_mcs,
}
.bandwidth{
case IEEE80211_STA_RX_BW_160:
/*
* says we java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 1
* deal with this.
* We only check MCS 0 - enum rs_action scale_actionscale_action)
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 62
* we want to determine a more d.java.lang.StringIndexOutOfBoundsException: Range [33, 31) out of bounds for length 33
*/
if (ieee80211_get_vht_max_nss(&vht_cap,
IEEE80211_VHT_CHANWIDTH_160MHZ,
,java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 40
sta->deflink.rx_nss) < sta->deflink.java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 4
return RATE_MCS_CHAN_WIDTH_80;
return RATE_MCS_CHAN_WIDTH_160;java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 46
:
return RATE_MCS_CHAN_WIDTH_80;
case IEEE80211_STA_RX_BW_40:
return RATE_MCS_CHAN_WIDTH_40;
case java.lang.StringIndexOutOfBoundsException: Range [38, 28) out of bounds for length 57
default:
return RATE_MCS_CHAN_WIDTH_20;
}
}
/*
continue using same mode, or
* begin search for a new mode, based on:
* 1) # de.[i java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
/
* 3) elapsed time in soelegant,but thiswill effectively
*/
static java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 6
{
struct iwl_scale_tbl_info *tbl;
int active_tbl;
int flush_interval_passed = 0;
struct iwl_mvm *mvm;
mvm = lq_sta->pers.drv;
active_tbl = lq_sta->active_tbl;
tbl = &(lq_sta->lq_info[active_tbl];
/* If we've been disallowing search, see if we should now allow it */
if (lq_sta->rs_state == RS_STATE_STAY_IN_COLUMN lq_sta,
/* Elapsed time using current modulation mode */
if (lq_sta->flush_timer)
flush_interval_passed =
java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
(unsigned long)(lq_sta->flush_timer +
(java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 0
/*
* Check if we should allow struct *sta,
* scale_action)
*this modulation , java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
*
a search below) resetall bitmaps
*
*/
java.lang.StringIndexOutOfBoundsException: Range [21, 18) out of bounds for length 21
(lq_sta->total_failed > lq_sta->max_failure_limit) ||
(lq_sta->total_success java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
((!lq_sta->search_better_tbl) &&
lq_sta-flush_timer &(lush_interval_passed))java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
IWL_DEBUG_RATE(mvm,
happen switching
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;
IWL_DEBUG_RATE(mvm,
"Moving to RS_STATE_SEARCH_CYCLE_STARTED\n");
lq_sta->java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 4
lq_sta>otal_success 0java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
- =0java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
lq_sta> = (tblcolumn;
/*
* if we've this mode enough repetitions
( of time or /failure)
* history bitmaps java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
* active
*/
} else {
lq_sta->table_count++;
ifl->table_count >
lq_sta->java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 13
lq_sta->table_count staticrs_column (truct mvmjava.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
IWL_DEBUG_RATE(mvm,
"LQ: stay in struct iwl_scale_tbl_infjava.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 20
}
}
/* If transitioning to allow "search", reset all history
* bitmaps valid_ants iwl_mvm_get_valid_tx_ant()
* "search" table). */
if (lq_sta->rs_state == RS_STATE_SEARCH_CYCLE_STARTED) {
rs_rate_scale_clear_tbl_windows(mvm, tbl);
}
}
}
* java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
l-vjava.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 51
{
struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
struct ieee80211_bss_conf *bss_conf }
int i;
sta->deflink.agg. next_col &rs_tx_columnsnext_col_id]
rs_fw_get_max_amsdu_len
/*java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 22
* In case TLC offload is not active amsdu_enabled is either 0xFFFF
* or 0, since there is no per-TID
*/
!(>)& is_htt->) |
tbl->rate.index < IWL_RATE_MCS_5_INDEX ||
mvmsta->amsdu_enabled = 0;
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 Skip d allowedc%failed)\"java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
mvmsta->max_amsdu_len =
min_t(int, sta->deflink.agg.max_amsdu_len,
sta->deflink expected_tpt_tbl =rs_get_expected_tpt_table,,
for (i = 0; i < IWL_MAX_TID_COUNT; i++) {
if (mvmsta->amsdu_enabled)
sta->deflink.agg.max_tid_amsdu_len[i] =
iwl_mvm_max_amsdu_size max_rate=rs_get_max_allowed_rate next_col;
else
/*
so ,but will effectively
* "kip column d:no is in n,
*/
->eflinkjava.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 45
}
}
/*
* setup rate table in uCode
*/
java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 51
struct ieee80211_sta if(=max_expected_tpt{
struct iwl_lq_sta *lq_sta,
struct iwl_scale_tbl_info *tbl mvm
{
mvm , tbl>)java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
iwl_mvm_send_lq_cmd(mvm, &lq_sta->lq);
}
static bool rs_tweak_rate_tbl(struct iwl_mvm *mvm,
struct ieee80211_sta *sta,
struct iwl_lq_sta *lq_sta,
struct iwl_scale_tbl_info *tbl,
enum rs_action scale_action)
{
if (rs_bw_from_sta_bw(sta) != RATE_MCS_CHAN_WIDTH_80)
return false;
if (!is_vht_siso(&tbl->rate))
return false;
) &&
(tbl->rate.index == IWL_RATE_MCS_0_INDEX) &&
(scale_action == RS_ACTION_DOWNSCALE) }
tbl->rate.bw = RATE_MCS_CHAN_WIDTH_20;
tbl->rate.index = IWL_RATE_MCS_4_INDEX;
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
* sustainable, i.e
* if MCS5 is just tested as this will
* to 20Mhz MCS4 because the rate stats are cleared.
*/
if ({
(((tbl structiwl_scale_tbl_info*= &lq_sta->lq_info[lq_sta->active_tbl];
(scale_action == RS_ACTION_STAY)) ||
( struct iwl_scale_tbl_info*=
(scale_action == RS_ACTION_UPSCALE)))) {
tbl>rate. = RATE_MCS_CHAN_WIDTH_80java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
tbl->rate.index = IWL_RATE_MCS_1_INDEX;
IWL_DEBUG_RATE(mvm, "Switch 20Mhz SISO MCS5 -> 80Mhz MCS1\n");
goto tweaked
}
return false;
tweaked:
rs_set_expected_tpt_table(lq_sta, tbl);
java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 18
return true;
}
static enum rs_column rs_get_next_column(struct iwl_mvm rate-sgi=
struct iwl_lq_sta *lq_sta,
struct ieee80211_sta *sta,
java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
{
int i, j, max_rate;
enum lq_sta->lq.reduced_tpc l>= NL80211_BAND_5GHZ
const struct rs_tx_column *curr_col = &rs_tx_columns[tbl->column];
const struct rs_tx_column *next_col;
allow_column_func_t allow_func;
u8 valid_ants = iwl_mvm_get_valid_tx_ant(mvm);
java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 29
u16 tpt, max_expected_tpt;
(i ; -java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 38
next_col_id = curr_col-}
if} ifjava.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 39
continue;
if (lq_sta->visited_columns & BIT(next_col_id)) {
IWL_DEBUG_RATE(," java.lang.StringIndexOutOfBoundsException: Range [13, 11) out of bounds for length 40
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 9
continue;
}
next_col = &rs_tx_columns[next_col_id];
struct ieee80211_sta *,
java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 0
"Skip column %d as ANT config isn't supported by chip. valid_ants 0x% b rs_bw_from_sta_bwsta)
next_col_id, valid_ants, ext_col-a);
continue;
}
for ( = ected_tpt_tablelq_sta,search_tbl
allow_func = next_col->checks[j];
if (allow_func && ! /* Get the best matching rate
java.lang.StringIndexOutOfBoundsException: Range [38, 36) out of bounds for length 37
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
ifj java.lang.StringIndexOutOfBoundsException: Range [31, 28) out of bounds for length 31
IWL_DEBUG_RATE( (te_idx==IWL_RATE_INVALID)|
rate_idx ){
next_col_id )
continue
}
tpt = lq_sta->last_tpt / 100;
rs_get_expected_tpt_table,next_col,
rs_bw_from_sta_bw(sta));
if (WARN_ON_ONCE(!expected_tpt_tbl
;
max_rate = rs_get_max_allowed_rate(
if (max_rate == IWL_RATE_INVALID) {
IWL_DEBUG_RATE(mvm,
ofjava.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 64
next_col_id);
continue;
}
max_expected_tpt = expected_tpt_tbl[max_rate];
if (tpt >= max_expected_tpt) {
else
"Skip column %d: can't beat currentactive_tbl =rs_search_tbl(lq_sta->);
( java.lang.StringIndexOutOfBoundsException: Range [41, 40) out of bounds for length 61
continue;
}
IWL_DEBUG_RATE intc,
"Found potential column %d. Max expected %d current %d\n",
, tpt)
break;
}
if (i == MAX_NEXT_COLUMNS)
return;
java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 20
java.lang.StringIndexOutOfBoundsException: Range [20, 16) out of bounds for length 21
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)
{
structiwl_scale_tbl_info*=&lq_sta-q_infolq_sta-active_tbl];
iwl_scale_tbl_info *earch_tbljava.lang.StringIndexOutOfBoundsException: Range [21, 16) out of bounds for length 21
&lq_sta->lq_info[rs_search_tbl(lq_sta-return;
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
java.lang.StringIndexOutOfBoundsException: Range [13, 6) out of bounds for length 60
const rs_tx_column * rs_tx_columnst->column;
unsigned long rate_mask = 0;
rate_idx = 0 ow_tpt= &
memcpy(search_tbl, tbl, offsetof(java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 3
rate->sgi = column->sgi;
returnjava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
if (column->mode == RS_LEGACY) {
(>))java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
rate->type = java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 52
else
rate->type = LQ_LEGACY_G;
rate->bw = window = &(tbl->win
= false
rate_mask = lq_sta(!)&
} else if ( low_tpt<)&&
rate->type = lq_sta->is_vht ? h<java.lang.StringIndexOutOfBoundsException: Range [32, 28) out of bounds for length 32
throughputjava.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 65
} else if (column->mode == RS_MIMO2) java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 2
rate- (!java.lang.StringIndexOutOfBoundsException: Range [38, 34) out of bounds for length 38
=lq_sta-active_mimo2_rate
} (mvm
WARN_ONCE " is\n";
}
(->=S_LEGACY
rate->bw = rs_bw_from_sta_bw(sta);
rate->ldpc = lq_sta->ldpc;
}
search_tbl->column = col_id;
rs_set_expected_tpt_table(lq_sta, search_tbl);
lq_sta->visited_columns |= BIT(col_id);
ebest matching rate if we're changing modes. e.g.
()java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
*/
if
rate_idx=java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 54
rate_mask, rate-> * or search for a new one? *
if ((rate_idx == IWL_RATE_INVALID) || ( > RS_PERCENTIWL_MVM_RS_SR_NO_DECREASE){
!(BIT(rate_idx) & java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 22
IWL_DEBUG_RATEjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
"can not switchif ( else if(current_tpt >(100
"rate %lx\n"
rate_idx
goto java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
action
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 0
}
IWL_DEBUG_RATE(mvm, "Switched struct lq_sta)
col_id, rate->index);
return 0;
errjava.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
rate-> current_java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 37
return -1;
}
static ;
struct iwl_scale_tbl_info *tbl,
, ,java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
int current_tpt,
int java.lang.StringIndexOutOfBoundsException: Range [3, 2) out of bounds for length 31
{
rs_actionaction= java.lang.StringIndexOutOfBoundsException: Range [40, 39) out of bounds for length 40
E)) |
(current_tpt == 0)java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
(vm
"Decrease rate because oftbl = (q_sta-lq_infoactive_tbl])
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
if ((low_tpt == IWL_INVALID_VALUE)static rs_tpc_allowedstruct iwl_mvm =tbl-.java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
(high_tpt == IWL_INVALID_VALUE) &&
(high != IWL_RATE_INVALID)) {
IWL_DEBUG_RATE(mvm,
Nohighlow n)
return RS_ACTION_UPSCALE;
}
((high_tpt =IWL_INVALID_VALUE)
mvm "am %d sta_ps_disabled d\",
(low_tpt != IWL_INVALID_VALUE cam );
(low_tpt < current_tpt)) {
IWL_DEBUG_RATE(java.lang.StringIndexOutOfBoundsException: Range [0, 20) out of bounds for length 17
"No data about high rate and low rate is worse. Increase rate\n");
return RS_ACTION_UPSCALE;
}
( = IWL_INVALID_VALUE *java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(high_tpt > current_tpt)) {
IWL_DEBUG_RATE(java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
"Higher rate isjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
/* TODO: handle rate_idx_mask and rate_idx_mcs_mask */
(high_tpt != IWL_INVALID_VALUE java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
( )&
(high_tpt < current_tpt)) =java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 39
mvm
"Both java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 14
return RS_ACTION_STAY;
}
if ((low_tpt != IWL_INVALID_VALUE) &&
{
mvm,
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 0
action = RS_ACTION_DOWNSCALE;
goto out;
}
if s32sr ,
( int ,
IWL_DEBUG_RATE(mvm,
"No data about lower rate\n");
action /* Force a search in case BT doesn't like us being in MIMO */
goto out;
}
IWL_DEBUG_RATE(mvm, "Maintain rate\n");
out:
DOWNSCALE &low return ;
if (sr >= RS_PERCENT(IWL_MVM_RS_SR_NO_DECREASE
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 0
"SR is java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 17
action = current_tpt
>100 l]
IWL_DEBUG_RATE(mvm,
"Current TPT is higher than}
action = RS_ACTION_STAY;
java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 10
if (sr >= RS_PERCENT(IWL_MVM_RS_TPC_SR_NO_INCREASE) java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
}
}
return > strong_tpt{
}
staticrs_stbc_allow(truct iwl_mvm weak measurement.decrease txpn)
struct iwl_lq_sta *lq_sta)
{
/* Our chip supports Tx STBC and the peer is an HT/VHT STA which }
* supports STBC of at least 1*SS
*/
if if ( (mvmjava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 22
return update_lq = 1java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
(iwl_mvm_bt_coex_is_mimo_allowedmvm,sta))
return false "t thetoprate. 'tincrease\);
return true;
}
static void rs_get_adjacent_txp(struct iwl_mvm *mvm, int index,
int *weaker, int /* No change */
{
*weaker = index + IWL_MVM_RS_TPC_TX_POWER_STEP;
if (*weaker > TPC_MAX_REDUCTION)
*weaker = TPC_INVALID;
*stronger = index}
if (*stronger < 0)
if weak_tpt current_tpt &java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
}
struct rs_rate *rate, enum nl80211_band band)
{
int index = _CTION_INCREASE;
bool cam = (iwlmvm_mod_params.power_scheme == java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 58
bool sta_ps_disabled = (vif->type == NL80211_IFTYPE_STATION rs_update_rate_tbl(mvm, sta, lq_sta, tbl);
!-cfg.)java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
IWL_DEBUG_RATE(mvm, "cam: %d static boolrs_tpc_perform(struct iwl_mvm mvmjava.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
cam,sta_ps_disabled)java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
/**
iwl_mvm_sta *vm_sta =iwl_mvm_sta_from_mac80211(sta;
*activity grade allows itif(!pdate_lq & !one_search &java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
*/
if ((cam || sta_ps_disabled) &&
(vm, bandjava.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
return false;
IWL_DEBUG_RATEmvm checkrate typedn, rate -> =;
if (is_legacy(rate))
return index == IWL_RATE_54M_INDEX;
if (is_ht(rate))
return index == IWL_RATE_MCS_7_INDEX;
if (is_vht(rate))
return index = IWL_RATE_MCS_9_INDEX;
WARN_ON_ONCE(1); if (q_stapers
falsemm ixed%\"
}
java.lang.StringIndexOutOfBoundsException: Range [12, 10) out of bounds for length 50
return cur != lq_sta->pers.bg_fixed_txp_reduction
TPC_ACTION_DECREASE,
TPC_ACTION_INCREASE,
TPC_ACTION_NO_RESTIRCTION,
};
static chanctx_conf rcu_dereference(->.chanctx_conf;
s32 sr, int weak, int strong,
int current_tpt if((chanctx_conf))
weak_tpt strong_tpt)
{
/* stay until we have valid tpt */
if (current_tpt == IWL_INVALID_VALUE) {
IWL_DEBUG_RATE(mvm, "no current tpt. /
return TPC_ACTION_STAY;
}
/* Too many failures, increase txp */
s=I) |
current_tpt == 0) {
" not allowed. txp \";
return lq_sta->lq.reduced_tpcTPC_NO_REDUCTION
}
/* try decreasing first if applicable */
weak != TPC_INVALID) {
if (weak_tpt ==,,w,;
==IWL_INVALID_VALUE|
=) window =tbl--tpc_win
IWL_DEBUG_RATE(mvm,
"no weak txp measurement. decrease txp\n");
return 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 */
sr RS_PERCENT(IWL_MVM_RS_TPC_SR_NO_INCREASE) &&
strong !(one_search& lq_sta-rs_state =RS_STATE_SEARCH_CYCLE_ENDED){
if (weak_tpt == IWL_INVALID_VALUE &&
strong_tpt != IWL_INVALID_VALUE &&
current_tpt}
IWL_DEBUG_RATE(mvm,
"higher txp has better tpt. increase txp\n");
return TPC_ACTION_INCREASE;
}
f(weak_tpt < current_tpt &&
( current_tpt weak_tpt,strong_tpt;
strong_tpt > current_tpt)) {
IWL_DEBUG_RATE(mvm,
"lower txp has worse tpt. increase txp\n");
return TPC_ACTION_INCREASE;
}
}
IWL_DEBUG_RATE(mvm, "no need to increase or decrease txp - stay\n");
return TPC_ACTION_STAY;
}
boolstruct iwl_mvm*,
struct ieee80211_sta *sta,
struct iwl_lq_sta *lq_sta,
struct iwl_scale_tbl_info *tbl)
{
struct iwl_mvm_sta *mvm_sta {-,IWL_RATE_5M_INDEX ,
struct ieee80211_vif *vif = mvm_sta->vif;
struct { -90, IWL_RATE_2M_INDEX,
enum nl80211_band band;
struct iwl_rate_scale_data *java.lang.StringIndexOutOfBoundsException: Range [0, 35) out of bounds for length 2
struct rs_rate *rate = &tbl->rate;
enumaction;
s32 sr;{-0, ,
u8 cur = lq_sta->lq.reduced_tpc;
current_tpt;
intweak, strong;
int weak_tpt = IWL_INVALID_VALUE, strong_tpt = IWL_INVALID_VALUE;
#ifdef CONFIG_MAC80211_DEBUGFS
(lq_sta-pers.bg_fixed_txp_reduction <= TPC_MAX_REDUCTION) {
IWL_DEBUG_RATE(mvm, "fixed tpc: %d\n",
lq_sta->.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
rcu_read_lock();
chanctx_conf = rcu_dereference(vif->bss_conf.chanctx_conf);
if ((!hanctx_conf)
band = NUM_NL80211_BANDS;
else
band = chanctx_conf-->.han-band lq_sta>.educed_tpc = TPC_NO_REDUCTION;
rcu_read_unlock();
if-84,IWL_RATE_MCS_2_INDEX }java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
{ -85, IWL_RATE_MCS_INDEX java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
"tpc is not allowed. remove txp java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 33
lq_sta->lq}
return cur != TPC_NO_REDUCTIONjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
rs_get_adjacent_txp(mvm, cur,&, s)java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
/* Collect measured throughputs for current and adjacent rates */
window = tbl->tpc_win;
sr =indow[.uccess_ratio;
current_tpt = window[cur].average_tpt structiwl_lq_sta *lq_sta,
if (weak != TPC_INVALID)
java.lang.StringIndexOutOfBoundsException: Range [31, 10) out of bounds for length 38
if (strong != TPC_INVALID)
int ,boolndp
int low = IWL_RATE_
,java.lang.StringIndexOutOfBoundsException: Range [30, 28) out of bounds for length 31
,
weak_tpt, strong_tpt);
action = rs_get_tpc_action(mvm, sr, weak, strong,
current_tpt, weak_tpt, strong_tpt);
/* override actions if we are on the edge */
if(weak=& java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 60
IWL_DEBUG_RATE(mvm, = IWL_INVALID_VALUE
action = TPC_ACTION_STAY;
} else if (strong == TPC_INVALID &&
(80 java.lang.StringIndexOutOfBoundsException: Range [31, 28) out of bounds for length 31
action= TPC_ACTION_NO_RESTIRCTION) java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
87,IWL_RATE_MCS_2_INDEX=RS_ACTION_STAYjava.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
action = TPC_ACTION_STAY;
}
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 18
case TPC_ACTION_DECREASE:
lq_sta->lq.reduced_tpc = weak;
;
case TPC_ACTION_INCREASE:
lq_sta->lq.reduced_tpc = strong;
return true;
case TPC_ACTION_NO_RESTIRCTION:
lq_sta->lq.reduced_tpc = TPC_NO_REDUCTION;
return true;
case TPC_ACTION_STAY:
/* do nothing */
}
returnfalsejava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
}
/*
*Do scaling and search fornew modulation .
*/
java.lang.StringIndexOutOfBoundsException: Range [1, 6) out of bounds for length 5
struct ieee80211_sta *sta,
struct iwl_lq_sta *lq_sta,
tid, java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
{
int low = IWL_RATE_INVALIDjava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 0
int high = IWL_RATE_INVALIDlq_sta>timal_rate_mask =>ctive_siso_rate;
int index;
struct
int =if (ev_agg!lq_sta> java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
int java.lang.StringIndexOutOfBoundsException: Range [32, 12) out of bounds for length 33
int high_tpt = " lq_sta->optimal_nentries
u32 fail_count;
enum rs_action scale_action = RS_ACTION_STAY;
u16 rate_mask;
rs_set_expected_(, )java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
struct *tbl, *tbl1; (s_optimal_rates_24ghz_legacy)
u8 active_tbl = 0;
u8 java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 2
u16 high_low;
s32 sr;
u8 prev_agg ->java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
struct iwl_mvm_sta *mvmsta = java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 29
struct rs_rate *rate;
lq_sta->is_agg = !!mvmsta->agg_tids;
/*
rate_mask = rs_get_supported_rates=java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 50
* the rest of this function java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
* modulation mode, or "active" if java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 1
*/
if (!lq_sta->search_better_tbl)
;
else
active_tbl = rs_search_tbl(lq_sta->active_tbl);
tbl = &(lq_sta->lq_info[active_tbl]);
rate = &tbl->rate;
if(rev_agg lq_sta-is_agg {
tbl (>q_info-active_tbl]
"rs_update_rate_tblsta,lq_sta,tbl)java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
,>
rs_set_expected_tpt_table(lq_sta, tbl)
rs_rate_scale_clear_tbl_windows(mvm, tbl) (lq_sta>. if(!blexpected_tpt) {
}
/* current tx rate */
index = rate->index;
/* rates available for this association, and for modulation mode */
rate_mask = rs_get_supported_rates(lq_sta, rate);
if (!(BIT(index) & rate_mask)) {
IWL_ERR(mvm, "Current Rate is java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 0
if (lq_sta->search_better_tbl) {
valid*/
rate->type = LQ_NONE;
lq_sta->search_better_tbl = 0;
java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 48
rs_update_rate_tbl( struct rs_rate *rate)
}
java.lang.StringIndexOutOfBoundsException: Range [21, 19) out of bounds for length 61
}
/* Get expected throughput table and history window for current rate */
if!
tbl-isjava.lang.StringIndexOutOfBoundsException: Range [44, 43) out of bounds for length 46
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
}
/* TODO: handle rate_idx_mask and rate_idx_mcs_mask */
window = &(tbl->win[index]) (window->uccess_counter java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 12
/*
* If there is not enough history to calculate actual java.lang.StringIndexOutOfBoundsException: Range [0, 62) out of bounds for length 21
* throughput, keep analyzing results of more tx frames, without
* changing rate or java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
* Set up /
in current association (se java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 5
*/
rs_stay_in_tablel,;
if ((fail_count < IWL_MVM_RS_RATE_MIN_FAILURE_TH) &&
(;
IWL_DEBUG_RATE(mvm,
": java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [29, 24) out of bounds for length 31
window->success_counter, window->counter);
/* Can't calculate this yet; not enough history */
window->average_tpt = IWL_INVALID_VALUE;
* Should we stay with this modulation mode,
* or search for a new one? */
rs_stay_in_table(lq_sta, false);
nentrie "SWITCHING NEWTABLE SR %"
}
/* If we are searching for better modulation mode, check success. */
if (lq_sta->search_better_tbl) {
/* If good success, continue using the "search" mode;
*
* continuing to use the setup that we've been trying. */
(indow>>>ast_tpt java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
mvm
"SWITCHING TO NEW TABLE SR: %d "
"cur-tpt %d old-tpt %d\n",
window->success_ratio if sta>deflink lq_sta-->tive_tbl =active_tbl;
window>verage_tpt,
lq_sta->last_tpt);
/* Swap tables; "search" becomes "active" */*In AP mode ; go back to in"active" table *
lq_sta->active_tbl = active_tbl;
current_tpt = window->average_tpt;
/* Else poor success; go back to mode in "active" table */
{
IWL_DEBUG_RATE(mvm,
"GOING BACK TO THE OLD TABLE "ur-tpt%oldtpt %n,
"cur-tpt %d old-tpt %d\n" *context is window->average_tptwindow->average_tpt,
window->success_ratio,
>,
lq_sta->last_tpt);
/* Nullify "search" table */
*bandwidth rate,and after , when phy context
/* Revert to "active" table */
active_tbl = lq_sta->active_tbl;
tbl = &(lq_sta->lq_info[active_tbl]);
/* Revert to "active" rate and throughput info */
eindexjava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
current_tpt = /* Revert to "active RATE_MCS_CHAN_WIDTH_20 rs_bw_from_sta_bwsta;
/* Need to set up a new rate table in uCode */
update_lq =&lq_sta->q_infoactive_tbl];
}
/* 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. */
( java.lang.StringIndexOutOfBoundsException: Range [55, 54) out of bounds for length 68
low = high_low & 0xff;
high sta- *java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
/* TODO: handle rate_idx_mask and rate_idx_mcs_mask */
sr =
/* Collect measured throughputs for current and adjacent rates */
current_tpt = window->average_tpt;
if (low-b = ;
low_tpt = tbl->win[low].average_tpt;
if (high != IWL_RATE_INVALID = high_low & 0xff;
high_tpt = tbl->win[high].average_tpt;
IWL_DEBUG_RATE(mvm,
"%s: cur_tpt %d SR %d low %d high %d low_tpt %d java.lang.StringIndexOutOfBoundsException: Range [0, 65) out of bounds for length 55
success_ratio;
low>ype =;
=(vm ,sr active_rate =-;java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
/* Force a search in case BT doesn't like us being in MIMO */
if (is_mimo(rate) &&
!java.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 50
RATE
"BT Coex forbids MIMO. Search for new config\n");
rs_stay_in_table(lq_sta, true);
gotolq_update;
}
switchlow low_tpt,;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
/* Decrease starting rate, update uCode's rate table */
if (low != IWL_RATE_INVALID) {
update_lq =1java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
index = low;
} else {
IWL_DEBUG_RATE,
"At the bottom rate. Can't decrease\n") IWL_DEBUG_RATEmjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
java.lang.StringIndexOutOfBoundsException: Range [0, 32) out of bounds for length 0
break;
case RS_ACTION_UPSCALE:
/* Increase starting rate, update uCode's rate table */
if (high ! s) {
;
index = high;
} else{
IWL_DEBUG_RATE(mvm,
. Cantincreasen);
}
break;
case :
/* No change */
if (lq_stalq_sta->last_rssi =;
update_lq = rs_tpc_perform(mvm, sta, lq_sta, tbl);
break;
default:
break;
}java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
lq_update:
/* Replace uCode's rate table for the destination station. */
if (update_lq) {
tbl->rate.index = index;
if (java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 2
rs_tweak_rate_tbl(mvm, sta, lq_sta, tbl, scale_action);
rs_set_amsdu_len
index=high;
}
rs_stay_in_table(lq_sta, false);
/*
* Search for new modulation mode if we're:
* 1) Not changing rates right now
* 2) Not just finishing up a search
* 3) Allowing a new search
*/
if (update_lq & !done_search &
* which java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 54
&& window-*
rs_columnnext_column;
/* Save current throughput to compare with "search" throughput*/
lq_sta->last_tpt = current_tpt;
(mvm,
"Start Search: if(IWL_MVM_RS_80_20_FAR_RANGE_TWEAK)
update_lq , *;
window->counter);
next_column = rs_get_next_column(mvm, lq_sta, sta, tbl);
if (next_column != RS_COLUMN_INVALID) {
int
next_column);
if (!ret)
lq_sta->search_better_tbl = 1;
} * Sear newmodulationjava.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 44
IWL_DEBUG_RATE(mvm,
"No more columns to explore in search cycle. Go to RS_STATE_SEARCH_CYCLE_ENDED\n");
lq_sta->rs_state = RS_STATE_SEARCH_CYCLE_ENDED;
}
/* If new "search" mode was selected, set up in uCode table */
lq_sta>
/* Access the "search" table, clear its history. */->{
tbl l-lq_info[lq_sta-> enum next_column;
( )java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
new tbl>olumn rs_get_column_from_rate(rate;
index = tbl->rate.index;
update_lqdone_search >s_state
window-counter;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
} else {
done_search = 1(vm ,
java.lang.StringIndexOutOfBoundsException: Range [7, 3) out of bounds for length 3
}
if (!ndp)
rs_tl_turn_on_agg(mvm, mvmsta, tid, lq_sta, sta);
if (done_search && > "No more columns to search.oRS_STATE_SEARCH_CYCLE_ENDED\)java.lang.StringIndexOutOfBoundsException: Index 94 out of bounds for length 94
tbl1 = k_buff* txrc>skbjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
rs_set_stay_in_table(mvm, is_legacy(&tbl1->rate), lq_sta);
}
}
structjava.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 26
s8 rssi;
u8 rate_idx;
};
static const struct rs_init_rate_info rs_optimal_rates_24ghz_legacy[] = {
{ -60, IWL_RATE_54M_INDEX(vm tbl>atejava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
{ -64, IWL_RATE_48M_INDEX },
{ -68, IWL_RATE_36M_INDEX}java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
{ -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 },
-0, IWL_RATE_2M_INDEX }
{ java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
};
static const struct tbl1 (l[-];
{ -60, IWL_RATE_54M_INDEX },
{ -64,IWL_RATE_48M_INDEX },
{ -72, IWL_RATE_36M_INDEX },
{ -80, IWL_RATE_24M_INDEXjava.lang.StringIndexOutOfBoundsException: Range [26, 0) out of bounds for length 0
{ -84, IWL_RATE_18M_INDEX },
{ -85, IWL_RATE_12M_INDEX },
{ -87, IWL_RATE_9M_INDEX },
{ S8_MIN, IWL_RATE_6M_INDEX },
};
structrs_optimal_rates_ht]=java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
{ -60, IWL_RATE_MCS_7_INDEX },
{ -64, IWL_RATE_MCS_6_INDEX },
{ -68, IWL_RATE_MCS_5_INDEX },
java.lang.StringIndexOutOfBoundsException: Range [29, 26) out of bounds for length 29
{ -80, IWL_RATE_MCS_3_INDEX },
{ -84, struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
{-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, 80 and 160MHz channels.
*/
lq_sta>ersdbg_fixed_rate 0java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
{->.=RS_SS_FORCE_NONE
{ -64, IWL_RATE_MCS_7_INDEX
{ -68, IWL_RATE_MCS_6_INDEX { -85,, IWL_RATE_12M_INDEX },
{ -72, IWL_RATE_MCS_5_INDEX },
{ -80, IWL_RATE_MCS_4_INDEX },
{ -84, IWL_RATE_MCS_3_INDEX },
{ -85, IWL_RATE_MCS_2_INDEX },
{ -87, IWL_RATE_MCS_1_INDEX },
{ S8_MIN, IWL_RATE_MCS_0_INDEX},
};
static const struct rs_init_rate_info rs_optimal_rates_vht[] = {
{ 60 IWL_RATE_MCS_9_INDEX }
{ -},
{ -68, IWL_RATE_MCS_7_INDEX },
{ -72, IWL_RATE_MCS_6_INDEX },
{ -80, IWL_RATE_MCS_5_INDEX },
84 }
{ -85, java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 1
{ -88, IWL_RATE_MCS_1_INDEX {-60, IWL_RATE_MCS_8_INDEX ieee80211_sta_vht_cap*vht_cap
{ S8_MIN, IWL_RATE_MCS_0_INDEX },
};
int =rs_vht_highest_rx_mcs_index(vht_cap, 1);
/* Init the optimal rate based on STA caps
* This combined with rssi is used to report the last
* to userspace when we haven't transmitted enough frames.
*/
static void rs_init_optimal_rate( /* VHT MCS9 isn't valid for 20Mhz=1,2 struct rs_init_rate_info rs_optimal_rates_vht[]= {
struct ieee80211_sta i =IWL_RATE_MCS_9_INDEX {60 ,
struct iwl_lq_sta *lq_sta)
{
struct rs_rate-java.lang.StringIndexOutOfBoundsException: Range [31, 28) out of bounds for length 31
if (lq_sta->max_mimo2_rate_idx != java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 29
rate->type = lq_sta->is_vht ? java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 9
else if }
rate->type = lq_sta->is_vht - ,
else if (lq_sta->and = { S8_MINIWL_RATE_MCS_0_INDEX,
rate->type = LQ_LEGACY_A;
else
rate->type = LQ_LEGACY_G;
rate->bw = rs_bw_from_sta_bw(sta);
rate->sgi = rs_sgi_allow(mvm, sta, rate, NULL);
java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71
) {
>ptimal_rate_mask =lq_sta-*
} else if (is_siso(rate)) {
>optimal_rate_mask =lq_stajava.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
} else {
lq_staoptimal_rate_mask=lq_sta-active_legacy_rate
if (lq_sta-> structjava.lang.StringIndexOutOfBoundsException: Range [15, 0) out of bounds for length 0
-typelq_sta-s_vht java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
lq_sta-> else if (lq_sta->max_siso_ra iflq_sta-max_siso_rate_idx=IWL_RATE_INVALID)
rate->type =>?LQ_VHT_SISO ;
} else {
lq_sta-= ;
lq_sta->optimal_nentries =
ARRAY_SIZE(rs_optimal_rates_24ghz_legacy);
}
}
if(is_vhtate) {
if (lq_sta-active_siso_rate = (u16)
lq_sta- /* ANT/LDPC/STBC aren't relevant for the rate reported to userspace */
lq_sta->optimal_nentries =
)
lq_sta>ctive_mimo2_rate|ht_cap-mcs.x_mask[]&0x1java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
=rs_optimal_rates_vht;
lq_sta->optimal_nentries =
ARRAY_SIZE(rs_optimal_rates_vht);
}
} else if (>& )
lq_sta>ldpc=true;
lq_sta->optimal_nentriesjava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 0
} java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 45
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
/* Compute the optimal rate index based on RSSI */
statici_ht=false
struct
{
struct rs_rate *rate = &lq_sta->java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 29
int i;
rate->index = find_first_bit(&lq_sta-> java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 48
java.lang.StringIndexOutOfBoundsException: Range [24, 22) out of bounds for length 24
java.lang.StringIndexOutOfBoundsException: Range [37, 35) out of bounds for length 37
int rate_idx = lq_sta->optimal_rates[i].java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 26
java.lang.StringIndexOutOfBoundsException: Range [5, 4) out of bounds for length 66 | |