]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: rtw88: Extend rtw_fw_send_ra_info() for RTL8814AU
authorBitterblue Smith <rtl8821cerfe2@gmail.com>
Tue, 4 Feb 2025 18:39:29 +0000 (20:39 +0200)
committerPing-Ke Shih <pkshih@realtek.com>
Mon, 10 Feb 2025 03:35:25 +0000 (11:35 +0800)
The existing code is suitable for chips with up to 2 spatial streams.
Inform the firmware about the rates it's allowed to use when
transmitting 3 spatial streams.

Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/08e2f328-1aab-4e50-93ac-c1e5dd9541ac@gmail.com
drivers/net/wireless/realtek/rtw88/fw.c
drivers/net/wireless/realtek/rtw88/fw.h
drivers/net/wireless/realtek/rtw88/main.h

index 02389b7c687682eec9dbef8bc72dafe38407c197..6b563ac489a745a5fc30052d4450650da487d1b9 100644 (file)
@@ -735,6 +735,7 @@ void rtw_fw_send_ra_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si,
 {
        u8 h2c_pkt[H2C_PKT_SIZE] = {0};
        bool disable_pt = true;
+       u32 mask_hi;
 
        SET_H2C_CMD_ID_CLASS(h2c_pkt, H2C_CMD_RA_INFO);
 
@@ -755,6 +756,20 @@ void rtw_fw_send_ra_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si,
        si->init_ra_lv = 0;
 
        rtw_fw_send_h2c_command(rtwdev, h2c_pkt);
+
+       if (rtwdev->chip->id != RTW_CHIP_TYPE_8814A)
+               return;
+
+       SET_H2C_CMD_ID_CLASS(h2c_pkt, H2C_CMD_RA_INFO_HI);
+
+       mask_hi = si->ra_mask >> 32;
+
+       SET_RA_INFO_RA_MASK0(h2c_pkt, (mask_hi & 0xff));
+       SET_RA_INFO_RA_MASK1(h2c_pkt, (mask_hi & 0xff00) >> 8);
+       SET_RA_INFO_RA_MASK2(h2c_pkt, (mask_hi & 0xff0000) >> 16);
+       SET_RA_INFO_RA_MASK3(h2c_pkt, (mask_hi & 0xff000000) >> 24);
+
+       rtw_fw_send_h2c_command(rtwdev, h2c_pkt);
 }
 
 void rtw_fw_media_status_report(struct rtw_dev *rtwdev, u8 mac_id, bool connect)
index 404de1b0c407b4cda51e0d182f99b92c4c445e00..48ad9ceab6ea128cfe5ae3e8ea512a89b2e59cde 100644 (file)
@@ -557,6 +557,7 @@ static inline void rtw_h2c_pkt_set_header(u8 *h2c_pkt, u8 sub_id)
 #define H2C_CMD_DEFAULT_PORT           0x2c
 #define H2C_CMD_RA_INFO                        0x40
 #define H2C_CMD_RSSI_MONITOR           0x42
+#define H2C_CMD_RA_INFO_HI             0x46
 #define H2C_CMD_BCN_FILTER_OFFLOAD_P0  0x56
 #define H2C_CMD_BCN_FILTER_OFFLOAD_P1  0x57
 #define H2C_CMD_WL_PHY_INFO            0x58
index ba64d269521a2324ccaa74f98397143e265e6745..993c381e734bbc00ec3f9f93e8ad21ed9df976ba 100644 (file)
@@ -191,6 +191,7 @@ enum rtw_chip_type {
        RTW_CHIP_TYPE_8703B,
        RTW_CHIP_TYPE_8821A,
        RTW_CHIP_TYPE_8812A,
+       RTW_CHIP_TYPE_8814A,
 };
 
 enum rtw_tx_queue_type {