summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVignesh Viswanathan <viswanat@codeaurora.org>2018-06-06 19:35:25 +0530
committernshrivas <nshrivas@codeaurora.org>2018-06-08 09:33:08 -0700
commit41a5a9e560f453431a8524bf0c080c8d056eeaa8 (patch)
tree7cd44b35e1bff0f2567315f181d3fd5a6d66ef78
parent9c45d9da6c8b7d4d7f1bd805fffcc0c69bff07db (diff)
qcacld-3.0: Do not update NSS based on OMN IE for forced 1x1 APs
Currently if the AP advertises VHT capability via Vendor VHT IEs and OMN IE in the beacon, during the connect, the NSS from HTCaps IE is used for connection and NSS from the OMN IE is updated after connect from the first beacon received from the AP after connect. However, if the AP is forced to connect in 1x1 due to Action OUI from ini, the NSS is again updated after connect from the first beacon leading to 2x2 connection for forced 1x1 AP. Add changes to not update the NSS from OMN IE if the current session is with forced 1x1 AP. Change-Id: I0ad6c176cee6d441cb0150de039b315cc414ca5d CRs-Fixed: 2255346
-rw-r--r--core/mac/inc/sir_api.h1
-rw-r--r--core/mac/src/pe/include/lim_session.h1
-rw-r--r--core/mac/src/pe/lim/lim_process_sme_req_messages.c2
-rw-r--r--core/mac/src/pe/sch/sch_beacon_process.c4
-rw-r--r--core/sme/inc/csr_internal.h1
-rw-r--r--core/sme/src/csr/csr_api_roam.c2
6 files changed, 11 insertions, 0 deletions
diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h
index 57c999dbf6ae..988b7aba5fe4 100644
--- a/core/mac/inc/sir_api.h
+++ b/core/mac/inc/sir_api.h
@@ -1340,6 +1340,7 @@ typedef struct sSirSmeJoinReq {
bool supported_nss_1x1;
uint8_t vdev_nss;
uint8_t nss;
+ bool nss_forced_1x1;
tSirBssDescription bssDescription;
/*
* WARNING: Pls make bssDescription as last variable in struct
diff --git a/core/mac/src/pe/include/lim_session.h b/core/mac/src/pe/include/lim_session.h
index cafda29420c2..beec2735af59 100644
--- a/core/mac/src/pe/include/lim_session.h
+++ b/core/mac/src/pe/include/lim_session.h
@@ -470,6 +470,7 @@ typedef struct sPESession /* Added to Support BT-AMP */
/* flag to indicate country code in beacon */
uint8_t country_info_present;
uint8_t nss;
+ bool nss_forced_1x1;
bool add_bss_failed;
/* To hold OBSS Scan IE Parameters */
struct obss_scanparam obss_ht40_scanparam;
diff --git a/core/mac/src/pe/lim/lim_process_sme_req_messages.c b/core/mac/src/pe/lim/lim_process_sme_req_messages.c
index 882c3137abc6..9d14c121dd00 100644
--- a/core/mac/src/pe/lim/lim_process_sme_req_messages.c
+++ b/core/mac/src/pe/lim/lim_process_sme_req_messages.c
@@ -1879,6 +1879,7 @@ __lim_process_sme_join_req(tpAniSirGlobal mac_ctx, uint32_t *msg_buf)
session->supported_nss_1x1 = sme_join_req->supported_nss_1x1;
session->vdev_nss = sme_join_req->vdev_nss;
session->nss = sme_join_req->nss;
+ session->nss_forced_1x1 = sme_join_req->nss_forced_1x1;
pe_debug("nss %d, vdev_nss %d, supported_nss_1x1 %d",
session->nss,
@@ -2141,6 +2142,7 @@ static void __lim_process_sme_reassoc_req(tpAniSirGlobal mac_ctx,
session_entry->supported_nss_1x1 = reassoc_req->supported_nss_1x1;
session_entry->vdev_nss = reassoc_req->vdev_nss;
session_entry->nss = reassoc_req->nss;
+ session_entry->nss_forced_1x1 = reassoc_req->nss_forced_1x1;
pe_debug("vhtCapability: %d su_beam_formee: %d su_tx_bformer %d",
session_entry->vhtCapability,
diff --git a/core/mac/src/pe/sch/sch_beacon_process.c b/core/mac/src/pe/sch/sch_beacon_process.c
index 58a6e6095bb2..e0ccf28dbbc2 100644
--- a/core/mac/src/pe/sch/sch_beacon_process.c
+++ b/core/mac/src/pe/sch/sch_beacon_process.c
@@ -483,6 +483,10 @@ static void update_nss(tpAniSirGlobal mac_ctx, tpDphHashNode sta_ds,
tpSirMacMgmtHdr mgmt_hdr)
{
if (sta_ds->vhtSupportedRxNss != (beacon->OperatingMode.rxNSS + 1)) {
+ if (session_entry->nss_forced_1x1) {
+ pe_debug("Not Updating NSS for special AP");
+ return;
+ }
sta_ds->vhtSupportedRxNss =
beacon->OperatingMode.rxNSS + 1;
lim_set_nss_change(mac_ctx, session_entry,
diff --git a/core/sme/inc/csr_internal.h b/core/sme/inc/csr_internal.h
index 9d9753c5a404..c73d7b0530f8 100644
--- a/core/sme/inc/csr_internal.h
+++ b/core/sme/inc/csr_internal.h
@@ -1042,6 +1042,7 @@ typedef struct tagCsrRoamSession {
bool supported_nss_1x1;
uint8_t vdev_nss;
uint8_t nss;
+ bool nss_forced_1x1;
bool disable_hi_rssi;
bool dhcp_done;
uint8_t disconnect_reason;
diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c
index c3f0d54e883d..4ff58fe69971 100644
--- a/core/sme/src/csr/csr_api_roam.c
+++ b/core/sme/src/csr/csr_api_roam.c
@@ -15799,6 +15799,7 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId,
pSession->supported_nss_1x1 = true;
pSession->vdev_nss = 1;
pSession->nss = 1;
+ pSession->nss_forced_1x1 = true;
sme_debug("For special ap, NSS: %d", pSession->nss);
}
@@ -15838,6 +15839,7 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId,
csr_join_req->supported_nss_1x1 = pSession->supported_nss_1x1;
csr_join_req->vdev_nss = pSession->vdev_nss;
csr_join_req->nss = pSession->nss;
+ csr_join_req->nss_forced_1x1 = pSession->nss_forced_1x1;
csr_join_req->dot11mode = (uint8_t) ucDot11Mode;
sme_debug("dot11mode=%d, uCfgDot11Mode=%d, nss=%d",
csr_join_req->dot11mode,