wifi: rtw89: fw: add chip_ops to update CMAC table to associated station
authorPing-Ke Shih <pkshih@realtek.com>
Mon, 15 Jan 2024 03:37:37 +0000 (11:37 +0800)
committerKalle Valo <kvalo@kernel.org>
Thu, 18 Jan 2024 09:33:56 +0000 (11:33 +0200)
For WiFi 7 chips, we add H2C command with rich fields to support MLO, so
add a chip_ops to generalize calling of update CMAC table.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://msgid.link/20240115033742.16372-4-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/core.c
drivers/net/wireless/realtek/rtw89/core.h
drivers/net/wireless/realtek/rtw89/fw.c
drivers/net/wireless/realtek/rtw89/fw.h
drivers/net/wireless/realtek/rtw89/mac80211.c
drivers/net/wireless/realtek/rtw89/rtw8851b.c
drivers/net/wireless/realtek/rtw89/rtw8852a.c
drivers/net/wireless/realtek/rtw89/rtw8852b.c
drivers/net/wireless/realtek/rtw89/rtw8852c.c
drivers/net/wireless/realtek/rtw89/rtw8922a.c
drivers/net/wireless/realtek/rtw89/wow.c

index 4f33e0a6ff9fe8116cc3ea453f53fc111075be92..745aa3e52fd3cd451d0398a8b3315d263f9fb292 100644 (file)
@@ -3393,7 +3393,7 @@ int rtw89_core_sta_disconnect(struct rtw89_dev *rtwdev,
                rtw89_fw_release_general_pkt_list_vif(rtwdev, rtwvif, true);
        }
 
-       ret = rtw89_fw_h2c_assoc_cmac_tbl(rtwdev, vif, sta);
+       ret = rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, vif, sta);
        if (ret) {
                rtw89_warn(rtwdev, "failed to send h2c cmac table\n");
                return ret;
@@ -3442,7 +3442,7 @@ int rtw89_core_sta_assoc(struct rtw89_dev *rtwdev,
                }
        }
 
-       ret = rtw89_fw_h2c_assoc_cmac_tbl(rtwdev, vif, sta);
+       ret = rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, vif, sta);
        if (ret) {
                rtw89_warn(rtwdev, "failed to send h2c cmac table\n");
                return ret;
index 1acf55f343b7a6cc459cea4e8e81d65b8fe9986d..433557e892968c47774193e6206dda35f6040ba1 100644 (file)
@@ -3197,6 +3197,9 @@ struct rtw89_chip_ops {
        int (*h2c_dctl_sec_cam)(struct rtw89_dev *rtwdev,
                                struct rtw89_vif *rtwvif,
                                struct rtw89_sta *rtwsta);
+       int (*h2c_assoc_cmac_tbl)(struct rtw89_dev *rtwdev,
+                                 struct ieee80211_vif *vif,
+                                 struct ieee80211_sta *sta);
        int (*h2c_update_beacon)(struct rtw89_dev *rtwdev,
                                 struct rtw89_vif *rtwvif);
        int (*h2c_ba_cam)(struct rtw89_dev *rtwdev, struct rtw89_sta *rtwsta,
index 7c33b10a39be3dd033bb68fbeb64832f683f9244..fc1295d5d8e83f3642655b59ffaf4056592ca32f 100644 (file)
@@ -2231,6 +2231,7 @@ fail:
 
        return ret;
 }
+EXPORT_SYMBOL(rtw89_fw_h2c_assoc_cmac_tbl);
 
 static void __get_sta_eht_pkt_padding(struct rtw89_dev *rtwdev,
                                      struct ieee80211_sta *sta, u8 *pads)
@@ -2401,6 +2402,7 @@ fail:
 
        return ret;
 }
+EXPORT_SYMBOL(rtw89_fw_h2c_assoc_cmac_tbl_g7);
 
 int rtw89_fw_h2c_txtime_cmac_tbl(struct rtw89_dev *rtwdev,
                                 struct rtw89_sta *rtwsta)
index dad09e57b82110259870b4dd05757e2149ac5f95..f1f119358b28e73e5f05aafe220648416b03d892 100644 (file)
@@ -4094,6 +4094,15 @@ static inline int rtw89_chip_h2c_update_beacon(struct rtw89_dev *rtwdev,
        return chip->ops->h2c_update_beacon(rtwdev, rtwvif);
 }
 
+static inline int rtw89_chip_h2c_assoc_cmac_tbl(struct rtw89_dev *rtwdev,
+                                               struct ieee80211_vif *vif,
+                                               struct ieee80211_sta *sta)
+{
+       const struct rtw89_chip_info *chip = rtwdev->chip;
+
+       return chip->ops->h2c_assoc_cmac_tbl(rtwdev, vif, sta);
+}
+
 static inline
 int rtw89_chip_h2c_ba_cam(struct rtw89_dev *rtwdev, struct rtw89_sta *rtwsta,
                          bool valid, struct ieee80211_ampdu_params *params)
index c023c182be6ac958cff21348241458386fccbfd9..71d5e6f7bb6494e7f4226964f789ac523584f2f8 100644 (file)
@@ -497,7 +497,7 @@ static int rtw89_ops_start_ap(struct ieee80211_hw *hw,
        ether_addr_copy(rtwvif->bssid, vif->bss_conf.bssid);
        rtw89_cam_bssid_changed(rtwdev, rtwvif);
        rtw89_mac_port_update(rtwdev, rtwvif);
-       rtw89_fw_h2c_assoc_cmac_tbl(rtwdev, vif, NULL);
+       rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, vif, NULL);
        rtw89_fw_h2c_role_maintain(rtwdev, rtwvif, NULL, RTW89_ROLE_TYPE_CHANGE);
        rtw89_fw_h2c_join_info(rtwdev, rtwvif, NULL, true);
        rtw89_fw_h2c_cam(rtwdev, rtwvif, NULL, NULL);
@@ -518,7 +518,7 @@ void rtw89_ops_stop_ap(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 
        mutex_lock(&rtwdev->mutex);
        rtw89_mac_stop_ap(rtwdev, rtwvif);
-       rtw89_fw_h2c_assoc_cmac_tbl(rtwdev, vif, NULL);
+       rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, vif, NULL);
        rtw89_fw_h2c_join_info(rtwdev, rtwvif, NULL, true);
        mutex_unlock(&rtwdev->mutex);
 }
