Browse Source

qcacld-3.0: Disable HI_RSSI_SCAN in few scenarios

qcacld-2.0 to qcacld-3.0 propagation

The HI_RSSI_SCAN feature is only meant to address the
scenario where user walks into a home which has dual band
AP and the 2.4G AP is visible initially and then the 5G AP
is visible later.
Disable the HI_RSSI_SCAN feature in the following cases:
1. Connection is a roaming connection
2. Connection is made with a 5G AP
3. Connection is made with a 2.4G AP, but the rssi is
   stronger than the hi_rssi_lookup_threshold

CRs-Fixed: 975401
Change-Id: I86c63d9f8b51b6bdccc804163241ffe5640baf4d
Varun Reddy Yeturu 9 years ago
parent
commit
7fc616d09a
2 changed files with 18 additions and 5 deletions
  1. 1 0
      core/sme/inc/csr_internal.h
  2. 17 5
      core/sme/src/csr/csr_api_roam.c

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

@@ -990,6 +990,7 @@ typedef struct tagCsrRoamSession {
 	bool ch_switch_in_progress;
 	bool ch_switch_in_progress;
 	bool roam_synch_in_progress;
 	bool roam_synch_in_progress;
 	bool supported_nss_1x1;
 	bool supported_nss_1x1;
+	bool disable_hi_rssi;
 } tCsrRoamSession;
 } tCsrRoamSession;
 
 
 typedef struct tagCsrRoamStruct {
 typedef struct tagCsrRoamStruct {

+ 17 - 5
core/sme/src/csr/csr_api_roam.c

@@ -13437,6 +13437,7 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId,
 	struct ps_global_info *ps_global_info = &pMac->sme.ps_global_info;
 	struct ps_global_info *ps_global_info = &pMac->sme.ps_global_info;
 	struct ps_params *ps_param = &ps_global_info->ps_params[sessionId];
 	struct ps_params *ps_param = &ps_global_info->ps_params[sessionId];
 	uint8_t ese_config = 0;
 	uint8_t ese_config = 0;
+	tpCsrNeighborRoamControlInfo neigh_roam_info;
 
 
 
 
 	if (!pSession) {
 	if (!pSession) {
@@ -13448,6 +13449,20 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId,
 		sms_log(pMac, LOGE, FL(" pBssDescription is NULL"));
 		sms_log(pMac, LOGE, FL(" pBssDescription is NULL"));
 		return QDF_STATUS_E_FAILURE;
 		return QDF_STATUS_E_FAILURE;
 	}
 	}
+	neigh_roam_info = &pMac->roam.neighborRoamInfo[sessionId];
+	if ((eWNI_SME_REASSOC_REQ == messageType) ||
+		CDS_IS_CHANNEL_5GHZ(pBssDescription->channelId) ||
+		(abs(pBssDescription->rssi) <
+		 (neigh_roam_info->cfgParams.neighborLookupThreshold +
+		  neigh_roam_info->cfgParams.hi_rssi_scan_rssi_delta))) {
+		pSession->disable_hi_rssi = true;
+		sms_log(pMac, LOG1,
+			FL("Disabling HI_RSSI feature, AP channel=%d, rssi=%d"),
+			pBssDescription->channelId, pBssDescription->rssi);
+	} else {
+		pSession->disable_hi_rssi = false;
+	}
+
 
 
 	do {
 	do {
 		pSession->joinFailStatusCode.statusCode = eSIR_SME_SUCCESS;
 		pSession->joinFailStatusCode.statusCode = eSIR_SME_SUCCESS;
@@ -16948,14 +16963,11 @@ csr_roam_offload_scan(tpAniSirGlobal mac_ctx, uint8_t session_id,
 	 * is useful only if we are connected to a 2.4 GHz AP and we wish
 	 * is useful only if we are connected to a 2.4 GHz AP and we wish
 	 * to connect to a better 5GHz AP is available.
 	 * to connect to a better 5GHz AP is available.
 	 */
 	 */
-	if (CDS_IS_CHANNEL_5GHZ(op_channel)) {
-		QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG,
-			"Disabling HI_RSSI feature as connected AP is 5GHz");
+	if (session->disable_hi_rssi)
 		req_buf->hi_rssi_scan_rssi_delta = 0;
 		req_buf->hi_rssi_scan_rssi_delta = 0;
-	} else {
+	else
 		req_buf->hi_rssi_scan_rssi_delta =
 		req_buf->hi_rssi_scan_rssi_delta =
 			roam_info->cfgParams.hi_rssi_scan_rssi_delta;
 			roam_info->cfgParams.hi_rssi_scan_rssi_delta;
-	}
 	QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG,
 	QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG,
 		"hi_rssi:delta=%d, max_count=%d, delay=%d, ub=%d",
 		"hi_rssi:delta=%d, max_count=%d, delay=%d, ub=%d",
 			req_buf->hi_rssi_scan_rssi_delta,
 			req_buf->hi_rssi_scan_rssi_delta,