Browse Source

qcacld-3.0: Add FW capability check for Multipass SAP

Add check to determine whether FW support multipass
SAP before enabling multipass support

Change-Id: I7db5a7bad6b9ac89c8c4e7c4c177695671402657
CRs-Fixed: 3515310
Vijay Raj 1 year ago
parent
commit
cb03ca8b08

+ 8 - 0
components/mlme/dispatcher/inc/wlan_mlme_api.h

@@ -3820,6 +3820,14 @@ QDF_STATUS wlan_mlme_get_phy_max_freq_range(struct wlan_objmgr_psoc *psoc,
 					    uint32_t *low_5ghz_chan,
 					    uint32_t *high_5ghz_chan);
 
+/**
+ * wlan_mlme_is_multipass_sap() -Get multipass sap support
+ * @psoc: psoc pointer
+ *
+ * Return: True, if FW support multipass support.
+ */
+bool wlan_mlme_is_multipass_sap(struct wlan_objmgr_psoc *psoc);
+
 #ifdef FEATURE_WDS
 /**
  * wlan_mlme_get_wds_mode() - Check wds mode supported

+ 15 - 0
components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h

@@ -2979,6 +2979,21 @@ ucfg_mlme_get_eht_mode(struct wlan_objmgr_psoc *psoc, enum wlan_eht_mode *value)
 	return wlan_mlme_get_eht_mode(psoc, value);
 }
 
+/**
+ * ucfg_mlme_is_multipass_sap() - check whether FW supports
+ * multipass sap capabilities
+ * @psoc: pointer to psoc object
+ *
+ * Inline UCFG API to be used by HDD/OSIF callers
+ *
+ * Return: True if FW support mulitpass sap
+ */
+static inline bool
+ucfg_mlme_is_multipass_sap(struct wlan_objmgr_psoc *psoc)
+{
+	return  wlan_mlme_is_multipass_sap(psoc);
+}
+
 /**
  * ucfg_mlme_set_emlsr_mode_enabled() - Set eMLSR mode flag
  * @psoc: pointer to psoc object

+ 13 - 0
components/mlme/dispatcher/src/wlan_mlme_api.c

@@ -6077,6 +6077,19 @@ bool mlme_get_user_ps(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
 	return usr_ps_enable;
 }
 
+bool wlan_mlme_is_multipass_sap(struct wlan_objmgr_psoc *psoc)
+{
+	struct target_psoc_info *info;
+
+	info = wlan_psoc_get_tgt_if_handle(psoc);
+	if (!info) {
+		mlme_legacy_err("target_psoc_info is null");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	return target_is_multipass_sap(info);
+}
+
 QDF_STATUS wlan_mlme_get_phy_max_freq_range(struct wlan_objmgr_psoc *psoc,
 					    uint32_t *low_2ghz_chan,
 					    uint32_t *high_2ghz_chan,

+ 20 - 12
core/hdd/src/wlan_hdd_cfg80211.c

@@ -20298,12 +20298,14 @@ void wlan_hdd_set_32bytes_kck_support(struct wiphy *wiphy)
 #endif
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 5, 0))
-static void wlan_hdd_set_vlan_offload(struct wiphy *wiphy)
+static void wlan_hdd_set_vlan_offload(struct hdd_context *hdd_ctx)
 {
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_VLAN_OFFLOAD);
+	if (ucfg_mlme_is_multipass_sap(hdd_ctx->psoc))
+		wiphy_ext_feature_set(hdd_ctx->wiphy,
+				      NL80211_EXT_FEATURE_VLAN_OFFLOAD);
 }
 #else
-static void wlan_hdd_set_vlan_offload(struct wiphy *wiphy)
+static void wlan_hdd_set_vlan_offload(struct hdd_context *hdd_ctx)
 {
 }
 #endif
@@ -20405,7 +20407,7 @@ void wlan_hdd_update_wiphy(struct hdd_context *hdd_ctx)
 	wlan_hdd_set_ext_kek_kck_support(wiphy);
 	wlan_hdd_set_32bytes_kck_support(wiphy);
 	wlan_hdd_set_nan_secure_mode(wiphy);
-	wlan_hdd_set_vlan_offload(wiphy);
+	wlan_hdd_set_vlan_offload(hdd_ctx);
 }
 
 /**
@@ -21443,10 +21445,14 @@ static int __wlan_hdd_change_station(struct wiphy *wiphy,
 			 * For Encrypted SAP session, this will be done as
 			 * part of eSAP_STA_SET_KEY_EVENT
 			 */
-			status = wlan_hdd_set_vlan_config(adapter,
-							  (uint8_t *)mac);
-			if (QDF_IS_STATUS_ERROR(status))
-				return 0;
+
+			if (ucfg_mlme_is_multipass_sap(hdd_ctx->psoc)) {
+				status =
+				wlan_hdd_set_vlan_config(adapter,
+							 (uint8_t *)mac);
+				if (QDF_IS_STATUS_ERROR(status))
+					return 0;
+			}
 
 			if (ap_ctx->encryption_type !=
 			    eCSR_ENCRYPT_TYPE_NONE) {
@@ -21946,11 +21952,13 @@ done:
 					     key_index, cipher);
 
 		if (!pairwise) {
-			soc_txrx_handle =
+			if (ucfg_mlme_is_multipass_sap(hdd_ctx->psoc)) {
+				soc_txrx_handle =
 					wlan_psoc_get_dp_handle(hdd_ctx->psoc);
-			 wlan_hdd_set_vlan_groupkey(soc_txrx_handle,
-						    wlan_vdev_get_id(vdev),
-						    params, key_index);
+				 wlan_hdd_set_vlan_groupkey(soc_txrx_handle,
+							    wlan_vdev_get_id(vdev),
+							    params, key_index);
+			}
 		}
 
 		break;

+ 1 - 0
core/wma/inc/wma.h

@@ -48,6 +48,7 @@
 #include "wmi_unified_param.h"
 #include "wmi.h"
 #include "wlan_cm_roam_public_struct.h"
+#include "target_if.h"
 
 /* Platform specific configuration for max. no. of fragments */
 #define QCA_OL_11AC_TX_MAX_FRAGS            2