Explorar el Código

qcacld-3.0: Enable Host STA OBSS Scan

Enable supplicant STA OBSS Scan
and disable OBSS SCAN WMI command sending
if Firmware doesn't support OBSS scan offload.

Change-Id: Id8fde7301d307c355b9f6cf82b85854a6d84ca79
CRs-Fixed: 2275065
Liangwei Dong hace 6 años
padre
commit
0da1426e7b

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

@@ -1923,6 +1923,7 @@ struct hdd_context {
 	bool force_rsne_override;
 	qdf_wake_lock_t monitor_mode_wakelock;
 	bool lte_coex_ant_share;
+	bool obss_scan_offload;
 	int sscan_pid;
 	uint32_t track_arp_ip;
 

+ 7 - 0
core/hdd/src/wlan_hdd_main.c

@@ -2092,6 +2092,7 @@ void hdd_update_tgt_cfg(hdd_handle_t hdd_handle, struct wma_tgt_cfg *cfg)
 	hdd_nan_datapath_target_config(hdd_ctx, cfg);
 	hdd_ctx->dfs_cac_offload = cfg->dfs_cac_offload;
 	hdd_ctx->lte_coex_ant_share = cfg->services.lte_coex_ant_share;
+	hdd_ctx->obss_scan_offload = cfg->services.obss_scan_offload;
 	status = sme_cfg_set_int(mac_handle, WNI_CFG_OBSS_DETECTION_OFFLOAD,
 				 cfg->obss_detection_offloaded);
 	if (QDF_IS_STATUS_ERROR(status))
@@ -7260,6 +7261,12 @@ static int hdd_wiphy_init(struct hdd_context *hdd_ctx)
 	wiphy->wowlan.pattern_min_len = WOW_MIN_PATTERN_SIZE;
 	wiphy->wowlan.pattern_max_len = WOW_MAX_PATTERN_SIZE;
 #endif
+	if (hdd_ctx->obss_scan_offload) {
+		hdd_debug("wmi_service_obss_scan supported");
+	} else if (hdd_ctx->config->nChannelBondingMode24GHz) {
+		hdd_debug("enable wpa_supp obss_scan");
+		wiphy->features |= NL80211_FEATURE_NEED_OBSS_SCAN;
+	}
 
 	/* registration of wiphy dev with cfg80211 */
 	ret_val = wlan_hdd_cfg80211_register(wiphy);

+ 1 - 0
core/mac/inc/ani_global.h

@@ -928,6 +928,7 @@ typedef struct sAniSirGlobal {
 	tDot11fIEhe_cap he_cap_2g;
 	tDot11fIEhe_cap he_cap_5g;
 #endif
+	bool obss_scan_offload;
 } tAniSirGlobal;
 
 

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

@@ -13627,6 +13627,8 @@ void sme_update_tgt_services(tHalHandle hal, struct wma_tgt_services *cfg)
 {
 	tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal);
 
+	mac_ctx->obss_scan_offload = cfg->obss_scan_offload;
+	sme_debug("obss_scan_offload: %d", mac_ctx->obss_scan_offload);
 	mac_ctx->lteCoexAntShare = cfg->lte_coex_ant_share;
 	mac_ctx->beacon_offload = cfg->beacon_offload;
 	mac_ctx->pmf_offload = cfg->pmf_offload;

+ 2 - 1
core/sme/src/csr/csr_api_roam.c

@@ -12564,7 +12564,8 @@ csr_roam_chk_lnk_set_ctx_rsp(tpAniSirGlobal mac_ctx, tSirSmeRsp *msg_ptr)
 			 * OBSS SCAN Indication will be sent to Firmware
 			 * to start OBSS Scan
 			 */
-			if (CSR_IS_CHANNEL_24GHZ(
+			if (mac_ctx->obss_scan_offload &&
+			    CSR_IS_CHANNEL_24GHZ(
 				session->connectedProfile.operationChannel)
 				&& (session->connectState ==
 					eCSR_ASSOC_STATE_TYPE_INFRA_ASSOCIATED)

+ 1 - 0
core/wma/inc/wma_tgt_cfg.h

@@ -69,6 +69,7 @@ struct wma_tgt_services {
 	bool is_11k_offload_supported;
 	bool twt_requestor;
 	bool twt_responder;
+	bool obss_scan_offload;
 };
 
 /**

+ 2 - 0
core/wma/src/wma_main.c

@@ -4849,6 +4849,8 @@ static inline void wma_update_target_services(struct wmi_unified *wmi_handle,
 		cfg->twt_requestor = true;
 	if (wmi_service_enabled(wmi_handle, wmi_service_twt_responder))
 		cfg->twt_responder = true;
+	if (wmi_service_enabled(wmi_handle, wmi_service_obss_scan))
+		cfg->obss_scan_offload = true;
 }
 
 /**