rtlwifi: Add bw_update parameter for RA mask update.
authorPing-Ke Shih <pkshih@realtek.com>
Fri, 29 Sep 2017 19:47:59 +0000 (14:47 -0500)
committerKalle Valo <kvalo@codeaurora.org>
Fri, 13 Oct 2017 09:43:41 +0000 (12:43 +0300)
- Add new parameter "is_bw_update" to control if current bandwidth setting
  is updated to FW RA.
- After this commit, we keep the same setting as before.
- Later, bandwidth update in watchdog is changed to false for 8822BE.

Signed-off-by: Tsang-Shian Lin <thlin@realtek.com>
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Cc: Yan-Hsuan Chuang <yhchuang@realtek.com>
Cc: Birming Chiu <birming@realtek.com>
Cc: Shaofu <shaofu@realtek.com>
Cc: Steven Ting <steventing@realtek.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
26 files changed:
drivers/net/wireless/realtek/rtlwifi/base.c
drivers/net/wireless/realtek/rtlwifi/core.c
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/dm.c
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/hw.c
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/hw.h
drivers/net/wireless/realtek/rtlwifi/rtl8192ce/hw.c
drivers/net/wireless/realtek/rtlwifi/rtl8192ce/hw.h
drivers/net/wireless/realtek/rtlwifi/rtl8192cu/hw.c
drivers/net/wireless/realtek/rtlwifi/rtl8192cu/hw.h
drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c
drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.h
drivers/net/wireless/realtek/rtlwifi/rtl8192ee/dm.c
drivers/net/wireless/realtek/rtlwifi/rtl8192ee/hw.c
drivers/net/wireless/realtek/rtlwifi/rtl8192ee/hw.h
drivers/net/wireless/realtek/rtlwifi/rtl8192se/dm.c
drivers/net/wireless/realtek/rtlwifi/rtl8192se/hw.c
drivers/net/wireless/realtek/rtlwifi/rtl8192se/hw.h
drivers/net/wireless/realtek/rtlwifi/rtl8723ae/hw.c
drivers/net/wireless/realtek/rtlwifi/rtl8723ae/hw.h
drivers/net/wireless/realtek/rtlwifi/rtl8723be/dm.c
drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c
drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.h
drivers/net/wireless/realtek/rtlwifi/rtl8821ae/dm.c
drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c
drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.h
drivers/net/wireless/realtek/rtlwifi/wifi.h

index e28261bc2c27a37bf91c74dabde948608b895c4a..3a297c5551ed39b5760c73c30cfb14fafbb3bc16 100644 (file)
@@ -2286,7 +2286,7 @@ int rtl_send_smps_action(struct ieee80211_hw *hw,
                struct rtl_sta_info *sta_entry =
                        (struct rtl_sta_info *) sta->drv_priv;
                sta_entry->mimo_ps = smps;
-               /* rtlpriv->cfg->ops->update_rate_tbl(hw, sta, 0); */
+               /* rtlpriv->cfg->ops->update_rate_tbl(hw, sta, 0, true); */
 
                info->control.rates[0].idx = 0;
                info->band = hw->conf.chandef.chan->band;
index 294a6b43d1bce6490da944dad7d67a9262f2fc1d..015a8ec367031459dbed2a53f4d8be516cbe6a51 100644 (file)
@@ -946,7 +946,7 @@ static int rtl_op_sta_add(struct ieee80211_hw *hw,
                memcpy(sta_entry->mac_addr, sta->addr, ETH_ALEN);
                RT_TRACE(rtlpriv, COMP_MAC80211, DBG_DMESG,
                        "Add sta addr is %pM\n", sta->addr);
-               rtlpriv->cfg->ops->update_rate_tbl(hw, sta, 0);
+               rtlpriv->cfg->ops->update_rate_tbl(hw, sta, 0, true);
        }
 
        return 0;
@@ -1152,7 +1152,8 @@ static void rtl_op_bss_info_changed(struct ieee80211_hw *hw,
                        }
 
                        if (vif->type == NL80211_IFTYPE_STATION)
-                               rtlpriv->cfg->ops->update_rate_tbl(hw, sta, 0);
+                               rtlpriv->cfg->ops->update_rate_tbl(hw, sta, 0,
+                                                                  true);
                        rcu_read_unlock();
 
                        /* to avoid AP Disassociation caused by inactivity */
index f936a491371b718f7af492c5bd152add18afe19f..207411d1b015c1059bc3b4327d16d365ab1947c7 100644 (file)
@@ -1221,7 +1221,8 @@ static void rtl88e_dm_refresh_rate_adaptive_mask(struct ieee80211_hw *hw)
                        sta = rtl_find_sta(hw, mac->bssid);
                        if (sta)
                                rtlpriv->cfg->ops->update_rate_tbl(hw, sta,
-                                                                  p_ra->ratr_state);
+                                                       p_ra->ratr_state,
+                                                                  true);
                        rcu_read_unlock();
 
                        p_ra->pre_ratr_state = p_ra->ratr_state;
