summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg.h6
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg.c26
-rw-r--r--CORE/MAC/inc/sirApi.h1
-rw-r--r--CORE/MAC/src/pe/include/limSession.h1
-rw-r--r--CORE/MAC/src/pe/lim/limAssocUtils.c13
-rw-r--r--CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c1
-rw-r--r--CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c1
-rw-r--r--CORE/MAC/src/pe/lim/limSerDesUtils.c5
-rw-r--r--CORE/SERVICES/WMA/inc/legacy/halMsgApi.h1
-rw-r--r--CORE/SERVICES/WMA/wma.c20
-rw-r--r--CORE/SME/inc/csrApi.h1
-rw-r--r--CORE/SME/inc/csrInternal.h1
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c7
-rw-r--r--CORE/WDA/inc/legacy/halMsgApi.h1
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;