]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: rtw89: wow: Add Basic Rate IE to probe request in scheduled scan mode
authorChin-Yen Lee <timlee@realtek.com>
Wed, 16 Jul 2025 12:29:26 +0000 (20:29 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Fri, 18 Jul 2025 06:36:56 +0000 (14:36 +0800)
In scheduled scan mode, the current probe request only includes the SSID
IE, but omits the Basic Rate IE. Some APs do not respond to such
incomplete probe requests, causing net-detect failures. To improve
interoperability and ensure APs respond correctly, add the Basic Rate IE
to the probe request in driver.

Signed-off-by: Chin-Yen Lee <timlee@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20250716122926.6709-1-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/wow.c

index 4dd471b6dd3060539aab7f823ba95fc5d0be5173..071c7577df52b24354d86c1fbf78e1b5f2a29049 100644 (file)
@@ -1412,6 +1412,8 @@ static void rtw89_fw_release_pno_pkt_list(struct rtw89_dev *rtwdev,
 static int rtw89_pno_scan_update_probe_req(struct rtw89_dev *rtwdev,
                                           struct rtw89_vif_link *rtwvif_link)
 {
+       static const u8 basic_rate_ie[] = {WLAN_EID_SUPP_RATES, 0x08,
+                0x0c, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c};
        struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
        struct cfg80211_sched_scan_request *nd_config = rtw_wow->nd_config;
        u8 num = nd_config->n_match_sets, i;
@@ -1423,10 +1425,11 @@ static int rtw89_pno_scan_update_probe_req(struct rtw89_dev *rtwdev,
                skb = ieee80211_probereq_get(rtwdev->hw, rtwvif_link->mac_addr,
                                             nd_config->match_sets[i].ssid.ssid,
                                             nd_config->match_sets[i].ssid.ssid_len,
-                                            nd_config->ie_len);
+                                            nd_config->ie_len + sizeof(basic_rate_ie));
                if (!skb)
                        return -ENOMEM;
 
+               skb_put_data(skb, basic_rate_ie, sizeof(basic_rate_ie));
                skb_put_data(skb, nd_config->ie, nd_config->ie_len);
 
                info = kzalloc(sizeof(*info), GFP_KERNEL);