index 5b939935eb5669c0f20802710ff20c9462704efb..6fbf3df4947e2d8b47386af9bbf57a7664a79c79 100644 (file)
@@ -2077,7 +2077,7 @@ static void rtl88ee_update_hal_rate_table(struct ieee80211_hw *hw,
 }
 
 static void rtl88ee_update_hal_rate_mask(struct ieee80211_hw *hw,
-               struct ieee80211_sta *sta, u8 rssi_level)
+               struct ieee80211_sta *sta, u8 rssi_level, bool update_bw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_phy *rtlphy = &(rtlpriv->phy);
@@ -2208,12 +2208,12 @@ static void rtl88ee_update_hal_rate_mask(struct ieee80211_hw *hw,
 }
 
 void rtl88ee_update_hal_rate_tbl(struct ieee80211_hw *hw,
-               struct ieee80211_sta *sta, u8 rssi_level)
+               struct ieee80211_sta *sta, u8 rssi_level, bool update_bw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
        if (rtlpriv->dm.useramask)
-               rtl88ee_update_hal_rate_mask(hw, sta, rssi_level);
+               rtl88ee_update_hal_rate_mask(hw, sta, rssi_level, update_bw);
        else
                rtl88ee_update_hal_rate_table(hw, sta);
 }
index d38dbca3c19e8f4da02949d351ce28cd12f32e3a..719b78a3b7dbc52f0bb138f1120171eae2fa929c 100644 (file)
@@ -43,7 +43,8 @@ void rtl88ee_update_interrupt_mask(struct ieee80211_hw *hw,
                                   u32 add_msr, u32 rm_msr);
 void rtl88ee_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val);
 void rtl88ee_update_hal_rate_tbl(struct ieee80211_hw *hw,
-                                struct ieee80211_sta *sta, u8 rssi_level);
+                                struct ieee80211_sta *sta, u8 rssi_level,
+                                bool update_bw);
 void rtl88ee_update_channel_access_setting(struct ieee80211_hw *hw);
 bool rtl88ee_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 *valid);
 void rtl88ee_enable_hw_security_config(struct ieee80211_hw *hw);
index 9956026bae0ad098308d873a754904b8ce9023a7..9310fad69cd9ae4f53b5d1fd126bbbdc95608881 100644 (file)
@@ -1865,7 +1865,7 @@ static void rtl92ce_update_hal_rate_table(struct ieee80211_hw *hw,
 }
 
 static void rtl92ce_update_hal_rate_mask(struct ieee80211_hw *hw,
-               struct ieee80211_sta *sta, u8 rssi_level)
+               struct ieee80211_sta *sta, u8 rssi_level, bool update_bw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_phy *rtlphy = &(rtlpriv->phy);
@@ -1995,12 +1995,12 @@ static void rtl92ce_update_hal_rate_mask(struct ieee80211_hw *hw,
 }
 
 void rtl92ce_update_hal_rate_tbl(struct ieee80211_hw *hw,
-               struct ieee80211_sta *sta, u8 rssi_level)
+               struct ieee80211_sta *sta, u8 rssi_level, bool update_bw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
        if (rtlpriv->dm.useramask)
-               rtl92ce_update_hal_rate_mask(hw, sta, rssi_level);
+               rtl92ce_update_hal_rate_mask(hw, sta, rssi_level, update_bw);
        else
                rtl92ce_update_hal_rate_table(hw, sta);
 }
