Commit d881d0a1 authored by Kuan-Chung Chen's avatar Kuan-Chung Chen Committed by Kalle Valo

wifi: rtw89: disallow enter PS mode after create TDLS link

Buffer STA on TDLS links are not currently supported. Therefore, it
is not allowed to enter the PS mode after TDLS link is established.
Signed-off-by: default avatarKuan-Chung Chen <damon.chen@realtek.com>
Signed-off-by: default avatarPing-Ke Shih <pkshih@realtek.com>
Signed-off-by: default avatarKalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20230119064631.66971-1-pkshih@realtek.com
parent 214a98b1
...@@ -2206,8 +2206,9 @@ static bool rtw89_traffic_stats_track(struct rtw89_dev *rtwdev) ...@@ -2206,8 +2206,9 @@ static bool rtw89_traffic_stats_track(struct rtw89_dev *rtwdev)
static void rtw89_vif_enter_lps(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif) static void rtw89_vif_enter_lps(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif)
{ {
if (rtwvif->wifi_role != RTW89_WIFI_ROLE_STATION && if ((rtwvif->wifi_role != RTW89_WIFI_ROLE_STATION &&
rtwvif->wifi_role != RTW89_WIFI_ROLE_P2P_CLIENT) rtwvif->wifi_role != RTW89_WIFI_ROLE_P2P_CLIENT) ||
rtwvif->tdls_peer)
return; return;
if (rtwvif->stats.tx_tfc_lv == RTW89_TFC_IDLE && if (rtwvif->stats.tx_tfc_lv == RTW89_TFC_IDLE &&
...@@ -2466,9 +2467,12 @@ int rtw89_core_sta_disassoc(struct rtw89_dev *rtwdev, ...@@ -2466,9 +2467,12 @@ int rtw89_core_sta_disassoc(struct rtw89_dev *rtwdev,
struct ieee80211_vif *vif, struct ieee80211_vif *vif,
struct ieee80211_sta *sta) struct ieee80211_sta *sta)
{ {
struct rtw89_vif *rtwvif = (struct rtw89_vif *)vif->drv_priv;
struct rtw89_sta *rtwsta = (struct rtw89_sta *)sta->drv_priv; struct rtw89_sta *rtwsta = (struct rtw89_sta *)sta->drv_priv;
rtwdev->total_sta_assoc--; rtwdev->total_sta_assoc--;
if (sta->tdls)
rtwvif->tdls_peer--;
rtwsta->disassoc = true; rtwsta->disassoc = true;
return 0; return 0;
...@@ -2587,6 +2591,8 @@ int rtw89_core_sta_assoc(struct rtw89_dev *rtwdev, ...@@ -2587,6 +2591,8 @@ int rtw89_core_sta_assoc(struct rtw89_dev *rtwdev,
} }
rtwdev->total_sta_assoc++; rtwdev->total_sta_assoc++;
if (sta->tdls)
rtwvif->tdls_peer++;
rtw89_phy_ra_assoc(rtwdev, sta); rtw89_phy_ra_assoc(rtwdev, sta);
rtw89_mac_bf_assoc(rtwdev, vif, sta); rtw89_mac_bf_assoc(rtwdev, vif, sta);
rtw89_mac_bf_monitor_calc(rtwdev, sta, false); rtw89_mac_bf_monitor_calc(rtwdev, sta, false);
......
...@@ -2452,6 +2452,7 @@ struct rtw89_vif { ...@@ -2452,6 +2452,7 @@ struct rtw89_vif {
bool last_a_ctrl; bool last_a_ctrl;
bool dyn_tb_bedge_en; bool dyn_tb_bedge_en;
u8 def_tri_idx; u8 def_tri_idx;
u32 tdls_peer;
struct work_struct update_beacon_work; struct work_struct update_beacon_work;
struct rtw89_addr_cam_entry addr_cam; struct rtw89_addr_cam_entry addr_cam;
struct rtw89_bssid_cam_entry bssid_cam; struct rtw89_bssid_cam_entry bssid_cam;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment