wlan:  Config parameter added to enable RTS protection

In HDD, Support to enable RTS protection for HT,VHT traffic
through a new config parameter "gEnableRtsCtsHtVht" in
WCNSS_qcom_cfg.ini is added.

Change-Id: If11224d39075778a82f72bd5dcf273b02b5d3b44
CRs-Fixed: 802376
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 5b3decb..2f77918 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -269,6 +269,18 @@
 #define CFG_ENABLE_DYNAMIC_RA_START_RATE_MAX     ( 1 )
 #define CFG_ENABLE_DYNAMIC_RA_START_RATE_DEFAULT ( 0 )
 
+/* Bit mask value to enable RTS/CTS for different modes
+ * for 2.4 GHz, HT20 - 0x0001, for 2.4 GHz, HT40 - 0x0002
+ * for 2.4 GHz, VHT20 - 0x0004, for 2.4 GHz, VHT40 - 0x0008
+ * for 5 GHz, HT20 - 0x0100, for 5 GHz, HT40 - 0x0200
+ * for 5 GHz, VHT20 - 0x0400, for 5 GHz, VHT40 - 0x0800
+ * for 5 GHz, VHT80 - 0x1000
+ */
+#define CFG_ENABLE_RTSCTS_HTVHT_NAME             "gEnableRtsCtsHtVht"
+#define CFG_ENABLE_RTSCTS_HTVHT_MIN              ( 0x0000 )
+#define CFG_ENABLE_RTSCTS_HTVHT_MAX              ( 0x1f0f )
+#define CFG_ENABLE_RTSCTS_HTVHT_DEFAULT          ( 0x0000 )
+
 #define CFG_AUTO_BMPS_TIMER_VALUE_NAME         "gAutoBmpsTimerValue" 
 #define CFG_AUTO_BMPS_TIMER_VALUE_MIN          ( 1000 )
 #define CFG_AUTO_BMPS_TIMER_VALUE_MAX          ( 4294967295UL )
@@ -2904,6 +2916,7 @@
    v_U8_t                      acsScanBandPreference;
    v_U16_t                     acsBandSwitchThreshold;
    v_U32_t                     enableDynamicRAStartRate;
+   v_U32_t                     enableRtsCtsHtVht;
 #ifdef WLAN_FEATURE_AP_HT40_24G
    v_BOOL_t                    apHT40_24GEnabled;
 #endif
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 7af897b..700255e 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -3257,6 +3257,14 @@
                  CFG_BTC_FAST_WLAN_CONN_PREF_MIN,
                  CFG_BTC_FAST_WLAN_CONN_PREF_MAX ),
 
+   REG_VARIABLE( CFG_ENABLE_RTSCTS_HTVHT_NAME, WLAN_PARAM_Integer,
+                  hdd_config_t, enableRtsCtsHtVht,
+                  VAR_FLAGS_OPTIONAL |
+                  VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+                  CFG_ENABLE_RTSCTS_HTVHT_DEFAULT,
+                  CFG_ENABLE_RTSCTS_HTVHT_MIN,
+                  CFG_ENABLE_RTSCTS_HTVHT_MAX),
+
    REG_VARIABLE( CFG_DXE_REPLENISH_RX_TIMER_VALUE, WLAN_PARAM_Integer,
                   hdd_config_t, dxeReplenishRXTimerVal,
                   VAR_FLAGS_OPTIONAL |
@@ -5191,6 +5199,15 @@
       fStatus = FALSE;
       hddLog(LOGE, "Could not pass on WNI_CFG_BTC_FAST_WLAN_CONN_PREF ");
    }
+
+   if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_ENABLE_RTSCTS_HTVHT,
+               pConfig->enableRtsCtsHtVht,
+               NULL, eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE)
+   {
+       fStatus = FALSE;
+       hddLog(LOGE, "Could not pass on"
+               "WNI_CFG_ENABLE_RTSCTS_HTVHT to CCM");
+   }
    return fStatus;
 }
 
diff --git a/CORE/MAC/inc/wniCfg.h b/CORE/MAC/inc/wniCfg.h
index bc5a3af..7b9f140 100644
--- a/CORE/MAC/inc/wniCfg.h
+++ b/CORE/MAC/inc/wniCfg.h
@@ -379,7 +379,8 @@
      WNI_CFG_ENABLE_DYNAMIC_WMMPS,
      WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
      WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
