wlan: Add config param GO LINK MONITOR TIMEOUT.
Added GO LINK MONITOR TIMEOUT ini param to calculate total
effective detection time to delete inactive P2P clients.
This param along with gGoKeepAlivePeriod decides the total
time taken to delete inactive p2p clients.
CRs-Fixed: 531064
Change-Id: I0a2ce145947430701dd05a3828f7c1d9abc98716
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index f7889b3..06fc24a 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -511,19 +511,28 @@
#define CFG_ENABLE_LTE_COEX_DEFAULT ( 0 )
#define CFG_AP_KEEP_ALIVE_PERIOD_NAME "gApKeepAlivePeriod"
-#define CFG_AP_KEEP_ALIVE_PERIOD_MIN ( 0 )
-#define CFG_AP_KEEP_ALIVE_PERIOD_MAX ( 255)
-#define CFG_AP_KEEP_ALIVE_PERIOD_DEFAULT ( 20 )
+#define CFG_AP_KEEP_ALIVE_PERIOD_MIN ( 3 )
+#define CFG_AP_KEEP_ALIVE_PERIOD_MAX ( 20 )
+#define CFG_AP_KEEP_ALIVE_PERIOD_DEFAULT ( 5 )
#define CFG_GO_KEEP_ALIVE_PERIOD_NAME "gGoKeepAlivePeriod"
-#define CFG_GO_KEEP_ALIVE_PERIOD_MIN ( 0 )
-#define CFG_GO_KEEP_ALIVE_PERIOD_MAX ( 255)
-#define CFG_GO_KEEP_ALIVE_PERIOD_DEFAULT ( 20 )
+#define CFG_GO_KEEP_ALIVE_PERIOD_MIN ( 3 )
+#define CFG_GO_KEEP_ALIVE_PERIOD_MAX ( 20 )
+#define CFG_GO_KEEP_ALIVE_PERIOD_DEFAULT ( 5 )
#define CFG_AP_LINK_MONITOR_PERIOD_NAME "gApLinkMonitorPeriod"
-#define CFG_AP_LINK_MONITOR_PERIOD_MIN ( 0 )
-#define CFG_AP_LINK_MONITOR_PERIOD_MAX ( 255)
-#define CFG_AP_LINK_MONITOR_PERIOD_DEFAULT ( 3 )
+#define CFG_AP_LINK_MONITOR_PERIOD_MIN ( 3 )
+#define CFG_AP_LINK_MONITOR_PERIOD_MAX ( 50 )
+#define CFG_AP_LINK_MONITOR_PERIOD_DEFAULT ( 10 )
+
+/* gGoLinkMonitorPeriod is period where link is idle and where
+ * we send NULL frame
+ */
+#define CFG_GO_LINK_MONITOR_PERIOD_NAME "gGoLinkMonitorPeriod"
+#define CFG_GO_LINK_MONITOR_PERIOD_MIN ( 3 )
+#define CFG_GO_LINK_MONITOR_PERIOD_MAX ( 50 )
+#define CFG_GO_LINK_MONITOR_PERIOD_DEFAULT ( 10 )
+
#define CFG_BEACON_INTERVAL_NAME "gBeaconInterval"
#define CFG_BEACON_INTERVAL_MIN WNI_CFG_BEACON_INTERVAL_STAMIN
@@ -1937,6 +1946,7 @@
v_U32_t apKeepAlivePeriod;
v_U32_t goKeepAlivePeriod;
v_U32_t apLinkMonitorPeriod;
+ v_U32_t goLinkMonitorPeriod;
v_U32_t nBeaconInterval;
v_U8_t nTxPowerCap; //In dBm
v_BOOL_t fIsLowGainOverride;
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index daf41fc..694bb72 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -738,6 +738,13 @@
CFG_AP_LINK_MONITOR_PERIOD_MIN,
CFG_AP_LINK_MONITOR_PERIOD_MAX),
+ REG_VARIABLE( CFG_GO_LINK_MONITOR_PERIOD_NAME, WLAN_PARAM_Integer,
+ hdd_config_t, goLinkMonitorPeriod,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_GO_LINK_MONITOR_PERIOD_DEFAULT,
+ CFG_GO_LINK_MONITOR_PERIOD_MIN,
+ CFG_GO_LINK_MONITOR_PERIOD_MAX),
+
REG_VARIABLE(CFG_DISABLE_PACKET_FILTER , WLAN_PARAM_Integer,
hdd_config_t, disablePacketFilter,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
@@ -2775,6 +2782,11 @@
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gFlexConnectPowerFactor] Value = [%u] ", pHddCtx->cfg_ini->flexConnectPowerFactor);
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gEnableIbssHeartBeatOffload] Value = [%u] ", pHddCtx->cfg_ini->enableIbssHeartBeatOffload);
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gAntennaDiversity] Value = [%u] ", pHddCtx->cfg_ini->antennaDiversity);
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gGoLinkMonitorPeriod] Value = [%u]",pHddCtx->cfg_ini->goLinkMonitorPeriod);
+ 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);
+
}
@@ -3565,6 +3577,14 @@
hddLog(LOGE, "Could not pass on WNI_CFG_AP_LINK_MONITOR_TIMEOUT to CCM\n");
}
+ if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_GO_LINK_MONITOR_TIMEOUT, pConfig->goLinkMonitorPeriod,
+ NULL, eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE)
+ {
+ fStatus = FALSE;
+ hddLog(LOGE, "Could not pass on WNI_CFG_GO_LINK_MONITOR_TIMEOUT to CCM\n");
+ }
+
+
#if defined WLAN_FEATURE_VOWIFI
if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_RRM_ENABLED, pConfig->fRrmEnable,
NULL, eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE)
diff --git a/CORE/MAC/inc/wniCfgAp.h b/CORE/MAC/inc/wniCfgAp.h
index 0369f5a..a2c42d6 100644
--- a/CORE/MAC/inc/wniCfgAp.h
+++ b/CORE/MAC/inc/wniCfgAp.h
@@ -363,6 +363,7 @@
#define WNI_CFG_OXYGEN_NETWORK_DATA 303
#define WNI_CFG_FLEX_CONNECT_POWER_FACTOR 304
#define WNI_CFG_ANTENNA_DIVESITY 305
+#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT 306
/*
* String parameter lengths
@@ -2562,10 +2563,18 @@
#define WNI_CFG_ANTENNA_DIVESITY_APMAX 3
#define WNI_CFG_ANTENNA_DIVESITY_APDEF 0
-#define CFG_PARAM_MAX_NUM 306
-#define CFG_AP_IBUF_MAX_SIZE 245
+#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_STAMIN 3
+#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_STAMAX 50
+#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_STADEF 10
+
+#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_APMIN 3
+#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_APMAX 50
+#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_APDEF 10
+
+#define CFG_PARAM_MAX_NUM 307
+#define CFG_AP_IBUF_MAX_SIZE 246
#define CFG_AP_SBUF_MAX_SIZE 3422
-#define CFG_STA_IBUF_MAX_SIZE 240
+#define CFG_STA_IBUF_MAX_SIZE 241
#define CFG_STA_SBUF_MAX_SIZE 3388
#define CFG_SEM_MAX_NUM 19
diff --git a/CORE/MAC/inc/wniCfgSta.h b/CORE/MAC/inc/wniCfgSta.h
index c77f67f..e8f4311 100644
--- a/CORE/MAC/inc/wniCfgSta.h
+++ b/CORE/MAC/inc/wniCfgSta.h
@@ -357,6 +357,7 @@
#define WNI_CFG_OXYGEN_NETWORK_DATA 303
#define WNI_CFG_FLEX_CONNECT_POWER_FACTOR 304
#define WNI_CFG_ANTENNA_DIVESITY 305
+#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT 306
/*
* String parameter lengths
@@ -1663,8 +1664,12 @@
#define WNI_CFG_ANTENNA_DIVESITY_STAMAX 3
#define WNI_CFG_ANTENNA_DIVESITY_STADEF 0
-#define CFG_PARAM_MAX_NUM 306
-#define CFG_STA_IBUF_MAX_SIZE 240
+#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_STAMIN 3
+#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_STAMAX 50
+#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_STADEF 10
+
+#define CFG_PARAM_MAX_NUM 307
+#define CFG_STA_IBUF_MAX_SIZE 241
#define CFG_STA_SBUF_MAX_SIZE 3388
#define CFG_SEM_MAX_NUM 19
diff --git a/CORE/MAC/src/cfg/cfgParamName.c b/CORE/MAC/src/cfg/cfgParamName.c
index 9250aaa..d79ce86 100644
--- a/CORE/MAC/src/cfg/cfgParamName.c
+++ b/CORE/MAC/src/cfg/cfgParamName.c
@@ -334,6 +334,7 @@
(unsigned char *)"OXYGEN_NETWORK_DATA",
(unsigned char *)"FLEX_CONNECT_POWER_FACTOR",
(unsigned char *)"ANTENNA_DIVESITY",
+ (unsigned char *)"GO_LINK_MONITOR_TIMEOUT",
};
diff --git a/CORE/MAC/src/cfg/cfgUtil/cfg.txt b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
index 06510c1..b1de498 100644
--- a/CORE/MAC/src/cfg/cfgUtil/cfg.txt
+++ b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
@@ -4609,3 +4609,15 @@
V RW NP
HAL
0 3 0
+
+* GO Link Monitor Timeout (TU)
+*
+WNI_CFG_GO_LINK_MONITOR_TIMEOUT I 4 7
+V RW NP
+HAL
+3 50 10
+V RW NP
+HAL
+3 50 10
+*
+*
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index f5942b8..6831140 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -1587,6 +1587,20 @@
tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
+ sizeof(tHalCfg) + tlvStruct->length) ;
+ /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
+ tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
+ tlvStruct->length = sizeof(tANI_U32);
+ configDataValue = (tANI_U32 *)(tlvStruct + 1);
+ if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
+ configDataValue ) != eSIR_SUCCESS)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
+ goto handle_failure;
+ }
+ tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
+ + sizeof(tHalCfg) + tlvStruct->length) ;
+
wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
#ifdef WLAN_DEBUG
{
diff --git a/firmware_bin/WCNSS_cfg.dat b/firmware_bin/WCNSS_cfg.dat
old mode 100755
new mode 100644
index 85338f7..d52ab2c
--- a/firmware_bin/WCNSS_cfg.dat
+++ b/firmware_bin/WCNSS_cfg.dat
Binary files differ
diff --git a/firmware_bin/WCNSS_qcom_cfg.ini b/firmware_bin/WCNSS_qcom_cfg.ini
index 2c0a5ea..640f7de 100644
--- a/firmware_bin/WCNSS_qcom_cfg.ini
+++ b/firmware_bin/WCNSS_qcom_cfg.ini
@@ -304,12 +304,31 @@
#gStaKeepAlivePeriod = 30
-#AP LINK MONITOR TIMEOUT is used for both SAP and GO mode.
-#It is used to change the frequency of keep alive packets in the AP Link Monitor period which is by
-#default 20s. Currently the keep alive packets are sent as an interval of 3s but after this change
-#the keep alive packet frequency can be changed.
+#Say gGoKeepAlivePeriod(5 seconds) and gGoLinkMonitorPeriod(10 seconds).
+#For every 10 seconds DUT send Qos Null frame(i.e., Keep Alive frame if link is idle for last 10 seconds.)
+#For both active and power save clients.
-#gApLinkMonitorPeriod = 3
+#Power save clients: DUT set TIM bit from 10th second onwards and till client honors TIM bit.
+#If doesn't honor for 5 seconds then DUT remove client.
+
+#Active clients: DUT send Qos Null frame for 10th seconds onwards if it is not success still we try on
+#11th second if not tries on 12th and so on till 15th second. Hence before disconnection DUT will send 5 NULL frames.
+#Hence in any case DUT will detect client got removed in (10+5) seconds. i.e., (gGoKeepAlivePeriod + gGoLinkMonitorPeriod)..
+
+#gGoLinkMonitorPeriod/ gApLinkMonitorPeriod is period where link is idle and it is period
+#where we send NULL frame.
+
+#gApLinkMonitorPeriod = 10
+
+#gGoLinkMonitorPeriod = 10
+
+#gGoKeepAlivePeriod/gApKeepAlivePeriod is time to spend to check whether frame are succeed to send or not.
+#Hence total effective detection time is gGoLinkMonitorPeriod+ gGoKeepAlivePeriod/gApLinkMonitorPeriod+ gApKeepAlivePeriod.
+
+
+#gGoKeepAlivePeriod = 5
+
+#gApKeepAlivePeriod = 5
#If set will start with active scan after driver load, otherwise will start with