index 877f138a0cb93b184514be2b79896ccba4e808fa..7683c5dfe8515d8a698c162fe8e8966fcbc77dfa 100644 (file)
@@ -56,9 +56,8 @@ void rtl92ce_update_interrupt_mask(struct ieee80211_hw *hw,
                                   u32 add_msr, u32 rm_msr);
 void rtl92ce_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val);
 void rtl92ce_update_hal_rate_tbl(struct ieee80211_hw *hw,
-                                struct ieee80211_sta *sta, u8 rssi_level);
-void rtl92ce_update_hal_rate_tbl(struct ieee80211_hw *hw,
-                                struct ieee80211_sta *sta, u8 rssi_level);
+                                struct ieee80211_sta *sta, u8 rssi_level,
+                                bool update_bw);
 void rtl92ce_update_channel_access_setting(struct ieee80211_hw *hw);
 bool rtl92ce_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 *valid);
 void rtl92ce_enable_hw_security_config(struct ieee80211_hw *hw);
index 530e80f0ef0b7cda023237559757b718f72a102f..1e60f70481f58c1c9b8aa262424cb9b56f470c05 100644 (file)
@@ -2006,7 +2006,7 @@ static void rtl92cu_update_hal_rate_table(struct ieee80211_hw *hw,
 
 static void rtl92cu_update_hal_rate_mask(struct ieee80211_hw *hw,
                                         struct ieee80211_sta *sta,
-                                        u8 rssi_level)
+                                        u8 rssi_level, bool update_bw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_phy *rtlphy = &(rtlpriv->phy);
@@ -2153,12 +2153,12 @@ static void rtl92cu_update_hal_rate_mask(struct ieee80211_hw *hw,
 
 void rtl92cu_update_hal_rate_tbl(struct ieee80211_hw *hw,
                                 struct ieee80211_sta *sta,
-                                u8 rssi_level)
+                                u8 rssi_level, bool update_bw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
        if (rtlpriv->dm.useramask)
-               rtl92cu_update_hal_rate_mask(hw, sta, rssi_level);
+               rtl92cu_update_hal_rate_mask(hw, sta, rssi_level, update_bw);
        else
                rtl92cu_update_hal_rate_table(hw, sta);
 }
index 932f056f7ef872576485d7767c73b13b93497a4f..ebd168400d455e4c371e14cabcac1d7e9846f1d4 100644 (file)
@@ -104,6 +104,6 @@ void rtl92c_fill_h2c_cmd(struct ieee80211_hw *hw,
 bool rtl92cu_phy_mac_config(struct ieee80211_hw *hw);
 void rtl92cu_update_hal_rate_tbl(struct ieee80211_hw *hw,
                                 struct ieee80211_sta *sta,
-                                u8 rssi_level);
+                                u8 rssi_level, bool update_bw);
 
 #endif
index cf28d25c551ff58e20d017c4aef2b2575055747d..5a67f85fa16537e9a0ce188fba966c217164ebfc 100644 (file)
@@ -1897,7 +1897,7 @@ static void rtl92de_update_hal_rate_table(struct ieee80211_hw *hw,
 }
 
 static void rtl92de_update_hal_rate_mask(struct ieee80211_hw *hw,
-               struct ieee80211_sta *sta, u8 rssi_level)
+               struct ieee80211_sta *sta, u8 rssi_level, bool update_bw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_phy *rtlphy = &(rtlpriv->phy);
@@ -2033,12 +2033,12 @@ static void rtl92de_update_hal_rate_mask(struct ieee80211_hw *hw,
 }
 
 void rtl92de_update_hal_rate_tbl(struct ieee80211_hw *hw,
-               struct ieee80211_sta *sta, u8 rssi_level)
+               struct ieee80211_sta *sta, u8 rssi_level, bool update_bw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
        if (rtlpriv->dm.useramask)
-               rtl92de_update_hal_rate_mask(hw, sta, rssi_level);
+               rtl92de_update_hal_rate_mask(hw, sta, rssi_level, update_bw);
        else
                rtl92de_update_hal_rate_table(hw, sta);
 }
