diff options
| -rw-r--r-- | CORE/HDD/inc/wlan_hdd_cfg.h | 6 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg.c | 26 | ||||
| -rw-r--r-- | CORE/MAC/inc/sirApi.h | 1 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/include/limSession.h | 1 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limAssocUtils.c | 13 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c | 1 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c | 1 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limSerDesUtils.c | 5 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/inc/legacy/halMsgApi.h | 1 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 20 | ||||
| -rw-r--r-- | CORE/SME/inc/csrApi.h | 1 | ||||
| -rw-r--r-- | CORE/SME/inc/csrInternal.h | 1 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrApiRoam.c | 7 | ||||
| -rw-r--r-- | CORE/WDA/inc/legacy/halMsgApi.h | 1 |
14 files changed, 82 insertions, 3 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h index 52352a13358c..7eb062ee29f6 100644 --- a/CORE/HDD/inc/wlan_hdd_cfg.h +++ b/CORE/HDD/inc/wlan_hdd_cfg.h @@ -1297,6 +1297,11 @@ typedef enum #define CFG_VHT_ENABLE_2x2_CAP_FEATURE_MAX ( 1 ) #define CFG_VHT_ENABLE_2x2_CAP_FEATURE_DEFAULT ( 0 ) +#define CFG_VHT_ENABLE_MU_BFORMEE_CAP_FEATURE "gEnableMuBformee" +#define CFG_VHT_ENABLE_MU_BFORMEE_CAP_FEATURE_MIN ( 0 ) +#define CFG_VHT_ENABLE_MU_BFORMEE_CAP_FEATURE_MAX ( 1 ) +#define CFG_VHT_ENABLE_MU_BFORMEE_CAP_FEATURE_DEFAULT ( 0 ) + #endif #define CFG_REPORT_MAX_LINK_SPEED "gReportMaxLinkSpeed" @@ -2123,6 +2128,7 @@ typedef struct v_U8_t vhtTxMCS2x2; v_BOOL_t enable2x2; v_BOOL_t enableVhtFor24GHzBand; + v_BOOL_t enableMuBformee; #endif v_U8_t enableModulatedDTIM; v_U32_t fEnableMCAddrList; diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c index a553effd2776..44f9f4ca192e 100644 --- a/CORE/HDD/src/wlan_hdd_cfg.c +++ b/CORE/HDD/src/wlan_hdd_cfg.c @@ -1996,6 +1996,12 @@ REG_VARIABLE( CFG_ENABLE_VHT_FOR_24GHZ_NAME, WLAN_PARAM_Integer, CFG_ENABLE_VHT_FOR_24GHZ_DEFAULT, CFG_ENABLE_VHT_FOR_24GHZ_MIN, CFG_ENABLE_VHT_FOR_24GHZ_MAX), +REG_VARIABLE( CFG_VHT_ENABLE_MU_BFORMEE_CAP_FEATURE, WLAN_PARAM_Integer, + hdd_config_t, enableMuBformee, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_VHT_ENABLE_MU_BFORMEE_CAP_FEATURE_DEFAULT, + CFG_VHT_ENABLE_MU_BFORMEE_CAP_FEATURE_MIN, + CFG_VHT_ENABLE_MU_BFORMEE_CAP_FEATURE_MAX ), #endif REG_VARIABLE( CFG_ENABLE_FIRST_SCAN_2G_ONLY_NAME, WLAN_PARAM_Integer, @@ -3769,6 +3775,25 @@ v_BOOL_t hdd_update_config_dat( hdd_context_t *pHddCtx ) hddLog(LOGE, "Could not pass on WNI_CFG_VHT_AMPDU_LEN_EXPONENT to CCM\n"); } + /* Change MU Bformee only when TxBF is enabled */ + if (pConfig->enableTxBF) + { + ccmCfgGetInt(pHddCtx->hHal, WNI_CFG_VHT_MU_BEAMFORMEE_CAP, + &temp); + + if(temp != pConfig->enableMuBformee) + { + if(ccmCfgSetInt(pHddCtx->hHal, + WNI_CFG_VHT_MU_BEAMFORMEE_CAP, + pConfig->enableMuBformee, NULL, + eANI_BOOLEAN_FALSE) ==eHAL_STATUS_FAILURE) + { + fStatus = FALSE; + hddLog(LOGE, "Could not pass on\ + WNI_CFG_VHT_MU_BEAMFORMEE_CAP to CCM\n"); + } + } + } } } #endif @@ -3957,6 +3982,7 @@ VOS_STATUS hdd_set_sme_config( hdd_context_t *pHddCtx ) smeConfig.csrConfig.txBFCsnValue = pConfig->txBFCsnValue; smeConfig.csrConfig.enable2x2 = pConfig->enable2x2; smeConfig.csrConfig.enableVhtFor24GHz = pConfig->enableVhtFor24GHzBand; + smeConfig.csrConfig.enableMuBformee = pConfig->enableMuBformee; #endif smeConfig.csrConfig.AdHocChannel5G = pConfig->AdHocChannel5G; smeConfig.csrConfig.AdHocChannel24 = pConfig->AdHocChannel24G; diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h index 53359683494a..62f2635c7e04 100644 --- a/CORE/MAC/inc/sirApi.h +++ b/CORE/MAC/inc/sirApi.h @@ -1049,6 +1049,7 @@ typedef struct sSirSmeJoinReq #ifdef WLAN_FEATURE_11AC tANI_U8 txBFIniFeatureEnabled; tANI_U8 txBFCsnValue; + tANI_U8 txMuBformee; #endif tAniTitanCBNeighborInfo cbNeighbors; diff --git a/CORE/MAC/src/pe/include/limSession.h b/CORE/MAC/src/pe/include/limSession.h index 91a3f60800f2..2de3fc477f9b 100644 --- a/CORE/MAC/src/pe/include/limSession.h +++ b/CORE/MAC/src/pe/include/limSession.h @@ -327,6 +327,7 @@ typedef struct sPESession // Added to Support BT-AMP tANI_U8 apCenterChan; tANI_U8 apChanWidth; tANI_U8 txBFIniFeatureEnabled; + tANI_U8 txMuBformee; #endif tANI_U8 spectrumMgtEnabled; /* *********************11H related*****************************/ diff --git a/CORE/MAC/src/pe/lim/limAssocUtils.c b/CORE/MAC/src/pe/lim/limAssocUtils.c index 4ee62c778ee9..5a09675ecce7 100644 --- a/CORE/MAC/src/pe/lim/limAssocUtils.c +++ b/CORE/MAC/src/pe/lim/limAssocUtils.c @@ -2671,6 +2671,7 @@ limAddStaSelf(tpAniSirGlobal pMac,tANI_U16 staIdx, tANI_U8 updateSta, tpPESessio } pAddStaParams->maxAmpduSize = (tANI_U8)ampduLenExponent; } + pAddStaParams->vhtTxMUBformeeCapable = psessionEntry->txMuBformee; #endif /* For Self STA get the LDPC capability from session i.e config.ini*/ @@ -3347,6 +3348,12 @@ tSirRetStatus limStaSendAddBss( tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, { pAddBssParams->staContext.vhtTxBFCapable = 1; } + + if (pAssocRsp->VHTCaps.muBeamformerCap && + psessionEntry->txMuBformee ) + { + pAddBssParams->staContext.vhtTxMUBformeeCapable = 1; + } } #endif @@ -3657,6 +3664,12 @@ tSirRetStatus limStaSendAddBssPreAssoc( tpAniSirGlobal pMac, tANI_U8 updateEntry { pAddBssParams->staContext.vhtTxBFCapable = 1; } + + if ( pBeaconStruct->VHTCaps.muBeamformerCap && + psessionEntry->txMuBformee ) + { + pAddBssParams->staContext.vhtTxMUBformeeCapable = 1; + } } #endif if( (pBeaconStruct->HTCaps.supportedChannelWidthSet) && diff --git a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c index 39e7728d5678..2fc252b6a1d9 100644 --- a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c @@ -1437,6 +1437,7 @@ mlm_add_sta( { pSta->vhtCapable = VOS_TRUE; pSta->vhtTxBFCapable = psessionEntry->txBFIniFeatureEnabled; + pSta->vhtTxMUBformeeCapable = psessionEntry->txMuBformee; } // Since this is Self-STA, need to populate Self MAX_AMPDU_SIZE capabilities diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c index ce724fc27f0b..80e8a0280714 100644 --- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c @@ -1699,6 +1699,7 @@ __limProcessSmeJoinReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) if (psessionEntry->vhtCapability ) { psessionEntry->txBFIniFeatureEnabled = pSmeJoinReq->txBFIniFeatureEnabled; + psessionEntry->txMuBformee = pSmeJoinReq->txMuBformee; VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO_MED, "***__limProcessSmeJoinReq: txBFIniFeatureEnabled=%d****", diff --git a/CORE/MAC/src/pe/lim/limSerDesUtils.c b/CORE/MAC/src/pe/lim/limSerDesUtils.c index 512b38baf6a9..51d925a48234 100644 --- a/CORE/MAC/src/pe/lim/limSerDesUtils.c +++ b/CORE/MAC/src/pe/lim/limSerDesUtils.c @@ -1157,6 +1157,11 @@ limJoinReqSerDes(tpAniSirGlobal pMac, tpSirSmeJoinReq pJoinReq, tANI_U8 *pBuf) if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) return eSIR_FAILURE; + //MuBformee + pJoinReq->txMuBformee= *pBuf++; + len--; + if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE) + return eSIR_FAILURE; // Extract Titan CB Neighbor BSS info pJoinReq->cbNeighbors.cbBssFoundPri = *pBuf; diff --git a/CORE/SERVICES/WMA/inc/legacy/halMsgApi.h b/CORE/SERVICES/WMA/inc/legacy/halMsgApi.h index bde725abc54e..da5c5126017e 100644 --- a/CORE/SERVICES/WMA/inc/legacy/halMsgApi.h +++ b/CORE/SERVICES/WMA/inc/legacy/halMsgApi.h @@ -284,6 +284,7 @@ typedef struct tANI_U8 vhtCapable; tANI_U8 vhtTxChannelWidthSet; tANI_U8 vhtTxBFCapable; + tANI_U8 vhtTxMUBformeeCapable; #endif tANI_U8 htLdpcCapable; diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index 95dde9ec0fa7..1e59e18791a4 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -3634,11 +3634,18 @@ static void wma_add_bss_sta_mode(tp_wma_handle wma, tpAddBssParams params) } /* This is set when Other partner is Bformer and we are capable bformee(enabled both in ini and fw) */ - txbf_en.sutxbfee = params->staContext.vhtTxBFCapable; - txbf_en.mutxbfee = 0; + txbf_en.sutxbfee = params->staContext.vhtTxBFCapable; + txbf_en.mutxbfee = params->staContext.vhtTxMUBformeeCapable; txbf_en.sutxbfer = 0; txbf_en.mutxbfer = 0; + /* When MU TxBfee is set, SU TxBfee must be set by default */ + if (txbf_en.mutxbfee) + txbf_en.sutxbfee = txbf_en.mutxbfee; + + WMA_LOGD("txbf_en.sutxbfee %d txbf_en.mutxbfee %d\n", + txbf_en.sutxbfee, txbf_en.mutxbfee); + wmi_unified_vdev_set_param_send(wma->wmi_handle, params->staContext.smesessionId, WMI_VDEV_PARAM_TXBF, *((A_UINT8 *)&txbf_en)); @@ -3872,10 +3879,17 @@ static void wma_add_sta_req_ap_mode(tp_wma_handle wma, tpAddStaParams add_sta) /* This is set when Other partner is Bformer and we are capable bformee(enabled both in ini and fw) */ txbf_en.sutxbfee = add_sta->vhtTxBFCapable; - txbf_en.mutxbfee = 0; + txbf_en.mutxbfee = add_sta->vhtTxMUBformeeCapable; txbf_en.sutxbfer = 0; txbf_en.mutxbfer = 0; + /* When MU TxBfee is set, SU TxBfee must be set by default */ + if (txbf_en.mutxbfee) + txbf_en.sutxbfee = txbf_en.mutxbfee; + + WMA_LOGD("txbf_en.sutxbfee %d txbf_en.mutxbfee %d\n", + txbf_en.sutxbfee, txbf_en.mutxbfee); + wmi_unified_vdev_set_param_send(wma->wmi_handle, add_sta->smesessionId, WMI_VDEV_PARAM_TXBF, *((A_UINT8 *)&txbf_en)); diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h index 4595c027fe97..88eea1083e04 100644 --- a/CORE/SME/inc/csrApi.h +++ b/CORE/SME/inc/csrApi.h @@ -1069,6 +1069,7 @@ typedef struct tagCsrConfigParam tANI_U8 txBFCsnValue; tANI_U8 enable2x2; tANI_BOOLEAN enableVhtFor24GHz; + tANI_U8 enableMuBformee; #endif /* diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h index 390b866d1fda..a3f5861f4e7e 100644 --- a/CORE/SME/inc/csrInternal.h +++ b/CORE/SME/inc/csrInternal.h @@ -629,6 +629,7 @@ typedef struct tagCsrConfig tANI_U8 txBFCsnValue; tANI_U8 enable2x2; tANI_BOOLEAN enableVhtFor24GHz; + tANI_U8 txMuBformee; #endif tANI_U8 txLdpcEnable; diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c index ec8053eb971a..398592dc8d8b 100644 --- a/CORE/SME/src/csr/csrApiRoam.c +++ b/CORE/SME/src/csr/csrApiRoam.c @@ -1701,6 +1701,7 @@ eHalStatus csrChangeDefaultConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pPa pMac->roam.configParam.txBFCsnValue = pParam->txBFCsnValue; pMac->roam.configParam.enable2x2= pParam->enable2x2; pMac->roam.configParam.enableVhtFor24GHz = pParam->enableVhtFor24GHz; + pMac->roam.configParam.txMuBformee= pParam->enableMuBformee; #endif pMac->roam.configParam.txLdpcEnable = pParam->enableTxLdpc; } @@ -1782,6 +1783,7 @@ eHalStatus csrGetConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pParam) pParam->nVhtChannelWidth = pMac->roam.configParam.nVhtChannelWidth; pParam->enableTxBF = pMac->roam.configParam.txBFEnable; pParam->txBFCsnValue = pMac->roam.configParam.txBFCsnValue; + pParam->enableMuBformee = pMac->roam.configParam.txMuBformee; #endif pParam->enableTxLdpc = pMac->roam.configParam.txLdpcEnable; csrSetChannels(pMac, pParam); @@ -12301,6 +12303,11 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe // txBFCsnValue *pBuf = (tANI_U8)pMac->roam.configParam.txBFCsnValue; pBuf++; + + // txMuBformee + *pBuf = (tANI_U8)pMac->roam.configParam.txMuBformee; + pBuf++; + #endif //BssDesc csrPrepareJoinReassocReqBuffer( pMac, pBssDescription, pBuf, diff --git a/CORE/WDA/inc/legacy/halMsgApi.h b/CORE/WDA/inc/legacy/halMsgApi.h index f8ebfb95c864..762fff53ca34 100644 --- a/CORE/WDA/inc/legacy/halMsgApi.h +++ b/CORE/WDA/inc/legacy/halMsgApi.h @@ -282,6 +282,7 @@ typedef struct tANI_U8 vhtCapable; tANI_U8 vhtTxChannelWidthSet; tANI_U8 vhtTxBFCapable; + tANI_U8 vhtTxMUBformeeCapable; #endif tANI_U8 htLdpcCapable; |
