rtw88: 8723d: add beamform wrapper functions
authorPing-Ke Shih <pkshih@realtek.com>
Mon, 20 Apr 2020 05:50:48 +0000 (13:50 +0800)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 21 Apr 2020 12:59:18 +0000 (15:59 +0300)
8723D doesn't support beamform because rtw88 only supports VHT beamform
but 8723d doesn't have VHT capability. Though 8723d doesn't support
beamform, BSS_CHANGED_MU_GROUPS is still marked as changed when doing
disassociation. So, add wrapper functions for all beamform ops to make
sure they aren't NULL before calling.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Yan-Hsuan Chuang <yhchuang@realtek.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20200420055054.14592-3-yhchuang@realtek.com
drivers/net/wireless/realtek/rtw88/bf.c
drivers/net/wireless/realtek/rtw88/bf.h
drivers/net/wireless/realtek/rtw88/mac80211.c
drivers/net/wireless/realtek/rtw88/main.c
drivers/net/wireless/realtek/rtw88/rtw8723d.c

index b6d1d71..a5912da 100644 (file)
@@ -10,7 +10,6 @@
 void rtw_bf_disassoc(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
                     struct ieee80211_bss_conf *bss_conf)
 {
-       struct rtw_chip_info *chip = rtwdev->chip;
        struct rtw_vif *rtwvif = (struct rtw_vif *)vif->drv_priv;
        struct rtw_bfee *bfee = &rtwvif->bfee;
        struct rtw_bf_info *bfinfo = &rtwdev->bf_info;
@@ -23,7 +22,7 @@ void rtw_bf_disassoc(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
        else if (bfee->role == RTW_BFEE_SU)
                bfinfo->bfer_su_cnt--;
 
-       chip->ops->config_bfee(rtwdev, rtwvif, bfee, false);
+       rtw_chip_config_bfee(rtwdev, rtwvif, bfee, false);
 
        bfee->role = RTW_BFEE_NONE;
 }
@@ -71,7 +70,7 @@ void rtw_bf_assoc(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
                bfee->aid = bss_conf->aid;
                bfinfo->bfer_mu_cnt++;
 
-               chip->ops->config_bfee(rtwdev, rtwvif, bfee, true);
+               rtw_chip_config_bfee(rtwdev, rtwvif, bfee, true);
        } else if ((ic_vht_cap->cap & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE) &&
                   (vht_cap->cap & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE)) {
                if (bfinfo->bfer_su_cnt >= chip->bfer_su_max_num) {
@@ -97,7 +96,7 @@ void rtw_bf_assoc(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
                        }
                }
 
-               chip->ops->config_bfee(rtwdev, rtwvif, bfee, true);
+               rtw_chip_config_bfee(rtwdev, rtwvif, bfee, true);
        }
 
 out_unlock:
index 96a8216..17855ed 100644 (file)
@@ -89,4 +89,26 @@ void rtw_bf_set_gid_table(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
 void rtw_bf_phy_init(struct rtw_dev *rtwdev);
 void rtw_bf_cfg_csi_rate(struct rtw_dev *rtwdev, u8 rssi, u8 cur_rate,
                         u8 fixrate_en, u8 *new_rate);
+static inline void rtw_chip_config_bfee(struct rtw_dev *rtwdev, struct rtw_vif *vif,
+                                       struct rtw_bfee *bfee, bool enable)
+{
+       if (rtwdev->chip->ops->config_bfee)
+               rtwdev->chip->ops->config_bfee(rtwdev, vif, bfee, enable);
+}
+
+static inline void rtw_chip_set_gid_table(struct rtw_dev *rtwdev,
+                                         struct ieee80211_vif *vif,
+                                         struct ieee80211_bss_conf *conf)
+{
+       if (rtwdev->chip->ops->set_gid_table)
+               rtwdev->chip->ops->set_gid_table(rtwdev, vif, conf);
+}
+
+static inline void rtw_chip_cfg_csi_rate(struct rtw_dev *rtwdev, u8 rssi, u8 cur_rate,
+                                        u8 fixrate_en, u8 *new_rate)
+{
+       if (rtwdev->chip->ops->cfg_csi_rate)
+               rtwdev->chip->ops->cfg_csi_rate(rtwdev, rssi, cur_rate,
+                                               fixrate_en, new_rate);
+}
 #endif
index a2e6ef4..98d2ac2 100644 (file)
@@ -375,11 +375,8 @@ static void rtw_ops_bss_info_changed(struct ieee80211_hw *hw,
        if (changed & BSS_CHANGED_BEACON)
                rtw_fw_download_rsvd_page(rtwdev);
 
-       if (changed & BSS_CHANGED_MU_GROUPS) {
-               struct rtw_chip_info *chip = rtwdev->chip;
-
-               chip->ops->set_gid_table(rtwdev, vif, conf);
-       }
+       if (changed & BSS_CHANGED_MU_GROUPS)
+               rtw_chip_set_gid_table(rtwdev, vif, conf);
 
        if (changed & BSS_CHANGED_ERP_SLOT)
                rtw_conf_tx(rtwdev, rtwvif);
index 1e1d2c7..6dfe489 100644 (file)
@@ -137,7 +137,6 @@ struct rtw_watch_dog_iter_data {
 static void rtw_dynamic_csi_rate(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif)
 {
        struct rtw_bf_info *bf_info = &rtwdev->bf_info;
-       struct rtw_chip_info *chip = rtwdev->chip;
        u8 fix_rate_enable = 0;
        u8 new_csi_rate_idx;
 
@@ -145,9 +144,9 @@ static void rtw_dynamic_csi_rate(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif)
            rtwvif->bfee.role != RTW_BFEE_MU)
                return;
 
-       chip->ops->cfg_csi_rate(rtwdev, rtwdev->dm_info.min_rssi,
-                               bf_info->cur_csi_rpt_rate,
-                               fix_rate_enable, &new_csi_rate_idx);
+       rtw_chip_cfg_csi_rate(rtwdev, rtwdev->dm_info.min_rssi,
+                             bf_info->cur_csi_rpt_rate,
+                             fix_rate_enable, &new_csi_rate_idx);
 
        if (new_csi_rate_idx != bf_info->cur_csi_rpt_rate)
                bf_info->cur_csi_rpt_rate = new_csi_rate_idx;
index cccf05e..5798a58 100644 (file)
@@ -16,6 +16,9 @@
 
 static struct rtw_chip_ops rtw8723d_ops = {
        .set_antenna            = NULL,
+       .config_bfee            = NULL,
+       .set_gid_table          = NULL,
+       .cfg_csi_rate           = NULL,
 };
 
 struct rtw_chip_info rtw8723d_hw_spec = {