-     WNI_CFG_BTC_FAST_WLAN_CONN_PREF
+     WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
+     WNI_CFG_ENABLE_RTSCTS_HTVHT
 };
 
 /*
@@ -1849,8 +1850,19 @@
 #define WNI_CFG_BTC_FAST_WLAN_CONN_PREF_STAMAX 1
 #define WNI_CFG_BTC_FAST_WLAN_CONN_PREF_STADEF 1
 
-#define CFG_PARAM_MAX_NUM        346
-#define CFG_STA_IBUF_MAX_SIZE    280
+/* Bit mask value to enable RTS/CTS for different modes
+ * for 2.4 GHz, HT20 - 0x0001, for 2.4 GHz, HT40 - 0x0002
+ * for 2.4 GHz, VHT20 - 0x0004, for 2.4 GHz, VHT40 - 0x0008
+ * for 5 GHz, HT20 - 0x0100, for 5 GHz, HT40 - 0x0200
+ * for 5 GHz, VHT20 - 0x0400, for 5 GHz, VHT40 - 0x0800
+ * for 5 GHz, VHT80 - 0x1000
+ */
+#define WNI_CFG_ENABLE_RTSCTS_HTVHT_MIN 0x0000
+#define WNI_CFG_ENABLE_RTSCTS_HTVHT_MAX 0x1f0f
+#define WNI_CFG_ENABLE_RTSCTS_HTVHT_DEF 0x0000
+
+#define CFG_PARAM_MAX_NUM        347
+#define CFG_STA_IBUF_MAX_SIZE    281
 #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 b28662f..321a3d6 100644
--- a/CORE/MAC/src/cfg/cfgProcMsg.c
+++ b/CORE/MAC/src/cfg/cfgProcMsg.c
@@ -1642,6 +1642,11 @@
      WNI_CFG_BTC_FAST_WLAN_CONN_PREF_STAMIN,
      WNI_CFG_BTC_FAST_WLAN_CONN_PREF_STAMAX,
      WNI_CFG_BTC_FAST_WLAN_CONN_PREF_STADEF},
+    {WNI_CFG_ENABLE_RTSCTS_HTVHT,
+     CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT | CFG_CTL_NTF_HAL,
+     WNI_CFG_ENABLE_RTSCTS_HTVHT_MIN,
+     WNI_CFG_ENABLE_RTSCTS_HTVHT_MAX,
+     WNI_CFG_ENABLE_RTSCTS_HTVHT_DEF},
 
 };
 
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index 50caad2..01a7788 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -2086,6 +2086,21 @@
    tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
                            + sizeof(tHalCfg) + tlvStruct->length) ;
 
+   /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
+   tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
+   tlvStruct->length = sizeof(tANI_U32);
+   configDataValue = (tANI_U32 *)(tlvStruct + 1);
+
+   if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
+                                            configDataValue ) != eSIR_SUCCESS)
+   {
+      VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+               "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
+      goto handle_failure;
+   }
+   tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
+                           + sizeof(tHalCfg) + tlvStruct->length) ;
+
    wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
 #ifdef WLAN_DEBUG
    {
@@ -4721,6 +4736,8 @@
          return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
       case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
          return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
+      case WNI_CFG_ENABLE_RTSCTS_HTVHT:
+         return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
       default:
       {
          VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
diff --git a/firmware_bin/WCNSS_qcom_cfg.ini b/firmware_bin/WCNSS_qcom_cfg.ini
index 8c9f7d7..e9d6727 100644
--- a/firmware_bin/WCNSS_qcom_cfg.ini
+++ b/firmware_bin/WCNSS_qcom_cfg.ini
@@ -453,6 +453,17 @@
 #Enable/Disable TDLS Buffer Sta
 gEnableTDLSBufferSta=1
 
+#Enable/Disable RTS-CTS for HT,VHT
+#Bit mask value to enable RTS/CTS for different modes
+#For 2.4 GHz, HT20 - 0x0001 i.e 1, for 2.4 GHz, HT40 - 0x0002 i.e 2
+#For 2.4 GHz, VHT20 - 0x0004 i.e 4, for 2.4 GHz, VHT40 - 0x0008 i.e 8
+#For 5 GHz, HT20 - 0x0100 i.e 256, for 5 GHz, HT40 - 0x0200 i.e 512
+#For 5 GHz, VHT20 - 0x0400 i.e 1024, for 5 GHz, VHT40 - 0x0800 i.e 2048
+#For 5 GHz, VHT80 - 0x1000 i.e 4096
+#Can be enabled for multiple modes
+#For enabling in both HT20 and HT40 of 2.4 GHz - 0x0003 i.e 3
+#Default is set to 0 (disable)
+gEnableRtsCtsHtVht=0
 
 END