瀏覽代碼

qcacld-3.0: Move code from CSR to new RSO structs part 3

Move code from CSR to roam scan offload to use new converged
structures.

Change-Id: I418be56d452389a9f7b8d48e28f793567e81767a
CRs-Fixed: 2857606
gaurank kathpalia 4 年之前
父節點
當前提交
64449a8609

+ 8 - 0
components/mlme/core/inc/wlan_mlme_main.h

@@ -243,6 +243,13 @@ struct mscs_req_info {
 };
 #endif
 
+struct ft_context {
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+	uint32_t r0kh_id_len;
+	uint8_t r0kh_id[ROAM_R0KH_ID_MAX_LEN];
+#endif
+};
+
 /**
  * struct mlme_connect_info - mlme connect information
  * @timing_meas_cap: Timing meas cap
@@ -263,6 +270,7 @@ struct mlme_connect_info {
 #endif
 	uint8_t uapsd_per_ac_bitmask;
 	bool qos_enabled;
+	struct ft_context ft_info;
 };
 
 /**

+ 2 - 2
components/mlme/core/src/wlan_mlme_main.c

@@ -2983,11 +2983,11 @@ int8_t wlan_get_cfg_max_tx_power(struct wlan_objmgr_psoc *psoc,
 
 	/* Identify the channel and maxtxpower */
 	rem_length = cfg_length;
-	while (rem_length >= (sizeof(tSirMacChanInfo))) {
+	while (rem_length >= (sizeof(struct pwr_channel_info))) {
 		maxChannels = country_info[count].num_chan;
 		max_tx_pwr = country_info[count].max_tx_pwr;
 		count++;
-		rem_length -= (sizeof(tSirMacChanInfo));
+		rem_length -= (sizeof(struct pwr_channel_info));
 
 		if (ch_freq >= country_info[count].first_freq &&
 		    ch_freq < (country_info[count].first_freq + maxChannels)) {

+ 7 - 7
components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c

@@ -150,7 +150,7 @@ static uint32_t ucfg_mlme_convert_power_cfg_chan_to_freq(
 						uint8_t *power_freq_data)
 {
 	uint32_t count = 0, rem_length = length, copied_length = 0, i = 0;
-	tSirMacChanInfo *pwr_cfg_data;
+	struct pwr_channel_info *pwr_cfg_data;
 
 	pwr_cfg_data = qdf_mem_malloc(max_length);
 	if (!pwr_cfg_data)
@@ -158,18 +158,18 @@ static uint32_t ucfg_mlme_convert_power_cfg_chan_to_freq(
 
 	mlme_legacy_debug("max_length %d length %zu", max_length, length);
 	while ((rem_length >= 3) &&
-	       (copied_length <= (max_length - (sizeof(tSirMacChanInfo))))) {
+	       (copied_length <= (max_length - (sizeof(struct pwr_channel_info))))) {
 		pwr_cfg_data[i].first_freq = wlan_reg_chan_to_freq(
 						pdev,
 						power_chan_data[count++]);
-		pwr_cfg_data[i].numChannels = power_chan_data[count++];
-		pwr_cfg_data[i].maxTxPower = power_chan_data[count++];
-		copied_length += sizeof(tSirMacChanInfo);
+		pwr_cfg_data[i].num_chan = power_chan_data[count++];
+		pwr_cfg_data[i].max_tx_pwr = power_chan_data[count++];
+		copied_length += sizeof(struct pwr_channel_info);
 		rem_length -= 3;
 		mlme_legacy_debug("First freq %d num channels %d max tx power %d",
 				  pwr_cfg_data[i].first_freq,
-				  pwr_cfg_data[i].numChannels,
-				  pwr_cfg_data[i].maxTxPower);
+				  pwr_cfg_data[i].num_chan,
+				  pwr_cfg_data[i].max_tx_pwr);
 		i++;
 	}
 

+ 266 - 3
components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c

@@ -189,6 +189,269 @@ cm_roam_idle_params(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
 	wlan_mlme_get_idle_roam_min_rssi(psoc, &params->conn_ap_min_rssi);
 	wlan_mlme_get_idle_roam_band(psoc, &params->band);
 }
+
+#define RSN_CAPS_SHIFT 16
+
+#ifdef WLAN_ADAPTIVE_11R
+static inline void
+cm_update_rso_adaptive_11r(struct wlan_rso_11r_params *dst,
+			   struct rso_config *rso_cfg)
+{
+	dst->is_adaptive_11r = rso_cfg->is_adaptive_11r_connection;
+}
+#else
+static inline void
+cm_update_rso_adaptive_11r(struct wlan_rso_11r_params *dst,
+			   struct rso_config *rso_cfg)
+{}
+#endif
+
+#ifdef FEATURE_WLAN_ESE
+static void
+cm_update_rso_ese_info(struct rso_config *rso_cfg,
+		       struct wlan_roam_scan_offload_params *rso_config)
+{
+	rso_config->rso_ese_info.is_ese_assoc = rso_cfg->is_ese_assoc;
+	rso_config->rso_11r_info.is_11r_assoc = rso_cfg->is_11r_assoc;
+}
+#else
+static inline void
+cm_update_rso_ese_info(struct rso_config *rso_cfg,
+		       struct wlan_roam_scan_offload_params *rso_config)
+{}
+#endif
+
+#ifdef WLAN_SAE_SINGLE_PMK
+static bool
+csr_cm_fill_rso_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
+				    struct wlan_mlme_psoc_ext_obj *mlme_obj,
+				    struct wlan_rso_11i_params *rso_11i_info)
+{
+	struct wlan_mlme_sae_single_pmk single_pmk;
+
+	wlan_mlme_get_sae_single_pmk_info(vdev, &single_pmk);
+
+	if (single_pmk.pmk_info.pmk_len && single_pmk.sae_single_pmk_ap &&
+	    mlme_obj->cfg.lfr.sae_single_pmk_feature_enabled) {
+		mlme_debug("Update pmk with len %d same_pmk_info %d",
+			  single_pmk.pmk_info.pmk_len,
+			  single_pmk.sae_single_pmk_ap);
+
+		rso_11i_info->pmk_len = single_pmk.pmk_info.pmk_len;
+		/* Update sae same pmk info in rso */
+		qdf_mem_copy(rso_11i_info->psk_pmk, single_pmk.pmk_info.pmk,
+			     rso_11i_info->pmk_len);
+		rso_11i_info->is_sae_same_pmk = single_pmk.sae_single_pmk_ap;
+		return true;
+	}
+
+	return false;
+}
+#else
+static inline bool
+csr_cm_fill_rso_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
+				    struct wlan_mlme_psoc_ext_obj *mlme_obj,
+				    struct wlan_rso_11i_params *rso_11i_info)
+{
+	return false;
+}
+#endif
+
+static QDF_STATUS
+cm_roam_scan_offload_fill_lfr3_config(struct wlan_objmgr_vdev *vdev,
+			struct rso_config *rso_cfg,
+			struct wlan_roam_scan_offload_params *rso_config,
+			struct wlan_mlme_psoc_ext_obj *mlme_obj,
+			uint8_t command, uint32_t *mode)
+{
+	tSirMacCapabilityInfo self_caps;
+	tSirMacQosInfoStation sta_qos_info;
+	uint16_t *final_caps_val;
+	uint8_t *qos_cfg_val, temp_val;
+	uint32_t pmkid_modes = mlme_obj->cfg.sta.pmkid_modes;
+	uint32_t val = 0;
+	uint8_t vdev_id = wlan_vdev_get_id(vdev);
+	qdf_size_t val_len;
+	QDF_STATUS status;
+	uint16_t rsn_caps = 0;
+	int32_t uccipher, authmode, akm;
+	struct wlan_objmgr_pdev *pdev;
+	struct wlan_objmgr_psoc *psoc;
+	struct cm_roam_values_copy roam_config;
+	struct mlme_legacy_priv *mlme_priv;
+	uint8_t uapsd_mask;
+
+	mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
+	if (!mlme_priv)
+		return QDF_STATUS_E_FAILURE;
+
+	pdev = wlan_vdev_get_pdev(vdev);
+	if (!pdev)
+		return QDF_STATUS_E_INVAL;
+	psoc = wlan_pdev_get_psoc(pdev);
+	if (!psoc)
+		return QDF_STATUS_E_INVAL;
+
+	rso_config->roam_offload_enabled =
+		mlme_obj->cfg.lfr.lfr3_roaming_offload;
+	if (!rso_config->roam_offload_enabled)
+		return QDF_STATUS_SUCCESS;
+
+	/* FILL LFR3 specific roam scan mode TLV parameters */
+	rso_config->rso_lfr3_params.roam_rssi_cat_gap =
+		mlme_obj->cfg.lfr.rso_user_config.cat_rssi_offset;
+	rso_config->rso_lfr3_params.prefer_5ghz =
+		mlme_obj->cfg.lfr.roam_prefer_5ghz;
+	rso_config->rso_lfr3_params.select_5ghz_margin =
+		mlme_obj->cfg.gen.select_5ghz_margin;
+	rso_config->rso_lfr3_params.reassoc_failure_timeout =
+		mlme_obj->cfg.timeouts.reassoc_failure_timeout;
+	rso_config->rso_lfr3_params.ho_delay_for_rx =
+		mlme_obj->cfg.lfr.ho_delay_for_rx;
+	rso_config->rso_lfr3_params.roam_retry_count =
+		mlme_obj->cfg.lfr.roam_preauth_retry_count;
+	rso_config->rso_lfr3_params.roam_preauth_no_ack_timeout =
+		mlme_obj->cfg.lfr.roam_preauth_no_ack_timeout;
+	rso_config->rso_lfr3_params.rct_validity_timer =
+		mlme_obj->cfg.btm.rct_validity_timer;
+	rso_config->rso_lfr3_params.disable_self_roam =
+		!mlme_obj->cfg.lfr.enable_self_bss_roam;
+	if (!rso_cfg->roam_control_enable &&
+	    mlme_obj->cfg.lfr.roam_force_rssi_trigger)
+		*mode |= WMI_ROAM_SCAN_MODE_RSSI_CHANGE;
+	/*
+	 * Self rsn caps aren't sent to firmware, so in case of PMF required,
+	 * the firmware connects to a non PMF AP advertising PMF not required
+	 * in the re-assoc request which violates protocol.
+	 * So send self RSN caps to firmware in roam SCAN offload command to
+	 * let it configure the params in the re-assoc request too.
+	 * Instead of making another infra, send the RSN-CAPS in MSB of
+	 * beacon Caps.
+	 */
+	rsn_caps = rso_cfg->rsn_cap;
+
+	/* Fill LFR3 specific self capabilities for roam scan mode TLV */
+	self_caps.ess = 1;
+	self_caps.ibss = 0;
+
+	val = mlme_obj->cfg.wep_params.is_privacy_enabled;
+	if (val)
+		self_caps.privacy = 1;
+
+	if (mlme_obj->cfg.ht_caps.short_preamble)
+		self_caps.shortPreamble = 1;
+
+	self_caps.pbcc = 0;
+	self_caps.channelAgility = 0;
+
+	if (mlme_obj->cfg.feature_flags.enable_short_slot_time_11g)
+		self_caps.shortSlotTime = 1;
+
+	if (mlme_obj->cfg.gen.enabled_11h)
+		self_caps.spectrumMgt = 1;
+
+	if (mlme_obj->cfg.wmm_params.qos_enabled)
+		self_caps.qos = 1;
+
+	if (mlme_obj->cfg.roam_scoring.apsd_enabled)
+		self_caps.apsd = 1;
+
+	self_caps.rrm = mlme_obj->cfg.rrm_config.rrm_enabled;
+
+	val = mlme_obj->cfg.feature_flags.enable_block_ack;
+	self_caps.delayedBA =
+		(uint16_t)((val >> WNI_CFG_BLOCK_ACK_ENABLED_DELAYED) & 1);
+	self_caps.immediateBA =
+		(uint16_t)((val >> WNI_CFG_BLOCK_ACK_ENABLED_IMMEDIATE) & 1);
+	final_caps_val = (uint16_t *)&self_caps;
+
+	rso_config->rso_lfr3_caps.capability =
+		(rsn_caps << RSN_CAPS_SHIFT) | ((*final_caps_val) & 0xFFFF);
+
+	rso_config->rso_lfr3_caps.ht_caps_info =
+		*(uint16_t *)&mlme_obj->cfg.ht_caps.ht_cap_info;
+	rso_config->rso_lfr3_caps.ampdu_param =
+		*(uint8_t *)&mlme_obj->cfg.ht_caps.ampdu_params;
+	rso_config->rso_lfr3_caps.ht_ext_cap =
+		*(uint16_t *)&mlme_obj->cfg.ht_caps.ext_cap_info;
+
+	temp_val = (uint8_t)mlme_obj->cfg.vht_caps.vht_cap_info.tx_bf_cap;
+	rso_config->rso_lfr3_caps.ht_txbf = temp_val & 0xFF;
+	temp_val = (uint8_t)mlme_obj->cfg.vht_caps.vht_cap_info.as_cap;
+	rso_config->rso_lfr3_caps.asel_cap = temp_val & 0xFF;
+
+	qdf_mem_zero(&sta_qos_info, sizeof(tSirMacQosInfoStation));
+	sta_qos_info.maxSpLen =
+		(uint8_t)mlme_obj->cfg.wmm_params.max_sp_length;
+	sta_qos_info.moreDataAck = 0;
+	sta_qos_info.qack = 0;
+	wlan_cm_roam_cfg_get_value(psoc, vdev_id, UAPSD_MASK, &roam_config);
+	uapsd_mask = roam_config.uint_value;
+	sta_qos_info.acbe_uapsd = SIR_UAPSD_GET(ACBE, uapsd_mask);
+	sta_qos_info.acbk_uapsd = SIR_UAPSD_GET(ACBK, uapsd_mask);
+	sta_qos_info.acvi_uapsd = SIR_UAPSD_GET(ACVI, uapsd_mask);
+	sta_qos_info.acvo_uapsd = SIR_UAPSD_GET(ACVO, uapsd_mask);
+	qos_cfg_val = (uint8_t *)&sta_qos_info;
+	rso_config->rso_lfr3_caps.qos_caps = (*qos_cfg_val) & 0xFF;
+	if (rso_config->rso_lfr3_caps.qos_caps)
+		rso_config->rso_lfr3_caps.qos_enabled = true;
+
+	rso_config->rso_lfr3_caps.wmm_caps = 0x4;
+
+	val_len = ROAM_OFFLOAD_NUM_MCS_SET;
+	status =
+	    wlan_mlme_get_cfg_str((uint8_t *)rso_config->rso_lfr3_caps.mcsset,
+				  &mlme_obj->cfg.rates.supported_mcs_set,
+				  &val_len);
+	if (QDF_IS_STATUS_ERROR(status)) {
+		mlme_err("Failed to get CFG_SUPPORTED_MCS_SET");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	/* Update 11i TLV related Fields */
+	rso_config->rso_11i_info.roam_key_mgmt_offload_enabled =
+			mlme_obj->cfg.lfr.lfr3_roaming_offload;
+	rso_config->rso_11i_info.fw_okc =
+			(pmkid_modes & CFG_PMKID_MODES_OKC) ? 1 : 0;
+	rso_config->rso_11i_info.fw_pmksa_cache =
+			(pmkid_modes & CFG_PMKID_MODES_PMKSA_CACHING) ? 1 : 0;
+
+	/* Check whether to send psk_pmk or sae_single pmk info */
+	if (!csr_cm_fill_rso_sae_single_pmk_info(vdev, mlme_obj,
+						 &rso_config->rso_11i_info)) {
+		rso_config->rso_11i_info.is_sae_same_pmk = false;
+		wlan_cm_get_psk_pmk(pdev, vdev_id,
+				    rso_config->rso_11i_info.psk_pmk,
+				    &rso_config->rso_11i_info.pmk_len);
+	}
+
+	rso_config->rso_11r_info.enable_ft_im_roaming =
+		mlme_obj->cfg.lfr.enable_ft_im_roaming;
+	rso_config->rso_11r_info.mdid.mdie_present =
+		rso_cfg->mdid.mdie_present;
+	rso_config->rso_11r_info.mdid.mobility_domain =
+		rso_cfg->mdid.mobility_domain;
+	rso_config->rso_11r_info.r0kh_id_length =
+			mlme_priv->connect_info.ft_info.r0kh_id_len;
+	qdf_mem_copy(rso_config->rso_11r_info.r0kh_id,
+		     mlme_priv->connect_info.ft_info.r0kh_id,
+		     mlme_priv->connect_info.ft_info.r0kh_id_len);
+	wlan_cm_get_psk_pmk(pdev, vdev_id,
+			    rso_config->rso_11i_info.psk_pmk,
+			    &rso_config->rso_11i_info.pmk_len);
+
+	cm_update_rso_adaptive_11r(&rso_config->rso_11r_info, rso_cfg);
+	cm_update_rso_ese_info(rso_cfg, rso_config);
+	uccipher = wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_UCAST_CIPHER);
+	authmode = wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_AUTH_MODE);
+	akm = wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_KEY_MGMT);
+
+	rso_config->akm =
+		cm_crpto_authmode_to_wmi_authmode(authmode, akm, uccipher);
+
+	return QDF_STATUS_SUCCESS;
+}
+
 #else
 static inline void
 cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
