]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
wifi: rtw89: add DBCC H2C to notify firmware the status
authorPing-Ke Shih <pkshih@realtek.com>
Mon, 11 Dec 2023 08:33:40 +0000 (16:33 +0800)
committerKalle Valo <kvalo@kernel.org>
Fri, 15 Dec 2023 13:39:13 +0000 (15:39 +0200)
To support MLO of WiFi 7, we should configure hardware as DBCC mode, and
notify this status to firmware.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://msgid.link/20231211083341.118047-6-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/fw.c
drivers/net/wireless/realtek/rtw89/fw.h

index 8c1065278faf5c370a1619381e26bb7e6000f192..09684cea9731c3ecfe2e01837133a7fc51bbfc4d 100644 (file)
@@ -2330,6 +2330,41 @@ fail:
        return ret;
 }
 
+int rtw89_fw_h2c_notify_dbcc(struct rtw89_dev *rtwdev, bool en)
+{
+       struct rtw89_h2c_notify_dbcc *h2c;
+       u32 len = sizeof(*h2c);
+       struct sk_buff *skb;
+       int ret;
+
+       skb = rtw89_fw_h2c_alloc_skb_with_hdr(rtwdev, len);
+       if (!skb) {
+               rtw89_err(rtwdev, "failed to alloc skb for h2c notify dbcc\n");
+               return -ENOMEM;
+       }
+       skb_put(skb, len);
+       h2c = (struct rtw89_h2c_notify_dbcc *)skb->data;
+
+       h2c->w0 = le32_encode_bits(en, RTW89_H2C_NOTIFY_DBCC_EN);
+
+       rtw89_h2c_pkt_set_hdr(rtwdev, skb, FWCMD_TYPE_H2C,
+                             H2C_CAT_MAC, H2C_CL_MAC_MEDIA_RPT,
+                             H2C_FUNC_NOTIFY_DBCC, 0, 1,
+                             len);
+
+       ret = rtw89_h2c_tx(rtwdev, skb, false);
+       if (ret) {
+               rtw89_err(rtwdev, "failed to send h2c\n");
+               goto fail;
+       }
+
+       return 0;
+fail:
+       dev_kfree_skb_any(skb);
+
+       return ret;
+}
+
 int rtw89_fw_h2c_macid_pause(struct rtw89_dev *rtwdev, u8 sh, u8 grp,
                             bool pause)
 {
index bfe226fe3d07ff74be9ff00643023bc6e6b7099f..01016588b1fcb45bcb947919ad51471833f8ca56 100644 (file)
@@ -1685,6 +1685,12 @@ static inline void SET_JOININFO_SELF_ROLE(void *h2c, u32 val)
        le32p_replace_bits((__le32 *)h2c, val, GENMASK(31, 30));
 }
 
+struct rtw89_h2c_notify_dbcc {
+       __le32 w0;
+} __packed;
+
+#define RTW89_H2C_NOTIFY_DBCC_EN BIT(0)
+
 static inline void SET_GENERAL_PKT_MACID(void *h2c, u32 val)
 {
        le32p_replace_bits((__le32 *)h2c, val, GENMASK(7, 0));
@@ -3650,6 +3656,7 @@ struct rtw89_fw_h2c_rf_reg_info {
 #define H2C_CL_MAC_MEDIA_RPT           0x8
 #define H2C_FUNC_MAC_JOININFO          0x0
 #define H2C_FUNC_MAC_FWROLE_MAINTAIN   0x4
+#define H2C_FUNC_NOTIFY_DBCC           0x5
 
 /* CLASS 9 - FW offload */
 #define H2C_CL_MAC_FW_OFLD             0x9
@@ -3846,6 +3853,7 @@ int rtw89_fw_h2c_role_maintain(struct rtw89_dev *rtwdev,
                               enum rtw89_upd_mode upd_mode);
 int rtw89_fw_h2c_join_info(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif,
                           struct rtw89_sta *rtwsta, bool dis_conn);
+int rtw89_fw_h2c_notify_dbcc(struct rtw89_dev *rtwdev, bool en);
 int rtw89_fw_h2c_macid_pause(struct rtw89_dev *rtwdev, u8 sh, u8 grp,
                             bool pause);
 int rtw89_fw_h2c_set_edca(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif,