mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 10:33:41 +02:00
wifi: rtw89: mcc: clear normal flow NoA when MCC start
Clear NoA setting before MCC starts. Otherwise, nulldata will be blocked to TX because firmware use the normal flow NoA to calculate timing. Signed-off-by: Chih-Kang Chang <gary.chang@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20250610130034.14692-10-pkshih@realtek.com
This commit is contained in:
parent
8bb1c30769
commit
12af7fcea8
|
|
@ -960,6 +960,7 @@ static int rtw89_mcc_fill_all_roles(struct rtw89_dev *rtwdev)
|
|||
}
|
||||
|
||||
sel.bind_vif[i] = rtwvif_link;
|
||||
rtw89_p2p_disable_all_noa(rtwdev, rtwvif_link, NULL);
|
||||
}
|
||||
|
||||
ret = rtw89_iterate_mcc_roles(rtwdev, rtw89_mcc_fill_role_iterator, &sel);
|
||||
|
|
|
|||
|
|
@ -3033,12 +3033,10 @@ int rtw89_fw_h2c_lps_ml_cmn_info(struct rtw89_dev *rtwdev,
|
|||
#define H2C_P2P_ACT_LEN 20
|
||||
int rtw89_fw_h2c_p2p_act(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct ieee80211_bss_conf *bss_conf,
|
||||
struct ieee80211_p2p_noa_desc *desc,
|
||||
u8 act, u8 noa_id)
|
||||
u8 act, u8 noa_id, u8 ctwindow_oppps)
|
||||
{
|
||||
bool p2p_type_gc = rtwvif_link->wifi_role == RTW89_WIFI_ROLE_P2P_CLIENT;
|
||||
u8 ctwindow_oppps = bss_conf->p2p_noa_attr.oppps_ctwindow;
|
||||
struct sk_buff *skb;
|
||||
u8 *cmd;
|
||||
int ret;
|
||||
|
|
|
|||
|
|
@ -4849,9 +4849,8 @@ int rtw89_fw_h2c_pkt_drop(struct rtw89_dev *rtwdev,
|
|||
const struct rtw89_pkt_drop_params *params);
|
||||
int rtw89_fw_h2c_p2p_act(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct ieee80211_bss_conf *bss_conf,
|
||||
struct ieee80211_p2p_noa_desc *desc,
|
||||
u8 act, u8 noa_id);
|
||||
u8 act, u8 noa_id, u8 ctwindow_oppps);
|
||||
int rtw89_fw_h2c_tsf32_toggle(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
bool en);
|
||||
|
|
|
|||
|
|
@ -238,13 +238,23 @@ static void rtw89_tsf32_toggle(struct rtw89_dev *rtwdev,
|
|||
rtw89_fw_h2c_tsf32_toggle(rtwdev, rtwvif_link, false);
|
||||
}
|
||||
|
||||
static void rtw89_p2p_disable_all_noa(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct ieee80211_bss_conf *bss_conf)
|
||||
void rtw89_p2p_disable_all_noa(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct ieee80211_bss_conf *bss_conf)
|
||||
{
|
||||
enum rtw89_p2pps_action act;
|
||||
u8 oppps_ctwindow;
|
||||
u8 noa_id;
|
||||
|
||||
rcu_read_lock();
|
||||
|
||||
if (!bss_conf)
|
||||
bss_conf = rtw89_vif_rcu_dereference_link(rtwvif_link, true);
|
||||
|
||||
oppps_ctwindow = bss_conf->p2p_noa_attr.oppps_ctwindow;
|
||||
|
||||
rcu_read_unlock();
|
||||
|
||||
if (rtwvif_link->last_noa_nr == 0)
|
||||
return;
|
||||
|
||||
|
|
@ -254,8 +264,8 @@ static void rtw89_p2p_disable_all_noa(struct rtw89_dev *rtwdev,
|
|||
else
|
||||
act = RTW89_P2P_ACT_REMOVE;
|
||||
rtw89_tsf32_toggle(rtwdev, rtwvif_link, act);
|
||||
rtw89_fw_h2c_p2p_act(rtwdev, rtwvif_link, bss_conf,
|
||||
NULL, act, noa_id);
|
||||
rtw89_fw_h2c_p2p_act(rtwdev, rtwvif_link, NULL,
|
||||
act, noa_id, oppps_ctwindow);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -277,8 +287,8 @@ static void rtw89_p2p_update_noa(struct rtw89_dev *rtwdev,
|
|||
else
|
||||
act = RTW89_P2P_ACT_UPDATE;
|
||||
rtw89_tsf32_toggle(rtwdev, rtwvif_link, act);
|
||||
rtw89_fw_h2c_p2p_act(rtwdev, rtwvif_link, bss_conf,
|
||||
desc, act, noa_id);
|
||||
rtw89_fw_h2c_p2p_act(rtwdev, rtwvif_link, desc, act, noa_id,
|
||||
bss_conf->p2p_noa_attr.oppps_ctwindow);
|
||||
}
|
||||
rtwvif_link->last_noa_nr = noa_id;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,9 @@ u8 rtw89_p2p_noa_fetch(struct rtw89_vif_link *rtwvif_link, void **data);
|
|||
void rtw89_p2p_noa_once_init(struct rtw89_vif_link *rtwvif_link);
|
||||
void rtw89_p2p_noa_once_deinit(struct rtw89_vif_link *rtwvif_link);
|
||||
void rtw89_p2p_noa_once_recalc(struct rtw89_vif_link *rtwvif_link);
|
||||
void rtw89_p2p_disable_all_noa(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct ieee80211_bss_conf *bss_conf);
|
||||
|
||||
static inline void rtw89_leave_ips_by_hwflags(struct rtw89_dev *rtwdev)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user