wlan: adding cfg.ini parameter to configure to RA filter.

Add ini  parameters gRAFilterEnable and gRARateLimitInterval to
enable/disable RA filter and to configure RA_RATELIMIT_INTERVAL
respectively.

Change-Id: I6b68f7c20ae4d61f8cbafe7f7aa3c21a6c5b0579
CRs-Fixed: 621074
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 48e58a9..7e13d9c 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -2106,6 +2106,16 @@
 #define CFG_ADVERTISE_CONCURRENT_OPERATION_MIN     ( 0 )
 #define CFG_ADVERTISE_CONCURRENT_OPERATION_MAX     ( 1 )
 
+#define CFG_RA_FILTER_ENABLE_NAME               "gRAFilterEnable"
+#define CFG_RA_FILTER_ENABLE_DEFAULT            (1)
+#define CFG_RA_FILTER_ENABLE_MIN                (0)
+#define CFG_RA_FILTER_ENABLE_MAX                (1)
+
+#define CFG_RA_RATE_LIMIT_INTERVAL_NAME         "gRARateLimitInterval"
+#define CFG_RA_RATE_LIMIT_INTERVAL_DEFAULT      (60)
+#define CFG_RA_RATE_LIMIT_INTERVAL_MIN          (0)
+#define CFG_RA_RATE_LIMIT_INTERVAL_MAX          (60)
+
 /*--------------------------------------------------------------------------- 
   Type declarations
   -------------------------------------------------------------------------*/ 
@@ -2538,6 +2548,8 @@
    v_BOOL_t                    advertiseConcurrentOperation;
    v_U32_t                     defaultRateIndex24Ghz;
    eHddDot11Mode               sapDot11Mode;
+   v_BOOL_t                    cfgRAFilterEnable;
+   v_U16_t                     cfgRARateLimitInterval;
 } 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 f837565..479469e 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -2930,6 +2930,19 @@
                  CFG_SAP_DOT11_MODE_MIN,
                  CFG_SAP_DOT11_MODE_MAX ),
 
