mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-20 19:28:11 +07:00
rtl8723ae: Re-introduce the adaptive rate control
This re-introduces the function rtl8723e_dm_refresh_rate_adaptive_mask. This function was present in a previous version of the code base, it works just fine for me -- as long as it is not using stale data. Unlike the original version of this function it avoids using dm.undec_sm_pwdb when no beacon was received. Fixed a style nit in rtl8723e_dm_init_rate_adaptive_mask. Signed-off-by: Bernd Edlinger <bernd.edlinger@hotmail.de> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
5bb5385fbf
commit
28484b6b37
@ -673,7 +673,7 @@ void rtl8723e_dm_check_txpower_tracking(struct ieee80211_hw *hw)
|
||||
void rtl8723e_dm_init_rate_adaptive_mask(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rate_adaptive *p_ra = &(rtlpriv->ra);
|
||||
struct rate_adaptive *p_ra = &rtlpriv->ra;
|
||||
|
||||
p_ra->ratr_state = DM_RATR_STA_INIT;
|
||||
p_ra->pre_ratr_state = DM_RATR_STA_INIT;
|
||||
@ -685,6 +685,89 @@ void rtl8723e_dm_init_rate_adaptive_mask(struct ieee80211_hw *hw)
|
||||
|
||||
}
|
||||
|
||||
void rtl8723e_dm_refresh_rate_adaptive_mask(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
|
||||
struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
|
||||
struct rate_adaptive *p_ra = &rtlpriv->ra;
|
||||
u32 low_rssithresh_for_ra, high_rssithresh_for_ra;
|
||||
struct ieee80211_sta *sta = NULL;
|
||||
|
||||
if (is_hal_stop(rtlhal)) {
|
||||
RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD,
|
||||
" driver is going to unload\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!rtlpriv->dm.useramask) {
|
||||
RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD,
|
||||
" driver does not control rate adaptive mask\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (mac->link_state == MAC80211_LINKED &&
|
||||
mac->opmode == NL80211_IFTYPE_STATION) {
|
||||
switch (p_ra->pre_ratr_state) {
|
||||
case DM_RATR_STA_HIGH:
|
||||
high_rssithresh_for_ra = 50;
|
||||
low_rssithresh_for_ra = 20;
|
||||
break;
|
||||
case DM_RATR_STA_MIDDLE:
|
||||
high_rssithresh_for_ra = 55;
|
||||
low_rssithresh_for_ra = 20;
|
||||
break;
|
||||
case DM_RATR_STA_LOW:
|
||||
high_rssithresh_for_ra = 60;
|
||||
low_rssithresh_for_ra = 25;
|
||||
break;
|
||||
default:
|
||||
high_rssithresh_for_ra = 50;
|
||||
low_rssithresh_for_ra = 20;
|
||||
break;
|
||||
}
|
||||
|
||||
if (rtlpriv->link_info.bcn_rx_inperiod == 0)
|
||||
switch (p_ra->pre_ratr_state) {
|
||||
case DM_RATR_STA_HIGH:
|
||||
default:
|
||||
p_ra->ratr_state = DM_RATR_STA_MIDDLE;
|
||||
break;
|
||||
case DM_RATR_STA_MIDDLE:
|
||||
case DM_RATR_STA_LOW:
|
||||
p_ra->ratr_state = DM_RATR_STA_LOW;
|
||||
break;
|
||||
}
|
||||
else if (rtlpriv->dm.undec_sm_pwdb > high_rssithresh_for_ra)
|
||||
p_ra->ratr_state = DM_RATR_STA_HIGH;
|
||||
else if (rtlpriv->dm.undec_sm_pwdb > low_rssithresh_for_ra)
|
||||
p_ra->ratr_state = DM_RATR_STA_MIDDLE;
|
||||
else
|
||||
p_ra->ratr_state = DM_RATR_STA_LOW;
|
||||
|
||||
if (p_ra->pre_ratr_state != p_ra->ratr_state) {
|
||||
RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD,
|
||||
"RSSI = %ld\n",
|
||||
rtlpriv->dm.undec_sm_pwdb);
|
||||
RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD,
|
||||
"RSSI_LEVEL = %d\n", p_ra->ratr_state);
|
||||
RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD,
|
||||
"PreState = %d, CurState = %d\n",
|
||||
p_ra->pre_ratr_state, p_ra->ratr_state);
|
||||
|
||||
rcu_read_lock();
|
||||
sta = rtl_find_sta(hw, mac->bssid);
|
||||
if (sta)
|
||||
rtlpriv->cfg->ops->update_rate_tbl(hw, sta,
|
||||
p_ra->ratr_state,
|
||||
true);
|
||||
rcu_read_unlock();
|
||||
|
||||
p_ra->pre_ratr_state = p_ra->ratr_state;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void rtl8723e_dm_rf_saving(struct ieee80211_hw *hw, u8 bforce_in_normal)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
@ -834,7 +917,7 @@ void rtl8723e_dm_watchdog(struct ieee80211_hw *hw)
|
||||
rtl8723e_dm_dynamic_bb_powersaving(hw);
|
||||
rtl8723e_dm_dynamic_txpower(hw);
|
||||
rtl8723e_dm_check_txpower_tracking(hw);
|
||||
/* rtl92c_dm_refresh_rate_adaptive_mask(hw); */
|
||||
rtl8723e_dm_refresh_rate_adaptive_mask(hw);
|
||||
rtl8723e_dm_bt_coexist(hw);
|
||||
rtl8723e_dm_check_edca_turbo(hw);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user