index 6cbdbf26cfd6dd1945f32e5d302fedb58e92ebb8..0688b4c576f9492ca12b2047c111fbdbb74b0f37 100644 (file)
@@ -2334,6 +2334,7 @@ static const struct rtw89_chip_ops rtw8851b_chip_ops = {
        .stop_sch_tx            = rtw89_mac_stop_sch_tx,
        .resume_sch_tx          = rtw89_mac_resume_sch_tx,
        .h2c_dctl_sec_cam       = NULL,
+       .h2c_assoc_cmac_tbl     = rtw89_fw_h2c_assoc_cmac_tbl,
        .h2c_update_beacon      = rtw89_fw_h2c_update_beacon,
        .h2c_ba_cam             = rtw89_fw_h2c_ba_cam,
 
index c8a9fe8e359ad5dc8bd3b09f71dcec0c07f9ed8b..e15751f48fa35af23e694854e9d1d6c702a2e702 100644 (file)
@@ -2078,6 +2078,7 @@ static const struct rtw89_chip_ops rtw8852a_chip_ops = {
        .stop_sch_tx            = rtw89_mac_stop_sch_tx,
        .resume_sch_tx          = rtw89_mac_resume_sch_tx,
        .h2c_dctl_sec_cam       = NULL,
+       .h2c_assoc_cmac_tbl     = rtw89_fw_h2c_assoc_cmac_tbl,
        .h2c_update_beacon      = rtw89_fw_h2c_update_beacon,
        .h2c_ba_cam             = rtw89_fw_h2c_ba_cam,
 
index 9bcbbb2d2c6fba8e4ab318538d6ea2062c6647a3..817ba15bba20b4e844b820f786527bd276387549 100644 (file)
@@ -2503,6 +2503,7 @@ static const struct rtw89_chip_ops rtw8852b_chip_ops = {
        .stop_sch_tx            = rtw89_mac_stop_sch_tx,
        .resume_sch_tx          = rtw89_mac_resume_sch_tx,
        .h2c_dctl_sec_cam       = NULL,
+       .h2c_assoc_cmac_tbl     = rtw89_fw_h2c_assoc_cmac_tbl,
        .h2c_update_beacon      = rtw89_fw_h2c_update_beacon,
        .h2c_ba_cam             = rtw89_fw_h2c_ba_cam,
 
index 637656879da48215f094470133fbc603ac6a8bb4..892e3412a9e95c817598fa89c1c0ff5311b844c9 100644 (file)
@@ -2848,6 +2848,7 @@ static const struct rtw89_chip_ops rtw8852c_chip_ops = {
        .stop_sch_tx            = rtw89_mac_stop_sch_tx_v1,
        .resume_sch_tx          = rtw89_mac_resume_sch_tx_v1,
        .h2c_dctl_sec_cam       = rtw89_fw_h2c_dctl_sec_cam_v1,
+       .h2c_assoc_cmac_tbl     = rtw89_fw_h2c_assoc_cmac_tbl,
        .h2c_update_beacon      = rtw89_fw_h2c_update_beacon,
        .h2c_ba_cam             = rtw89_fw_h2c_ba_cam,
 
index dac5fdbe65ebe76f3a6faaf1adad1acf81122826..d0b11848dc933666ec9c8f4b9831246e7ed1e2a0 100644 (file)
@@ -823,6 +823,7 @@ static const struct rtw89_chip_ops rtw8922a_chip_ops = {
        .pwr_on_func            = rtw8922a_pwr_on_func,
        .pwr_off_func           = rtw8922a_pwr_off_func,
        .h2c_dctl_sec_cam       = rtw89_fw_h2c_dctl_sec_cam_v2,
+       .h2c_assoc_cmac_tbl     = rtw89_fw_h2c_assoc_cmac_tbl_g7,
        .h2c_update_beacon      = rtw89_fw_h2c_update_beacon_be,
        .h2c_ba_cam             = rtw89_fw_h2c_ba_cam_v1,
 };
index 5c7ca36c09b6bf272956ddbbf7083f598148743d..4c17936795b6f14a74bb34302ea32471b2c6ab15 100644 (file)
@@ -519,7 +519,7 @@ static int rtw89_wow_swap_fw(struct rtw89_dev *rtwdev, bool wow)
                return ret;
        }
 
-       ret = rtw89_fw_h2c_assoc_cmac_tbl(rtwdev, wow_vif, wow_sta);
+       ret = rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, wow_vif, wow_sta);
        if (ret) {
                rtw89_warn(rtwdev, "failed to send h2c assoc cmac tbl\n");
                return ret;