index 24b03b9999bed70b31f5affcffb379e20364f6c0..85c565b86ae38c061f96279ad4213f354a3d9bb9 100644 (file)
@@ -43,7 +43,8 @@ void rtl92de_update_interrupt_mask(struct ieee80211_hw *hw,
                                   u32 add_msr, u32 rm_msr);
 void rtl92de_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val);
 void rtl92de_update_hal_rate_tbl(struct ieee80211_hw *hw,
-                                struct ieee80211_sta *sta, u8 rssi_level);
+                                struct ieee80211_sta *sta, u8 rssi_level,
+                                bool update_bw);
 void rtl92de_update_channel_access_setting(struct ieee80211_hw *hw);
 bool rtl92de_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 *valid);
 void rtl92de_enable_hw_security_config(struct ieee80211_hw *hw);
index e6b5786c7d4aad69236ab138ce8a0ef4c4d6cbf6..faed6e2dedf6eb0a79ca8df162e02151df180520 100644 (file)
@@ -1039,7 +1039,8 @@ static void rtl92ee_dm_refresh_rate_adaptive_mask(struct ieee80211_hw *hw)
                        sta = rtl_find_sta(hw, mac->bssid);
                        if (sta)
                                rtlpriv->cfg->ops->update_rate_tbl(hw, sta,
-                                                             p_ra->ratr_state);
+                                                             p_ra->ratr_state,
+                                                             true);
                        rcu_read_unlock();
 
                        p_ra->pre_ratr_state = p_ra->ratr_state;
index 6b0d42a93971a673f69d2a2890fc92fc20302f90..6fc3090c4b7208ac94c59aba0d043a7446f32881 100644 (file)
@@ -2270,7 +2270,7 @@ static u8 _rtl92ee_mrate_idx_to_arfr_id(struct ieee80211_hw *hw, u8 rate_index)
 
 static void rtl92ee_update_hal_rate_mask(struct ieee80211_hw *hw,
                                         struct ieee80211_sta *sta,
-                                        u8 rssi_level)
+                                        u8 rssi_level, bool update_bw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_phy *rtlphy = &rtlpriv->phy;
@@ -2389,7 +2389,7 @@ static void rtl92ee_update_hal_rate_mask(struct ieee80211_hw *hw,
                                       (ratr_index << 28);
        rate_mask[0] = macid;
        rate_mask[1] = ratr_index | (b_shortgi ? 0x80 : 0x00);
-       rate_mask[2] = curtxbw_40mhz;
+       rate_mask[2] = curtxbw_40mhz | ((!update_bw) << 3);
        rate_mask[3] = (u8)(ratr_bitmap & 0x000000ff);
        rate_mask[4] = (u8)((ratr_bitmap & 0x0000ff00) >> 8);
        rate_mask[5] = (u8)((ratr_bitmap & 0x00ff0000) >> 16);
@@ -2404,12 +2404,13 @@ static void rtl92ee_update_hal_rate_mask(struct ieee80211_hw *hw,
 }
 
 void rtl92ee_update_hal_rate_tbl(struct ieee80211_hw *hw,
-                                struct ieee80211_sta *sta, u8 rssi_level)
+                                struct ieee80211_sta *sta, u8 rssi_level,
+                                bool update_bw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
        if (rtlpriv->dm.useramask)
-               rtl92ee_update_hal_rate_mask(hw, sta, rssi_level);
+               rtl92ee_update_hal_rate_mask(hw, sta, rssi_level, update_bw);
 }
 
 void rtl92ee_update_channel_access_setting(struct ieee80211_hw *hw)
index 05413f1896855b7f553400d4d7ecbf722d883e7f..cd6aeb44b9961218a374409df12ce2314a32f7ed 100644 (file)
@@ -43,7 +43,8 @@ void rtl92ee_update_interrupt_mask(struct ieee80211_hw *hw,
                                   u32 add_msr, u32 rm_msr);
 void rtl92ee_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val);
 void rtl92ee_update_hal_rate_tbl(struct ieee80211_hw *hw,
-                                struct ieee80211_sta *sta, u8 rssi_level);
+                                struct ieee80211_sta *sta, u8 rssi_level,
+                                bool update_bw);
 void rtl92ee_update_channel_access_setting(struct ieee80211_hw *hw);
 bool rtl92ee_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 *valid);
 void rtl92ee_enable_hw_security_config(struct ieee80211_hw *hw);
