]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: rtw89: Fix P2P behavior for WiFi 7 chips
authorPo-Hao Huang <phhuang@realtek.com>
Wed, 22 May 2024 02:45:31 +0000 (10:45 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Mon, 27 May 2024 09:05:44 +0000 (17:05 +0800)
Previously we used CCK rate when scanning for P2P on WiFi 7 chips.
Fix this by explicitly setting the rate to OFDM 6Mbps.

Signed-off-by: Po-Hao Huang <phhuang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://msgid.link/20240522024531.11401-1-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/fw.c
drivers/net/wireless/realtek/rtw89/fw.h

index 1ea2b662fc89c0d17eb1a51c37687cbdac6db250..be39a8468d32b806f6353a74c5029d9a859377a2 100644 (file)
@@ -4850,6 +4850,7 @@ int rtw89_fw_h2c_scan_offload_be(struct rtw89_dev *rtwdev,
 {
        struct rtw89_hw_scan_info *scan_info = &rtwdev->scan_info;
        struct rtw89_wait_info *wait = &rtwdev->mac.fw_ofld_wait;
+       struct cfg80211_scan_request *req = rtwvif->scan_req;
        struct rtw89_h2c_scanofld_be_macc_role *macc_role;
        struct rtw89_chan *op = &scan_info->op_chan;
        struct rtw89_h2c_scanofld_be_opch *opch;
@@ -4923,6 +4924,15 @@ int rtw89_fw_h2c_scan_offload_be(struct rtw89_dev *rtwdev,
                                   RTW89_H2C_SCANOFLD_BE_W6_CHAN_PROHIB_LOW);
        h2c->w7 = le32_encode_bits(option->prohib_chan >> 32,
                                   RTW89_H2C_SCANOFLD_BE_W7_CHAN_PROHIB_HIGH);
+       if (req->no_cck) {
+               h2c->w0 |= le32_encode_bits(true, RTW89_H2C_SCANOFLD_BE_W0_PROBE_WITH_RATE);
+               h2c->w8 = le32_encode_bits(RTW89_HW_RATE_OFDM6,
+                                          RTW89_H2C_SCANOFLD_BE_W8_PROBE_RATE_2GHZ) |
+                         le32_encode_bits(RTW89_HW_RATE_OFDM6,
+                                          RTW89_H2C_SCANOFLD_BE_W8_PROBE_RATE_5GHZ) |
+                         le32_encode_bits(RTW89_HW_RATE_OFDM6,
+                                          RTW89_H2C_SCANOFLD_BE_W8_PROBE_RATE_6GHZ);
+       }
        ptr += sizeof(*h2c);
 
        for (i = 0; i < option->num_macc_role; i++) {
index 4151c9d566bd6ae5441334942f553766c63cd69e..01fea0b004d3598ea9a6b10446fff6deb5fe6e93 100644 (file)
@@ -2722,6 +2722,7 @@ struct rtw89_h2c_scanofld_be {
 #define RTW89_H2C_SCANOFLD_BE_W0_MACID GENMASK(23, 8)
 #define RTW89_H2C_SCANOFLD_BE_W0_PORT GENMASK(26, 24)
 #define RTW89_H2C_SCANOFLD_BE_W0_BAND GENMASK(28, 27)
+#define RTW89_H2C_SCANOFLD_BE_W0_PROBE_WITH_RATE BIT(29)
 #define RTW89_H2C_SCANOFLD_BE_W1_NUM_MACC_ROLE GENMASK(7, 0)
 #define RTW89_H2C_SCANOFLD_BE_W1_NUM_OP GENMASK(15, 8)
 #define RTW89_H2C_SCANOFLD_BE_W1_NORM_PD GENMASK(31, 16)
@@ -2738,6 +2739,9 @@ struct rtw89_h2c_scanofld_be {
 #define RTW89_H2C_SCANOFLD_BE_W5_MLO_MODE GENMASK(31, 0)
 #define RTW89_H2C_SCANOFLD_BE_W6_CHAN_PROHIB_LOW GENMASK(31, 0)
 #define RTW89_H2C_SCANOFLD_BE_W7_CHAN_PROHIB_HIGH GENMASK(31, 0)
+#define RTW89_H2C_SCANOFLD_BE_W8_PROBE_RATE_2GHZ GENMASK(7, 0)
+#define RTW89_H2C_SCANOFLD_BE_W8_PROBE_RATE_5GHZ GENMASK(15, 8)
+#define RTW89_H2C_SCANOFLD_BE_W8_PROBE_RATE_6GHZ GENMASK(23, 16)
 
 static inline void RTW89_SET_FWCMD_P2P_MACID(void *cmd, u32 val)
 {