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
diff --git a/core/mac/src/pe/lim/lim_prop_exts_utils.c b/core/mac/src/pe/lim/lim_prop_exts_utils.c
index 79b1a7d..96081db 100644
--- a/core/mac/src/pe/lim/lim_prop_exts_utils.c
+++ b/core/mac/src/pe/lim/lim_prop_exts_utils.c
@@ -196,14 +196,15 @@
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)
diff --git a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c
index 8456e0a..e1faecc 100644
--- a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c
+++ b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c
@@ -265,6 +265,10 @@
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 @@
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);