Browse Source

qcacld-3.0: Move code from csr to rso for btm offload

Move code from csr to rso for btm offload.

Change-Id: I0de4e1efe7b4996ae3ca58d124aff0aadfca72a5
CRs-Fixed: 2857739
hqu 4 years ago
parent
commit
7e457bd884

+ 117 - 0
components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c

@@ -32,6 +32,7 @@
 #include "pld_common.h"
 #include "wlan_blm_api.h"
 #include "wlan_scan_api.h"
+#include "wlan_vdev_mgr_ucfg_api.h"
 
 /**
  * cm_roam_scan_bmiss_cnt() - set roam beacon miss count
@@ -2046,6 +2047,121 @@ cm_roam_scan_offload_fill_rso_configs(struct wlan_objmgr_psoc *psoc,
 	cm_roam_scan_offload_add_fils_params(psoc, rso_mode_cfg, vdev_id);
 }
 
+/**
+ * cm_update_btm_offload_config() - Update btm config param to fw
+ * @psoc: psoc
+ * @vdev: vdev
+ * @command: Roam offload command
+ * @btm_offload_config: btm offload config
+ *
+ * Return: None
+ */
+static void
+cm_update_btm_offload_config(struct wlan_objmgr_psoc *psoc,
+			     struct wlan_objmgr_vdev *vdev,
+			     uint8_t command, uint32_t *btm_offload_config)
+
+{
+	struct wlan_mlme_psoc_ext_obj *mlme_obj;
+	struct wlan_mlme_btm *btm_cfg;
+	struct wlan_objmgr_peer *peer;
+	uint8_t bssid[QDF_MAC_ADDR_SIZE];
+	struct cm_roam_values_copy temp;
+	bool is_hs_20_ap, is_pmf_enabled, is_open_connection = false;
+	int32_t cipher;
+	uint8_t vdev_id;
+	uint32_t mbo_oce_enabled_ap;
+
+	mlme_obj = mlme_get_psoc_ext_obj(psoc);
+	if (!mlme_obj)
+		return;
+
+	btm_cfg = &mlme_obj->cfg.btm;
+	*btm_offload_config = btm_cfg->btm_offload_config;
+
+	/* Return if INI is disabled */
+	if (!(*btm_offload_config))
+		return;
+	vdev_id = wlan_vdev_get_id(vdev);
+	wlan_cm_roam_cfg_get_value(psoc, vdev_id, HS_20_AP, &temp);
+	is_hs_20_ap = temp.bool_value;
+	/* For RSO Stop Disable BTM offload to firmware */
+	if (command == ROAM_SCAN_OFFLOAD_STOP || is_hs_20_ap) {
+		mlme_debug("RSO cmd: %d", command);
+		*btm_offload_config = 0;
+		return;
+	}
+
+	ucfg_wlan_vdev_mgr_get_param_bssid(vdev, bssid);
+	peer = wlan_objmgr_get_peer(psoc,
+				    wlan_objmgr_pdev_get_pdev_id(
+					wlan_vdev_get_pdev(vdev)),
+				    bssid,
+				    WLAN_MLME_CM_ID);
+	if (!peer) {
+		mlme_debug("Peer of peer_mac "QDF_MAC_ADDR_FMT" not found",
+			   QDF_MAC_ADDR_REF(bssid));
+		return;
+	}
+
+	is_pmf_enabled = mlme_get_peer_pmf_status(peer);
+
+	wlan_objmgr_peer_release_ref(peer, WLAN_MLME_CM_ID);
+
+	cipher = wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_UCAST_CIPHER);
+	if (!cipher || QDF_HAS_PARAM(cipher, WLAN_CRYPTO_CIPHER_NONE))
+		is_open_connection = true;
+
+	wlan_cm_roam_cfg_get_value(psoc, vdev_id, MBO_OCE_ENABLED_AP, &temp);
+	mbo_oce_enabled_ap = temp.uint_value;
+	/*
+	 * If peer does not support PMF in case of OCE/MBO
+	 * Connection, Disable BTM offload to firmware.
+	 */
+	if (mbo_oce_enabled_ap && (!is_pmf_enabled && !is_open_connection))
+		*btm_offload_config = 0;
+
+	mlme_debug("is_open:%d is_pmf_enabled %d btm_offload_cfg:%d for "QDF_MAC_ADDR_FMT,
+		   is_open_connection, is_pmf_enabled, *btm_offload_config,
+		   QDF_MAC_ADDR_REF(bssid));
+}
+
+/**
+ * cm_roam_scan_btm_offload() - set roam scan btm offload parameters
+ * @psoc: psoc ctx
+ * @vdev: vdev
+ * @params:  roam scan btm offload parameters
+ * @rso_cfg: rso config
+ *
+ * This function is used to set roam scan btm offload related parameters
+ *
+ * Return: None
+ */
+static void
+cm_roam_scan_btm_offload(struct wlan_objmgr_psoc *psoc,
+			 struct wlan_objmgr_vdev *vdev,
+			 struct wlan_roam_btm_config *params,
+			 struct rso_config *rso_cfg)
+{
+	struct wlan_mlme_psoc_ext_obj *mlme_obj;
+	struct wlan_mlme_btm *btm_cfg;
+
+	mlme_obj = mlme_get_psoc_ext_obj(psoc);
+	if (!mlme_obj)
+		return;
+
+	btm_cfg = &mlme_obj->cfg.btm;
+	params->vdev_id = wlan_vdev_get_id(vdev);
+	cm_update_btm_offload_config(psoc, vdev, ROAM_SCAN_OFFLOAD_START,
+				     &params->btm_offload_config);
+	params->btm_solicited_timeout = btm_cfg->btm_solicited_timeout;
+	params->btm_max_attempt_cnt = btm_cfg->btm_max_attempt_cnt;
+	params->btm_sticky_time = btm_cfg->btm_sticky_time;
+	params->disassoc_timer_threshold = btm_cfg->disassoc_timer_threshold;
+	params->btm_query_bitmask = btm_cfg->btm_query_bitmask;
+	params->btm_candidate_min_score = btm_cfg->btm_trig_min_candidate_score;
+}
+
 /**
  * cm_roam_start_req() - roam start request handling
  * @psoc: psoc pointer
@@ -2109,6 +2225,7 @@ cm_roam_start_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
 					      &start_req->rso_chan_info,
 					      ROAM_SCAN_OFFLOAD_START,
 					      reason);
+	cm_roam_scan_btm_offload(psoc, vdev, &start_req->btm_config, rso_cfg);
 
 	/* fill from legacy through this API */
 	wlan_cm_roam_fill_start_req(psoc, vdev_id, start_req, reason);

