wlan: Add config param AP LINK MONITOR TIMEOUT

Add AP LINK MONITOR TIMEOUT to change the frequency of KEEP ALIVE
packets sent during the KEEP ALIVE TIMEOUT duration for SAP and GO.
It is used to change the frequency of keep alive packets in the AP
Link Monitor period which is by default 20s. The keep alive packets
are sent as an interval of 3s which can be changed by setting
gApLinkMonitorPeriod in ini file.

CRs-fixed: 425674
Change-Id: I8e632c2e255ac97bb1f06ea7f409d7e5036e7742
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 5defe22..40b5c07 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -503,6 +503,10 @@
 #define CFG_GO_KEEP_ALIVE_PERIOD_MAX           ( 255)
 #define CFG_GO_KEEP_ALIVE_PERIOD_DEFAULT       ( 20 )
 
+#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_BEACON_INTERVAL_NAME               "gBeaconInterval"
 #define CFG_BEACON_INTERVAL_MIN                WNI_CFG_BEACON_INTERVAL_STAMIN
@@ -1751,6 +1755,7 @@
    v_U8_t        enableLTECoex;
    v_U32_t       apKeepAlivePeriod;
    v_U32_t       goKeepAlivePeriod;
+   v_U32_t       apLinkMonitorPeriod;
    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 a3d74fd..0ff1f61 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -644,6 +644,13 @@
                  CFG_GO_KEEP_ALIVE_PERIOD_MIN,
                  CFG_GO_KEEP_ALIVE_PERIOD_MAX),
 
+   REG_VARIABLE( CFG_AP_LINK_MONITOR_PERIOD_NAME, WLAN_PARAM_Integer,
+                 hdd_config_t, apLinkMonitorPeriod,
+                 VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+                 CFG_AP_LINK_MONITOR_PERIOD_DEFAULT,
+                 CFG_AP_LINK_MONITOR_PERIOD_MIN,
+                 CFG_AP_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,
@@ -3241,6 +3248,13 @@
         hddLog(LOGE, "Could not pass on WNI_CFG_GO_KEEP_ALIVE_TIMEOUT to CCM\n");
      }
 
+     if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_AP_LINK_MONITOR_TIMEOUT, pConfig->apLinkMonitorPeriod,
+        NULL, eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE)
+     {
+        fStatus = FALSE;
+        hddLog(LOGE, "Could not pass on WNI_CFG_AP_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 b71c2b7..96187e2 100644
--- a/CORE/MAC/inc/wniCfgAp.h
+++ b/CORE/MAC/inc/wniCfgAp.h
@@ -358,6 +358,7 @@
 #define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION    293
 #define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED    294
 #define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP    295
+#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT    296
 
 /*
  * String parameter lengths 
@@ -2468,10 +2469,18 @@
 #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         296
-#define CFG_AP_IBUF_MAX_SIZE      235
+#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_STAMIN    1
+#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_STAMAX    255
+#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_STADEF    3
+
+#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_APMIN    1
+#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_APMAX    255
+#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_APDEF    3
+
+#define CFG_PARAM_MAX_NUM         297
+#define CFG_AP_IBUF_MAX_SIZE      236
 #define CFG_AP_SBUF_MAX_SIZE      3422
-#define CFG_STA_IBUF_MAX_SIZE     230
+#define CFG_STA_IBUF_MAX_SIZE     231
 #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 42b4991..571d559 100644
--- a/CORE/MAC/inc/wniCfgSta.h
+++ b/CORE/MAC/inc/wniCfgSta.h
@@ -352,6 +352,7 @@
 #define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION    293
 #define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED    294
 #define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP    295
+#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT    296
 
 /*
  * String parameter lengths 
@@ -1605,8 +1606,12 @@
 #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        296
-#define CFG_STA_IBUF_MAX_SIZE    230
+#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_STAMIN    1
+#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_STAMAX    255
+#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_STADEF    3
+
+#define CFG_PARAM_MAX_NUM        297
+#define CFG_STA_IBUF_MAX_SIZE    231
 #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 c903a3b..c0db1a0 100644
--- a/CORE/MAC/src/cfg/cfgParamName.c
+++ b/CORE/MAC/src/cfg/cfgParamName.c
@@ -349,6 +349,7 @@
     (unsigned char *)"ENABLE_LPWR_IMG_TRANSITION",
     (unsigned char *)"ENABLE_MCC_ADAPTIVE_SCHED",
     (unsigned char *)"DISABLE_LDPC_WITH_TXBF_AP",
+    (unsigned char *)"AP_LINK_MONITOR_TIMEOUT",
 };
 
 
diff --git a/CORE/MAC/src/cfg/cfgUtil/cfg.txt b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
index afd7828..463bdd0 100644
--- a/CORE/MAC/src/cfg/cfgUtil/cfg.txt
+++ b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
@@ -4474,3 +4474,14 @@
 V    RW    NP
 NONE
 0    1     0
+
+*
+* AP Link Monitor Timeout (TU)
+*
+WNI_CFG_AP_LINK_MONITOR_TIMEOUT    I    4    7
+V    RW    NP
+HAL
+1    255    3
+V    RW    NP
+HAL
+1    255    3
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index d991e77..249d78b 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -1456,6 +1456,21 @@
    tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct 
                             + sizeof(tHalCfg) + tlvStruct->length) ;
 
+/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT   */
+   tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT  ;
+   tlvStruct->length = sizeof(tANI_U32);
+   configDataValue = (tANI_U32 *)(tlvStruct + 1);
+   if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
+                                            configDataValue ) != eSIR_SUCCESS)
+   {
+      VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+               "Failed to get value for WNI_CFG_AP_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
index 4308e99..297b3cd 100644
--- 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 91efbbd..29540be 100644
--- a/firmware_bin/WCNSS_qcom_cfg.ini
+++ b/firmware_bin/WCNSS_qcom_cfg.ini
@@ -301,6 +301,13 @@
 
 #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.
+
+#gApLinkMonitorPeriod = 3
+
 
 #If set will start with active scan after driver load, otherwise will start with