index 2c073a77b194814c0e07864d652466f4a2bad83d..44f510a94b09cc66dce12c5470ac094c029edaa8 100644 (file)
@@ -295,7 +295,8 @@ static void _rtl92s_dm_refresh_rateadaptive_mask(struct ieee80211_hw *hw)
                        sta = rtl_find_sta(hw, mac->bssid);
                        if (sta)
                                rtlpriv->cfg->ops->update_rate_tbl(hw, sta,
-                                                          ra->ratr_state);
+                                                          ra->ratr_state,
+                                                          true);
                        rcu_read_unlock();
 
                        ra->pre_ratr_state = ra->ratr_state;
index ba1bd782238b62273432e2aeeb83ea61d212d2d0..66be79ca424724ef93485c06647db2787765ca11 100644 (file)
@@ -2129,7 +2129,7 @@ static void rtl92se_update_hal_rate_table(struct ieee80211_hw *hw,
 
 static void rtl92se_update_hal_rate_mask(struct ieee80211_hw *hw,
                                         struct ieee80211_sta *sta,
-                                        u8 rssi_level)
+                                        u8 rssi_level, bool update_bw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_phy *rtlphy = &(rtlpriv->phy);
@@ -2288,12 +2288,12 @@ static void rtl92se_update_hal_rate_mask(struct ieee80211_hw *hw,
 }
 
 void rtl92se_update_hal_rate_tbl(struct ieee80211_hw *hw,
-               struct ieee80211_sta *sta, u8 rssi_level)
+               struct ieee80211_sta *sta, u8 rssi_level, bool update_bw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
        if (rtlpriv->dm.useramask)
-               rtl92se_update_hal_rate_mask(hw, sta, rssi_level);
+               rtl92se_update_hal_rate_mask(hw, sta, rssi_level, update_bw);
        else
                rtl92se_update_hal_rate_table(hw, sta);
 }
index 86bce1be83ce8412572969f71854057721ad74e7..3c93d30fcae7b1dee2f0448689c65964eab39947 100644 (file)
@@ -59,7 +59,7 @@ void rtl92se_update_interrupt_mask(struct ieee80211_hw *hw,
 void rtl92se_set_hw_reg(struct ieee80211_hw *hw, u8 variable,
                        u8 *val);
 void rtl92se_update_hal_rate_tbl(struct ieee80211_hw *hw,
-               struct ieee80211_sta *sta, u8 rssi_level);
+               struct ieee80211_sta *sta, u8 rssi_level, bool update_bw);
 void rtl92se_update_channel_access_setting(struct ieee80211_hw *hw);
 bool rtl92se_gpio_radio_on_off_checking(struct ieee80211_hw *hw,
                                        u8 *valid);
index 5ac7b815648a818778be12b2e5c927681c883ee9..4c07f03b4ec1ae482c42840796e09b5c49e7d1aa 100644 (file)
@@ -1943,7 +1943,7 @@ static void rtl8723e_update_hal_rate_table(struct ieee80211_hw *hw,
 
 static void rtl8723e_update_hal_rate_mask(struct ieee80211_hw *hw,
                                          struct ieee80211_sta *sta,
-                                         u8 rssi_level)
+                                         u8 rssi_level, bool update_bw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_phy *rtlphy = &(rtlpriv->phy);
@@ -2074,12 +2074,13 @@ static void rtl8723e_update_hal_rate_mask(struct ieee80211_hw *hw,
 }
 
 void rtl8723e_update_hal_rate_tbl(struct ieee80211_hw *hw,
-                                 struct ieee80211_sta *sta, u8 rssi_level)
+                                 struct ieee80211_sta *sta, u8 rssi_level,
+                                 bool update_bw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
        if (rtlpriv->dm.useramask)
-               rtl8723e_update_hal_rate_mask(hw, sta, rssi_level);
+               rtl8723e_update_hal_rate_mask(hw, sta, rssi_level, update_bw);
        else
                rtl8723e_update_hal_rate_table(hw, sta);
 }
index 32c1ace97c3f0b6146a20bea56b3f1a18ec410cd..1e7063105c96cd65d35787a5c31dce9b1f629269 100644 (file)
@@ -49,7 +49,8 @@ void rtl8723e_update_interrupt_mask(struct ieee80211_hw *hw,
                                    u32 add_msr, u32 rm_msr);
 void rtl8723e_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val);
 void rtl8723e_update_hal_rate_tbl(struct ieee80211_hw *hw,
-                                 struct ieee80211_sta *sta, u8 rssi_level);
+                                 struct ieee80211_sta *sta, u8 rssi_level,
+                                 bool update_bw);
 void rtl8723e_update_channel_access_setting(struct ieee80211_hw *hw);
 bool rtl8723e_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 *valid);
 void rtl8723e_enable_hw_security_config(struct ieee80211_hw *hw);
index 15c117e95a9933eea24a16d8937f7ee451c1f97d..47e87a21ae274e3b79786744b335c8fa470cb408 100644 (file)
@@ -984,7 +984,8 @@ static void rtl8723be_dm_refresh_rate_adaptive_mask(struct ieee80211_hw *hw)
                        sta = rtl_find_sta(hw, mac->bssid);
                        if (sta)
                                rtlpriv->cfg->ops->update_rate_tbl(hw, sta,
-                                                          p_ra->ratr_state);
+                                                          p_ra->ratr_state,
+                                                          true);
                        rcu_read_unlock();
 
                        p_ra->pre_ratr_state = p_ra->ratr_state;
index d79130d85ca3b0bf662a354b3256f4009cc2199c..6f622b12ba439b183713e5af2deba42715663c3c 100644 (file)
@@ -2325,7 +2325,7 @@ static u8 _rtl8723be_mrate_idx_to_arfr_id(struct ieee80211_hw *hw,
 
 static void rtl8723be_update_hal_rate_mask(struct ieee80211_hw *hw,
                                           struct ieee80211_sta *sta,
-                                          u8 rssi_level)
+                                          u8 rssi_level, bool update_bw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_phy *rtlphy = &(rtlpriv->phy);
@@ -2441,7 +2441,7 @@ static void rtl8723be_update_hal_rate_mask(struct ieee80211_hw *hw,
        rate_mask[0] = macid;
        rate_mask[1] = _rtl8723be_mrate_idx_to_arfr_id(hw, ratr_index) |
                                                      (shortgi ? 0x80 : 0x00);
-       rate_mask[2] = curtxbw_40mhz;
+       rate_mask[2] = curtxbw_40mhz | ((!update_bw) << 3);
 
        rate_mask[3] = (u8)(ratr_bitmap & 0x000000ff);
        rate_mask[4] = (u8)((ratr_bitmap & 0x0000ff00) >> 8);
@@ -2461,11 +2461,11 @@ static void rtl8723be_update_hal_rate_mask(struct ieee80211_hw *hw,
 
 void rtl8723be_update_hal_rate_tbl(struct ieee80211_hw *hw,
                                   struct ieee80211_sta *sta,
-                                  u8 rssi_level)
+                                  u8 rssi_level, bool update_bw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        if (rtlpriv->dm.useramask)
-               rtl8723be_update_hal_rate_mask(hw, sta, rssi_level);
+               rtl8723be_update_hal_rate_mask(hw, sta, rssi_level, update_bw);
 }
 
 void rtl8723be_update_channel_access_setting(struct ieee80211_hw *hw)
index eae863d08de832b825ef639eaf601b4728a8ba3b..54d7afa7297e9d36ec2f2c8a916dadda79d5e3ec 100644 (file)
@@ -46,7 +46,7 @@ void rtl8723be_update_interrupt_mask(struct ieee80211_hw *hw,
 void rtl8723be_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val);
 void rtl8723be_update_hal_rate_tbl(struct ieee80211_hw *hw,
                                   struct ieee80211_sta *sta,
-                                  u8 rssi_level);
+                                  u8 rssi_level, bool update_bw);
 void rtl8723be_update_channel_access_setting(struct ieee80211_hw *hw);
 bool rtl8723be_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 *valid);
 void rtl8723be_enable_hw_security_config(struct ieee80211_hw *hw);
