Преглед изворни кода

qcacld-3.0: Fix to avoid checking PCL when BSSID is given by upper layer

New flavor of OS is sending bssid along with STA connect command. When
connect command comes with bssids then don't allow Preferred channel
list algorithm as it won't be of any use and skipping the algorithm will
improve initial scan time.

Add log to inform whether BSSID hint is given by upper layer.

Change-Id: I9c1f41a0e00f9b2afc19629558b93a2482da6581
CRs-Fixed: 1047052
Krunal Soni пре 8 година
родитељ
комит
35b404c206
2 измењених фајлова са 10 додато и 3 уклоњено
  1. 4 2
      core/hdd/src/wlan_hdd_cfg80211.c
  2. 6 1
      core/sme/src/csr/csr_api_scan.c

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

@@ -9502,6 +9502,7 @@ int wlan_hdd_cfg80211_connect_start(hdd_adapter_t *pAdapter,
 			 */
 			qdf_mem_copy((void *)(pWextState->req_bssId.bytes),
 					bssid, QDF_MAC_ADDR_SIZE);
+			hdd_info("bssid is given by upper layer %pM", bssid);
 		} else if (bssid_hint) {
 			pRoamProfile->BSSIDs.numOfBSSIDs = 1;
 			qdf_mem_copy((void *)(pRoamProfile->BSSIDs.bssid),
@@ -9513,11 +9514,12 @@ int wlan_hdd_cfg80211_connect_start(hdd_adapter_t *pAdapter,
 			 */
 			qdf_mem_copy((void *)(pWextState->req_bssId.bytes),
 					bssid_hint, QDF_MAC_ADDR_SIZE);
-			hdd_warn(" bssid_hint "MAC_ADDRESS_STR,
-					MAC_ADDR_ARRAY(bssid_hint));
+			hdd_info("bssid_hint is given by upper layer %pM",
+					bssid_hint);
 		} else {
 			qdf_mem_zero((void *)(pRoamProfile->BSSIDs.bssid),
 				     QDF_MAC_ADDR_SIZE);
+			hdd_info("no bssid given by upper layer");
 		}
 
 		hdd_notice("Connect to SSID: %.*s operating Channel: %u",

+ 6 - 1
core/sme/src/csr/csr_api_scan.c

@@ -1962,6 +1962,11 @@ static QDF_STATUS csr_calc_pref_val_by_pcl(tpAniSirGlobal mac_ctx,
 
 	if (NULL == mac_ctx || NULL == bss_descr)
 		return QDF_STATUS_E_FAILURE;
+	if (filter && (0 != filter->BSSIDs.numOfBSSIDs)) {
+		sms_log(mac_ctx, LOGW,
+			FL("filter has specific bssid, no point of boosting"));
+		return QDF_STATUS_SUCCESS;
+	}
 
 	if (is_channel_found_in_pcl(mac_ctx,
 			bss_descr->Result.BssDescriptor.channelId, filter) &&
@@ -2010,7 +2015,7 @@ csr_parse_scan_results(tpAniSirGlobal pMac,
 
 	csr_ll_lock(&pMac->scan.scanResultList);
 
-	if (pFilter) {
+	if (pFilter && (0 == pFilter->BSSIDs.numOfBSSIDs)) {
 		if (cds_map_concurrency_mode(
 					&pFilter->csrPersona, &new_mode)) {
 			status = cds_get_pcl(new_mode,