diff options
| author | Vignesh Viswanathan <viswanat@codeaurora.org> | 2018-06-06 19:35:25 +0530 |
|---|---|---|
| committer | nshrivas <nshrivas@codeaurora.org> | 2018-06-08 09:33:08 -0700 |
| commit | 41a5a9e560f453431a8524bf0c080c8d056eeaa8 (patch) | |
| tree | 7cd44b35e1bff0f2567315f181d3fd5a6d66ef78 | |
| parent | 9c45d9da6c8b7d4d7f1bd805fffcc0c69bff07db (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.h | 1 | ||||
| -rw-r--r-- | core/mac/src/pe/include/lim_session.h | 1 | ||||
| -rw-r--r-- | core/mac/src/pe/lim/lim_process_sme_req_messages.c | 2 | ||||
| -rw-r--r-- | core/mac/src/pe/sch/sch_beacon_process.c | 4 | ||||
| -rw-r--r-- | core/sme/inc/csr_internal.h | 1 | ||||
| -rw-r--r-- | core/sme/src/csr/csr_api_roam.c | 2 |
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, |
