Disable LDPC in sta mode when AP is TXBF capable
In STA mode when both LDPC and TXBF are enabled, throughput is
not stable.As a workaround, till root cause is identified disable
LDPC when AP is TXBF capable.
Change-Id: I3e04aa0c580624cc0b182d464fd08bb70ee423da
CRs-fixed: 451252
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 6b05dc4..698e8cd 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -1597,6 +1597,7 @@
#define CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE_DEFAULT ( WNI_CFG_VHT_SU_BEAMFORMEE_CAP_STADEF )
#endif
+
/*
* SAP ALLOW All Channels
*/
@@ -1606,6 +1607,12 @@
#define CFG_SAP_ALLOW_ALL_CHANNEL_PARAM_DEFAULT ( 0 )
+#ifdef WLAN_FEATURE_11AC
+#define CFG_DISABLE_LDPC_WITH_TXBF_AP "gDisableLDPCWithTxbfAP"
+#define CFG_DISABLE_LDPC_WITH_TXBF_AP_MIN ( 0 )
+#define CFG_DISABLE_LDPC_WITH_TXBF_AP_MAX ( 1 )
+#define CFG_DISABLE_LDPC_WITH_TXBF_AP_DEFAULT ( 1 )
+#endif
/*---------------------------------------------------------------------------
Type declarations
-------------------------------------------------------------------------*/
@@ -1955,6 +1962,7 @@
#endif
v_U8_t scanAgingTimeout;
v_BOOL_t enableTxLdpc;
+ v_U8_t disableLDPCWithTxbfAP;
v_U8_t enableMCCAdaptiveScheduler;
v_BOOL_t isAndroidPsEn;
v_BOOL_t sapAllowAllChannel;
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 581fc02..0f908a9 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -1988,6 +1988,14 @@
CFG_SAP_ALLOW_ALL_CHANNEL_PARAM_DEFAULT,
CFG_SAP_ALLOW_ALL_CHANNEL_PARAM_MIN,
CFG_SAP_ALLOW_ALL_CHANNEL_PARAM_MAX ),
+#ifdef WLAN_FEATURE_11AC
+REG_VARIABLE( CFG_DISABLE_LDPC_WITH_TXBF_AP, WLAN_PARAM_Integer,
+ hdd_config_t, disableLDPCWithTxbfAP,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_DISABLE_LDPC_WITH_TXBF_AP_DEFAULT,
+ CFG_DISABLE_LDPC_WITH_TXBF_AP_MIN,
+ CFG_DISABLE_LDPC_WITH_TXBF_AP_MAX ),
+#endif
};
/*
@@ -3437,6 +3445,12 @@
fStatus = FALSE;
hddLog(LOGE, "Could not pass on WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED to CCM\n");
}
+ if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP, pConfig->disableLDPCWithTxbfAP,
+ NULL, eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE)
+ {
+ fStatus = FALSE;
+ hddLog(LOGE, "Could not pass on WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP to CCM\n");
+ }
return fStatus;
}
diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h
index c726bb6..02a1c8e 100644
--- a/CORE/MAC/inc/aniGlobal.h
+++ b/CORE/MAC/inc/aniGlobal.h
@@ -713,6 +713,7 @@
// admission control policy information
tLimAdmitPolicyInfo admitPolicyInfo;
vos_lock_t lkPeGlobalLock;
+ tANI_U8 disableLDPCWithTxbfAP;
diff --git a/CORE/MAC/inc/wniCfgAp.h b/CORE/MAC/inc/wniCfgAp.h
index b1d7785..6f3654a 100644
--- a/CORE/MAC/inc/wniCfgAp.h
+++ b/CORE/MAC/inc/wniCfgAp.h
@@ -354,9 +354,9 @@
#define WNI_CFG_AP_KEEP_ALIVE_TIMEOUT 289
#define WNI_CFG_GO_KEEP_ALIVE_TIMEOUT 290
#define WNI_CFG_ENABLE_MC_ADDR_LIST 291
-#define WNI_CFG_ENABLE_UC_FILTER 292
-#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION 293
-#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED 294
+#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION 292
+#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED 293
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP 294
/*
* String parameter lengths
@@ -1838,11 +1838,11 @@
#define WNI_CFG_NUM_BUFF_ADVERT_STAMIN 0
#define WNI_CFG_NUM_BUFF_ADVERT_STAMAX 128
-#define WNI_CFG_NUM_BUFF_ADVERT_STADEF 64
+#define WNI_CFG_NUM_BUFF_ADVERT_STADEF 45
#define WNI_CFG_NUM_BUFF_ADVERT_APMIN 0
#define WNI_CFG_NUM_BUFF_ADVERT_APMAX 128
-#define WNI_CFG_NUM_BUFF_ADVERT_APDEF 64
+#define WNI_CFG_NUM_BUFF_ADVERT_APDEF 45
#define WNI_CFG_MAX_RX_AMPDU_FACTOR_STAMIN 0
#define WNI_CFG_MAX_RX_AMPDU_FACTOR_STAMAX 3
@@ -2435,14 +2435,6 @@
#define WNI_CFG_ENABLE_MC_ADDR_LIST_APMAX 1
#define WNI_CFG_ENABLE_MC_ADDR_LIST_APDEF 0
-#define WNI_CFG_ENABLE_UC_FILTER_STAMIN 0
-#define WNI_CFG_ENABLE_UC_FILTER_STAMAX 1
-#define WNI_CFG_ENABLE_UC_FILTER_STADEF 0
-
-#define WNI_CFG_ENABLE_UC_FILTER_APMIN 0
-#define WNI_CFG_ENABLE_UC_FILTER_APMAX 1
-#define WNI_CFG_ENABLE_UC_FILTER_APDEF 0
-
#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION_STAMIN 0
#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION_STAMAX 1
#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION_STADEF 0
@@ -2459,6 +2451,14 @@
#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED_APMAX 1
#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED_APDEF 0
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_STAMIN 0
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_STAMAX 1
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_STADEF 0
+
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_APMIN 0
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_APMAX 1
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_APDEF 0
+
#define CFG_PARAM_MAX_NUM 295
#define CFG_AP_IBUF_MAX_SIZE 234
#define CFG_AP_SBUF_MAX_SIZE 3422
diff --git a/CORE/MAC/inc/wniCfgSta.h b/CORE/MAC/inc/wniCfgSta.h
index e793507..3e7fa52 100644
--- a/CORE/MAC/inc/wniCfgSta.h
+++ b/CORE/MAC/inc/wniCfgSta.h
@@ -348,9 +348,9 @@
#define WNI_CFG_AP_KEEP_ALIVE_TIMEOUT 289
#define WNI_CFG_GO_KEEP_ALIVE_TIMEOUT 290
#define WNI_CFG_ENABLE_MC_ADDR_LIST 291
-#define WNI_CFG_ENABLE_UC_FILTER 292
-#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION 293
-#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED 294
+#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION 292
+#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED 293
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP 294
/*
* String parameter lengths
@@ -1255,7 +1255,7 @@
#define WNI_CFG_NUM_BUFF_ADVERT_STAMIN 0
#define WNI_CFG_NUM_BUFF_ADVERT_STAMAX 128
-#define WNI_CFG_NUM_BUFF_ADVERT_STADEF 64
+#define WNI_CFG_NUM_BUFF_ADVERT_STADEF 45
#define WNI_CFG_MAX_RX_AMPDU_FACTOR_STAMIN 0
#define WNI_CFG_MAX_RX_AMPDU_FACTOR_STAMAX 3
@@ -1588,10 +1588,6 @@
#define WNI_CFG_ENABLE_MC_ADDR_LIST_STAMAX 1
#define WNI_CFG_ENABLE_MC_ADDR_LIST_STADEF 0
-#define WNI_CFG_ENABLE_UC_FILTER_STAMIN 0
-#define WNI_CFG_ENABLE_UC_FILTER_STAMAX 1
-#define WNI_CFG_ENABLE_UC_FILTER_STADEF 0
-
#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION_STAMIN 0
#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION_STAMAX 1
#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION_STADEF 0
@@ -1600,6 +1596,10 @@
#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED_STAMAX 1
#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED_STADEF 0
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_STAMIN 0
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_STAMAX 1
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_STADEF 0
+
#define CFG_PARAM_MAX_NUM 295
#define CFG_STA_IBUF_MAX_SIZE 229
#define CFG_STA_SBUF_MAX_SIZE 3388
diff --git a/CORE/MAC/src/cfg/cfgParamName.c b/CORE/MAC/src/cfg/cfgParamName.c
index 4f403dd..66282dd 100644
--- a/CORE/MAC/src/cfg/cfgParamName.c
+++ b/CORE/MAC/src/cfg/cfgParamName.c
@@ -345,9 +345,9 @@
(unsigned char *)"AP_KEEP_ALIVE_TIMEOUT",
(unsigned char *)"GO_KEEP_ALIVE_TIMEOUT",
(unsigned char *)"ENABLE_MC_ADDR_LIST",
- (unsigned char *)"ENABLE_UC_FILTER",
(unsigned char *)"ENABLE_LPWR_IMG_TRANSITION",
(unsigned char *)"ENABLE_MCC_ADAPTIVE_SCHED",
+ (unsigned char *)"DISABLE_LDPC_WITH_TXBF_AP",
};
diff --git a/CORE/MAC/src/cfg/cfgUtil/cfg.txt b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
index 1105cf9..afd7828 100644
--- a/CORE/MAC/src/cfg/cfgUtil/cfg.txt
+++ b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
@@ -4462,3 +4462,15 @@
V RW NP
NONE
0 1 0
+*
+*Disable LDPC in STA mode when AP is TXBF capable
+*
+*
+*
+WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP I 4 0
+V RW NP
+NONE
+0 1 0
+V RW NP
+NONE
+0 1 0
diff --git a/CORE/MAC/src/pe/lim/limApi.c b/CORE/MAC/src/pe/lim/limApi.c
index 2d1605f..a49a1ba 100644
--- a/CORE/MAC/src/pe/lim/limApi.c
+++ b/CORE/MAC/src/pe/lim/limApi.c
@@ -644,6 +644,11 @@
/* This was initially done after resume notification from HAL. Now, DAL is
started before PE so this can be done here */
handleHTCapabilityandHTInfo(pMac, NULL);
+ if(wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP,(tANI_U32 *) &pMac->lim.disableLDPCWithTxbfAP) != eSIR_SUCCESS)
+ {
+ limLog(pMac, LOGP, FL("cfg get disableLDPCWithTxbfAP failed\n"));
+ return eSIR_FAILURE;
+ }
return eSIR_SUCCESS;
}
diff --git a/CORE/MAC/src/pe/lim/limAssocUtils.c b/CORE/MAC/src/pe/lim/limAssocUtils.c
index e72b0ea..79ea0d0 100644
--- a/CORE/MAC/src/pe/lim/limAssocUtils.c
+++ b/CORE/MAC/src/pe/lim/limAssocUtils.c
@@ -2248,8 +2248,16 @@
{
/* peer STA get the LDPC capability from pStaDs, which populated from
* HT/VHT capability*/
- pAddStaParams->htLdpcCapable = pStaDs->htLdpcCapable;
- pAddStaParams->vhtLdpcCapable = pStaDs->vhtLdpcCapable;
+ if(pAddStaParams->vhtTxBFCapable && pMac->lim.disableLDPCWithTxbfAP)
+ {
+ pAddStaParams->htLdpcCapable = 0;
+ pAddStaParams->vhtLdpcCapable = 0;
+ }
+ else
+ {
+ pAddStaParams->htLdpcCapable = pStaDs->htLdpcCapable;
+ pAddStaParams->vhtLdpcCapable = pStaDs->vhtLdpcCapable;
+ }
}
else if( STA_ENTRY_SELF == pStaDs->staType)
{
@@ -3338,8 +3346,16 @@
pAddBssParams->staContext.fShortGI20Mhz = (tANI_U8)pAssocRsp->HTCaps.shortGI20MHz;
pAddBssParams->staContext.fShortGI40Mhz = (tANI_U8)pAssocRsp->HTCaps.shortGI40MHz;
pAddBssParams->staContext.maxAmpduSize= pAssocRsp->HTCaps.maxRxAMPDUFactor;
- pAddBssParams->staContext.htLdpcCapable = (tANI_U8)pAssocRsp->HTCaps.advCodingCap;
- pAddBssParams->staContext.vhtLdpcCapable = (tANI_U8)pAssocRsp->VHTCaps.ldpcCodingCap;
+ if( pAddBssParams->staContext.vhtTxBFCapable && pMac->lim.disableLDPCWithTxbfAP )
+ {
+ pAddBssParams->staContext.htLdpcCapable = 0;
+ pAddBssParams->staContext.vhtLdpcCapable = 0;
+ }
+ else
+ {
+ pAddBssParams->staContext.htLdpcCapable = (tANI_U8)pAssocRsp->HTCaps.advCodingCap;
+ pAddBssParams->staContext.vhtLdpcCapable = (tANI_U8)pAssocRsp->VHTCaps.ldpcCodingCap;
+ }
if( pBeaconStruct->HTInfo.present )
pAddBssParams->staContext.rifsMode = pAssocRsp->HTInfo.rifsMode;
@@ -3623,8 +3639,16 @@
pAddBssParams->staContext.fShortGI20Mhz = (tANI_U8)pBeaconStruct->HTCaps.shortGI20MHz;
pAddBssParams->staContext.fShortGI40Mhz = (tANI_U8)pBeaconStruct->HTCaps.shortGI40MHz;
pAddBssParams->staContext.maxAmpduSize= pBeaconStruct->HTCaps.maxRxAMPDUFactor;
- pAddBssParams->staContext.htLdpcCapable = (tANI_U8)pBeaconStruct->HTCaps.advCodingCap;
- pAddBssParams->staContext.vhtLdpcCapable = (tANI_U8)pBeaconStruct->VHTCaps.ldpcCodingCap;
+ if( pAddBssParams->staContext.vhtTxBFCapable && pMac->lim.disableLDPCWithTxbfAP )
+ {
+ pAddBssParams->staContext.htLdpcCapable = 0;
+ pAddBssParams->staContext.vhtLdpcCapable = 0;
+ }
+ else
+ {
+ pAddBssParams->staContext.htLdpcCapable = (tANI_U8)pBeaconStruct->HTCaps.advCodingCap;
+ pAddBssParams->staContext.vhtLdpcCapable = (tANI_U8)pBeaconStruct->VHTCaps.ldpcCodingCap;
+ }
if( pBeaconStruct->HTInfo.present )
pAddBssParams->staContext.rifsMode = pBeaconStruct->HTInfo.rifsMode;