qcacld-3.0: Introduce a new compile time flag and INI

Introduce a compile time flag SAE_SINGLE_PMK and new INI
"sae_same_pmk_feature_enabled" to enable/disable SAE
Roaming with same PMK/PMKID feature.

Change-Id: Ifca8ec8bcf6e9a2f1d8409b35390bfee0033bd30
CRs-Fixed: 2616025
diff --git a/Kbuild b/Kbuild
index 3c5862c..4e9155f 100644
--- a/Kbuild
+++ b/Kbuild
@@ -2907,6 +2907,9 @@
 #Flag to enable/disable Adaptive 11r feature
 cppflags-$(CONFIG_ADAPTIVE_11R) += -DWLAN_ADAPTIVE_11R
 
+#Flag to enable/disable sae single pmk feature feature
+cppflags-$(CONFIG_SAE_SINGLE_PMK) += -DWLAN_SAE_SINGLE_PMK
+
 #Flag to enable NUD tracking
 cppflags-$(CONFIG_WLAN_NUD_TRACKING) += -DWLAN_NUD_TRACKING
 
diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c
index 000e9b1..e32d54d 100644
--- a/components/mlme/core/src/wlan_mlme_main.c
+++ b/components/mlme/core/src/wlan_mlme_main.c
@@ -1432,6 +1432,30 @@
 }
 #endif
 
+#ifdef WLAN_SAE_SINGLE_PMK
+/**
+ * mlme_init_sae_single_pmk_cfg() - initialize sae_same_pmk_config
+ * flag
+ * @psoc: Pointer to PSOC
+ * @lfr:  pointer to mlme lfr config
+ *
+ * Return: None
+ */
+static void
+mlme_init_sae_single_pmk_cfg(struct wlan_objmgr_psoc *psoc,
+			     struct wlan_mlme_lfr_cfg *lfr)
+{
+	lfr->sae_same_pmk_feature_enabled = cfg_get(psoc, CFG_SAE_SINGLE_PMK);
+}
+
+#else
+static inline void
+mlme_init_sae_single_pmk_cfg(struct wlan_objmgr_psoc *psoc,
+			     struct wlan_mlme_lfr_cfg *lfr)
+{
+}
+#endif
+
 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
 static void mlme_init_roam_offload_cfg(struct wlan_objmgr_psoc *psoc,
 				       struct wlan_mlme_lfr_cfg *lfr)
@@ -1684,6 +1708,7 @@
 	mlme_init_bss_load_trigger_params(psoc, &lfr->bss_load_trig);
 	mlme_init_adaptive_11r_cfg(psoc, lfr);
 	mlme_init_subnet_detection(psoc, lfr);
+	mlme_init_sae_single_pmk_cfg(psoc, lfr);
 }
 
 static uint32_t
diff --git a/components/mlme/dispatcher/inc/cfg_mlme_lfr.h b/components/mlme/dispatcher/inc/cfg_mlme_lfr.h
index aeefb30..703fa19 100644
--- a/components/mlme/dispatcher/inc/cfg_mlme_lfr.h
+++ b/components/mlme/dispatcher/inc/cfg_mlme_lfr.h
@@ -2414,6 +2414,34 @@
 #define LFR_SUBNET_DETECTION_ALL
 #endif
 
+#ifdef WLAN_SAE_SINGLE_PMK
+/*
+ * <ini>
+ * sae_same_pmk_feature_enabled - Enable/disable sae single pmk feature.
+ * @Min: 0
+ * @Max: 1
+ * @Default: 1
+ *
+ * This INI is to enable/disable SAE Roaming with same PMK/PMKID feature support
+ *
+ * Related: None.
+ *
+ * Supported Feature: Roaming
+ *
+ * Usage: Internal
+ *
+ * </ini>
+ */
+#define CFG_SAE_SINGLE_PMK CFG_INI_BOOL( \
+		"sae_same_pmk_feature_enabled", \
+		true, \
+		"Enable/disable SAE Roaming with same PMK/PMKID")
+
+#define SAE_SINGLE_PMK_ALL CFG(CFG_SAE_SINGLE_PMK)
+#else
+#define SAE_SINGLE_PMK_ALL
+#endif
+
 #ifdef WLAN_ADAPTIVE_11R
 /*
  * <ini>
@@ -2658,6 +2686,7 @@
 	ADAPTIVE_11R_ALL \
 	ROAM_OFFLOAD_ALL \
 	LFR_ESE_ALL \
-	LFR_SUBNET_DETECTION_ALL
+	LFR_SUBNET_DETECTION_ALL \
+	SAE_SINGLE_PMK_ALL
 
 #endif /* CFG_MLME_LFR_H__ */
diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
index 1513d6a..e53b5f8 100644
--- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
+++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
@@ -1521,6 +1521,8 @@
  * @fw_akm_bitmap:                  Supported Akm suites of firmware
  * @roam_full_scan_period: Idle period in seconds between two successive
  * full channel roam scans
+ * @sae_same_pmk_feature_enabled: Contains value of ini
+ * sae_same_pmk_feature_enabled
  */
 struct wlan_mlme_lfr_cfg {
 	bool mawc_roam_enabled;
@@ -1624,6 +1626,9 @@
 	uint32_t roam_scan_period_after_inactivity;
 	uint32_t fw_akm_bitmap;
 	uint32_t roam_full_scan_period;
+#ifdef WLAN_SAE_SINGLE_PMK
+	bool sae_same_pmk_feature_enabled;
+#endif
 };
 
 /**
diff --git a/configs/default_defconfig b/configs/default_defconfig
index 9cd1dcd..701cf65 100644
--- a/configs/default_defconfig
+++ b/configs/default_defconfig
@@ -235,6 +235,9 @@
 #Flag to enable Adaptive 11r feature
 CONFIG_ADAPTIVE_11R := y
 
+#Flag to enable sae single pmk feature
+CONFIG_SAE_SINGLE_PMK := y
+
 #Flag to enable FILS Feature (11ai)
 CONFIG_WLAN_FEATURE_FILS := y
 ifneq ($(CONFIG_QCA_CLD_WLAN),)