Ver Fonte

qcacld-3.0: Set SMPS intolrent vdev param

Set WMI_VDEV_PARAM_SMPS_INTOLERANT when a VDEV cannot be allowed to
send SMPS frame. This is needed as certain AP wont properly handle
SMPS frames.

Change-Id: I1dd30bcb4fcaf312fa376cbfe3c1fb9c0d37750a
CRs-Fixed: 2049789
Naveen Rawat há 8 anos atrás
pai
commit
c4a0e6643e

+ 3 - 2
core/mac/src/pe/lim/lim_prop_exts_utils.c

@@ -196,14 +196,15 @@ lim_extract_ap_capability(tpAniSirGlobal mac_ctx, uint8_t *p_ie,
 	if (mac_ctx->roam.configParam.is_force_1x1 &&
 		cfg_get_vendor_ie_ptr_from_oui(mac_ctx, SIR_MAC_VENDOR_AP_1_OUI,
 				SIR_MAC_VENDOR_AP_1_OUI_LEN, p_ie, ie_len) &&
-		lim_get_nss_supported_by_beacon(beacon_struct, session) == 2) {
+		lim_get_nss_supported_by_beacon(beacon_struct, session) == 2 &&
+		mac_ctx->lteCoexAntShare &&
+		IS_24G_CH(session->currentOperChannel)) {
 		session->supported_nss_1x1 = true;
 		session->vdev_nss = 1;
 		session->nss = 1;
 		pe_debug("For special ap, NSS: %d", session->nss);
 	}
 
-
 	if (beacon_struct->wmeInfoPresent ||
 	    beacon_struct->wmeEdcaPresent ||
 	    beacon_struct->HTCaps.present)

+ 22 - 0
core/mac/src/pe/lim/lim_send_sme_rsp_messages.c

@@ -265,6 +265,10 @@ static void lim_handle_join_rsp_status(tpAniSirGlobal mac_ctx,
 	tpPESession session_entry, tSirResultCodes result_code,
 	tpSirSmeJoinRsp sme_join_rsp)
 {
+	uint16_t bss_ie_len;
+	void *bss_ies;
+	bool is_vendor_ap_1_present;
+
 #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
 	tSirSmeHTProfile *ht_profile;
 #endif
@@ -361,6 +365,24 @@ static void lim_handle_join_rsp_status(tpAniSirGlobal mac_ctx,
 			ht_profile->apChanWidth = session_entry->ch_width;
 		}
 #endif
+		bss_ie_len = lim_get_ielen_from_bss_description(
+				&session_entry->pLimJoinReq->bssDescription);
+		bss_ies = &session_entry->pLimJoinReq->bssDescription.ieFields;
+		is_vendor_ap_1_present = (cfg_get_vendor_ie_ptr_from_oui(mac_ctx,
+			SIR_MAC_VENDOR_AP_1_OUI, SIR_MAC_VENDOR_AP_1_OUI_LEN,
+			bss_ies, bss_ie_len) != NULL);
+
+		if (mac_ctx->roam.configParam.is_force_1x1 &&
+			is_vendor_ap_1_present && (session_entry->nss == 2) &&
+			(mac_ctx->lteCoexAntShare == 0 ||
+				IS_5G_CH(session_entry->currentOperChannel))) {
+			/* SET vdev param */
+			pe_debug("sending SMPS intolrent vdev_param");
+			wma_cli_set_command(session_entry->smeSessionId,
+					   (int)WMI_VDEV_PARAM_SMPS_INTOLERANT,
+					    1, VDEV_CMD);
+
+		}
 	} else {
 		if (session_entry->beacon != NULL) {
 			qdf_mem_free(session_entry->beacon);