wlan: adding a new ini parameter to disable/enable AMSDU in AMPDU
This fix will give us a control on when to enable AMSDU support
and when to disable it. by default we are disabling AMSDU support
Change-Id: Ibfcf5245f1dd0bf938dcc7819642c939c4013c2c
CRs-fixed: 539301
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 193fe72..eff9e8a 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -1908,6 +1908,11 @@
#define CFG_PNO_SCAN_TIMER_REPEAT_VALUE_MAX ( 0xffffffff )
#endif
+#define CFG_AMSDU_SUPPORT_IN_AMPDU_NAME "gAmsduSupportInAMPDU"
+#define CFG_AMSDU_SUPPORT_IN_AMPDU_MIN (0)
+#define CFG_AMSDU_SUPPORT_IN_AMPDU_MAX (1)
+#define CFG_AMSDU_SUPPORT_IN_AMPDU_DEFAULT (0) //disabled
+
/*---------------------------------------------------------------------------
Type declarations
-------------------------------------------------------------------------*/
@@ -2305,6 +2310,7 @@
#if FEATURE_WLAN_SCAN_PNO
v_U32_t configPNOScanTimerRepeatValue;
#endif
+ v_U8_t isAmsduSupportInAMPDU;
} hdd_config_t;
/*---------------------------------------------------------------------------
Function declarations and documenation
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 2f32b20..3d0b329 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -2730,6 +2730,12 @@
CFG_PNO_SCAN_TIMER_REPEAT_VALUE_MIN,
CFG_PNO_SCAN_TIMER_REPEAT_VALUE_MAX),
#endif
+ REG_VARIABLE( CFG_AMSDU_SUPPORT_IN_AMPDU_NAME , WLAN_PARAM_Integer,
+ hdd_config_t, isAmsduSupportInAMPDU,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_AMSDU_SUPPORT_IN_AMPDU_DEFAULT,
+ CFG_AMSDU_SUPPORT_IN_AMPDU_MIN,
+ CFG_AMSDU_SUPPORT_IN_AMPDU_MAX ),
};
@@ -3119,6 +3125,7 @@
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gApLinkMonitorPeriod] Value = [%u]",pHddCtx->cfg_ini->apLinkMonitorPeriod);
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gGoKeepAlivePeriod] Value = [%u]",pHddCtx->cfg_ini->goKeepAlivePeriod);
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gApKeepAlivePeriod]Value = [%u]",pHddCtx->cfg_ini->apKeepAlivePeriod);
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gAmsduSupportInAMPDU] Value = [%lu] ",pHddCtx->cfg_ini->isAmsduSupportInAMPDU);
}
@@ -4506,6 +4513,8 @@
smeConfig.csrConfig.enableTxLdpc = pConfig->enableTxLdpc;
+ smeConfig.csrConfig.isAmsduSupportInAMPDU = pConfig->isAmsduSupportInAMPDU;
+
/* update SSR config */
sme_UpdateEnableSSR((tHalHandle)(pHddCtx->hHal), pHddCtx->cfg_ini->enableSSR);
/* Update the Directed scan offload setting */
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index 02f1f3d..1181b76 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -1066,6 +1066,7 @@
tANI_U8 txBFIniFeatureEnabled;
tANI_U8 txBFCsnValue;
#endif
+ tANI_U8 isAmsduSupportInAMPDU;
tAniTitanCBNeighborInfo cbNeighbors;
tAniBool spectrumMgtIndicator;
diff --git a/CORE/MAC/src/pe/include/limSession.h b/CORE/MAC/src/pe/include/limSession.h
index 04774e3..6809568 100644
--- a/CORE/MAC/src/pe/include/limSession.h
+++ b/CORE/MAC/src/pe/include/limSession.h
@@ -357,6 +357,7 @@
#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM
tANI_S8 rssi;
#endif
+ tANI_U8 isAmsduSupportInAMPDU;
}tPESession, *tpPESession;
#define LIM_MAX_ACTIVE_SESSIONS 4
diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
index 79af3b9..a4f67b3 100644
--- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
@@ -1667,6 +1667,7 @@
}
}
handleHTCapabilityandHTInfo(pMac, psessionEntry);
+ psessionEntry->isAmsduSupportInAMPDU = pSmeJoinReq->isAmsduSupportInAMPDU;
/* Store Session related parameters */
/* Store PE session Id in session Table */
diff --git a/CORE/MAC/src/pe/lim/limSendManagementFrames.c b/CORE/MAC/src/pe/lim/limSendManagementFrames.c
index e873638..405f29e 100644
--- a/CORE/MAC/src/pe/lim/limSendManagementFrames.c
+++ b/CORE/MAC/src/pe/lim/limSendManagementFrames.c
@@ -5075,7 +5075,16 @@
frmAddBARsp.AddBAParameterSet.tid = pMlmAddBARsp->baTID;
frmAddBARsp.AddBAParameterSet.policy = pMlmAddBARsp->baPolicy;
frmAddBARsp.AddBAParameterSet.bufferSize = pMlmAddBARsp->baBufferSize;
- frmAddBARsp.AddBAParameterSet.amsduSupported = psessionEntry->amsduSupportedInBA;
+
+ if(psessionEntry->isAmsduSupportInAMPDU)
+ {
+ frmAddBARsp.AddBAParameterSet.amsduSupported =
+ psessionEntry->amsduSupportedInBA;
+ }
+ else
+ {
+ frmAddBARsp.AddBAParameterSet.amsduSupported = 0;
+ }
// BA timeout
// 0 - indicates no BA timeout
diff --git a/CORE/MAC/src/pe/lim/limSerDesUtils.c b/CORE/MAC/src/pe/lim/limSerDesUtils.c
index a7ec961..7dbfafa 100644
--- a/CORE/MAC/src/pe/lim/limSerDesUtils.c
+++ b/CORE/MAC/src/pe/lim/limSerDesUtils.c
@@ -1164,6 +1164,11 @@
if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE)
return eSIR_FAILURE;
+ pJoinReq->isAmsduSupportInAMPDU= *pBuf++;
+ len--;
+ if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE)
+ return eSIR_FAILURE;
+
// Extract Titan CB Neighbor BSS info
pJoinReq->cbNeighbors.cbBssFoundPri = *pBuf;
pBuf++;
diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h
index 2d8edf0..e53b8e9 100644
--- a/CORE/SME/inc/csrApi.h
+++ b/CORE/SME/inc/csrApi.h
@@ -1102,6 +1102,8 @@
tANI_U8 enableTxLdpc;
+ tANI_U8 isAmsduSupportInAMPDU;
+
}tCsrConfigParam;
//Tush
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index da606a2..7a71c56 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -658,6 +658,7 @@
* Enable/Disable heartbeat offload
*/
tANI_BOOLEAN enableHeartBeatOffload;
+ tANI_U8 isAmsduSupportInAMPDU;
}tCsrConfig;
typedef struct tagCsrChannelPowerInfo
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index d12da51..e811a8f 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -117,6 +117,7 @@
tANI_U8 RoamRssiDiff;
#endif
tANI_BOOLEAN fScanOffload;
+ tANI_U8 isAmsduSupportInAMPDU;
} tSmeConfigParams, *tpSmeConfigParams;
typedef enum
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 414346a..50b9add 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -1565,6 +1565,8 @@
pMac->roam.configParam.enableVhtFor24GHz = pParam->enableVhtFor24GHz;
#endif
pMac->roam.configParam.txLdpcEnable = pParam->enableTxLdpc;
+
+ pMac->roam.configParam.isAmsduSupportInAMPDU = pParam->isAmsduSupportInAMPDU;
}
return status;
@@ -1687,6 +1689,8 @@
pParam->enableTxLdpc = pMac->roam.configParam.txLdpcEnable;
+ pParam->isAmsduSupportInAMPDU = pMac->roam.configParam.isAmsduSupportInAMPDU;
+
csrSetChannels(pMac, pParam);
status = eHAL_STATUS_SUCCESS;
@@ -12359,9 +12363,13 @@
*pBuf = (tANI_U8)pMac->roam.configParam.txBFCsnValue;
pBuf++;
#endif
+ *pBuf = (tANI_U8)pMac->roam.configParam.isAmsduSupportInAMPDU;
+ pBuf++;
+
//BssDesc
csrPrepareJoinReassocReqBuffer( pMac, pBssDescription, pBuf,
(tANI_U8)pProfile->uapsd_mask);
+
status = palSendMBMessage(pMac->hHdd, pMsg );
if(!HAL_STATUS_SUCCESS(status))
{