+ 8 - 0
components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h

@@ -200,6 +200,8 @@ struct wlan_chan_list {
  * @mdid: mdid info
  * @is_11r_assoc: is 11r assoc
  * @is_adaptive_11r_connection: is adaptive 11r connection
+ * @hs_20_ap: Hotspot 2.0 AP
+ * @mbo_oce_enabled_ap: MBO/OCE enabled network
  * @roam_scan_freq_lst: roam freq list
  */
 struct rso_config {
@@ -225,6 +227,8 @@ struct rso_config {
 	struct mobility_domain_info mdid;
 	bool is_11r_assoc;
 	bool is_adaptive_11r_connection;
+	bool hs_20_ap;
+	uint32_t mbo_oce_enabled_ap;
 	struct rso_chan_info roam_scan_freq_lst;
 };
 
@@ -321,6 +325,8 @@ struct rso_config_params {
  * @MOBILITY_DOMAIN: mobility domain
  * @IS_11R_CONNECTION: is 11r connection
  * @ADAPTIVE_11R_CONNECTION: adaptive 11r
+ * @HS_20_AP: Hotspot 2.0 AP
+ * @MBO_OCE_ENABLED_AP: MBO/OCE enabled network
  */
 enum roam_cfg_param {
 	RSSI_CHANGE_THRESHOLD,
@@ -345,6 +351,8 @@ enum roam_cfg_param {
 	MOBILITY_DOMAIN,
 	IS_11R_CONNECTION,
 	ADAPTIVE_11R_CONNECTION,
+	HS_20_AP,
+	MBO_OCE_ENABLED_AP,
 };
 
 /**

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

@@ -642,6 +642,12 @@ QDF_STATUS wlan_cm_roam_cfg_get_value(struct wlan_objmgr_psoc *psoc,
 	case ADAPTIVE_11R_CONNECTION:
 		dst_config->bool_value = rso_cfg->is_adaptive_11r_connection;
 		break;
+	case HS_20_AP:
+		dst_config->bool_value = rso_cfg->hs_20_ap;
+		break;
+	case MBO_OCE_ENABLED_AP:
+		dst_config->uint_value = rso_cfg->mbo_oce_enabled_ap;
+		break;
 	default:
 		mlme_err("Invalid roam config requested:%d", roam_cfg_type);
 		status = QDF_STATUS_E_FAILURE;
@@ -1003,6 +1009,12 @@ wlan_cm_roam_cfg_set_value(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
 	case ADAPTIVE_11R_CONNECTION:
 		rso_cfg->is_adaptive_11r_connection = src_config->bool_value;
 		break;
+	case HS_20_AP:
+		rso_cfg->hs_20_ap  = src_config->bool_value;
+		break;
+	case MBO_OCE_ENABLED_AP:
+		rso_cfg->mbo_oce_enabled_ap  = src_config->uint_value;
+		break;
 	default:
 		mlme_err("Invalid roam config requested:%d", roam_cfg_type);
 		status = QDF_STATUS_E_FAILURE;

+ 7 - 1
core/hdd/src/wlan_hdd_cfg80211.c

@@ -19892,6 +19892,8 @@ static int wlan_hdd_cfg80211_set_ie(struct hdd_adapter *adapter,
 					      HS20_OUI_TYPE_SIZE))) {
 				uint16_t curAddIELen =
 					assoc_add_ie->length;
+				struct cm_roam_values_copy src_cfg;
+
 				hdd_debug("HS20 IE(len %d)", eLen + 2);
 
 				if (SIR_MAC_MAX_ADD_IE_LENGTH <
@@ -19908,7 +19910,11 @@ static int wlan_hdd_cfg80211_set_ie(struct hdd_adapter *adapter,
 					assoc_add_ie->addIEdata;
 				roam_profile->nAddIEAssocLength =
 					assoc_add_ie->length;
-				roam_profile->is_hs_20_ap = true;
+				src_cfg.bool_value = true;
+				wlan_cm_roam_cfg_set_value(wlan_vdev_get_psoc(
+								adapter->vdev),
+							   adapter->vdev_id,
+							   HS_20_AP, &src_cfg);
 			}
 			/* Appending OSEN Information  Element in Assiciation Request */
 			else if ((0 == memcmp(&genie[0], OSEN_OUI_TYPE,

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

@@ -721,7 +721,6 @@ struct csr_roam_profile {
 	struct wlan_fils_connection_info *fils_con_info;
 #endif
 	bool force_rsne_override;
-	bool is_hs_20_ap;
 };
 
 typedef struct tagCsrRoamConnectedProfile {

+ 8 - 117
core/sme/src/csr/csr_api_roam.c

@@ -8327,7 +8327,9 @@ csr_roam_save_connected_information(struct mac_context *mac,
 		/* Save the bss desc */
 		status = csr_roam_save_connected_bss_desc(mac, sessionId,
 								pSirBssDesc);
-
+		src_cfg.uint_value = pSirBssDesc->mbo_oce_enabled_ap;
+		wlan_cm_roam_cfg_set_value(mac->psoc, sessionId,
+					   MBO_OCE_ENABLED_AP, &src_cfg);
 		if (CSR_IS_QOS_BSS(pIesTemp) || pIesTemp->HTCaps.present)
 			/* Some HT AP's dont send WMM IE so in that case we
 			 * assume all HT Ap's are Qos Enabled AP's
@@ -14007,6 +14009,11 @@ static void csr_fill_connected_profile(struct mac_context *mac_ctx,
 
 	wlan_fill_bss_desc_from_scan_entry(mac_ctx, bss_desc, cur_node->entry);
 	csr_free_connect_bss_desc(mac_ctx, vdev_id);
+
+	src_cfg.uint_value = bss_desc->mbo_oce_enabled_ap;
+	wlan_cm_roam_cfg_set_value(mac_ctx->psoc, vdev_id, MBO_OCE_ENABLED_AP,
+				   &src_cfg);
+
 	status = wlan_get_parsed_bss_description_ies(mac_ctx, bss_desc,
 						     &bcn_ies);
 	if (QDF_IS_STATUS_ERROR(status)) {
@@ -16146,88 +16153,6 @@ csr_roam_pmkid_req_callback(uint8_t vdev_id,
 #endif /* WLAN_FEATURE_ROAM_OFFLOAD */
 
 #if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
-
-/**
- * csr_update_btm_offload_config() - Update btm config param to fw
- * @mac_ctx: Global mac ctx
- * @command: Roam offload command
- * @btm_offload_config: btm offload config
- * @session: roam session
- *
- * Return: None
- */
-static void csr_update_btm_offload_config(struct mac_context *mac_ctx,
-					  uint8_t command,
-					  uint32_t *btm_offload_config,
-					  struct csr_roam_session *session)
-{
-	struct wlan_objmgr_peer *peer;
-	struct wlan_objmgr_vdev *vdev;
-	bool is_pmf_enabled, is_open_connection = false;
-	int32_t cipher;
-
-	*btm_offload_config =
-			mac_ctx->mlme_cfg->btm.btm_offload_config;
-
-	/* Return if INI is disabled */
-	if (!(*btm_offload_config))
-		return;
-
-	/* For RSO Stop Disable BTM offload to firmware */
-	if (command == ROAM_SCAN_OFFLOAD_STOP ||
-	    session->pCurRoamProfile->is_hs_20_ap) {
-		sme_debug("RSO cmd: %d", command);
-		*btm_offload_config = 0;
-		return;
-	}
-
-	if (!session->pConnectBssDesc) {
-		sme_err("Connected Bss Desc is NULL");
-		return;
-	}
-
-	peer = wlan_objmgr_get_peer(mac_ctx->psoc,
-				    wlan_objmgr_pdev_get_pdev_id(mac_ctx->pdev),
-				    session->pConnectBssDesc->bssId,
-				    WLAN_LEGACY_SME_ID);
-	if (!peer) {
-		sme_debug("Peer of peer_mac "QDF_MAC_ADDR_FMT" not found",
-			  QDF_MAC_ADDR_REF(session->pConnectBssDesc->bssId));
-		return;
-	}
-
-	is_pmf_enabled = mlme_get_peer_pmf_status(peer);
-
-	wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_SME_ID);
-
-	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac_ctx->psoc,
-						    session->vdev_id,
-						    WLAN_LEGACY_SME_ID);
-	if (!vdev) {
-		sme_err("vdev:%d is NULL", session->vdev_id);
-		return;
-	}
-
-	cipher = wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_UCAST_CIPHER);
-	if (!cipher || QDF_HAS_PARAM(cipher, WLAN_CRYPTO_CIPHER_NONE))
-		is_open_connection = true;
-
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
-
-	/*
-	 * If peer does not support PMF in case of OCE/MBO
-	 * Connection, Disable BTM offload to firmware.
-	 */
-	if (session->pConnectBssDesc->mbo_oce_enabled_ap &&
-	    (!is_pmf_enabled && !is_open_connection))
-		*btm_offload_config = 0;
-
-	sme_debug("is_open:%d is_pmf_enabled %d btm_offload_cfg:%d for "QDF_MAC_ADDR_FMT,
-		  is_open_connection, is_pmf_enabled,
-		  *btm_offload_config,
-		  QDF_MAC_ADDR_REF(session->pConnectBssDesc->bssId));
-}
-
 /**
  * csr_update_11k_offload_params - Update 11K offload params
  * @mac_ctx: MAC context
@@ -16675,38 +16600,6 @@ wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
 	return QDF_STATUS_SUCCESS;
 }
 
-/**
- * csr_cm_roam_scan_btm_offload() - set roam scan btm offload parameters
- * @mac_ctx: global mac ctx
- * @session: sme session
- * @params:  roam scan btm offload parameters
- *
- * This function is used to set roam scan btm offload related parameters
- *
- * Return: None
- */
-static void
-csr_cm_roam_scan_btm_offload(struct mac_context *mac_ctx,
-			     struct csr_roam_session *session,
-			     struct wlan_roam_btm_config *params)
-{
-	params->vdev_id = session->vdev_id;
-	csr_update_btm_offload_config(mac_ctx, ROAM_SCAN_OFFLOAD_START,
-				      &params->btm_offload_config, session);
-	params->btm_solicited_timeout =
-			mac_ctx->mlme_cfg->btm.btm_solicited_timeout;
-	params->btm_max_attempt_cnt =
-			mac_ctx->mlme_cfg->btm.btm_max_attempt_cnt;
-	params->btm_sticky_time =
-			mac_ctx->mlme_cfg->btm.btm_sticky_time;
-	params->disassoc_timer_threshold =
-			mac_ctx->mlme_cfg->btm.disassoc_timer_threshold;
-	params->btm_query_bitmask =
-			mac_ctx->mlme_cfg->btm.btm_query_bitmask;
-	params->btm_candidate_min_score =
-			mac_ctx->mlme_cfg->btm.btm_trig_min_candidate_score;
-}
-
 /**
  * csr_cm_roam_offload_11k_params() - set roam 11k offload parameters
  * @mac_ctx: global mac ctx
@@ -16751,8 +16644,6 @@ wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	csr_cm_roam_scan_btm_offload(mac_ctx, session, &req->btm_config);
-
 	/* 11k offload is enabled during RSO Start after connect indication */
 	csr_cm_roam_offload_11k_params(mac_ctx, session,
 				       &req->roam_11k_params, TRUE);