Browse Source

qcacld-3.0: Optimize GC connection speed by skipping JOIN

Currently STA/GC connection will have JOIN which actively probe AP/GO
in this state to get latest bss entry, but before connection scan
already trigger and bss entry updated in scan db so can skip JOIN
in some scenario.

There is requirement to optimize GC connection speed, and to skip
JOIN state is one of the subtask to achieve it. Add a build option
to skip JOIN for GC connection.

Change-Id: I1f8beaa41ea398601a17fa80997029b8ac8849ae
CRs-Fixed: 3598283
Will Huang 1 year ago
parent
commit
a4715adff4

+ 3 - 0
Kbuild

@@ -4072,6 +4072,9 @@ ccflags-$(CONFIG_FEATURE_WLAN_AP_AP_ACS_OPTIMIZE) += -DFEATURE_WLAN_AP_AP_ACS_OP
 #Enable 4address scheme
 ccflags-$(CONFIG_FEATURE_WLAN_STA_4ADDR_SCHEME) += -DFEATURE_WLAN_STA_4ADDR_SCHEME
 
+#Optimize GC connection speed by skipping JOIN
+ccflags-$(CONFIG_FEATURE_WLAN_GC_SKIP_JOIN) += -DFEATURE_WLAN_GC_SKIP_JOIN
+
 #enable MDM/SDX special config
 ccflags-$(CONFIG_MDM_PLATFORM) += -DMDM_PLATFORM
 

+ 4 - 0
Kconfig

@@ -1341,6 +1341,10 @@ config WLAN_FEATURE_SAP_ACS_OPTIMIZE
 	bool "Enable WLAN_FEATURE_SAP_ACS_OPTIMIZE"
 	default n
 
+config FEATURE_WLAN_GC_SKIP_JOIN
+	bool "enable CONFIG_FEATURE_WLAN_GC_SKIP_JOIN"
+	default n
+
 config WLAN_FEATURE_SARV1_TO_SARV2
 	bool "Enable conversion of SAR v1 to v2 feature"
 	default n

+ 4 - 0
configs/config_to_feature.h

@@ -1243,6 +1243,10 @@
 #define FEATURE_WLAN_STA_4ADDR_SCHEME (1)
 #endif
 
+#ifdef CONFIG_FEATURE_WLAN_GC_SKIP_JOIN
+#define FEATURE_WLAN_GC_SKIP_JOIN (1)
+#endif
+
 #ifdef CONFIG_MDM_PLATFORM
 #define MDM_PLATFORM (1)
 #endif

+ 10 - 0
core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c

@@ -3094,6 +3094,16 @@ static void lim_process_switch_channel_join_req(
 		goto error;
 	}
 
+	if (lim_connect_skip_join_for_gc(session_entry)) {
+		join_cnf.resultCode = eSIR_SME_SUCCESS;
+		join_cnf.protStatusCode = STATUS_SUCCESS;
+		join_cnf.sessionId = session_entry->peSessionId;
+		lim_post_sme_message(mac_ctx,
+				     LIM_MLM_JOIN_CNF,
+				     (uint32_t *)&join_cnf.resultCode);
+		return;
+	}
+
 	bss = &session_entry->lim_join_req->bssDescription;
 	nontx_bss_id = bss->mbssid_info.profile_num;
 

+ 11 - 0
core/mac/src/pe/lim/lim_process_sme_req_messages.c

@@ -4708,6 +4708,17 @@ lim_cm_handle_join_req(struct cm_vdev_join_req *req)
 	lim_dump_he_info(mac_ctx, pe_session);
 	lim_dump_eht_info(pe_session);
 
+	if (lim_connect_skip_join_for_gc(pe_session)) {
+		pe_session->beacon =
+			qdf_mem_malloc(util_scan_entry_frame_len(req->entry));
+		if (!pe_session->beacon)
+			goto fail;
+		pe_session->bcnLen = util_scan_entry_frame_len(req->entry);
+		qdf_mem_copy(pe_session->beacon,
+			     util_scan_entry_frame_ptr(req->entry),
+			     pe_session->bcnLen);
+	}
+
 	status = lim_send_connect_req_to_mlm(pe_session);
 	if (QDF_IS_STATUS_ERROR(status)) {
 		pe_err("Failed to send mlm req vdev id %d",

+ 17 - 0
core/mac/src/pe/lim/lim_utils.h

@@ -3272,6 +3272,23 @@ lim_skip_tpc_update_for_sta(struct mac_context *mac,
 			    struct pe_session *sta_session,
 			    struct pe_session *sap_session);
 
+#ifdef FEATURE_WLAN_GC_SKIP_JOIN
+static inline bool
+lim_connect_skip_join_for_gc(struct pe_session *pe_session)
+{
+	if (pe_session->opmode == QDF_P2P_CLIENT_MODE)
+		return true;
+	else
+		return false;
+}
+#else
+static inline bool
+lim_connect_skip_join_for_gc(struct pe_session *pe_session)
+{
+	return false;
+}
+#endif
+
 /**
  * lim_get_concurrent_session() - Function to get the concurrent session pointer
  *