+   REG_VARIABLE(CFG_RA_FILTER_ENABLE_NAME, WLAN_PARAM_Integer,
+                hdd_config_t, cfgRAFilterEnable,
+                VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+                CFG_RA_FILTER_ENABLE_DEFAULT,
+                CFG_RA_FILTER_ENABLE_MIN,
+                CFG_RA_FILTER_ENABLE_MAX ),
+
+   REG_VARIABLE(CFG_RA_RATE_LIMIT_INTERVAL_NAME, WLAN_PARAM_Integer,
+               hdd_config_t, cfgRARateLimitInterval,
+               VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+               CFG_RA_RATE_LIMIT_INTERVAL_DEFAULT,
+               CFG_RA_RATE_LIMIT_INTERVAL_MIN,
+               CFG_RA_RATE_LIMIT_INTERVAL_MAX ),
 };
 
 /*
@@ -4623,6 +4636,21 @@
        hddLog(LOGE, "Could not pass on WNI_CFG_DEFAULT_RATE_INDEX_24GHZ to"
                     " CCM\n");
    }
+
+   if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_RA_FILTER_ENABLE, pConfig->cfgRAFilterEnable,
+      NULL, eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE)
+   {
+      fStatus = FALSE;
+      hddLog(LOGE, "Could not pass on WNI_CFG_RA_FILTER_ENABLE to CCM");
+   }
+
+   if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_RA_RATE_LIMIT_INTERVAL, pConfig->cfgRARateLimitInterval,
+      NULL, eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE)
+   {
+      fStatus = FALSE;
+      hddLog(LOGE, "Could not pass on WNI_CFG_RA_FILTER_ENABLE to CCM");
+   }
+
    return fStatus;
 }
 
diff --git a/CORE/MAC/inc/wniCfgAp.h b/CORE/MAC/inc/wniCfgAp.h
index 7f7b5c5..8e842de 100644
--- a/CORE/MAC/inc/wniCfgAp.h
+++ b/CORE/MAC/inc/wniCfgAp.h
@@ -372,6 +372,8 @@
 #define WNI_CFG_TDLS_OFF_CHANNEL_ENABLED    325
 #define WNI_CFG_PMF_SA_QUERY_MAX_RETRIES    326
 #define WNI_CFG_PMF_SA_QUERY_RETRY_INTERVAL    327
+#define WNI_CFG_RA_FILTER_ENABLE    328
+#define WNI_CFG_RA_RATE_LIMIT_INTERVAL    329
 
 /*
  * String parameter lengths 
@@ -2747,10 +2749,26 @@
 #define WNI_CFG_PMF_SA_QUERY_RETRY_INTERVAL_APMAX    2000
 #define WNI_CFG_PMF_SA_QUERY_RETRY_INTERVAL_APDEF    200
 
-#define CFG_PARAM_MAX_NUM         328
-#define CFG_AP_IBUF_MAX_SIZE      267
+#define WNI_CFG_RA_FILTER_ENABLE_STAMIN    0
+#define WNI_CFG_RA_FILTER_ENABLE_STAMAX    1
+#define WNI_CFG_RA_FILTER_ENABLE_STADEF    1
+
+#define WNI_CFG_RA_FILTER_ENABLE_APMIN    0
+#define WNI_CFG_RA_FILTER_ENABLE_APMAX    1
+#define WNI_CFG_RA_FILTER_ENABLE_APDEF    1
+
+#define WNI_CFG_RA_RATE_LIMIT_INTERVAL_STAMIN    0
+#define WNI_CFG_RA_RATE_LIMIT_INTERVAL_STAMAX    60
+#define WNI_CFG_RA_RATE_LIMIT_INTERVAL_STADEF    60
+
+#define WNI_CFG_RA_RATE_LIMIT_INTERVAL_APMIN    0
+#define WNI_CFG_RA_RATE_LIMIT_INTERVAL_APMAX    60
+#define WNI_CFG_RA_RATE_LIMIT_INTERVAL_APDEF    60
+
+#define CFG_PARAM_MAX_NUM         330
+#define CFG_AP_IBUF_MAX_SIZE      269
 #define CFG_AP_SBUF_MAX_SIZE      3422
-#define CFG_STA_IBUF_MAX_SIZE     262
+#define CFG_STA_IBUF_MAX_SIZE     264
 #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 d44b9f5..b30bdcf 100644
--- a/CORE/MAC/inc/wniCfgSta.h
+++ b/CORE/MAC/inc/wniCfgSta.h
@@ -366,6 +366,8 @@
 #define WNI_CFG_TDLS_OFF_CHANNEL_ENABLED    325
 #define WNI_CFG_PMF_SA_QUERY_MAX_RETRIES    326
 #define WNI_CFG_PMF_SA_QUERY_RETRY_INTERVAL    327
+#define WNI_CFG_RA_FILTER_ENABLE    328
+#define WNI_CFG_RA_RATE_LIMIT_INTERVAL    329
 
 /*
  * String parameter lengths 
@@ -1760,8 +1762,16 @@
 #define WNI_CFG_PMF_SA_QUERY_RETRY_INTERVAL_STAMAX    2000
 #define WNI_CFG_PMF_SA_QUERY_RETRY_INTERVAL_STADEF    200
 
-#define CFG_PARAM_MAX_NUM        328
-#define CFG_STA_IBUF_MAX_SIZE    262
+#define WNI_CFG_RA_FILTER_ENABLE_STAMIN    0
+#define WNI_CFG_RA_FILTER_ENABLE_STAMAX    1
+#define WNI_CFG_RA_FILTER_ENABLE_STADEF    1
+
+#define WNI_CFG_RA_RATE_LIMIT_INTERVAL_STAMIN    0
+#define WNI_CFG_RA_RATE_LIMIT_INTERVAL_STAMAX    60
+#define WNI_CFG_RA_RATE_LIMIT_INTERVAL_STADEF    60
+
+#define CFG_PARAM_MAX_NUM        330
+#define CFG_STA_IBUF_MAX_SIZE    264
 #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 d95ad30..9188021 100644
--- a/CORE/MAC/src/cfg/cfgParamName.c
+++ b/CORE/MAC/src/cfg/cfgParamName.c
@@ -331,6 +331,39 @@
     (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",
+    (unsigned char *)"TDLS_QOS_WMM_UAPSD_MASK",
+    (unsigned char *)"TDLS_BUF_STA_ENABLED",
+    (unsigned char *)"TDLS_PUAPSD_INACT_TIME",
+    (unsigned char *)"TDLS_RX_FRAME_THRESHOLD",
+    (unsigned char *)"ENABLE_ADAPT_RX_DRAIN",
+    (unsigned char *)"FLEX_CONNECT_POWER_FACTOR",
+    (unsigned char *)"ANTENNA_DIVESITY",
+    (unsigned char *)"GO_LINK_MONITOR_TIMEOUT",
+    (unsigned char *)"ATH_DISABLE",
+    (unsigned char *)"BTC_ACTIVE_WLAN_LEN",
+    (unsigned char *)"BTC_ACTIVE_BT_LEN",
+    (unsigned char *)"BTC_SAP_ACTIVE_WLAN_LEN",
+    (unsigned char *)"BTC_SAP_ACTIVE_BT_LEN",
+    (unsigned char *)"RMC_ACTION_PERIOD_FREQUENCY",
+    (unsigned char *)"ASD_PROBE_INTERVAL",
+    (unsigned char *)"ASD_TRIGGER_THRESHOLD",
+    (unsigned char *)"ASD_RTT_RSSI_HYST_THRESHOLD",
+    (unsigned char *)"DEBUG_P2P_REMAIN_ON_CHANNEL",
+    (unsigned char *)"BTC_CTS2S_DURING_SCO",
+    (unsigned char *)"CHANNEL_BONDING_24G",
+    (unsigned char *)"OBSS_HT40_SCAN_PASSIVE_DWELL_TIME",
+    (unsigned char *)"OBSS_HT40_SCAN_ACTIVE_DWELL_TIME",
+    (unsigned char *)"OBSS_HT40_SCAN_WIDTH_TRIGGER_INTERVAL",
+    (unsigned char *)"OBSS_HT40_SCAN_PASSIVE_TOTAL_PER_CHANNEL",
+    (unsigned char *)"OBSS_HT40_SCAN_ACTIVE_TOTAL_PER_CHANNEL",
+    (unsigned char *)"OBSS_HT40_WIDTH_CHANNEL_TRANSITION_DELAY_FACTOR",
+    (unsigned char *)"OBSS_HT40_SCAN_ACTIVITY_THRESHOLD",
+    (unsigned char *)"TDLS_OFF_CHANNEL_ENABLED",
+    (unsigned char *)"PMF_SA_QUERY_MAX_RETRIES",
+    (unsigned char *)"PMF_SA_QUERY_RETRY_INTERVAL",
+    (unsigned char *)"RA_FILTER_ENABLE",
+    (unsigned char *)"RA_RATE_LIMIT_INTERVAL",
 };
 
 
diff --git a/CORE/MAC/src/cfg/cfgUtil/cfg.txt b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
index d3cbf50..db5eee3 100644
--- a/CORE/MAC/src/cfg/cfgUtil/cfg.txt
+++ b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
@@ -4859,4 +4859,24 @@
 NONE
 0    2000 200
 
+* RA filter enable/disable
+*
+WNI_CFG_RA_FILTER_ENABLE    I    4    7
+V    RW    NP
+HAL
+0    1     1
+V    RW    NP
+HAL
+0    1     1
+*
+*
 
+* RA filter rate interval
+*
+WNI_CFG_RA_RATE_LIMIT_INTERVAL    I    4    7
+V    RW    NP
+HAL
+0    60     60
+V    RW     NP
+HAL
+0    60     60
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index 78b592a..07dcfae 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -1792,6 +1792,38 @@
    tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
                            + sizeof(tHalCfg) + tlvStruct->length) ;
 
+   /* QWLAN_HAL_CFG_RA_FILTER_ENABLE  */
+   tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
+   tlvStruct->length = sizeof(tANI_U32);
+   configDataValue = (tANI_U32 *)(tlvStruct + 1);
+
+   if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
+                                            configDataValue ) != eSIR_SUCCESS)
+   {
+      VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+               "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
+      goto handle_failure;
+   }
+
+   tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
+                           + sizeof(tHalCfg) + tlvStruct->length) ;
+
+   /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL  */
+   tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
+   tlvStruct->length = sizeof(tANI_U32);
+   configDataValue = (tANI_U32 *)(tlvStruct + 1);
+
+   if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
+                                            configDataValue ) != eSIR_SUCCESS)
+   {
+      VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+               "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
+      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 cd239f1..6ae885a 100644
--- a/firmware_bin/WCNSS_cfg.dat
+++ b/firmware_bin/WCNSS_cfg.dat
Binary files differ