diff options
| -rw-r--r-- | CORE/MAC/src/pe/lim/limAssocUtils.c | 36 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limAssocUtils.h | 2 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrApiRoam.c | 1 |
3 files changed, 35 insertions, 4 deletions
diff --git a/CORE/MAC/src/pe/lim/limAssocUtils.c b/CORE/MAC/src/pe/lim/limAssocUtils.c index d668a36da4ac..aaa76daec0e5 100644 --- a/CORE/MAC/src/pe/lim/limAssocUtils.c +++ b/CORE/MAC/src/pe/lim/limAssocUtils.c @@ -1581,6 +1581,7 @@ tSirRetStatus limPopulateVhtMcsSet(tpAniSirGlobal pMac, if( pPeerVHTCaps != NULL) { tANI_U16 mcsMapMask = MCSMAPMASK1x1; + tANI_U16 mcsMapMask2x2 = 0; pRates->vhtTxHighestDataRate = SIR_MIN(pRates->vhtTxHighestDataRate, pPeerVHTCaps->txSupDataRate); pRates->vhtRxHighestDataRate = SIR_MIN(pRates->vhtRxHighestDataRate, pPeerVHTCaps->rxHighSupDataRate); @@ -1592,16 +1593,19 @@ tSirRetStatus limPopulateVhtMcsSet(tpAniSirGlobal pMac, (IS_24G_CH(psessionEntry->currentOperChannel))) { if(IS_2X2_CHAIN(psessionEntry->chainMask)) - mcsMapMask = MCSMAPMASK2x2; + mcsMapMask2x2 = MCSMAPMASK2x2; + else + PELOGE(limLog(pMac, LOGE, FL("2x2 not enabled %d"), + psessionEntry->chainMask);) } else { - mcsMapMask = MCSMAPMASK2x2; + mcsMapMask2x2 = MCSMAPMASK2x2; } } else { - mcsMapMask = MCSMAPMASK2x2; + mcsMapMask2x2 = MCSMAPMASK2x2; } } @@ -1613,6 +1617,32 @@ tSirRetStatus limPopulateVhtMcsSet(tpAniSirGlobal pMac, pRates->vhtTxMCSMap &= ~(mcsMapMask); pRates->vhtTxMCSMap |= (pPeerVHTCaps->txMCSMap & mcsMapMask); } + + if (mcsMapMask2x2) { + + tANI_U16 peerMcsMap, selfMcsMap; + + peerMcsMap = pPeerVHTCaps->rxMCSMap & mcsMapMask2x2; + selfMcsMap = pRates->vhtRxMCSMap & mcsMapMask2x2; + + if ((selfMcsMap != mcsMapMask2x2) && + ((peerMcsMap == mcsMapMask2x2) || + (peerMcsMap < selfMcsMap))) { + pRates->vhtRxMCSMap &= ~mcsMapMask2x2; + pRates->vhtRxMCSMap |= peerMcsMap; + } + + peerMcsMap = (pPeerVHTCaps->txMCSMap & mcsMapMask2x2); + selfMcsMap = (pRates->vhtTxMCSMap & mcsMapMask2x2); + + if ((selfMcsMap != mcsMapMask2x2) && + ((peerMcsMap == mcsMapMask2x2) || + (peerMcsMap < selfMcsMap))) { + pRates->vhtTxMCSMap &= ~mcsMapMask2x2; + pRates->vhtTxMCSMap |= peerMcsMap; + } + } + limLog( pMac, LOG1, FL("enable2x2 - %d vhtRxMCSMap - %x vhtTxMCSMap - %x\n"), pMac->roam.configParam.enable2x2, pRates->vhtRxMCSMap, pRates->vhtTxMCSMap); } diff --git a/CORE/MAC/src/pe/lim/limAssocUtils.h b/CORE/MAC/src/pe/lim/limAssocUtils.h index 8a3ddb0fb799..d1ccbf359a61 100644 --- a/CORE/MAC/src/pe/lim/limAssocUtils.h +++ b/CORE/MAC/src/pe/lim/limAssocUtils.h @@ -116,7 +116,7 @@ tSirRetStatus limPopulateMatchingRateSet(tpAniSirGlobal, #ifdef WLAN_FEATURE_11AC #define MCSMAPMASK1x1 0x3 -#define MCSMAPMASK2x2 0xF +#define MCSMAPMASK2x2 0xC #endif tSirRetStatus limAddSta(tpAniSirGlobal, tpDphHashNode, tANI_U8, tpPESession); diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c index 64fcbc431b83..45a49711be2e 100644 --- a/CORE/SME/src/csr/csrApiRoam.c +++ b/CORE/SME/src/csr/csrApiRoam.c @@ -1891,6 +1891,7 @@ eHalStatus csrGetConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pParam) pParam->txBFCsnValue = pMac->roam.configParam.txBFCsnValue; pParam->enableMuBformee = pMac->roam.configParam.txMuBformee; pParam->enableVhtFor24GHz = pMac->roam.configParam.enableVhtFor24GHz; + pParam->enable2x2 = pMac->roam.configParam.enable2x2; #endif #ifdef WLAN_FEATURE_VOWIFI_11R vos_mem_copy(&pMac->roam.configParam.csr11rConfig, |
