1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- From cb9bea773c85e372931cd7a177db4165adf29d95 Mon Sep 17 00:00:00 2001
- From: Aloka Dixit <quic_alokad@quicinc.com>
- Date: Fri, 5 May 2023 16:11:28 +0300
- Subject: [PATCH 75/77] wifi: ath11k: refactor vif parameter configurations
- 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 | 41 ++++++++++++++++-----------
- 1 file changed, 24 insertions(+), 17 deletions(-)
- --- a/drivers/net/wireless/ath/ath11k/mac.c
- +++ b/drivers/net/wireless/ath/ath11k/mac.c
- @@ -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(str
- 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);
|