wlan: Add support to disable forwarding of BAR frames

In suspend mode, if AP sends the BAR frames then these BAR
frames are sent to host which leads to unnecessary
APPS wakeup.

Add ini support to disable the BAR frames. When this ini is set
to 1, FW will not forward the BAR frames to host when APPS is
in suspend mode.

Change-Id: Ifc4e4f3ea0c20f7073f4ee5b01b0a7681225e4b4
CRs-Fixed: 948786
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index f789725..814ea77 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -2566,6 +2566,12 @@
 #define CFG_TOGGLE_ARP_BDRATES_MAX         2
 #define CFG_TOGGLE_ARP_BDRATES_DEFAULT     0
 
+#define CFG_DISABLE_BAR_WAKEUP_HOST_NAME       "gDisableBarWakeUp"
+#define CFG_DISABLE_BAR_WAKEUP_HOST_MIN         0
+#define CFG_DISABLE_BAR_WAKEUP_HOST_MAX         1
+#define CFG_DISABLE_BAR_WAKEUP_HOST_DEFAULT     0
+
+
 /*
  * gExtScanConcMode is used to manage EXT Scan during concurrency
  * This can be useful during WFD session. To avoid glitches during WFD
@@ -3142,6 +3148,7 @@
    v_BOOL_t                    fEnableWifiConfig;
    v_BOOL_t                    crash_inject_enabled;
    v_U32_t                     enable_delack;
+   v_BOOL_t                    disableBarWakeUp;
 } hdd_config_t;
 
 /*--------------------------------------------------------------------------- 
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 7263728..5c78282 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -3488,6 +3488,14 @@
                  CFG_ENABLE_TCP_DELACK_DEFAULT,
                  CFG_ENABLE_TCP_DELACK_MIN,
                  CFG_ENABLE_TCP_DELACK_MAX ),
+
+  REG_VARIABLE( CFG_DISABLE_BAR_WAKEUP_HOST_NAME, WLAN_PARAM_Integer,
+                 hdd_config_t, disableBarWakeUp,
+                 VAR_FLAGS_OPTIONAL |
+                 VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+                 CFG_DISABLE_BAR_WAKEUP_HOST_DEFAULT,
+                 CFG_DISABLE_BAR_WAKEUP_HOST_MIN,
+                 CFG_DISABLE_BAR_WAKEUP_HOST_MAX),
 };
 
 /*
@@ -3928,6 +3936,9 @@
   VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH,
           "Name = [gEnableDelAck] Value = [%u] ",
           pHddCtx->cfg_ini->enable_delack);
+  VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH,
+          "Name = [disableBarWakeUp] Value = [%u] ",
+          pHddCtx->cfg_ini->disableBarWakeUp);
 }
 
 
@@ -5511,6 +5522,14 @@
       hddLog(LOGE, "Could not pass on WNI_CFG_ENABLE_MAC_ADDR_SPOOFING ");
    }
 
+   if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_DISABLE_BAR_WAKE_UP_HOST,
+               pConfig->disableBarWakeUp,
+               NULL, eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE)
+   {
+       fStatus = FALSE;
+       hddLog(LOGE, "Could not pass on WNI_CFG_DISABLE_BAR_WAKE_UP_HOST to CCM");
+   }
+
    return fStatus;
 }
 
diff --git a/CORE/MAC/inc/wniCfg.h b/CORE/MAC/inc/wniCfg.h
index 5888b99..34f3ac3 100644
--- a/CORE/MAC/inc/wniCfg.h
+++ b/CORE/MAC/inc/wniCfg.h
@@ -389,7 +389,8 @@
      WNI_CFG_OPTIMIZE_CA_EVENT,
      WNI_CFG_ACTIVE_PASSIVE_CON,
      WNI_CFG_EXT_SCAN_CONC_MODE,
-     WNI_CFG_ENABLE_MAC_ADDR_SPOOFING
+     WNI_CFG_ENABLE_MAC_ADDR_SPOOFING,
+     WNI_CFG_DISABLE_BAR_WAKE_UP_HOST
 };
 
 /*
@@ -1906,8 +1907,12 @@
 #define WNI_CFG_ENABLE_MAC_ADDR_SPOOFING_MAX 2
 #define WNI_CFG_ENABLE_MAC_ADDR_SPOOFING_DEF 1
 
-#define CFG_PARAM_MAX_NUM        356
-#define CFG_STA_IBUF_MAX_SIZE    290
+#define WNI_CFG_DISABLE_BAR_WAKE_UP_HOST_MIN 0
+#define WNI_CFG_DISABLE_BAR_WAKE_UP_HOST_MAX 1
+#define WNI_CFG_DISABLE_BAR_WAKE_UP_HOST_DEF 0
+
+#define CFG_PARAM_MAX_NUM        357
+#define CFG_STA_IBUF_MAX_SIZE    291
 #define CFG_STA_SBUF_MAX_SIZE    3389
 
 #define CFG_STA_MAGIC_DWORD    0xbeefbeef
diff --git a/CORE/MAC/src/cfg/cfgProcMsg.c b/CORE/MAC/src/cfg/cfgProcMsg.c
index a7b0484..aaa4784 100644
--- a/CORE/MAC/src/cfg/cfgProcMsg.c
+++ b/CORE/MAC/src/cfg/cfgProcMsg.c
@@ -1691,7 +1691,12 @@
      CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT | CFG_CTL_NTF_HAL,
      WNI_CFG_ENABLE_MAC_ADDR_SPOOFING_MIN,
      WNI_CFG_ENABLE_MAC_ADDR_SPOOFING_MAX,
-     WNI_CFG_ENABLE_MAC_ADDR_SPOOFING_DEF}
+     WNI_CFG_ENABLE_MAC_ADDR_SPOOFING_DEF},
+    {WNI_CFG_DISABLE_BAR_WAKE_UP_HOST,
+     CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT | CFG_CTL_NTF_HAL,
+     WNI_CFG_DISABLE_BAR_WAKE_UP_HOST_MIN,
+     WNI_CFG_DISABLE_BAR_WAKE_UP_HOST_MAX,
+     WNI_CFG_DISABLE_BAR_WAKE_UP_HOST_DEF},
 };
 
 tAniSirCfgStaticString cfgStaticString[CFG_MAX_STATIC_STRING] =
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index d9501a6..9e1e7a9 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -2347,6 +2347,20 @@
    tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
                            + sizeof(tHalCfg) + tlvStruct->length) ;
 
+   /* QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE */
+   tlvStruct->type = QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE;
+   tlvStruct->length = sizeof(tANI_U32);
+   configDataValue = (tANI_U32 *)(tlvStruct + 1);
+
+   if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_BAR_WAKE_UP_HOST,
+                         configDataValue ) != eSIR_SUCCESS)
+   {
+      VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+               "Failed to get value for WNI_CFG_DISABLE_BAR_WAKE_UP_HOST");
+      goto handle_failure;
+   }
+   tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
+                           + sizeof(tHalCfg) + tlvStruct->length) ;
    wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
 #ifdef WLAN_DEBUG
    {
diff --git a/riva/inc/wlan_hal_cfg.h b/riva/inc/wlan_hal_cfg.h
index ecb9f22..c1d179a 100644
--- a/riva/inc/wlan_hal_cfg.h
+++ b/riva/inc/wlan_hal_cfg.h
@@ -274,12 +274,13 @@
 #define QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES                     216
 #define QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT                      217
 #define QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE                     218
+#define QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE                219
 
-#define QWLAN_HAL_CFG_MAX_PARAMS                             219
+#define QWLAN_HAL_CFG_MAX_PARAMS                             220
 
 
 /* Total number of Integer CFGs. This is used while allocating the memory for TLV */
-#define QWLAN_HAL_CFG_INTEGER_PARAM                     219
+#define QWLAN_HAL_CFG_INTEGER_PARAM                     220
 
 /*-------------------------------------------------------------------------
   Configuration Parameter min, max, defaults
@@ -1090,4 +1091,9 @@
 #define QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE_MIN 0
 #define QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE_MAX 2
 
+/* QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE */
+#define QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE_MIN 0
+#define QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE_MAX 1
+#define QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE_DEF 0
+
 #endif //__WLAN_HAL_CFG_H__