wlan: Add ini parameters to determine timer value and ssr in DXE.
We had a default timer value of 6 secs whenever DXE is waiting
for RX packets to get replenished. If it doesnot happen, we issue
SSR. Now making both the timer interval as well as whether
SSR is required or not ini configurable.
CRs-Fixed: 809706
Change-Id: I7a70fd16ef06abc2cbf54fbc924293771af68a49
diff --git a/CORE/DXE/src/wlan_qct_dxe.c b/CORE/DXE/src/wlan_qct_dxe.c
index 63c169f..6b2c44c 100644
--- a/CORE/DXE/src/wlan_qct_dxe.c
+++ b/CORE/DXE/src/wlan_qct_dxe.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -1980,7 +1980,7 @@
HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
"RX Low resource, Durign wait time period %d, RX resource not allocated",
- T_WLANDXE_MAX_RX_PACKET_WAIT);
+ wpalGetDxeReplenishRXTimerVal());
//This API wil also try to replenish packets
wpalGetNumRxFreePacket(&numRxFreePackets);
@@ -2004,19 +2004,25 @@
"%s: Replenish successful. Restart the Rx Low resource timer",
__func__);
wpalTimerStart(&dxeCtxt->rxResourceAvailableTimer,
- T_WLANDXE_MAX_RX_PACKET_WAIT);
+ wpalGetDxeReplenishRXTimerVal());
return;
}
}
+ if(wpalIsDxeSSREnable())
+ {
+ if (NULL != dxeCtxt)
+ dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE;
- if (NULL != dxeCtxt)
- dxeCtxt->driverReloadInProcessing = eWLAN_PAL_TRUE;
+ wpalWlanReload();
- wpalWlanReload();
-
- if (NULL != usrData)
- dxeStartSSRTimer((WLANDXE_CtrlBlkType *)usrData);
-
+ if (NULL != usrData)
+ dxeStartSSRTimer((WLANDXE_CtrlBlkType *)usrData);
+ }
+ else
+ {
+ wpalTimerStart(&dxeCtxt->rxResourceAvailableTimer,
+ wpalGetDxeReplenishRXTimerVal());
+ }
return;
}
#endif
@@ -2242,7 +2248,7 @@
HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_WARN,
"RX Low resource, wait available resource");
wpalTimerStart(&dxeCtxt->rxResourceAvailableTimer,
- T_WLANDXE_MAX_RX_PACKET_WAIT);
+ wpalGetDxeReplenishRXTimerVal());
}
#endif
}
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 08e51e8..5b3decb 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -2405,6 +2405,16 @@
#define CFG_BTC_ENABLE_IND_TIMER_VALUE_MAX ( 60 )
#define CFG_BTC_ENABLE_IND_TIMER_VALUE_DEFAULT ( 60 )
+#define CFG_DXE_REPLENISH_RX_TIMER_VALUE "gDXEReplenishRXTimerVal"
+#define CFG_DXE_REPLENISH_RX_TIMER_VALUE_MIN ( 0 )
+#define CFG_DXE_REPLENISH_RX_TIMER_VALUE_MAX ( 20000 )
+#define CFG_DXE_REPLENISH_RX_TIMER_VALUE_DEFAULT ( 6000 )
+
+#define CFG_DXE_SSR_ENABLE "gDxeSSREnable"
+#define CFG_DXE_SSR_ENABLE_DEFAULT ( 1 )
+#define CFG_DXE_SSR_ENABLE_MIN ( 0 )
+#define CFG_DXE_SSR_ENABLE_MAX ( 1 )
+
/*---------------------------------------------------------------------------
Type declarations
-------------------------------------------------------------------------*/
@@ -2900,6 +2910,8 @@
v_U16_t gP2PListenDeferInterval;
v_U8_t btcEnableIndTimerVal;
v_BOOL_t btcFastWlanConnPref;
+ v_U32_t dxeReplenishRXTimerVal;
+ v_U32_t dxeSSREnable;
} 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 9d4eda9..7af897b 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -3257,6 +3257,21 @@
CFG_BTC_FAST_WLAN_CONN_PREF_MIN,
CFG_BTC_FAST_WLAN_CONN_PREF_MAX ),
+ REG_VARIABLE( CFG_DXE_REPLENISH_RX_TIMER_VALUE, WLAN_PARAM_Integer,
+ hdd_config_t, dxeReplenishRXTimerVal,
+ VAR_FLAGS_OPTIONAL |
+ VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_DXE_REPLENISH_RX_TIMER_VALUE_DEFAULT,
+ CFG_DXE_REPLENISH_RX_TIMER_VALUE_MIN,
+ CFG_DXE_REPLENISH_RX_TIMER_VALUE_MAX ),
+
+ REG_VARIABLE( CFG_DXE_SSR_ENABLE, WLAN_PARAM_Integer,
+ hdd_config_t, dxeSSREnable,
+ VAR_FLAGS_OPTIONAL |
+ VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_DXE_SSR_ENABLE_DEFAULT,
+ CFG_DXE_SSR_ENABLE_MIN,
+ CFG_DXE_SSR_ENABLE_MAX ),
};
/*
@@ -3671,6 +3686,8 @@
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gACSBandSwitchThreshold] value = [%u]\n",pHddCtx->cfg_ini->acsBandSwitchThreshold);
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gDeferScanTimeInterval] value = [%u]\n",pHddCtx->cfg_ini->nDeferScanTimeInterval);
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gEnableTDLSScan] value = [%u]\n",pHddCtx->cfg_ini->fEnableTDLSScan);
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gDxeReplenishRXTimerVal] Value = [%u] ", pHddCtx->cfg_ini->dxeReplenishRXTimerVal);
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gDxeSSREnable] Value = [%u] ", pHddCtx->cfg_ini->dxeSSREnable);
}
diff --git a/CORE/VOSS/inc/vos_api.h b/CORE/VOSS/inc/vos_api.h
index eaad494..f1c3c1c 100644
--- a/CORE/VOSS/inc/vos_api.h
+++ b/CORE/VOSS/inc/vos_api.h
@@ -251,7 +251,6 @@
--------------------------------------------------------------------------*/
VOS_STATUS vos_free_context( v_VOID_t *pVosContext, VOS_MODULE_ID moduleID,
v_VOID_t *pModuleContext );
-
v_BOOL_t vos_is_apps_power_collapse_allowed(void* pHddCtx);
void vos_abort_mac_scan(tANI_U8 sessionId);
@@ -333,5 +332,6 @@
v_VOID_t *moduleContext);
v_VOID_t vos_set_roam_delay_stats_enabled(v_U8_t value);
v_U8_t vos_get_roam_delay_stats_enabled(v_VOID_t);
-
+v_U32_t vos_get_dxeReplenishRXTimerVal(void);
+v_BOOL_t vos_get_dxeSSREnable(void);
#endif // if !defined __VOS_NVITEM_H
diff --git a/CORE/VOSS/src/vos_api.c b/CORE/VOSS/src/vos_api.c
index 4c08e50..8f457e0 100644
--- a/CORE/VOSS/src/vos_api.c
+++ b/CORE/VOSS/src/vos_api.c
@@ -2307,3 +2307,47 @@
{
return gpVosContext->roamDelayStatsEnabled;
}
+
+v_U32_t vos_get_dxeReplenishRXTimerVal(void)
+{
+ hdd_context_t *pHddCtx = NULL;
+ v_CONTEXT_t pVosContext = NULL;
+
+ /* Get the Global VOSS Context */
+ pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL);
+ if(!pVosContext) {
+ hddLog(VOS_TRACE_LEVEL_FATAL, "%s: Global VOS context is Null", __func__);
+ return 0;
+ }
+
+ /* Get the HDD context */
+ pHddCtx = (hdd_context_t *)vos_get_context(VOS_MODULE_ID_HDD, pVosContext );
+ if(!pHddCtx) {
+ hddLog(VOS_TRACE_LEVEL_FATAL, "%s: HDD context is Null", __func__);
+ return 0;
+ }
+
+ return pHddCtx->cfg_ini->dxeReplenishRXTimerVal;
+}
+
+v_BOOL_t vos_get_dxeSSREnable(void)
+{
+ hdd_context_t *pHddCtx = NULL;
+ v_CONTEXT_t pVosContext = NULL;
+
+ /* Get the Global VOSS Context */
+ pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL);
+ if(!pVosContext) {
+ hddLog(VOS_TRACE_LEVEL_FATAL, "%s: Global VOS context is Null", __func__);
+ return FALSE;
+ }
+
+ /* Get the HDD context */
+ pHddCtx = (hdd_context_t *)vos_get_context(VOS_MODULE_ID_HDD, pVosContext );
+ if(!pHddCtx) {
+ hddLog(VOS_TRACE_LEVEL_FATAL, "%s: HDD context is Null", __func__);
+ return FALSE;
+ }
+
+ return pHddCtx->cfg_ini->dxeSSREnable;
+}
diff --git a/CORE/WDI/WPAL/inc/wlan_qct_pal_api.h b/CORE/WDI/WPAL/inc/wlan_qct_pal_api.h
index 3377eba..194eec3 100644
--- a/CORE/WDI/WPAL/inc/wlan_qct_pal_api.h
+++ b/CORE/WDI/WPAL/inc/wlan_qct_pal_api.h
@@ -382,4 +382,8 @@
STATUS
--------------------------------------------------------------------------*/
int wpalIsSsrPanicOnFailure(void);
+
+int wpalGetDxeReplenishRXTimerVal(void);
+int wpalIsDxeSSREnable(void);
+
#endif // __WLAN_QCT_PAL_API_H
diff --git a/CORE/WDI/WPAL/src/wlan_qct_pal_api.c b/CORE/WDI/WPAL/src/wlan_qct_pal_api.c
index c5b72e1..e882fa1 100644
--- a/CORE/WDI/WPAL/src/wlan_qct_pal_api.c
+++ b/CORE/WDI/WPAL/src/wlan_qct_pal_api.c
@@ -490,3 +490,13 @@
return isSsrPanicOnFailure();
}
+int wpalGetDxeReplenishRXTimerVal(void)
+{
+ return vos_get_dxeReplenishRXTimerVal();
+}
+
+int wpalIsDxeSSREnable(void)
+{
+ return vos_get_dxeSSREnable();
+}
+