@@ -220,7 +483,7 @@ cm_roam_idle_params(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
 {
 }
 static inline QDF_STATUS
-wlan_cm_roam_scan_offload_fill_lfr3_config(struct wlan_objmgr_vdev *vdev,
+cm_roam_scan_offload_fill_lfr3_config(struct wlan_objmgr_vdev *vdev,
 			struct rso_config *rso_cfg,
 			struct wlan_roam_scan_offload_params *rso_config,
 			struct wlan_mlme_psoc_ext_obj *mlme_obj,
@@ -1773,8 +2036,8 @@ cm_roam_scan_offload_fill_rso_configs(struct wlan_objmgr_psoc *psoc,
 	if (command == ROAM_SCAN_OFFLOAD_STOP)
 		return;
 
-	wlan_cm_roam_scan_offload_fill_lfr3_config(vdev, rso_cfg, rso_mode_cfg,
-						   mlme_obj, command, &mode);
+	cm_roam_scan_offload_fill_lfr3_config(vdev, rso_cfg, rso_mode_cfg,
+					      mlme_obj, command, &mode);
 	rso_mode_cfg->rso_mode_info.roam_scan_mode = mode;
 	cm_roam_scan_offload_fill_scan_params(psoc, rso_cfg, mlme_obj,
 					      rso_mode_cfg, rso_chan_info,

+ 32 - 6
components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_api.h

@@ -456,6 +456,27 @@ void wlan_add_supported_5Ghz_channels(struct wlan_objmgr_psoc *psoc,
 				      uint8_t *chan_list,
 				      uint8_t *num_chnl,
 				      bool supp_chan_ie);
+#ifdef WLAN_ADAPTIVE_11R
+/**
+ * wlan_get_adaptive_11r_enabled() - Function to check if adaptive 11r
+ * ini is enabled or disabled
+ * @mac: pointer to mac context
+ *
+ * Return: true if adaptive 11r is enabled
+ */
+static inline bool
+wlan_get_adaptive_11r_enabled(struct wlan_mlme_lfr_cfg *lfr_cfg)
+{
+	return lfr_cfg->enable_adaptive_11r;
+}
+#else
+static inline bool
+wlan_get_adaptive_11r_enabled(struct wlan_mlme_lfr_cfg *lfr_cfg)
+{
+	return false;
+}
+#endif
+
 #ifdef WLAN_FEATURE_FILS_SK
 /**
  * wlan_cm_get_fils_connection_info  - Copy fils connection information from
@@ -507,12 +528,6 @@ struct wlan_fils_connection_info *wlan_cm_get_fils_connection_info(
 #endif
 
 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
-QDF_STATUS
-wlan_cm_roam_scan_offload_fill_lfr3_config(struct wlan_objmgr_vdev *vdev,
-			struct rso_config *rso_cfg,
-			struct wlan_roam_scan_offload_params *rso_config,
-			struct wlan_mlme_psoc_ext_obj *mlme_obj,
-			uint8_t command, uint32_t *mode);
 /**
  * wlan_cm_roam_extract_btm_response() - Extract BTM rsp stats
  * @wmi:       wmi handle
@@ -676,6 +691,13 @@ wlan_cm_update_roam_scan_scheme_bitmap(struct wlan_objmgr_psoc *psoc,
  */
 uint32_t wlan_cm_get_roam_scan_scheme_bitmap(struct wlan_objmgr_psoc *psoc,
 					     uint8_t vdev_id);
+void wlan_cm_set_psk_pmk(struct wlan_objmgr_pdev *pdev,
+			 uint8_t vdev_id, uint8_t *psk_pmk,
+			 uint8_t pmk_len);
+
+void wlan_cm_get_psk_pmk(struct wlan_objmgr_pdev *pdev,
+			 uint8_t vdev_id, uint8_t *psk_pmk,
+			 uint8_t *pmk_len);
 #else
 static inline
 void wlan_cm_roam_activate_pcl_per_vdev(struct wlan_objmgr_psoc *psoc,
@@ -755,5 +777,9 @@ uint32_t wlan_cm_get_roam_scan_scheme_bitmap(struct wlan_objmgr_psoc *psoc,
 {
 	return 0;
 }
+static inline void wlan_cm_set_psk_pmk(struct wlan_objmgr_pdev *pdev,
+				       uint8_t vdev_id, uint8_t *psk_pmk,
+				       uint8_t pmk_len)
+{}
 #endif  /* FEATURE_ROAM_OFFLOAD */
 #endif  /* WLAN_CM_ROAM_API_H__ */

+ 28 - 1
components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h

@@ -102,6 +102,11 @@
 #define MAX_BSSID_AVOID_LIST     16
 #define MAX_BSSID_FAVORED      16
 
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+#define ROAM_SCAN_PSK_SIZE    48
+#define ROAM_R0KH_ID_MAX_LEN  48
+#endif
+
 /**
  * struct rso_chan_info - chan info
  * @num_chan: number of channels
@@ -182,6 +187,12 @@ struct wlan_chan_list {
  * @occupied_chan_lst: occupied channel list
  * @roam_candidate_count: candidate count
  * @is_ese_assoc: is ese assoc
+ * @psk_pmk: pmk
+ * @pmk_len: length of pmk
+ * @mdid: mdid info
+ * @is_11r_assoc: is 11r assoc
+ * @is_adaptive_11r_connection: is adaptive 11r connection
+ * @roam_scan_freq_lst: roam freq list
  */
 struct rso_config {
 	uint8_t rsn_cap;
@@ -195,9 +206,17 @@ struct rso_config {
 	struct element_info assoc_ie;
 	struct wlan_chan_list occupied_chan_lst;
 	int8_t roam_candidate_count;
+	uint8_t uapsd_mask;
 #ifdef FEATURE_WLAN_ESE
 	bool is_ese_assoc;
 #endif
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+	uint8_t psk_pmk[ROAM_SCAN_PSK_SIZE];
+	uint8_t pmk_len;
+#endif
+	struct mobility_domain_info mdid;
+	bool is_11r_assoc;
+	bool is_adaptive_11r_connection;
 	struct rso_chan_info roam_scan_freq_lst;
 };
 
@@ -290,6 +309,10 @@ struct rso_config_params {
  * @SCAN_HOME_AWAY: scan and away
  * @NEIGHBOUR_SCAN_REFRESH_PERIOD: scan refresh
  * @ROAM_CONTROL_ENABLE: roam control enable
+ * @UAPSD_MASK: uapsd mask
+ * @MOBILITY_DOMAIN: mobility domain
+ * @IS_11R_CONNECTION: is 11r connection
+ * @ADAPTIVE_11R_CONNECTION: adaptive 11r
  */
 enum roam_cfg_param {
 	RSSI_CHANGE_THRESHOLD,
@@ -310,6 +333,10 @@ enum roam_cfg_param {
 	SCAN_HOME_AWAY,
 	NEIGHBOUR_SCAN_REFRESH_PERIOD,
 	ROAM_CONTROL_ENABLE,
+	UAPSD_MASK,
+	MOBILITY_DOMAIN,
+	IS_11R_CONNECTION,
+	ADAPTIVE_11R_CONNECTION,
 };
 
 /**
@@ -1027,7 +1054,7 @@ struct wlan_rso_11i_params {
 	bool fw_pmksa_cache;
 	bool is_sae_same_pmk;
 	uint8_t psk_pmk[WMI_ROAM_SCAN_PSK_SIZE];
-	uint32_t pmk_len;
+	uint8_t pmk_len;
 };
 
 /**

+ 77 - 0
components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c

@@ -504,6 +504,57 @@ wlan_cm_roam_get_vendor_btm_params(struct wlan_objmgr_psoc *psoc,
 
 	wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
 }
+
+void wlan_cm_set_psk_pmk(struct wlan_objmgr_pdev *pdev,
+			 uint8_t vdev_id, uint8_t *psk_pmk,
+			 uint8_t pmk_len)
+{
+	static struct rso_config *rso_cfg;
+	struct wlan_objmgr_vdev *vdev;
+
+	vdev = wlan_objmgr_get_vdev_by_id_from_pdev(pdev, vdev_id,
+						    WLAN_MLME_CM_ID);
+	if (!vdev) {
+		mlme_err("vdev object is NULL");
+		return;
+	}
+	rso_cfg = wlan_cm_get_rso_config(vdev);
+	if (!rso_cfg) {
+		wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID);
+		return;
+	}
+	qdf_mem_zero(rso_cfg->psk_pmk, sizeof(rso_cfg->psk_pmk));
+	if (psk_pmk)
+		qdf_mem_copy(rso_cfg->psk_pmk, psk_pmk, pmk_len);
+	rso_cfg->pmk_len = pmk_len;
+	wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID);
+}
+
+void wlan_cm_get_psk_pmk(struct wlan_objmgr_pdev *pdev,
+			 uint8_t vdev_id, uint8_t *psk_pmk,
+			 uint8_t *pmk_len)
+{
+	static struct rso_config *rso_cfg;
+	struct wlan_objmgr_vdev *vdev;
+
+	if (!psk_pmk || !pmk_len)
+		return;
+	vdev = wlan_objmgr_get_vdev_by_id_from_pdev(pdev, vdev_id,
+						    WLAN_MLME_CM_ID);
+	if (!vdev) {
+		mlme_err("vdev object is NULL");
+		return;
+	}
+	rso_cfg = wlan_cm_get_rso_config(vdev);
+	if (!rso_cfg) {
+		wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID);
+		return;
+	}
+	qdf_mem_copy(psk_pmk, rso_cfg->psk_pmk, rso_cfg->pmk_len);
+	*pmk_len = rso_cfg->pmk_len;
+	wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID);
+}
+
 #endif
 
 QDF_STATUS wlan_cm_roam_cfg_get_value(struct wlan_objmgr_psoc *psoc,
@@ -578,6 +629,19 @@ QDF_STATUS wlan_cm_roam_cfg_get_value(struct wlan_objmgr_psoc *psoc,
 	case ROAM_CONTROL_ENABLE:
 		dst_config->bool_value = rso_cfg->roam_control_enable;
 		break;
+	case UAPSD_MASK:
+		dst_config->uint_value = rso_cfg->uapsd_mask;
+		break;
+	case MOBILITY_DOMAIN:
+		dst_config->bool_value = rso_cfg->mdid.mdie_present;
+		dst_config->uint_value = rso_cfg->mdid.mobility_domain;
+		break;
+	case IS_11R_CONNECTION:
+		dst_config->bool_value = rso_cfg->is_11r_assoc;
+		break;
+	case ADAPTIVE_11R_CONNECTION:
+		dst_config->bool_value = rso_cfg->is_adaptive_11r_connection;
+		break;
 	default:
 		mlme_err("Invalid roam config requested:%d", roam_cfg_type);
 		status = QDF_STATUS_E_FAILURE;
@@ -926,6 +990,19 @@ wlan_cm_roam_cfg_set_value(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
 			cm_roam_update_cfg(psoc, vdev_id,
 				REASON_NEIGHBOR_SCAN_REFRESH_PERIOD_CHANGED);
 		break;
+	case UAPSD_MASK:
+		rso_cfg->uapsd_mask = src_config->uint_value;
+		break;
+	case MOBILITY_DOMAIN:
+		rso_cfg->mdid.mdie_present = src_config->bool_value;
+		rso_cfg->mdid.mobility_domain = src_config->uint_value;
+		break;
+	case IS_11R_CONNECTION:
+		rso_cfg->is_11r_assoc = src_config->bool_value;
+		break;
+	case ADAPTIVE_11R_CONNECTION:
+		rso_cfg->is_adaptive_11r_connection = src_config->bool_value;
+		break;
 	default:
 		mlme_err("Invalid roam config requested:%d", roam_cfg_type);
 		status = QDF_STATUS_E_FAILURE;

+ 3 - 1
core/hdd/inc/wlan_hdd_assoc.h

@@ -279,6 +279,7 @@ QDF_STATUS hdd_sme_roam_callback(void *context,
 				 eRoamCmdStatus roam_status,
 				 eCsrRoamResult roam_result);
 
+#ifndef FEATURE_CM_ENABLE
 /**
  * hdd_set_genie_to_csr() - set genie to csr
  * @adapter: pointer to adapter
@@ -289,6 +290,7 @@ QDF_STATUS hdd_sme_roam_callback(void *context,
 int hdd_set_genie_to_csr(struct hdd_adapter *adapter,
 			 enum csr_akm_type *rsn_auth_type);
 
+
 /**
  * hdd_set_csr_auth_type() - set csr auth type
  * @adapter: pointer to adapter
@@ -298,7 +300,7 @@ int hdd_set_genie_to_csr(struct hdd_adapter *adapter,
  */
 int hdd_set_csr_auth_type(struct hdd_adapter *adapter,
 			  enum csr_akm_type rsn_auth_type);
-
+#endif
 #ifdef FEATURE_WLAN_TDLS
 /**
  * hdd_roam_register_tdlssta() - register new TDLS station

+ 1 - 3
core/hdd/inc/wlan_hdd_main.h

@@ -4226,6 +4226,7 @@ int hdd_get_rssi_snr_by_bssid(struct hdd_adapter *adapter, const uint8_t *bssid,
  */
 int hdd_reset_limit_off_chan(struct hdd_adapter *adapter);
 
+#ifndef FEATURE_CM_ENABLE
 #if defined(WLAN_FEATURE_FILS_SK) && \
 	(defined(CFG80211_FILS_SK_OFFLOAD_SUPPORT) || \
 		 (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)))
@@ -4238,7 +4239,6 @@ int hdd_reset_limit_off_chan(struct hdd_adapter *adapter);
  */
 void hdd_clear_fils_connection_info(struct hdd_adapter *adapter);
 
-#ifndef FEATURE_CM_ENABLE
 /**
  * hdd_update_hlp_info() - Update HLP packet received in FILS (re)assoc rsp
  * @dev: net device
@@ -4251,11 +4251,9 @@ void hdd_clear_fils_connection_info(struct hdd_adapter *adapter);
  */
 void hdd_update_hlp_info(struct net_device *dev,
 			 struct csr_roam_info *roam_info);
-#endif
 #else
 static inline void hdd_clear_fils_connection_info(struct hdd_adapter *adapter)
 { }
-#ifndef FEATURE_CM_ENABLE
 static inline void hdd_update_hlp_info(struct net_device *dev,
 				       struct csr_roam_info *roam_info)
 {}

+ 9 - 4
core/hdd/src/wlan_hdd_assoc.c

@@ -1740,7 +1740,9 @@ void hdd_clear_roam_profile_ie(struct hdd_adapter *adapter)
 	sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
 	sta_ctx->auth_key_mgmt = 0;
 	qdf_zero_macaddr(&sta_ctx->requested_bssid);
+#ifndef FEATURE_CM_ENABLE
 	hdd_clear_fils_connection_info(adapter);
+#endif
 	hdd_exit();
 }
 
@@ -2621,6 +2623,7 @@ hdd_roam_set_key_complete_handler(struct hdd_adapter *adapter,
 	return QDF_STATUS_SUCCESS;
 }
 
+#ifndef FEATURE_CM_ENABLE
 #if defined(WLAN_FEATURE_FILS_SK) && \
 	(defined(CFG80211_FILS_SK_OFFLOAD_SUPPORT) || \
 		 (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)))
@@ -2646,8 +2649,6 @@ void hdd_clear_fils_connection_info(struct hdd_adapter *adapter)
 }
 #endif
 
-
-#ifndef FEATURE_CM_ENABLE
 /**
  * hdd_association_completion_handler() - association completion handler
  * @adapter: pointer to adapter
@@ -4747,6 +4748,7 @@ bool hdd_is_fils_connection(struct hdd_adapter *adapter)
 	return false;
 }
 #endif
+#ifndef FEATURE_CM_ENABLE
 
 /**
  * hdd_process_genie() - process gen ie
@@ -5320,7 +5322,9 @@ int hdd_set_csr_auth_type(struct hdd_adapter *adapter,
 
 	return 0;
 }
+#endif
 
+#ifndef FEATURE_CM_ENABLE
 #ifdef WLAN_FEATURE_FILS_SK
 static void hdd_initialize_fils_info(struct hdd_adapter *adapter)
 {
@@ -5335,6 +5339,7 @@ static void hdd_initialize_fils_info(struct hdd_adapter *adapter)
 static void hdd_initialize_fils_info(struct hdd_adapter *adapter)
 { }
 #endif
+#endif
 
 void hdd_roam_profile_init(struct hdd_adapter *adapter)
 {
@@ -5376,9 +5381,9 @@ void hdd_roam_profile_init(struct hdd_adapter *adapter)
 	adapter->scan_info.scan_mode = eSIR_ACTIVE_SCAN;
 
 	hdd_clear_roam_profile_ie(adapter);
-
+#ifndef FEATURE_CM_ENABLE
 	hdd_initialize_fils_info(adapter);
-
+#endif
 	hdd_exit();
 }
 

+ 4 - 4
core/hdd/src/wlan_hdd_cfg80211.c

@@ -6191,7 +6191,7 @@ static int __wlan_hdd_cfg80211_keymgmt_set_key(struct wiphy *wiphy,
 					       struct wireless_dev *wdev,
 					       const void *data, int data_len)
 {
-	uint8_t local_pmk[SIR_ROAM_SCAN_PSK_SIZE];
+	uint8_t local_pmk[ROAM_SCAN_PSK_SIZE];
 	struct net_device *dev = wdev->netdev;
 	struct hdd_adapter *hdd_adapter = WLAN_HDD_GET_PRIV_PTR(dev);
 	struct hdd_context *hdd_ctx;
@@ -6206,7 +6206,7 @@ static int __wlan_hdd_cfg80211_keymgmt_set_key(struct wiphy *wiphy,
 	}
 
 	if ((!data) || (data_len <= 0) ||
-	    (data_len > SIR_ROAM_SCAN_PSK_SIZE)) {
+	    (data_len > ROAM_SCAN_PSK_SIZE)) {
 		hdd_err("Invalid data");
 		return -EINVAL;
 	}
@@ -6222,11 +6222,11 @@ static int __wlan_hdd_cfg80211_keymgmt_set_key(struct wiphy *wiphy,
 		return status;
 
 	mac_handle = hdd_ctx->mac_handle;
-	qdf_mem_zero(&local_pmk, SIR_ROAM_SCAN_PSK_SIZE);
+	qdf_mem_zero(&local_pmk, ROAM_SCAN_PSK_SIZE);
 	qdf_mem_copy(local_pmk, data, data_len);
 	sme_roam_set_psk_pmk(mac_handle, hdd_adapter->vdev_id,
 			     local_pmk, data_len, true);
-	qdf_mem_zero(&local_pmk, SIR_ROAM_SCAN_PSK_SIZE);
+	qdf_mem_zero(&local_pmk, ROAM_SCAN_PSK_SIZE);
 	return 0;
 }
 

+ 2 - 1
core/hdd/src/wlan_hdd_main.c

@@ -7182,8 +7182,9 @@ QDF_STATUS hdd_stop_adapter(struct hdd_context *hdd_ctx,
 		wlan_hdd_scan_abort(adapter);
 		wlan_hdd_cleanup_actionframe(adapter);
 		wlan_hdd_cleanup_remain_on_channel_ctx(adapter);
+#ifndef FEATURE_CM_ENABLE
 		hdd_clear_fils_connection_info(adapter);
-
+#endif
 		status = wlan_hdd_flush_pmksa_cache(adapter);
 		if (QDF_IS_STATUS_ERROR(status))
 			hdd_debug("Cannot flush PMKIDCache");

+ 0 - 4
core/mac/inc/sir_api.h

@@ -1800,10 +1800,6 @@ typedef struct sSirSmeProbeReqInd {
 /* Occupied channel list can be dynamic */
 #define CHANNEL_LIST_DYNAMIC                  2
 
-#ifdef WLAN_FEATURE_ROAM_OFFLOAD
-#define SIR_ROAM_SCAN_PSK_SIZE    48
-#define SIR_ROAM_R0KH_ID_MAX_LEN  48
-#endif
 /* SME -> HAL - This is the host offload request. */
 #define SIR_IPV6_NS_OFFLOAD                         2
 #define SIR_OFFLOAD_DISABLE                         0

+ 1 - 7
core/mac/inc/sir_mac_prot_def.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011-2020 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2021 The Linux Foundation. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -854,12 +854,6 @@ typedef struct sSirMacCfParamSetIE {
 	tSirMacCfParamSet cfParams;
 } qdf_packed tSirMacCfParamSetIE;
 
-typedef struct sSirMacChanInfo {
-	uint32_t first_freq;
-	uint8_t numChannels;
-	int8_t maxTxPower;
-} qdf_packed tSirMacChanInfo;
-
 typedef struct sSirMacNonErpPresentIE {
 	uint8_t type;
 	uint8_t length;

+ 31 - 24
core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c

@@ -611,6 +611,36 @@ static void clean_up_ft_sha384(tpSirAssocRsp assoc_rsp, bool sha384_akm)
 	}
 }
 
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+static void lim_set_r0kh(tpSirAssocRsp assoc_rsp, struct pe_session *session)
+{
+	struct mlme_legacy_priv *mlme_priv;
+
+	mlme_priv = wlan_vdev_mlme_get_ext_hdl(session->vdev);
+	if (!mlme_priv)
+		return;
+	if (assoc_rsp->sha384_ft_subelem.r0kh_id.present) {
+		mlme_priv->connect_info.ft_info.r0kh_id_len =
+			assoc_rsp->sha384_ft_subelem.r0kh_id.num_PMK_R0_ID;
+		qdf_mem_copy(mlme_priv->connect_info.ft_info.r0kh_id,
+			     assoc_rsp->sha384_ft_subelem.r0kh_id.PMK_R0_ID,
+			     mlme_priv->connect_info.ft_info.r0kh_id_len);
+	} else if (assoc_rsp->FTInfo.R0KH_ID.present) {
+		mlme_priv->connect_info.ft_info.r0kh_id_len =
+			assoc_rsp->FTInfo.R0KH_ID.num_PMK_R0_ID;
+		qdf_mem_copy(mlme_priv->connect_info.ft_info.r0kh_id,
+			assoc_rsp->FTInfo.R0KH_ID.PMK_R0_ID,
+			mlme_priv->connect_info.ft_info.r0kh_id_len);
+	} else {
+		mlme_priv->connect_info.ft_info.r0kh_id_len = 0;
+		qdf_mem_zero(mlme_priv->connect_info.ft_info.r0kh_id,
+			     ROAM_R0KH_ID_MAX_LEN);
+	}
+}
+#else
+static inline
+void lim_set_r0kh(tpSirAssocRsp assoc_rsp, struct pe_session *session) {}
+#endif
 /**
  * lim_process_assoc_rsp_frame() - Processes assoc response
  * @mac_ctx: Pointer to Global MAC structure
@@ -641,9 +671,6 @@ lim_process_assoc_rsp_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info,
 	tLimMlmAssocCnf assoc_cnf;
 	tSchBeaconStruct *beacon;
 	uint8_t vdev_id = session_entry->vdev_id;
-#ifdef WLAN_FEATURE_ROAM_OFFLOAD
-	struct csr_roam_session *roam_session;
-#endif
 	uint8_t ap_nss;
 	int8_t rssi;
 	QDF_STATUS status;
@@ -793,27 +820,7 @@ lim_process_assoc_rsp_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info,
 
 	lim_update_ric_data(mac_ctx, session_entry, assoc_rsp);
 
-#ifdef WLAN_FEATURE_ROAM_OFFLOAD
-	roam_session =
-		&mac_ctx->roam.roamSession[vdev_id];
-	if (assoc_rsp->sha384_ft_subelem.r0kh_id.present) {
-		roam_session->ftSmeContext.r0kh_id_len =
-			assoc_rsp->sha384_ft_subelem.r0kh_id.num_PMK_R0_ID;
-		qdf_mem_copy(roam_session->ftSmeContext.r0kh_id,
-			     assoc_rsp->sha384_ft_subelem.r0kh_id.PMK_R0_ID,
-			     roam_session->ftSmeContext.r0kh_id_len);
-	} else if (assoc_rsp->FTInfo.R0KH_ID.present) {
-		roam_session->ftSmeContext.r0kh_id_len =
-			assoc_rsp->FTInfo.R0KH_ID.num_PMK_R0_ID;
-		qdf_mem_copy(roam_session->ftSmeContext.r0kh_id,
-			assoc_rsp->FTInfo.R0KH_ID.PMK_R0_ID,
-			roam_session->ftSmeContext.r0kh_id_len);
-	} else {
-		roam_session->ftSmeContext.r0kh_id_len = 0;
-		qdf_mem_zero(roam_session->ftSmeContext.r0kh_id,
-			     SIR_ROAM_R0KH_ID_MAX_LEN);
-	}
-#endif
+	lim_set_r0kh(assoc_rsp, session_entry);
 
 #ifdef FEATURE_WLAN_ESE
 	lim_update_ese_tspec(mac_ctx, session_entry, assoc_rsp);

+ 0 - 1
core/sme/inc/csr_api.h

@@ -746,7 +746,6 @@ typedef struct tagCsrRoamConnectedProfile {
 	tCsrRoamModifyProfileFields modifyProfileFields;
 	bool qosConnection;     /* A connection is QoS enabled */
 	bool qap;               /* AP supports QoS */
-	struct mobility_domain_info mdid;
 	uint32_t dot11Mode;
 #ifndef FEATURE_CM_ENABLE
 	uint8_t proxy_arp_service;

+ 0 - 4
core/sme/inc/csr_internal.h

@@ -569,17 +569,13 @@ struct csr_roam_session {
 #endif
 	uint8_t bRefAssocStartCnt;      /* Tracking assoc start indication */
 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
-	uint8_t psk_pmk[SIR_ROAM_SCAN_PSK_SIZE];
-	size_t pmk_len;
 	struct roam_offload_synch_ind *roam_synch_data;
 #endif
 	tftSMEContext ftSmeContext;
 	bool ch_switch_in_progress;
 	uint8_t nss;
 	bool dhcp_done;
-	uint8_t uapsd_mask;
 	qdf_mc_timer_t roaming_offload_timer;
-	bool is_adaptive_11r_connection;
 	struct csr_disconnect_stats disconnect_stats;
 	qdf_mc_timer_t wait_for_key_timer;
 	struct csr_timer_info wait_for_key_timer_info;

+ 2 - 1
core/sme/inc/csr_neighbor_roam.h

@@ -79,7 +79,6 @@ typedef struct sCsrNeighborRoamControlInfo {
 	uint32_t curr_ap_op_chan_freq; /* current assoc AP */
 	tDblLinkList roamableAPList;    /* List of current FT candidates */
 	struct csr_roam_profile csrNeighborRoamProfile;
-	bool is11rAssoc;
 	tCsr11rAssocNeighborInfo FTRoamInfo;
 #ifdef FEATURE_WLAN_ESE
 	bool isVOAdmitted;
@@ -238,6 +237,7 @@ csr_roam_update_cfg(struct mac_context *mac, uint8_t vdev_id, uint8_t reason)
 uint8_t csr_get_roam_enabled_sta_sessionid(struct mac_context *mac_ctx,
 					   uint8_t vdev_id);
 
+#ifndef FEATURE_CM_ENABLE
 #if defined(WLAN_FEATURE_FILS_SK)
 /**
  * csr_update_fils_config - Update FILS config to CSR roam session
@@ -252,6 +252,7 @@ uint8_t csr_get_roam_enabled_sta_sessionid(struct mac_context *mac_ctx,
 QDF_STATUS csr_update_fils_config(struct mac_context *mac, uint8_t session_id,
 				  struct csr_roam_profile *src_profile);
 #endif
+#endif
 
 QDF_STATUS csr_neighbor_roam_handoff_req_hdlr(struct mac_context *mac, void *pMsg);
 QDF_STATUS csr_neighbor_roam_proceed_with_handoff_req(struct mac_context *mac,

+ 4 - 2
core/sme/inc/sme_api.h

@@ -2866,6 +2866,7 @@ QDF_STATUS sme_send_rso_connect_params(mac_handle_t mac_handle,
 				       struct csr_roam_profile *src_profile);
 
 #if defined(WLAN_FEATURE_FILS_SK)
+#ifndef FEATURE_CM_ENABLE
 /**
  * sme_update_fils_config - Update FILS config to CSR roam session
  * @mac_handle: Opaque handle to the global MAC context
@@ -2878,7 +2879,7 @@ QDF_STATUS sme_send_rso_connect_params(mac_handle_t mac_handle,
  */
 QDF_STATUS sme_update_fils_config(mac_handle_t mac_handle, uint8_t vdev_id,
 				  struct csr_roam_profile *src_profile);
-
+#endif
 /**
  * sme_free_join_rsp_fils_params - free fils params
  * @roam_info: roam info
@@ -2887,13 +2888,14 @@ QDF_STATUS sme_update_fils_config(mac_handle_t mac_handle, uint8_t vdev_id,
  */
 void sme_free_join_rsp_fils_params(struct csr_roam_info *roam_info);
 #else
+#ifndef FEATURE_CM_ENABLE
 static inline
 QDF_STATUS sme_update_fils_config(mac_handle_t mac_handle, uint8_t vdev_id,
 				  struct csr_roam_profile *src_profile)
 {
 	return QDF_STATUS_SUCCESS;
 }
-
+#endif
 static inline
 void sme_free_join_rsp_fils_params(struct csr_roam_info *roam_info)
 {}

+ 1 - 5
core/sme/inc/sme_ft_api.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2016, 2018, 2019-2020 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2016, 2018, 2019-2021 The Linux Foundation. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -61,10 +61,6 @@ typedef struct sFTSMEContext {
 	/* Time to trigger reassoc once pre-auth is successful */
 	qdf_mc_timer_t preAuthReassocIntvlTimer;
 	bool addMDIE;
-#ifdef WLAN_FEATURE_ROAM_OFFLOAD
-	uint32_t r0kh_id_len;
-	uint8_t r0kh_id[SIR_ROAM_R0KH_ID_MAX_LEN];
-#endif
 	/* User context for the timer callback */
 	tpFTRoamCallbackUsrCtx pUsrCtx;
 } tftSMEContext, *tpftSMEContext;

+ 2 - 1
core/sme/src/common/sme_api.c

@@ -6106,6 +6106,7 @@ QDF_STATUS sme_send_rso_connect_params(mac_handle_t mac_handle,
 }
 
 #ifdef WLAN_FEATURE_FILS_SK
+#ifndef FEATURE_CM_ENABLE
 QDF_STATUS sme_update_fils_config(mac_handle_t mac_handle, uint8_t vdev_id,
 				  struct csr_roam_profile *src_profile)
 {
@@ -6116,7 +6117,7 @@ QDF_STATUS sme_update_fils_config(mac_handle_t mac_handle, uint8_t vdev_id,
 
 	return status;
 }
-
+#endif
 void sme_send_hlp_ie_info(mac_handle_t mac_handle, uint8_t vdev_id,
 			  struct csr_roam_profile *profile, uint32_t if_addr)
 {

+ 2 - 3
core/sme/src/common/sme_ft_api.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -417,11 +417,10 @@ void sme_reset_key(mac_handle_t mac_handle, uint32_t vdev_id)
 		return;
 	}
 
+	wlan_cm_set_psk_pmk(mac->pdev, vdev_id, NULL, 0);
 	session = CSR_GET_SESSION(mac, vdev_id);
 	if (!session)
 		return;
-	qdf_mem_zero(&session->psk_pmk, sizeof(session->psk_pmk));
-	session->pmk_len = 0;
 	sme_reset_esecckm_info(session);
 }
 #endif

+ 147 - 411
core/sme/src/csr/csr_api_roam.c

@@ -2553,8 +2553,8 @@ static QDF_STATUS csr_init11d_info(struct mac_context *mac, tCsr11dinfo *ps11din
 	QDF_STATUS status = QDF_STATUS_E_FAILURE;
 	uint8_t index;
 	uint32_t count = 0;
-	tSirMacChanInfo *pChanInfo;
-	tSirMacChanInfo *pChanInfoStart;
+	struct pwr_channel_info *pChanInfo;
+	struct pwr_channel_info *pChanInfoStart;
 	bool applyConfig = true;
 
 	if (!ps11dinfo)
@@ -2587,25 +2587,25 @@ static QDF_STATUS csr_init11d_info(struct mac_context *mac, tCsr11dinfo *ps11din
 	}
 	/* need to add the max power channel list */
 	pChanInfo =
-		qdf_mem_malloc(sizeof(tSirMacChanInfo) *
+		qdf_mem_malloc(sizeof(struct pwr_channel_info) *
 			       CFG_VALID_CHANNEL_LIST_LEN);
 	if (pChanInfo) {
 		pChanInfoStart = pChanInfo;
 		for (index = 0; index < ps11dinfo->Channels.numChannels;
 		     index++) {
 			pChanInfo->first_freq = ps11dinfo->ChnPower[index].first_chan_freq;
-			pChanInfo->numChannels =
+			pChanInfo->num_chan =
 				ps11dinfo->ChnPower[index].numChannels;
-			pChanInfo->maxTxPower =
+			pChanInfo->max_tx_pwr =
 				ps11dinfo->ChnPower[index].maxtxPower;
 			pChanInfo++;
 			count++;
 		}
 		if (count) {
 			status = csr_save_to_channel_power2_g_5_g(mac,
-							 count *
-							sizeof(tSirMacChanInfo),
-							 pChanInfoStart);
+						count *
+						sizeof(struct pwr_channel_info),
+						pChanInfoStart);
 		}
 		qdf_mem_free(pChanInfoStart);
 	}
@@ -2640,14 +2640,14 @@ QDF_STATUS csr_init_channel_power_list(struct mac_context *mac,
 {
 	uint8_t index;
 	uint32_t count = 0;
-	tSirMacChanInfo *pChanInfo;
-	tSirMacChanInfo *pChanInfoStart;
+	struct pwr_channel_info *pChanInfo;
+	struct pwr_channel_info *pChanInfoStart;
 
 	if (!ps11dinfo || !mac)
 		return QDF_STATUS_E_FAILURE;
 
 	pChanInfo =
-		qdf_mem_malloc(sizeof(tSirMacChanInfo) *
+		qdf_mem_malloc(sizeof(struct pwr_channel_info) *
 			       CFG_VALID_CHANNEL_LIST_LEN);
 	if (pChanInfo) {
 		pChanInfoStart = pChanInfo;
@@ -2655,18 +2655,18 @@ QDF_STATUS csr_init_channel_power_list(struct mac_context *mac,
 		for (index = 0; index < ps11dinfo->Channels.numChannels;
 		     index++) {
 			pChanInfo->first_freq = ps11dinfo->ChnPower[index].first_chan_freq;
-			pChanInfo->numChannels =
+			pChanInfo->num_chan =
 				ps11dinfo->ChnPower[index].numChannels;
-			pChanInfo->maxTxPower =
+			pChanInfo->max_tx_pwr =
 				ps11dinfo->ChnPower[index].maxtxPower;
 			pChanInfo++;
 			count++;
 		}
 		if (count) {
 			csr_save_to_channel_power2_g_5_g(mac,
-							 count *
-							sizeof(tSirMacChanInfo),
-							 pChanInfoStart);
+						count *
+						sizeof(struct pwr_channel_info),
+						pChanInfoStart);
 		}
 		qdf_mem_free(pChanInfoStart);
 	}
@@ -4907,7 +4907,8 @@ static enum csr_join_state csr_roam_join(struct mac_context *mac,
 			 * new Auth type) followed by a new Association.
 			 */
 			if (csr_is_same_profile(mac,
-				&pSession->connectedProfile, pProfile)) {
+				&pSession->connectedProfile, pProfile,
+				sessionId)) {
 				sme_warn("detect same profile");
 				eRoamState =
 					csr_roam_state_for_same_profile(mac,
@@ -6612,6 +6613,7 @@ static void csr_roam_process_join_res(struct mac_context *mac_ctx,
 	uint32_t len;
 	enum csr_akm_type akm_type;
 	uint8_t mdie_present;
+	struct cm_roam_values_copy cfg;
 
 	if (!join_rsp) {
 		sme_err("join_rsp is NULL");
@@ -6786,8 +6788,9 @@ static void csr_roam_process_join_res(struct mac_context *mac_ctx,
 						     &session->connectedInfo);
 
 			akm_type = session->connectedProfile.AuthType;
-			mdie_present =
-				session->connectedProfile.mdid.mdie_present;
+			wlan_cm_roam_cfg_get_value(mac_ctx->psoc, session_id,
+						   MOBILITY_DOMAIN, &cfg);
+			mdie_present = cfg.bool_value;
 			if (akm_type == eCSR_AUTH_TYPE_FT_SAE && mdie_present) {
 				sme_debug("Update the MDID in PMK cache for FT-SAE case");
 				csr_update_pmk_cache_ft(mac_ctx,
@@ -7095,6 +7098,7 @@ static bool csr_roam_process_results(struct mac_context *mac_ctx, tSmeCmd *cmd,
 	return release_cmd;
 }
 
+#ifndef FEATURE_CM_ENABLE
 #ifdef WLAN_FEATURE_FILS_SK
 /*
  * update_profile_fils_info: API to update FILS info from
@@ -7157,6 +7161,7 @@ void update_profile_fils_info(struct mac_context *mac,
 			      uint8_t vdev_id)
 {}
 #endif
+#endif
 
 QDF_STATUS csr_roam_copy_profile(struct mac_context *mac,
 				 struct csr_roam_profile *pDstProfile,
@@ -7328,8 +7333,9 @@ QDF_STATUS csr_roam_copy_profile(struct mac_context *mac,
 	pDstProfile->mdid = pSrcProfile->mdid;
 	pDstProfile->add_ie_params = pSrcProfile->add_ie_params;
 
+#ifndef FEATURE_CM_ENABLE
 	update_profile_fils_info(mac, pDstProfile, pSrcProfile, vdev_id);
-
+#endif
 	pDstProfile->beacon_tx_rate = pSrcProfile->beacon_tx_rate;
 
 	if (pSrcProfile->supported_rates.numRates) {
@@ -7367,6 +7373,7 @@ QDF_STATUS csr_roam_copy_connected_profile(struct mac_context *mac,
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
 	tCsrRoamConnectedProfile *pSrcProfile =
 		&mac->roam.roamSession[sessionId].connectedProfile;
+	struct cm_roam_values_copy cfg;
 
 	qdf_mem_zero(pDstProfile, sizeof(struct csr_roam_profile));
 
@@ -7413,7 +7420,10 @@ QDF_STATUS csr_roam_copy_connected_profile(struct mac_context *mac,
 	pDstProfile->BSSType = pSrcProfile->BSSType;
 	qdf_mem_copy(&pDstProfile->Keys, &pSrcProfile->Keys,
 		sizeof(pDstProfile->Keys));
-	pDstProfile->mdid = pSrcProfile->mdid;
+	wlan_cm_roam_cfg_get_value(mac->psoc, sessionId,
+				   MOBILITY_DOMAIN, &cfg);
+	pDstProfile->mdid.mobility_domain = cfg.uint_value;
+	pDstProfile->mdid.mdie_present = cfg.bool_value;
 end:
 	if (!QDF_IS_STATUS_SUCCESS(status)) {
 		csr_release_profile(mac, pDstProfile);
@@ -7583,27 +7593,6 @@ QDF_STATUS csr_dequeue_roam_command(struct mac_context *mac,
 	return QDF_STATUS_SUCCESS;
 }
 
-#ifdef WLAN_FEATURE_FILS_SK
-/**
- * csr_is_fils_connection() - API to check if FILS connection
- * @profile: CSR Roam Profile
- *
- * Return: true, if fils connection, false otherwise
- */
-static bool csr_is_fils_connection(struct csr_roam_profile *profile)
-{
-	if (!profile->fils_con_info)
-		return false;
-
-	return profile->fils_con_info->is_fils_connection;
-}
-#else
-static bool csr_is_fils_connection(struct csr_roam_profile *pProfile)
-{
-	return false;
-}
-#endif
-
 #ifdef FEATURE_CM_ENABLE
 QDF_STATUS csr_roam_connect(struct mac_context *mac, uint32_t vdev_id,
 		struct csr_roam_profile *profile,
@@ -7647,6 +7636,27 @@ QDF_STATUS csr_roam_connect(struct mac_context *mac, uint32_t vdev_id,
 }
 #else
 
+#ifdef WLAN_FEATURE_FILS_SK
+/**
+ * csr_is_fils_connection() - API to check if FILS connection
+ * @profile: CSR Roam Profile
+ *
+ * Return: true, if fils connection, false otherwise
+ */
+static bool csr_is_fils_connection(struct csr_roam_profile *profile)
+{
+	if (!profile->fils_con_info)
+		return false;
+
+	return profile->fils_con_info->is_fils_connection;
+}
+#else
+static bool csr_is_fils_connection(struct csr_roam_profile *pProfile)
+{
+	return false;
+}
+#endif
+
 /**
  * csr_roam_print_candidate_aps() - print all candidate AP in sorted
  * score.
@@ -8240,6 +8250,7 @@ csr_roam_save_connected_information(struct mac_context *mac,
 	tDot11fBeaconIEs *pIesTemp = pIes;
 	struct csr_roam_session *pSession = NULL;
 	tCsrRoamConnectedProfile *pConnectProfile = NULL;
+	struct cm_roam_values_copy src_cfg;
 
 	pSession = CSR_GET_SESSION(mac, sessionId);
 	if (!pSession) {
@@ -8275,10 +8286,15 @@ csr_roam_save_connected_information(struct mac_context *mac,
 		sme_err("ERROR: Beacon interval is ZERO");
 	csr_get_bss_id_bss_desc(pSirBssDesc, &pConnectProfile->bssid);
 	if (pSirBssDesc->mdiePresent) {
-		pConnectProfile->mdid.mdie_present = 1;
-		pConnectProfile->mdid.mobility_domain =
-			(pSirBssDesc->mdie[1] << 8) | (pSirBssDesc->mdie[0]);
+		src_cfg.bool_value = true;
+		src_cfg.uint_value = (pSirBssDesc->mdie[1] << 8) |
+				     (pSirBssDesc->mdie[0]);
+	} else {
+		src_cfg.bool_value = false;
+		src_cfg.uint_value = 0;
 	}
+	wlan_cm_roam_cfg_set_value(mac->psoc, sessionId,
+				   MOBILITY_DOMAIN, &src_cfg);
 	if (!pIesTemp)
 		status = csr_get_parsed_bss_description_ies(mac, pSirBssDesc,
 							   &pIesTemp);
@@ -10095,6 +10111,7 @@ static QDF_STATUS csr_roam_issue_set_context_req(struct mac_context *mac_ctx,
 				       WLAN_CRYPTO_KEY_TYPE_GROUP));
 }
 
+#ifndef FEATURE_CM_ENABLE
 static enum wlan_crypto_cipher_type
 csr_encr_to_cipher_type(eCsrEncryptionType encr_type)
 {
@@ -10178,6 +10195,7 @@ QDF_STATUS csr_roam_store_fils_key(struct wlan_objmgr_vdev *vdev,
 	return QDF_STATUS_E_NOSUPPORT;
 }
 #endif
+#endif
 
 QDF_STATUS
 csr_issue_set_context_req_helper(struct mac_context *mac_ctx,
@@ -10187,11 +10205,10 @@ csr_issue_set_context_req_helper(struct mac_context *mac_ctx,
 				 tAniKeyDirection key_direction, uint8_t key_id,
 				 uint16_t key_length, uint8_t *key)
 {
+#ifndef FEATURE_CM_ENABLE
 	enum wlan_crypto_cipher_type cipher;
 	struct wlan_objmgr_vdev *vdev;
-#ifndef FEATURE_CM_ENABLE
 	struct set_context_rsp install_key_rsp;
-#endif
 
 	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac_ctx->psoc, session_id,
 						    WLAN_LEGACY_MAC_ID);
@@ -10208,9 +10225,6 @@ csr_issue_set_context_req_helper(struct mac_context *mac_ctx,
 					profile->negotiatedMCEncryptionType);
 
 	wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
-
-	/* This is temp ifdef will be removed in near future */
-#ifndef FEATURE_CM_ENABLE
 	/*
 	 * For open mode authentication, send dummy install key response to
 	 * send OBSS scan and QOS event.
@@ -12762,6 +12776,7 @@ static ePhyChanBondState csr_get_cb_mode_from_ies(struct mac_context *mac,
 	return eRet;
 }
 
+#ifndef FEATURE_CM_ENABLE
 static bool csr_is_encryption_in_list(struct mac_context *mac,
 				      tCsrEncryptionList *pCipherList,
 				      eCsrEncryptionType encryptionType)
@@ -12795,10 +12810,12 @@ static bool csr_is_auth_in_list(struct mac_context *mac, tCsrAuthList *pAuthList
 
 bool csr_is_same_profile(struct mac_context *mac,
 			 tCsrRoamConnectedProfile *pProfile1,
-			 struct csr_roam_profile *pProfile2)
+			 struct csr_roam_profile *pProfile2,
+			 uint8_t vdev_id)
 {
 	uint32_t i;
 	bool fCheck = false;
+	struct cm_roam_values_copy cfg;
 
 	if (!(pProfile1 && pProfile2))
 		return fCheck;
@@ -12824,8 +12841,10 @@ bool csr_is_same_profile(struct mac_context *mac,
 		fCheck = false;
 		goto exit;
 	}
-	if (pProfile1->mdid.mdie_present || pProfile2->mdid.mdie_present) {
-		if (pProfile1->mdid.mobility_domain !=
+	wlan_cm_roam_cfg_get_value(mac->psoc, vdev_id,
+				   MOBILITY_DOMAIN, &cfg);
+	if (cfg.bool_value || pProfile2->mdid.mdie_present) {
+		if (cfg.uint_value !=
 		    pProfile2->mdid.mobility_domain) {
 			fCheck = false;
 			goto exit;
@@ -12837,7 +12856,6 @@ exit:
 	return fCheck;
 }
 
-#ifndef FEATURE_CM_ENABLE
 static bool csr_roam_is_same_profile_keys(struct mac_context *mac,
 				   tCsrRoamConnectedProfile *pConnProfile,
 				   struct csr_roam_profile *pProfile2)
@@ -13374,20 +13392,12 @@ void csr_roam_prepare_bss_params(struct mac_context *mac, uint32_t sessionId,
 void csr_get_pmk_info(struct mac_context *mac_ctx, uint8_t session_id,
 			  tPmkidCacheInfo *pmk_cache)
 {
-	struct csr_roam_session *session = NULL;
-
 	if (!mac_ctx) {
 		sme_err("Mac_ctx is NULL");
 		return;
 	}
-	session = CSR_GET_SESSION(mac_ctx, session_id);
-	if (!session) {
-		sme_err("session %d not found", session_id);
-		return;
-	}
-	qdf_mem_copy(pmk_cache->pmk, session->psk_pmk,
-					sizeof(session->psk_pmk));
-	pmk_cache->pmk_len = session->pmk_len;
+	wlan_cm_get_psk_pmk(mac_ctx->pdev, session_id, pmk_cache->pmk,
+			    &pmk_cache->pmk_len);
 }
 
 QDF_STATUS csr_roam_set_psk_pmk(struct mac_context *mac, uint8_t vdev_id,
@@ -13409,8 +13419,7 @@ QDF_STATUS csr_roam_set_psk_pmk(struct mac_context *mac, uint8_t vdev_id,
 		sme_err("vdev is NULL");
 		return QDF_STATUS_E_FAILURE;
 	}
-	qdf_mem_copy(session->psk_pmk, psk_pmk, sizeof(session->psk_pmk));
-	session->pmk_len = pmk_len;
+	wlan_cm_set_psk_pmk(mac->pdev, vdev_id, psk_pmk, pmk_len);
 	akm = wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_KEY_MGMT);
 	wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
 
@@ -13505,8 +13514,8 @@ csr_store_sae_single_pmk_to_global_cache(struct mac_context *mac,
 		return;
 	}
 
-	qdf_mem_copy(pmk_info->pmk, session->psk_pmk, session->pmk_len);
-	pmk_info->pmk_len = session->pmk_len;
+	wlan_cm_get_psk_pmk(mac->pdev, vdev_id, pmk_info->pmk,
+			    &pmk_info->pmk_len);
 
 	wlan_mlme_update_sae_single_pmk(vdev, pmk_info);
 
@@ -13523,6 +13532,7 @@ void csr_update_pmk_cache_ft(struct mac_context *mac, uint32_t vdev_id,
 	struct wlan_objmgr_vdev *vdev;
 	struct wlan_crypto_pmksa pmksa;
 	enum QDF_OPMODE vdev_mode;
+	struct cm_roam_values_copy src_cfg;
 
 	if (!session) {
 		sme_err("session not found");
@@ -13553,12 +13563,13 @@ void csr_update_pmk_cache_ft(struct mac_context *mac, uint32_t vdev_id,
 	 */
 	wlan_vdev_get_bss_peer_mac(vdev, &pmksa.bssid);
 	wlan_vdev_mlme_get_ssid(vdev, pmksa.ssid, &pmksa.ssid_len);
+	wlan_cm_roam_cfg_get_value(mac->psoc, vdev_id,
+				   MOBILITY_DOMAIN, &src_cfg);
 	sme_debug("copied the BSSID/SSID from session to PMKSA mdie %d",
-		  session->connectedProfile.mdid.mdie_present);
-	if (session->connectedProfile.mdid.mdie_present) {
+		  src_cfg.bool_value);
+	if (src_cfg.bool_value) {
 		pmksa.mdid.mdie_present = 1;
-		pmksa.mdid.mobility_domain =
-				session->connectedProfile.mdid.mobility_domain;
+		pmksa.mdid.mobility_domain = src_cfg.uint_value;
 		sme_debug("copied the MDID from session to PMKSA");
 
 		status = wlan_crypto_update_pmk_cache_ft(vdev, &pmksa);
@@ -13914,6 +13925,7 @@ static void csr_fill_connected_profile(struct mac_context *mac_ctx,
 	struct bss_description *bss_desc;
 	tDot11fBeaconIEs *bcn_ies;
 	sme_QosAssocInfo assoc_info;
+	struct cm_roam_values_copy src_cfg;
 
 	filter = qdf_mem_malloc(sizeof(*filter));
 	if (!filter)
@@ -13973,10 +13985,15 @@ static void csr_fill_connected_profile(struct mac_context *mac_ctx,
 
 	qdf_copy_macaddr(&conn_profile->bssid, &rsp->connect_rsp.bssid);
 	if (bss_desc->mdiePresent) {
-		conn_profile->mdid.mdie_present = 1;
-		conn_profile->mdid.mobility_domain =
+		src_cfg.bool_value = true;
+		src_cfg.uint_value =
 			(bss_desc->mdie[1] << 8) | (bss_desc->mdie[0]);
+	} else {
+		src_cfg.bool_value = false;
+		src_cfg.uint_value = 0;
 	}
+	wlan_cm_roam_cfg_set_value(mac_ctx->psoc, vdev_id,
+				   MOBILITY_DOMAIN, &src_cfg);
 
 	qdf_mem_zero(conn_profile->country_code, WNI_CFG_COUNTRY_CODE_LEN);
 	if (bcn_ies->Country.present) {
@@ -14019,6 +14036,7 @@ QDF_STATUS cm_csr_connect_rsp(struct wlan_objmgr_vdev *vdev,
 	struct mac_context *mac_ctx;
 	uint8_t vdev_id = wlan_vdev_get_id(vdev);
 	struct csr_roam_session *session;
+	struct cm_roam_values_copy src_config;
 
 	/*
 	 * This API is to update legacy struct and should be removed once
@@ -14042,6 +14060,9 @@ QDF_STATUS cm_csr_connect_rsp(struct wlan_objmgr_vdev *vdev,
 	session->nss = rsp->nss;
 	if (rsp->uapsd_mask)
 		sme_ps_start_uapsd(MAC_HANDLE(mac_ctx), vdev_id);
+	src_config.uint_value = rsp->uapsd_mask;
+	wlan_cm_roam_cfg_set_value(mac_ctx->psoc, vdev_id, UAPSD_MASK,
+				   &src_config);
 	csr_fill_connected_info(mac_ctx, session, rsp);
 	csr_fill_connected_profile(mac_ctx, session, vdev, rsp);
 
@@ -14391,27 +14412,6 @@ static bool csr_enable_twt(struct mac_context *mac_ctx, tDot11fBeaconIEs *ie)
 }
 #endif
 
-#ifdef WLAN_ADAPTIVE_11R
-/**
- * csr_get_adaptive_11r_enabled() - Function to check if adaptive 11r
- * ini is enabled or disabled
- * @mac: pointer to mac context
- *
- * Return: true if adaptive 11r is enabled
- */
-static bool
-csr_get_adaptive_11r_enabled(struct mac_context *mac)
-{
-	return mac->mlme_cfg->lfr.enable_adaptive_11r;
-}
-#else
-static inline bool
-csr_get_adaptive_11r_enabled(struct mac_context *mac)
-{
-	return false;
-}
-#endif
-
 static QDF_STATUS csr_check_and_validate_6g_ap(struct mac_context *mac_ctx,
 					       struct bss_description *bss,
 					       struct join_req *csr_join_req,
@@ -14557,6 +14557,7 @@ QDF_STATUS csr_send_join_req_msg(struct mac_context *mac, uint32_t sessionId,
 #ifdef FEATURE_WLAN_ESE
 	bool ese_config = false;
 #endif
+	struct cm_roam_values_copy src_config;
 
 	if (!pSession) {
 		sme_err("session %d not found", sessionId);
@@ -14670,7 +14671,9 @@ QDF_STATUS csr_send_join_req_msg(struct mac_context *mac, uint32_t sessionId,
 		csr_join_req->wps_registration = pProfile->bWPSAssociation;
 		csr_join_req->force_24ghz_in_ht20 =
 			pProfile->force_24ghz_in_ht20;
-		pSession->uapsd_mask = pProfile->uapsd_mask;
+		src_config.uint_value = pProfile->uapsd_mask;
+		wlan_cm_roam_cfg_set_value(mac->psoc, sessionId, UAPSD_MASK,
+					   &src_config);
 		status =
 			csr_get_rate_set(mac, pIes, &OpRateSet,
 					 &ExRateSet);
@@ -14713,14 +14716,16 @@ QDF_STATUS csr_send_join_req_msg(struct mac_context *mac, uint32_t sessionId,
 		}
 
 		if (pBssDescription->adaptive_11r_ap)
-			pSession->is_adaptive_11r_connection =
-				csr_get_adaptive_11r_enabled(mac);
+			src_config.bool_value =
+				wlan_get_adaptive_11r_enabled(&mac->mlme_cfg->lfr);
 		else
-			pSession->is_adaptive_11r_connection = false;
+			src_config.bool_value = false;
 
 		csr_join_req->is_adaptive_11r_connection =
-				pSession->is_adaptive_11r_connection;
-
+					src_config.bool_value;
+		wlan_cm_roam_cfg_set_value(mac->psoc, sessionId,
+					   ADAPTIVE_11R_CONNECTION,
+					   &src_config);
 		/* rsnIE */
 		if (csr_is_profile_wpa(pProfile)) {
 			/* Insert the Wpa IE into the join request */
@@ -16380,6 +16385,7 @@ uint8_t *wlan_cm_get_rrm_cap_ie_data(void)
 	return (uint8_t *)&mac_ctx->rrm.rrmPEContext.rrmEnabledCaps;
 }
 
+#ifndef FEATURE_CM_ENABLE
 #if defined(WLAN_FEATURE_FILS_SK)
 QDF_STATUS csr_update_fils_config(struct mac_context *mac, uint8_t session_id,
 				  struct csr_roam_profile *src_profile)
@@ -16403,6 +16409,7 @@ QDF_STATUS csr_update_fils_config(struct mac_context *mac, uint8_t session_id,
 	return QDF_STATUS_SUCCESS;
 }
 #endif
+#endif
 
 uint8_t
 csr_get_roam_enabled_sta_sessionid(struct mac_context *mac_ctx, uint8_t vdev_id)
@@ -16430,18 +16437,28 @@ csr_get_roam_enabled_sta_sessionid(struct mac_context *mac_ctx, uint8_t vdev_id)
 
 #ifdef WLAN_ADAPTIVE_11R
 static bool
-csr_is_adaptive_11r_roam_supported(struct mac_context *mac_ctx,
-				   struct csr_roam_session *session)
+csr_is_adaptive_11r_roam_supported(struct wlan_objmgr_psoc *psoc,
+				   uint8_t vdev_id)
 {
-	if (session->is_adaptive_11r_connection)
-		return mac_ctx->mlme_cfg->lfr.tgt_adaptive_11r_cap;
+	struct cm_roam_values_copy config;
+	struct wlan_mlme_psoc_ext_obj *mlme_obj;
+
+	mlme_obj = mlme_get_psoc_ext_obj(psoc);
+	if (!mlme_obj)
+		return false;
+
+	wlan_cm_roam_cfg_get_value(psoc, vdev_id,
+				   ADAPTIVE_11R_CONNECTION,
+				   &config);
+	if (config.bool_value)
+		return mlme_obj->cfg.lfr.tgt_adaptive_11r_cap;
 
 	return true;
 }
 #else
 static bool
-csr_is_adaptive_11r_roam_supported(struct mac_context *mac_ctx,
-				   struct csr_roam_session *session)
+csr_is_adaptive_11r_roam_supported(struct wlan_objmgr_psoc *psoc,
+				   uint8_t vdev_id)
 
 {
 	return true;
@@ -16514,7 +16531,7 @@ wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
 		return QDF_STATUS_E_NOSUPPORT;
 	}
 
-	if (!csr_is_adaptive_11r_roam_supported(mac_ctx, session)) {
+	if (!csr_is_adaptive_11r_roam_supported(mac_ctx->psoc, vdev_id)) {
 		sme_info("Adaptive 11r Roaming not suppprted by fw");
 		return QDF_STATUS_E_NOSUPPORT;
 	}
@@ -16609,289 +16626,6 @@ wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
 	return QDF_STATUS_SUCCESS;
 }
 
-#ifdef WLAN_FEATURE_ROAM_OFFLOAD
-#ifdef WLAN_SAE_SINGLE_PMK
-static bool
-csr_cm_fill_rso_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
-				    struct wlan_mlme_psoc_ext_obj *mlme_obj,
-				    struct wlan_rso_11i_params *rso_11i_info)
-{
-	struct wlan_mlme_sae_single_pmk single_pmk;
-
-	wlan_mlme_get_sae_single_pmk_info(vdev, &single_pmk);
-
-	if (single_pmk.pmk_info.pmk_len && single_pmk.sae_single_pmk_ap &&
-	    mlme_obj->cfg.lfr.sae_single_pmk_feature_enabled) {
-		mlme_debug("Update pmk with len %d same_pmk_info %d",
-			  single_pmk.pmk_info.pmk_len,
-			  single_pmk.sae_single_pmk_ap);
-
-		rso_11i_info->pmk_len = single_pmk.pmk_info.pmk_len;
-		/* Update sae same pmk info in rso */
-		qdf_mem_copy(rso_11i_info->psk_pmk, single_pmk.pmk_info.pmk,
-			     rso_11i_info->pmk_len);
-		rso_11i_info->is_sae_same_pmk = single_pmk.sae_single_pmk_ap;
-		return true;
-	}
-
-	return false;
-}
-#else
-static inline bool
-csr_cm_fill_rso_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
-				    struct wlan_mlme_psoc_ext_obj *mlme_obj,
-				    struct wlan_rso_11i_params *rso_11i_info)
-{
-	return false;
-}
-#endif
-#endif
-
-#ifdef WLAN_FEATURE_ROAM_OFFLOAD
-#define RSN_CAPS_SHIFT 16
-
-#ifdef WLAN_ADAPTIVE_11R
-static void
-csr_cm_update_rso_adaptive_11r(struct wlan_rso_11r_params *dst,
-			       struct csr_roam_session *session)
-{
-	dst->is_adaptive_11r = session->is_adaptive_11r_connection;
-}
-#else
-static inline void
-csr_cm_update_rso_adaptive_11r(struct wlan_rso_11r_params *dst,
-			       struct csr_roam_session *session)
-{}
-#endif
-
-#ifdef FEATURE_WLAN_ESE
-static void
-csr_cm_update_rso_ese_info(struct wlan_objmgr_pdev *pdev,
-			   struct wlan_roam_scan_offload_params *rso_config,
-			   uint8_t vdev_id)
-{
-	struct mac_context *mac;
-	tpCsrNeighborRoamControlInfo roam_info;
-
-	mac = sme_get_mac_context();
-	if (!mac) {
-		mlme_err("mac_ctx is NULL");
-		return;
-	}
-
-	roam_info = &mac->roam.neighborRoamInfo[vdev_id];
-
-	rso_config->rso_ese_info.is_ese_assoc =
-		wlan_cm_get_ese_assoc(pdev, vdev_id);
-	rso_config->rso_11r_info.is_11r_assoc = roam_info->is11rAssoc;
-}
-#else
-static inline void
-csr_cm_update_rso_ese_info(struct wlan_objmgr_pdev *pdev,
-			   struct wlan_roam_scan_offload_params *rso_config,
-			   uint8_t vdev_id)
-{}
-#endif
-
-QDF_STATUS
-wlan_cm_roam_scan_offload_fill_lfr3_config(struct wlan_objmgr_vdev *vdev,
-			struct rso_config *rso_cfg,
-			struct wlan_roam_scan_offload_params *rso_config,
-			struct wlan_mlme_psoc_ext_obj *mlme_obj,
-			uint8_t command, uint32_t *mode)
-{
-	tSirMacCapabilityInfo self_caps;
-	tSirMacQosInfoStation sta_qos_info;
-	uint16_t *final_caps_val;
-	uint8_t *qos_cfg_val, temp_val;
-	uint32_t pmkid_modes = mlme_obj->cfg.sta.pmkid_modes;
-	uint32_t val = 0;
-	uint8_t vdev_id = wlan_vdev_get_id(vdev);
-	qdf_size_t val_len;
-	QDF_STATUS status;
-	uint16_t rsn_caps = 0;
-	int32_t uccipher, authmode, akm;
-	struct wlan_objmgr_pdev *pdev;
-	struct csr_roam_session *session;
-	struct mac_context *mac;
-
-	mac = sme_get_mac_context();
-	if (!mac) {
-		sme_err("mac_ctx is NULL");
-		return QDF_STATUS_E_FAILURE;
-	}
-
-	pdev = wlan_vdev_get_pdev(vdev);
-	if (!pdev)
-		return QDF_STATUS_E_INVAL;
-
-	session = CSR_GET_SESSION(mac, vdev_id);
-	if (!session) {
-		mlme_err("session is null for vdev %d", vdev_id);
-		return QDF_STATUS_E_FAILURE;
-	}
-
-	rso_config->roam_offload_enabled =
-		mlme_obj->cfg.lfr.lfr3_roaming_offload;
-	if (!rso_config->roam_offload_enabled)
-		return QDF_STATUS_SUCCESS;
-
-	/* FILL LFR3 specific roam scan mode TLV parameters */
-	rso_config->rso_lfr3_params.roam_rssi_cat_gap =
-		mlme_obj->cfg.lfr.rso_user_config.cat_rssi_offset;
-	rso_config->rso_lfr3_params.prefer_5ghz =
-		mlme_obj->cfg.lfr.roam_prefer_5ghz;
-	rso_config->rso_lfr3_params.select_5ghz_margin =
-		mlme_obj->cfg.gen.select_5ghz_margin;
-	rso_config->rso_lfr3_params.reassoc_failure_timeout =
-		mlme_obj->cfg.timeouts.reassoc_failure_timeout;
-	rso_config->rso_lfr3_params.ho_delay_for_rx =
-		mlme_obj->cfg.lfr.ho_delay_for_rx;
-	rso_config->rso_lfr3_params.roam_retry_count =
-		mlme_obj->cfg.lfr.roam_preauth_retry_count;
-	rso_config->rso_lfr3_params.roam_preauth_no_ack_timeout =
-		mlme_obj->cfg.lfr.roam_preauth_no_ack_timeout;
-	rso_config->rso_lfr3_params.rct_validity_timer =
-		mlme_obj->cfg.btm.rct_validity_timer;
-	rso_config->rso_lfr3_params.disable_self_roam =
-		!mlme_obj->cfg.lfr.enable_self_bss_roam;
-	if (!rso_cfg->roam_control_enable &&
-	    mlme_obj->cfg.lfr.roam_force_rssi_trigger)
-		*mode |= WMI_ROAM_SCAN_MODE_RSSI_CHANGE;
-	/*
-	 * Self rsn caps aren't sent to firmware, so in case of PMF required,
-	 * the firmware connects to a non PMF AP advertising PMF not required
-	 * in the re-assoc request which violates protocol.
-	 * So send self RSN caps to firmware in roam SCAN offload command to
-	 * let it configure the params in the re-assoc request too.
-	 * Instead of making another infra, send the RSN-CAPS in MSB of
-	 * beacon Caps.
-	 */
-	rsn_caps = rso_cfg->rsn_cap;
-
-	/* Fill LFR3 specific self capabilities for roam scan mode TLV */
-	self_caps.ess = 1;
-	self_caps.ibss = 0;
-
-	val = mlme_obj->cfg.wep_params.is_privacy_enabled;
-	if (val)
-		self_caps.privacy = 1;
-
-	if (mlme_obj->cfg.ht_caps.short_preamble)
-		self_caps.shortPreamble = 1;
-
-	self_caps.pbcc = 0;
-	self_caps.channelAgility = 0;
-
-	if (mlme_obj->cfg.feature_flags.enable_short_slot_time_11g)
-		self_caps.shortSlotTime = 1;
-
-	if (mlme_obj->cfg.gen.enabled_11h)
-		self_caps.spectrumMgt = 1;
-
-	if (mlme_obj->cfg.wmm_params.qos_enabled)
-		self_caps.qos = 1;
-
-	if (mlme_obj->cfg.roam_scoring.apsd_enabled)
-		self_caps.apsd = 1;
-
-	self_caps.rrm = mlme_obj->cfg.rrm_config.rrm_enabled;
-
-	val = mlme_obj->cfg.feature_flags.enable_block_ack;
-	self_caps.delayedBA =
-		(uint16_t)((val >> WNI_CFG_BLOCK_ACK_ENABLED_DELAYED) & 1);
-	self_caps.immediateBA =
-		(uint16_t)((val >> WNI_CFG_BLOCK_ACK_ENABLED_IMMEDIATE) & 1);
-	final_caps_val = (uint16_t *)&self_caps;
-
-	rso_config->rso_lfr3_caps.capability =
-		(rsn_caps << RSN_CAPS_SHIFT) | ((*final_caps_val) & 0xFFFF);
-
-	rso_config->rso_lfr3_caps.ht_caps_info =
-		*(uint16_t *)&mlme_obj->cfg.ht_caps.ht_cap_info;
-	rso_config->rso_lfr3_caps.ampdu_param =
-		*(uint8_t *)&mlme_obj->cfg.ht_caps.ampdu_params;
-	rso_config->rso_lfr3_caps.ht_ext_cap =
-		*(uint16_t *)&mlme_obj->cfg.ht_caps.ext_cap_info;
-
-	temp_val = (uint8_t)mlme_obj->cfg.vht_caps.vht_cap_info.tx_bf_cap;
-	rso_config->rso_lfr3_caps.ht_txbf = temp_val & 0xFF;
-	temp_val = (uint8_t)mlme_obj->cfg.vht_caps.vht_cap_info.as_cap;
-	rso_config->rso_lfr3_caps.asel_cap = temp_val & 0xFF;
-
-	qdf_mem_zero(&sta_qos_info, sizeof(tSirMacQosInfoStation));
-	sta_qos_info.maxSpLen =
-		(uint8_t)mlme_obj->cfg.wmm_params.max_sp_length;
-	sta_qos_info.moreDataAck = 0;
-	sta_qos_info.qack = 0;
-	sta_qos_info.acbe_uapsd = SIR_UAPSD_GET(ACBE, session->uapsd_mask);
-	sta_qos_info.acbk_uapsd = SIR_UAPSD_GET(ACBK, session->uapsd_mask);
-	sta_qos_info.acvi_uapsd = SIR_UAPSD_GET(ACVI, session->uapsd_mask);
-	sta_qos_info.acvo_uapsd = SIR_UAPSD_GET(ACVO, session->uapsd_mask);
-	qos_cfg_val = (uint8_t *)&sta_qos_info;
-	rso_config->rso_lfr3_caps.qos_caps = (*qos_cfg_val) & 0xFF;
-	if (rso_config->rso_lfr3_caps.qos_caps)
-		rso_config->rso_lfr3_caps.qos_enabled = true;
-
-	rso_config->rso_lfr3_caps.wmm_caps = 0x4;
-
-	val_len = ROAM_OFFLOAD_NUM_MCS_SET;
-	status =
-	    wlan_mlme_get_cfg_str((uint8_t *)rso_config->rso_lfr3_caps.mcsset,
-				  &mlme_obj->cfg.rates.supported_mcs_set,
-				  &val_len);
-	if (QDF_IS_STATUS_ERROR(status)) {
-		mlme_err("Failed to get CFG_SUPPORTED_MCS_SET");
-		return QDF_STATUS_E_FAILURE;
-	}
-
-	/* Update 11i TLV related Fields */
-	rso_config->rso_11i_info.roam_key_mgmt_offload_enabled =
-			mlme_obj->cfg.lfr.lfr3_roaming_offload;
-	rso_config->rso_11i_info.fw_okc =
-			(pmkid_modes & CFG_PMKID_MODES_OKC) ? 1 : 0;
-	rso_config->rso_11i_info.fw_pmksa_cache =
-			(pmkid_modes & CFG_PMKID_MODES_PMKSA_CACHING) ? 1 : 0;
-
-	/* Check whether to send psk_pmk or sae_single pmk info */
-	if (!csr_cm_fill_rso_sae_single_pmk_info(vdev, mlme_obj,
-						 &rso_config->rso_11i_info)) {
-		rso_config->rso_11i_info.is_sae_same_pmk = false;
-		qdf_mem_copy(rso_config->rso_11i_info.psk_pmk, session->psk_pmk,
-			     sizeof(rso_config->rso_11i_info.psk_pmk));
-		rso_config->rso_11i_info.pmk_len = session->pmk_len;
-	}
-
-	rso_config->rso_11r_info.enable_ft_im_roaming =
-		mlme_obj->cfg.lfr.enable_ft_im_roaming;
-	rso_config->rso_11r_info.mdid.mdie_present =
-		session->connectedProfile.mdid.mdie_present;
-	rso_config->rso_11r_info.mdid.mobility_domain =
-		session->connectedProfile.mdid.mobility_domain;
-	rso_config->rso_11r_info.r0kh_id_length =
-			session->ftSmeContext.r0kh_id_len;
-	qdf_mem_copy(rso_config->rso_11r_info.r0kh_id,
-		     session->ftSmeContext.r0kh_id,
-		     session->ftSmeContext.r0kh_id_len);
-
-	qdf_mem_copy(rso_config->rso_11r_info.psk_pmk, session->psk_pmk,
-		     session->pmk_len);
-	rso_config->rso_11r_info.pmk_len = session->pmk_len;
-
-	csr_cm_update_rso_adaptive_11r(&rso_config->rso_11r_info,
-				       session);
-	csr_cm_update_rso_ese_info(pdev, rso_config, vdev_id);
-	uccipher = wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_UCAST_CIPHER);
-	authmode = wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_AUTH_MODE);
-	akm = wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_KEY_MGMT);
-
-	rso_config->akm =
-		cm_crpto_authmode_to_wmi_authmode(authmode, akm, uccipher);
-
-	return QDF_STATUS_SUCCESS;
-}
-#endif
-
 /**
  * csr_cm_roam_scan_btm_offload() - set roam scan btm offload parameters
  * @mac_ctx: global mac ctx
@@ -18468,6 +18202,7 @@ void csr_roam_fill_tdls_info(struct mac_context *mac_ctx,
 }
 #endif
 
+#ifndef FEATURE_CM_ENABLE
 #if defined(WLAN_FEATURE_FILS_SK) && defined(WLAN_FEATURE_ROAM_OFFLOAD)
 static void csr_copy_fils_join_rsp_roam_info(struct csr_roam_info *roam_info,
 				      struct roam_offload_synch_ind *roam_synch_data)
@@ -18516,6 +18251,7 @@ void csr_update_fils_erp_seq_num(struct csr_roam_profile *roam_profile,
 				 uint16_t erp_next_seq_num)
 {}
 #endif
+#endif
 
 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
 #ifndef FEATURE_CM_ENABLE
@@ -18756,7 +18492,7 @@ csr_check_and_set_sae_single_pmk_cap(struct mac_context *mac_ctx,
 			}
 
 			qdf_mem_copy(pmk_info->pmk, pmkid_cache->pmk,
-				     session->pmk_len);
+				     pmkid_cache->pmk_len);
 			pmk_info->pmk_len = pmkid_cache->pmk_len;
 			wlan_mlme_update_sae_single_pmk(vdev, pmk_info);
 
@@ -18844,6 +18580,7 @@ csr_process_roam_sync_callback(struct mac_context *mac_ctx,
 	uint8_t ssid_offset;
 	enum csr_akm_type akm_type;
 	uint8_t mdie_present;
+	struct cm_roam_values_copy config;
 
 	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac_ctx->psoc, session_id,
 						    WLAN_LEGACY_SME_ID);
@@ -19197,18 +18934,18 @@ csr_process_roam_sync_callback(struct mac_context *mac_ctx,
 			  QDF_MAC_ADDR_REF(pmkid_cache->BSSID.bytes),
 			  session->pCurRoamProfile->negotiatedAuthType);
 		akm_type = session->connectedProfile.AuthType;
-		mdie_present = session->connectedProfile.mdid.mdie_present;
+		wlan_cm_roam_cfg_get_value(mac_ctx->psoc, session_id,
+					   MOBILITY_DOMAIN, &config);
+		mdie_present = config.bool_value;
 
 		if (csr_lookup_pmkid_using_bssid(mac_ctx, session,
 						 pmkid_cache)) {
-			session->pmk_len = pmkid_cache->pmk_len;
-			qdf_mem_zero(session->psk_pmk,
-				     sizeof(session->psk_pmk));
-			qdf_mem_copy(session->psk_pmk, pmkid_cache->pmk,
-				     session->pmk_len);
+			wlan_cm_set_psk_pmk(mac_ctx->pdev, session_id,
+					    pmkid_cache->pmk,
+					    pmkid_cache->pmk_len);
 			sme_debug("pmkid found for " QDF_MAC_ADDR_FMT " len %d",
 				  QDF_MAC_ADDR_REF(pmkid_cache->BSSID.bytes),
-				  (uint32_t)session->pmk_len);
+				  pmkid_cache->pmk_len);
 		} else {
 			sme_debug("PMKID Not found in cache for " QDF_MAC_ADDR_FMT,
 				  QDF_MAC_ADDR_REF(pmkid_cache->BSSID.bytes));
@@ -19228,17 +18965,11 @@ csr_process_roam_sync_callback(struct mac_context *mac_ctx,
 					status = QDF_STATUS_E_NOMEM;
 					goto end;
 				}
-
-				session->pmk_len = roam_synch_data->pmk_len;
-				qdf_mem_zero(session->psk_pmk,
-					     sizeof(session->psk_pmk));
-				qdf_mem_copy(session->psk_pmk,
-					     roam_synch_data->pmk,
-					     session->pmk_len);
-
+				wlan_cm_set_psk_pmk(mac_ctx->pdev, session_id,
+						    roam_synch_data->pmk,
+						    roam_synch_data->pmk_len);
 				qdf_copy_macaddr(&pmksa->bssid,
-						 &session->
-						 connectedProfile.bssid);
+					&session->connectedProfile.bssid);
 				qdf_mem_copy(pmksa->pmkid,
 					     roam_synch_data->pmkid, PMKID_LEN);
 				qdf_mem_copy(pmksa->pmk, roam_synch_data->pmk,
@@ -19335,7 +19066,9 @@ csr_process_roam_sync_callback(struct mac_context *mac_ctx,
 	assoc_info.bss_desc = bss_desc;
 	roam_info->status_code = eSIR_SME_SUCCESS;
 	roam_info->reasonCode = eSIR_SME_SUCCESS;
-	assoc_info.uapsd_mask = session->uapsd_mask;
+	wlan_cm_roam_cfg_get_value(mac_ctx->psoc, session_id, UAPSD_MASK,
+				   &config);
+	assoc_info.uapsd_mask = config.uint_value;
 	/* This is temp ifdef will be removed in near future */
 #ifndef FEATURE_CM_ENABLE
 	mac_ctx->roam.roamSession[session_id].connectState =
@@ -19390,8 +19123,10 @@ csr_process_roam_sync_callback(struct mac_context *mac_ctx,
 	roam_info->update_erp_next_seq_num =
 			roam_synch_data->update_erp_next_seq_num;
 	roam_info->next_erp_seq_num = roam_synch_data->next_erp_seq_num;
+#ifndef FEATURE_CM_ENABLE
 	csr_update_fils_erp_seq_num(session->pCurRoamProfile,
 				    roam_info->next_erp_seq_num);
+#endif
 	sme_debug("Update ERP Seq Num : %d, Next ERP Seq Num : %d",
 			roam_info->update_erp_next_seq_num,
 			roam_info->next_erp_seq_num);
@@ -19408,8 +19143,9 @@ csr_process_roam_sync_callback(struct mac_context *mac_ctx,
 	roam_info->roam_reason = roam_synch_data->roamReason &
 				 ROAM_REASON_MASK;
 	sme_debug("Update roam reason : %d", roam_info->roam_reason);
+#ifndef FEATURE_CM_ENABLE
 	csr_copy_fils_join_rsp_roam_info(roam_info, roam_synch_data);
-
+#endif
 	csr_roam_call_callback(mac_ctx, session_id, roam_info, 0,
 		eCSR_ROAM_ASSOCIATION_COMPLETION, eCSR_ROAM_RESULT_ASSOCIATED);
 

+ 25 - 24
core/sme/src/csr/csr_api_scan.c

@@ -441,10 +441,10 @@ static void csr_purge_channel_power(struct mac_context *mac,
  */
 QDF_STATUS csr_save_to_channel_power2_g_5_g(struct mac_context *mac,
 					    uint32_t tableSize,
-					    tSirMacChanInfo *channelTable)
+					    struct pwr_channel_info *channelTable)
 {
-	uint32_t i = tableSize / sizeof(tSirMacChanInfo);
-	tSirMacChanInfo *pChannelInfo;
+	uint32_t i = tableSize / sizeof(struct pwr_channel_info);
+	struct pwr_channel_info *pChannelInfo;
 	struct csr_channel_powerinfo *pChannelSet;
 	bool f2GHzInfoFound = false;
 	bool f2GListPurged = false, f5GListPurged = false;
@@ -458,7 +458,7 @@ QDF_STATUS csr_save_to_channel_power2_g_5_g(struct mac_context *mac,
 			continue;
 		}
 		pChannelSet->first_chan_freq = pChannelInfo->first_freq;
-		pChannelSet->numChannels = pChannelInfo->numChannels;
+		pChannelSet->numChannels = pChannelInfo->num_chan;
 		/*
 		 * Now set the inter-channel offset based on the frequency band
 		 * the channel set lies in
@@ -479,7 +479,7 @@ QDF_STATUS csr_save_to_channel_power2_g_5_g(struct mac_context *mac,
 			qdf_mem_free(pChannelSet);
 			return QDF_STATUS_E_FAILURE;
 		}
-		pChannelSet->txPower = pChannelInfo->maxTxPower;
+		pChannelSet->txPower = pChannelInfo->max_tx_pwr;
 		if (f2GHzInfoFound) {
 			if (!f2GListPurged) {
 				/* purge previous results if found new */
@@ -743,8 +743,8 @@ void csr_apply_country_information(struct mac_context *mac)
 void csr_save_channel_power_for_band(struct mac_context *mac, bool fill_5f)
 {
 	uint32_t idx, count = 0;
-	tSirMacChanInfo *chan_info;
-	tSirMacChanInfo *ch_info_start;
+	struct pwr_channel_info *chan_info;
+	struct pwr_channel_info *ch_info_start;
 	int32_t max_ch_idx;
 	bool tmp_bool;
 	uint32_t ch_freq = 0;
@@ -755,7 +755,7 @@ void csr_save_channel_power_for_band(struct mac_context *mac, bool fill_5f)
 		mac->scan.base_channels.numChannels :
 		CFG_VALID_CHANNEL_LIST_LEN;
 
-	chan_info = qdf_mem_malloc(sizeof(tSirMacChanInfo) *
+	chan_info = qdf_mem_malloc(sizeof(struct pwr_channel_info) *
 				   CFG_VALID_CHANNEL_LIST_LEN);
 	if (!chan_info)
 		return;
@@ -775,15 +775,16 @@ void csr_save_channel_power_for_band(struct mac_context *mac, bool fill_5f)
 
 		chan_info->first_freq =
 			mac->scan.defaultPowerTable[idx].center_freq;
-		chan_info->numChannels = 1;
-		chan_info->maxTxPower =
+		chan_info->num_chan = 1;
+		chan_info->max_tx_pwr =
 			mac->scan.defaultPowerTable[idx].tx_power;
 		chan_info++;
 		count++;
 	}
 	if (count) {
 		csr_save_to_channel_power2_g_5_g(mac,
-				count * sizeof(tSirMacChanInfo), ch_info_start);
+				count * sizeof(struct pwr_channel_info),
+				ch_info_start);
 	}
 	qdf_mem_free(ch_info_start);
 }
@@ -1446,16 +1447,16 @@ static void csr_save_tx_power_to_cfg(struct mac_context *mac,
 	uint32_t cbLen = 0, dataLen, tmp_len;
 	struct csr_channel_powerinfo *ch_set;
 	uint32_t idx, count = 0;
-	tSirMacChanInfo *ch_pwr_set;
+	struct pwr_channel_info *ch_pwr_set;
 	uint8_t *p_buf = NULL;
 
 	/* allocate maximum space for all channels */
-	dataLen = CFG_VALID_CHANNEL_LIST_LEN * sizeof(tSirMacChanInfo);
+	dataLen = CFG_VALID_CHANNEL_LIST_LEN * sizeof(struct pwr_channel_info);
 	p_buf = qdf_mem_malloc(dataLen);
 	if (!p_buf)
 		return;
 
-	ch_pwr_set = (tSirMacChanInfo *)(p_buf);
+	ch_pwr_set = (struct pwr_channel_info *)(p_buf);
 	csr_ll_lock(pList);
 	pEntry = csr_ll_peek_head(pList, LL_ACCESS_NOLOCK);
 	/*
@@ -1473,7 +1474,7 @@ static void csr_save_tx_power_to_cfg(struct mac_context *mac,
 			 * for the triplets that 11d advertises.
 			 */
 			tmp_len = cbLen + (ch_set->numChannels *
-						sizeof(tSirMacChanInfo));
+						sizeof(struct pwr_channel_info));
 			if (tmp_len >= dataLen) {
 				/*
 				 * expanding this entry will overflow our
@@ -1490,14 +1491,14 @@ static void csr_save_tx_power_to_cfg(struct mac_context *mac,
 			for (idx = 0; idx < ch_set->numChannels; idx++) {
 				ch_pwr_set->first_freq =
 					ch_set->first_chan_freq;
-				ch_pwr_set->numChannels = 1;
-				ch_pwr_set->maxTxPower = ch_set->txPower;
-				cbLen += sizeof(tSirMacChanInfo);
+				ch_pwr_set->num_chan = 1;
+				ch_pwr_set->max_tx_pwr = ch_set->txPower;
+				cbLen += sizeof(struct pwr_channel_info);
 				ch_pwr_set++;
 				count++;
 			}
 		} else {
-			if (cbLen + sizeof(tSirMacChanInfo) >= dataLen) {
+			if (cbLen + sizeof(struct pwr_channel_info) >= dataLen) {
 				/* this entry will overflow our allocation */
 				sme_err(
 					"Buffer overflow, start freq %d, num %d, offset %d",
@@ -1507,9 +1508,9 @@ static void csr_save_tx_power_to_cfg(struct mac_context *mac,
 				break;
 			}
 			ch_pwr_set->first_freq = ch_set->first_chan_freq;
-			ch_pwr_set->numChannels = ch_set->numChannels;
-			ch_pwr_set->maxTxPower = ch_set->txPower;
-			cbLen += sizeof(tSirMacChanInfo);
+			ch_pwr_set->num_chan = ch_set->numChannels;
+			ch_pwr_set->max_tx_pwr = ch_set->txPower;
+			cbLen += sizeof(struct pwr_channel_info);
 			ch_pwr_set++;
 			count++;
 		}
@@ -1518,7 +1519,7 @@ static void csr_save_tx_power_to_cfg(struct mac_context *mac,
 	csr_ll_unlock(pList);
 	if (band == BAND_2G) {
 		mac->mlme_cfg->power.max_tx_power_24.len =
-					sizeof(tSirMacChanInfo) * count;
+					sizeof(struct pwr_channel_info) * count;
 		if (mac->mlme_cfg->power.max_tx_power_24.len >
 						CFG_MAX_TX_POWER_2_4_LEN)
 			mac->mlme_cfg->power.max_tx_power_24.len =
@@ -1529,7 +1530,7 @@ static void csr_save_tx_power_to_cfg(struct mac_context *mac,
 	}
 	if (band == BAND_5G) {
 		mac->mlme_cfg->power.max_tx_power_5.len =
-					sizeof(tSirMacChanInfo) * count;
+					sizeof(struct pwr_channel_info) * count;
 		if (mac->mlme_cfg->power.max_tx_power_5.len >
 							CFG_MAX_TX_POWER_5_LEN)
 			mac->mlme_cfg->power.max_tx_power_5.len =

+ 9 - 3
core/sme/src/csr/csr_host_scan_roam.c

@@ -141,6 +141,7 @@ void csr_neighbor_roam_process_scan_results(struct mac_context *mac_ctx,
 	uint32_t bss_chan_freq;
 	uint8_t num_candidates = 0;
 	uint8_t num_dropped = 0;
+	struct cm_roam_values_copy config;
 	/*
 	 * first iteration of scan list should consider
 	 * age constraint for candidates
@@ -227,8 +228,10 @@ void csr_neighbor_roam_process_scan_results(struct mac_context *mac_ctx,
 					  "SKIP-not a candidate AP for OS requested roam");
 				continue;
 			}
-
-			if ((n_roam_info->is11rAssoc) &&
+			wlan_cm_roam_cfg_get_value(mac_ctx->psoc, sessionid,
+						   IS_11R_CONNECTION,
+						   &config);
+			if ((config.bool_value) &&
 			    (!csr_neighbor_roam_is_preauth_candidate(mac_ctx,
 					sessionid, descr->bssId))) {
 				sme_err("BSSID in preauth fail list. Ignore");
@@ -606,12 +609,15 @@ csr_neighbor_roam_get_handoff_ap_info(struct mac_context *mac,
 	tpCsrNeighborRoamControlInfo ngbr_roam_info =
 		&mac->roam.neighborRoamInfo[session_id];
 	tpCsrNeighborRoamBSSInfo bss_node = NULL;
+	struct cm_roam_values_copy config;
 
 	if (!hand_off_node) {
 		QDF_ASSERT(hand_off_node);
 		return false;
 	}
-	if (ngbr_roam_info->is11rAssoc) {
+	wlan_cm_roam_cfg_get_value(mac->psoc, session_id, IS_11R_CONNECTION,
+				   &config);
+	if (config.bool_value) {
 		/* Always the BSS info in the head is the handoff candidate */
 		bss_node = csr_neighbor_roam_next_roamable_ap(
 			mac,

+ 5 - 4
core/sme/src/csr/csr_inside_api.h

@@ -253,8 +253,6 @@ QDF_STATUS csr_roam_issue_start_bss(struct mac_context *mac, uint32_t sessionId,
 					uint32_t roamId);
 QDF_STATUS csr_roam_issue_stop_bss(struct mac_context *mac, uint32_t sessionId,
 				   enum csr_roam_substate NewSubstate);
-bool csr_is_same_profile(struct mac_context *mac, tCsrRoamConnectedProfile
-			*pProfile1, struct csr_roam_profile *pProfile2);
 bool csr_is_roam_command_waiting_for_session(struct mac_context *mac,
 					uint32_t sessionId);
 eRoamCmdStatus csr_get_roam_complete_status(struct mac_context *mac,
@@ -270,6 +268,9 @@ void csr_roam_remove_duplicate_command(struct mac_context *mac, uint32_t session
 				       enum csr_roam_reason eRoamReason);
 
 #ifndef FEATURE_CM_ENABLE
+bool csr_is_same_profile(struct mac_context *mac, tCsrRoamConnectedProfile
+			*pProfile1, struct csr_roam_profile *pProfile2,
+			uint8_t vdev_id);
 QDF_STATUS csr_send_join_req_msg(struct mac_context *mac, uint32_t sessionId,
 				 struct bss_description *pBssDescription,
 				 struct csr_roam_profile *pProfile,
@@ -365,8 +366,8 @@ void csr_roam_completion(struct mac_context *mac, uint32_t sessionId,
 void csr_roam_cancel_roaming(struct mac_context *mac, uint32_t sessionId);
 void csr_apply_channel_power_info_wrapper(struct mac_context *mac);
 QDF_STATUS csr_save_to_channel_power2_g_5_g(struct mac_context *mac,
-					uint32_t tableSize, tSirMacChanInfo
-					*channelTable);
+					uint32_t tableSize,
+					struct pwr_channel_info *channelTable);
 
 /*
  * csr_prepare_vdev_delete() - CSR api to delete vdev

+ 17 - 13
core/sme/src/csr/csr_neighbor_roam.c

@@ -416,15 +416,14 @@ csr_neighbor_roam_get_scan_filter_from_profile(struct mac_context *mac,
 			     filter->num_of_channels *
 			     sizeof(filter->chan_freq_list[0]));
 	}
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
 
-	if (nbr_roam_info->is11rAssoc)
+	if (rso_cfg->is_11r_assoc)
 		/*
 		 * MDIE should be added as a part of profile. This should be
 		 * added as a part of filter as well
 		 */
-		filter->mobility_domain = profile->mdid.mobility_domain;
-
+		filter->mobility_domain = rso_cfg->mdid.mobility_domain;
+	wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
 	filter->enable_adaptive_11r =
 		wlan_mlme_adaptive_11r_enabled(mac->psoc);
 	csr_update_scan_filter_dot11mode(mac, filter);
@@ -745,6 +744,7 @@ static void csr_neighbor_roam_info_ctx_init(struct mac_context *mac,
 	struct cm_roam_values_copy src_cfg;
 	struct csr_roam_session *session = &mac->roam.roamSession[session_id];
 	int init_ft_flag = false;
+	bool mdie_present;
 
 	wlan_cm_init_occupied_ch_freq_list(mac->pdev, mac->psoc, session_id);
 	csr_neighbor_roam_state_transition(mac,
@@ -774,17 +774,19 @@ static void csr_neighbor_roam_info_ctx_init(struct mac_context *mac,
 	 */
 	csr_neighbor_roam_free_roamable_bss_list(mac,
 		&ngbr_roam_info->FTRoamInfo.preAuthDoneList);
-
+	wlan_cm_roam_cfg_get_value(mac->psoc, session_id,
+				   MOBILITY_DOMAIN, &src_cfg);
+	mdie_present = src_cfg.bool_value;
 	/* Based on the auth scheme tell if we are 11r */
 	if (csr_is_auth_type11r
-		(mac, session->connectedProfile.AuthType,
-		session->connectedProfile.mdid.mdie_present)) {
+		(mac, session->connectedProfile.AuthType, mdie_present)) {
 		if (mac->mlme_cfg->lfr.fast_transition_enabled)
 			init_ft_flag = true;
-		ngbr_roam_info->is11rAssoc = true;
+		src_cfg.bool_value = true;
 	} else
-		ngbr_roam_info->is11rAssoc = false;
-
+		src_cfg.bool_value = false;
+	wlan_cm_roam_cfg_set_value(mac->psoc, session_id,
+				   IS_11R_CONNECTION, &src_cfg);
 #ifdef FEATURE_WLAN_ESE
 	/* Based on the auth scheme tell if we are 11r */
 	if (wlan_cm_get_ese_assoc(mac->pdev, session_id)) {
@@ -948,8 +950,6 @@ static QDF_STATUS csr_neighbor_roam_init11r_assoc_info(struct mac_context *mac)
 		pNeighborRoamInfo = &mac->roam.neighborRoamInfo[i];
 		pFTRoamInfo = &pNeighborRoamInfo->FTRoamInfo;
 
-		pNeighborRoamInfo->is11rAssoc = false;
-
 		pFTRoamInfo->neighborReportTimeout =
 			CSR_NEIGHBOR_ROAM_REPORT_QUERY_TIMEOUT;
 		pFTRoamInfo->neighborRptPending = false;
@@ -1056,7 +1056,11 @@ void csr_neighbor_roam_close(struct mac_context *mac, uint8_t sessionId)
  */
 bool csr_neighbor_roam_is11r_assoc(struct mac_context *mac_ctx, uint8_t session_id)
 {
-	return mac_ctx->roam.neighborRoamInfo[session_id].is11rAssoc;
+	struct cm_roam_values_copy config;
+
+	wlan_cm_roam_cfg_get_value(mac_ctx->psoc, session_id, IS_11R_CONNECTION,
+				   &config);
+	return config.bool_value;
 }
 
 /*

+ 4 - 1
core/sme/src/csr/csr_roam_preauth.c

@@ -166,10 +166,13 @@ void csr_neighbor_roam_purge_preauth_failed_list(struct mac_context *mac_ctx)
 void csr_neighbor_roam_reset_preauth_control_info(struct mac_context *mac_ctx,
 		uint8_t session_id)
 {
+	struct cm_roam_values_copy src_cfg;
 	tpCsrNeighborRoamControlInfo neigh_roam_info =
 		&mac_ctx->roam.neighborRoamInfo[session_id];
 
-	neigh_roam_info->is11rAssoc = false;
+	src_cfg.bool_value = false;
+	wlan_cm_roam_cfg_set_value(mac_ctx->psoc, session_id,
+				   IS_11R_CONNECTION, &src_cfg);
 	csr_neighbor_roam_purge_preauth_failed_list(mac_ctx);
 
 	neigh_roam_info->FTRoamInfo.preauthRspPending = false;

+ 6 - 24
core/sme/src/csr/csr_util.c

@@ -2681,28 +2681,6 @@ bool csr_lookup_fils_pmkid(struct mac_context *mac,
 	return true;
 }
 
-/**
- * csr_update_session_pmk() - Update the pmk len and pmk in the roam session
- * @session: pointer to the CSR Roam session
- * @pmkid_cache: pointer to the pmkid cache
- *
- * Return: None
- */
-#ifdef WLAN_FEATURE_ROAM_OFFLOAD
-static void csr_update_session_pmk(struct csr_roam_session *session,
-				   struct wlan_crypto_pmksa *pmksa)
-{
-	session->pmk_len = pmksa->pmk_len;
-	qdf_mem_zero(session->psk_pmk, sizeof(session->psk_pmk));
-	qdf_mem_copy(session->psk_pmk, pmksa->pmk, session->pmk_len);
-}
-#else
-static inline void csr_update_session_pmk(struct csr_roam_session *session,
-					  struct wlan_crypto_pmksa *pmksa)
-{
-}
-#endif
-
 #ifdef WLAN_FEATURE_FILS_SK
 /**
  * csr_update_pmksa_to_profile() - update pmk and pmkid to profile which will be
@@ -2744,7 +2722,6 @@ uint8_t csr_construct_rsn_ie(struct mac_context *mac, uint32_t sessionId,
 	uint16_t rsn_cap = 0, self_rsn_cap;
 	int32_t rsn_val;
 	struct wlan_crypto_pmksa pmksa, *pmksa_peer;
-	struct csr_roam_session *session = &mac->roam.roamSession[sessionId];
 	struct rso_config *rso_cfg;
 
 	if (!local_ap_ie &&
@@ -2821,7 +2798,8 @@ uint8_t csr_construct_rsn_ie(struct mac_context *mac, uint32_t sessionId,
 	 * will be sent to the FW during RSO.
 	 */
 	if (pmksa_peer) {
-		csr_update_session_pmk(session, pmksa_peer);
+		wlan_cm_set_psk_pmk(mac->pdev, sessionId,
+				    pmksa_peer->pmk, pmksa_peer->pmk_len);
 		csr_update_pmksa_to_profile(pProfile, pmksa_peer);
 	}
 	rso_cfg = wlan_cm_get_rso_config(vdev);
@@ -3467,6 +3445,7 @@ bool csr_rates_is_dot11_rate_supported(struct mac_context *mac_ctx, uint8_t rate
 	return csr_is_aggregate_rate_supported(mac_ctx, n);
 }
 
+#ifndef FEATURE_CM_ENABLE
 #ifdef WLAN_FEATURE_FILS_SK
 static inline
 void csr_free_fils_profile_info(struct mac_context *mac,
@@ -3488,6 +3467,7 @@ static inline void csr_free_fils_profile_info(struct mac_context *mac,
 					      struct csr_roam_profile *profile)
 { }
 #endif
+#endif
 
 void csr_release_profile(struct mac_context *mac,
 			 struct csr_roam_profile *pProfile)
@@ -3529,7 +3509,9 @@ void csr_release_profile(struct mac_context *mac,
 			qdf_mem_free(pProfile->ChannelInfo.freq_list);
 			pProfile->ChannelInfo.freq_list = NULL;
 		}
+#ifndef FEATURE_CM_ENABLE
 		csr_free_fils_profile_info(mac, pProfile);
+#endif
 		qdf_mem_zero(pProfile, sizeof(struct csr_roam_profile));
 	}
 }