wifi: ath11k: refactor vif parameter configurations
authorAloka Dixit <quic_alokad@quicinc.com>
Fri, 5 May 2023 13:11:28 +0000 (16:11 +0300)
committerKalle Valo <quic_kvalo@quicinc.com>
Tue, 9 May 2023 16:58:57 +0000 (19:58 +0300)
Security parameters for each non-transmitting profile can be
different when MBSSID is enabled and this information is included
in the MBSSID element in the Beacon frame. Current implementation
to set rsnie_present and wpaie_present does not parse this element
hence it applies only to the transmitting interface.

Move the code to a separate function to make additions for
non-transmitting interfaces cleaner.

Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1

Signed-off-by: Aloka Dixit <quic_alokad@quicinc.com>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://lore.kernel.org/r/20230405221648.17950-6-quic_alokad@quicinc.com
drivers/net/wireless/ath/ath11k/mac.c

index e04a8642d19c169bbb79ae5b4fc3d07624ff6c23..adb2122fe3400460a2389178474ce1792b635992 100644 (file)
@@ -1351,28 +1351,14 @@ err_mon_del:
        return ret;
 }
 
-static int ath11k_mac_setup_bcn_tmpl(struct ath11k_vif *arvif)
+static void ath11k_mac_set_vif_params(struct ath11k_vif *arvif,
+                                     struct sk_buff *bcn)
 {
-       struct ath11k *ar = arvif->ar;
-       struct ath11k_base *ab = ar->ab;
-       struct ieee80211_hw *hw = ar->hw;
-       struct ieee80211_vif *vif = arvif->vif;
-       struct ieee80211_mutable_offsets offs = {};
-       struct sk_buff *bcn;
        struct ieee80211_mgmt *mgmt;
        u8 *ies;
-       int ret;
-
-       if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
-               return 0;
-
-       bcn = ieee80211_beacon_get_template(hw, vif, &offs, 0);
-       if (!bcn) {
-               ath11k_warn(ab, "failed to get beacon template from mac80211\n");
-               return -EPERM;
-       }
 
        ies = bcn->data + ieee80211_get_hdrlen_from_skb(bcn);
+       mgmt = (struct ieee80211_mgmt *)bcn->data;
        ies += sizeof(mgmt->u.beacon);
 
        if (cfg80211_find_ie(WLAN_EID_RSN, ies, (skb_tail_pointer(bcn) - ies)))
@@ -1386,7 +1372,28 @@ static int ath11k_mac_setup_bcn_tmpl(struct ath11k_vif *arvif)
                arvif->wpaie_present = true;
        else
                arvif->wpaie_present = false;
+}
+
+static int ath11k_mac_setup_bcn_tmpl(struct ath11k_vif *arvif)
+{
+       struct ath11k *ar = arvif->ar;
+       struct ath11k_base *ab = ar->ab;
+       struct ieee80211_hw *hw = ar->hw;
+       struct ieee80211_vif *vif = arvif->vif;
+       struct ieee80211_mutable_offsets offs = {};
+       struct sk_buff *bcn;
+       int ret;
+
+       if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
+               return 0;
+
+       bcn = ieee80211_beacon_get_template(hw, vif, &offs, 0);
+       if (!bcn) {
+               ath11k_warn(ab, "failed to get beacon template from mac80211\n");
+               return -EPERM;
+       }
 
+       ath11k_mac_set_vif_params(arvif, bcn);
        ret = ath11k_wmi_bcn_tmpl(ar, arvif->vdev_id, &offs, bcn);
 
        kfree_skb(bcn);