index 32900c51f024aa6192468fecb7c79984bd6b3f68..b11365a5ee1f23f783ec0d9741db94e440e1a9e4 100644 (file)
@@ -2592,7 +2592,7 @@ static void rtl8821ae_dm_refresh_rate_adaptive_mask(struct ieee80211_hw *hw)
                        sta = rtl_find_sta(hw, mac->bssid);
                        if (sta)
                                rtlpriv->cfg->ops->update_rate_tbl(hw,
-                                               sta, p_ra->ratr_state);
+                                               sta, p_ra->ratr_state, true);
                        rcu_read_unlock();
 
                        p_ra->pre_ratr_state = p_ra->ratr_state;
index dd41bdaf51f741aa99cec7cc7220541deddf47a8..bffd7553c5e67d4d2703c2523474ab22904711f7 100644 (file)
@@ -3599,7 +3599,7 @@ static bool _rtl8821ae_get_ra_shortgi(struct ieee80211_hw *hw, struct ieee80211_
 }
 
 static void rtl8821ae_update_hal_rate_mask(struct ieee80211_hw *hw,
-               struct ieee80211_sta *sta, u8 rssi_level)
+               struct ieee80211_sta *sta, u8 rssi_level, bool update_bw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_phy *rtlphy = &rtlpriv->phy;
@@ -3778,7 +3778,7 @@ static void rtl8821ae_update_hal_rate_mask(struct ieee80211_hw *hw,
 
        rate_mask[0] = macid;
        rate_mask[1] = ratr_index | (b_shortgi ? 0x80 : 0x00);
-       rate_mask[2] = rtlphy->current_chan_bw
+       rate_mask[2] = rtlphy->current_chan_bw | ((!update_bw) << 3)
                           | _rtl8821ae_get_vht_eni(wirelessmode, ratr_bitmap)
                           | _rtl8821ae_get_ra_ldpc(hw, macid, sta_entry, wirelessmode);
 
@@ -3799,11 +3799,11 @@ static void rtl8821ae_update_hal_rate_mask(struct ieee80211_hw *hw,
 }
 
 void rtl8821ae_update_hal_rate_tbl(struct ieee80211_hw *hw,
-               struct ieee80211_sta *sta, u8 rssi_level)
+               struct ieee80211_sta *sta, u8 rssi_level, bool update_bw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        if (rtlpriv->dm.useramask)
-               rtl8821ae_update_hal_rate_mask(hw, sta, rssi_level);
+               rtl8821ae_update_hal_rate_mask(hw, sta, rssi_level, update_bw);
        else
                /*RT_TRACE(rtlpriv, COMP_RATR,DBG_LOUD,
                           "rtl8821ae_update_hal_rate_tbl() Error! 8821ae FW RA Only\n");*/
index a3553e3abaa1f125aa859c2e3417bae0a3ceaec6..50fa9c718189b081a1efe49d82dc566e290008b8 100644 (file)
@@ -46,7 +46,7 @@ void rtl8821ae_update_interrupt_mask(struct ieee80211_hw *hw,
 void rtl8821ae_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val);
 void rtl8821ae_update_hal_rate_tbl(struct ieee80211_hw *hw,
                                   struct ieee80211_sta *sta,
-                                  u8 rssi_level);
+                                  u8 rssi_level, bool update_bw);
 void rtl8821ae_update_channel_access_setting(struct ieee80211_hw *hw);
 bool rtl8821ae_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 *valid);
 void rtl8821ae_enable_hw_security_config(struct ieee80211_hw *hw);
index 6705f863f15257c2d51bc553bb1fac878ac67080..4decf1e71ba83069727bf6817c07a569d895cb05 100644 (file)
@@ -2123,7 +2123,8 @@ struct rtl_hal_ops {
        void (*get_hw_reg) (struct ieee80211_hw *hw, u8 variable, u8 *val);
        void (*set_hw_reg) (struct ieee80211_hw *hw, u8 variable, u8 *val);
        void (*update_rate_tbl) (struct ieee80211_hw *hw,
-                             struct ieee80211_sta *sta, u8 rssi_level);
+                             struct ieee80211_sta *sta, u8 rssi_leve,
+                             bool update_bw);
        void (*pre_fill_tx_bd_desc)(struct ieee80211_hw *hw, u8 *tx_bd_desc,
                                    u8 *desc, u8 queue_index,
                                    struct sk_buff *skb, dma_addr_t addr);