Disable aggregation in 2.4G based on BTC events.

Disable aggregation on all links in 2.4G band when BTC indicates
not to use aggregation and enable it again on BTC event.

Change-Id: I55d013c4f7bd36346a5b994ed6e4b487a0fa019f
CRs-Fixed: 461869
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 1dbafef..f51d361 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -591,6 +591,11 @@
 #define CFG_RETRY_LIMIT_TWO_MAX        ( 15 )
 #define CFG_RETRY_LIMIT_TWO_DEFAULT    ( 15 )
 
+#define CFG_DISABLE_AGG_WITH_BTC_NAME       "gDisableAggWithBTC"
+#define CFG_DISABLE_AGG_WITH_BTC_MIN        ( 0 )
+#define CFG_DISABLE_AGG_WITH_BTC_MAX        ( 1 )
+#define CFG_DISABLE_AGG_WITH_BTC_DEFAULT    ( 1 )
+
 #ifdef WLAN_AP_STA_CONCURRENCY
 
 #define CFG_PASSIVE_MAX_CHANNEL_TIME_CONC_NAME      "gPassiveMaxChannelTimeConc"
@@ -2107,6 +2112,7 @@
    v_U8_t                      retryLimitZero;
    v_U8_t                      retryLimitOne;
    v_U8_t                      retryLimitTwo;
+   v_U8_t                      disableAggWithBtc;
    char                        listOfNonDfsCountryCode[128];
    v_BOOL_t                    enableSSR;
    char                        listOfNon11acCountryCode[128];
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 68d3c24..f7a72af 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -822,6 +822,13 @@
                  CFG_RETRY_LIMIT_TWO_MIN,
                  CFG_RETRY_LIMIT_TWO_MAX ),
 
+   REG_VARIABLE( CFG_DISABLE_AGG_WITH_BTC_NAME, WLAN_PARAM_Integer,
+                 hdd_config_t, disableAggWithBtc,
+                 VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+                 CFG_DISABLE_AGG_WITH_BTC_DEFAULT,
+                 CFG_DISABLE_AGG_WITH_BTC_MIN,
+                 CFG_DISABLE_AGG_WITH_BTC_MAX ),
+
 #ifdef WLAN_AP_STA_CONCURRENCY
    REG_VARIABLE( CFG_PASSIVE_MAX_CHANNEL_TIME_CONC_NAME, WLAN_PARAM_Integer,
                  hdd_config_t, nPassiveMaxChnTimeConc,
@@ -3820,6 +3827,7 @@
    smeConfig.csrConfig.nPassiveMinChnTime       = pConfig->nPassiveMinChnTime;
    smeConfig.csrConfig.nActiveMaxChnTimeBtc     = pConfig->nActiveMaxChnTimeBtc;
    smeConfig.csrConfig.nActiveMinChnTimeBtc     = pConfig->nActiveMinChnTimeBtc;
+   smeConfig.csrConfig.disableAggWithBtc        = pConfig->disableAggWithBtc;
 #ifdef WLAN_AP_STA_CONCURRENCY
    smeConfig.csrConfig.nActiveMaxChnTimeConc    = pConfig->nActiveMaxChnTimeConc;
    smeConfig.csrConfig.nActiveMinChnTimeConc    = pConfig->nActiveMinChnTimeConc;
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index 2f833fd..8d324c6 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -3342,6 +3342,8 @@
 #define SIR_COEX_IND_TYPE_ENABLE_HB_MONITOR (1)
 #define SIR_COEX_IND_TYPE_SCAN_COMPROMISED (2)
 #define SIR_COEX_IND_TYPE_SCAN_NOT_COMPROMISED (3)
+#define SIR_COEX_IND_TYPE_DISABLE_AGGREGATION_IN_2p4 (4)
+#define SIR_COEX_IND_TYPE_ENABLE_AGGREGATION_IN_2p4 (5)
 
 typedef struct sSirSmeCoexInd
 {
diff --git a/CORE/MAC/inc/sirMacProtDef.h b/CORE/MAC/inc/sirMacProtDef.h
index 7463076..ac41285 100644
--- a/CORE/MAC/inc/sirMacProtDef.h
+++ b/CORE/MAC/inc/sirMacProtDef.h
@@ -38,8 +38,9 @@
  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  * PERFORMANCE OF THIS SOFTWARE.
  */
+
+
 /*
- * Airgo Networks, Inc proprietary. All rights reserved.
  * This file sirMacProtDef.h contains the MAC/PHY protocol
  * definitions used across various projects.
  * Author:        Chandra Modumudi
@@ -632,6 +633,10 @@
 #define IS_WES_MODE_ENABLED(x) \
                     ((x)->roam.configParam.isWESModeEnabled)
 
+#define BA_RECIPIENT       1
+#define BA_INITIATOR       2
+#define BA_BOTH_DIRECTIONS 3
+
 /// Status Code (present in Management response frames) enum
 
 typedef enum eSirMacStatusCodes
diff --git a/CORE/MAC/inc/wniCfgAp.h b/CORE/MAC/inc/wniCfgAp.h
index 96187e2..615ff73 100644
--- a/CORE/MAC/inc/wniCfgAp.h
+++ b/CORE/MAC/inc/wniCfgAp.h
@@ -290,75 +290,76 @@
 #define WNI_CFG_MAX_BA_SESSIONS    225
 #define WNI_CFG_BA_AUTO_SETUP    226
 #define WNI_CFG_ADDBA_REQ_DECLINE    227
-#define WNI_CFG_BG_SCAN_CHANNEL_LIST    228
-#define WNI_CFG_MAX_MEDIUM_TIME    229
-#define WNI_CFG_MAX_MPDUS_IN_AMPDU    230
-#define WNI_CFG_IBSS_AUTO_BSSID    231
-#define WNI_CFG_PROBE_REQ_ADDNIE_FLAG    232
-#define WNI_CFG_PROBE_REQ_ADDNIE_DATA    233
-#define WNI_CFG_PROBE_RSP_ADDNIE_FLAG    234
-#define WNI_CFG_PROBE_RSP_ADDNIE_DATA1    235
-#define WNI_CFG_PROBE_RSP_ADDNIE_DATA2    236
-#define WNI_CFG_PROBE_RSP_ADDNIE_DATA3    237
-#define WNI_CFG_ASSOC_RSP_ADDNIE_FLAG    238
-#define WNI_CFG_ASSOC_RSP_ADDNIE_DATA    239
-#define WNI_CFG_PROBE_REQ_ADDNP2PIE_FLAG    240
-#define WNI_CFG_PROBE_REQ_ADDNP2PIE_DATA    241
-#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG    242
-#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA    243
-#define WNI_CFG_WPS_ENABLE    244
-#define WNI_CFG_WPS_STATE    245
-#define WNI_CFG_WPS_PROBE_REQ_FLAG    246
-#define WNI_CFG_WPS_VERSION    247
-#define WNI_CFG_WPS_REQUEST_TYPE    248
-#define WNI_CFG_WPS_CFG_METHOD    249
-#define WNI_CFG_WPS_UUID    250
-#define WNI_CFG_WPS_PRIMARY_DEVICE_CATEGORY    251
-#define WNI_CFG_WPS_PIMARY_DEVICE_OUI    252
-#define WNI_CFG_WPS_DEVICE_SUB_CATEGORY    253
-#define WNI_CFG_WPS_ASSOCIATION_STATE    254
-#define WNI_CFG_WPS_CONFIGURATION_ERROR    255
-#define WNI_CFG_WPS_DEVICE_PASSWORD_ID    256
-#define WNI_CFG_WPS_ASSOC_METHOD    257
-#define WNI_CFG_LOW_GAIN_OVERRIDE    258
-#define WNI_CFG_ENABLE_PHY_AGC_LISTEN_MODE    259
-#define WNI_CFG_RPE_POLLING_THRESHOLD    260
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG    261
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG    262
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG    263
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG    264
-#define WNI_CFG_NO_OF_ONCHIP_REORDER_SESSIONS    265
-#define WNI_CFG_SINGLE_TID_RC    266
-#define WNI_CFG_RRM_ENABLED    267
-#define WNI_CFG_RRM_OPERATING_CHAN_MAX    268
-#define WNI_CFG_RRM_NON_OPERATING_CHAN_MAX    269
-#define WNI_CFG_TX_PWR_CTRL_ENABLE    270
-#define WNI_CFG_MCAST_BCAST_FILTER_SETTING    271
-#define WNI_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK    272
-#define WNI_CFG_DYNAMIC_PS_POLL_VALUE    273
-#define WNI_CFG_PS_NULLDATA_AP_RESP_TIMEOUT    274
-#define WNI_CFG_TELE_BCN_WAKEUP_EN    275
-#define WNI_CFG_TELE_BCN_TRANS_LI    276
-#define WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS    277
-#define WNI_CFG_TELE_BCN_MAX_LI    278
-#define WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS    279
-#define WNI_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS    280
-#define WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD    281
-#define WNI_CFG_ASSOC_STA_LIMIT    282
-#define WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL    283
-#define WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL    284
-#define WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND    285
-#define WNI_CFG_AP_DATA_AVAIL_POLL_PERIOD    286
-#define WNI_CFG_ENABLE_CLOSE_LOOP    287
-#define WNI_CFG_ENABLE_LTE_COEX    288
-#define WNI_CFG_AP_KEEP_ALIVE_TIMEOUT    289
-#define WNI_CFG_GO_KEEP_ALIVE_TIMEOUT    290
-#define WNI_CFG_ENABLE_MC_ADDR_LIST    291
-#define WNI_CFG_ENABLE_UC_FILTER    292
-#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
+#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC    228
+#define WNI_CFG_BG_SCAN_CHANNEL_LIST    229
+#define WNI_CFG_MAX_MEDIUM_TIME    230
+#define WNI_CFG_MAX_MPDUS_IN_AMPDU    231
+#define WNI_CFG_IBSS_AUTO_BSSID    232
+#define WNI_CFG_PROBE_REQ_ADDNIE_FLAG    233
+#define WNI_CFG_PROBE_REQ_ADDNIE_DATA    234
+#define WNI_CFG_PROBE_RSP_ADDNIE_FLAG    235
+#define WNI_CFG_PROBE_RSP_ADDNIE_DATA1    236
+#define WNI_CFG_PROBE_RSP_ADDNIE_DATA2    237
+#define WNI_CFG_PROBE_RSP_ADDNIE_DATA3    238
+#define WNI_CFG_ASSOC_RSP_ADDNIE_FLAG    239
+#define WNI_CFG_ASSOC_RSP_ADDNIE_DATA    240
+#define WNI_CFG_PROBE_REQ_ADDNP2PIE_FLAG    241
+#define WNI_CFG_PROBE_REQ_ADDNP2PIE_DATA    242
+#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG    243
+#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA    244
+#define WNI_CFG_WPS_ENABLE    245
+#define WNI_CFG_WPS_STATE    246
+#define WNI_CFG_WPS_PROBE_REQ_FLAG    247
+#define WNI_CFG_WPS_VERSION    248
+#define WNI_CFG_WPS_REQUEST_TYPE    249
+#define WNI_CFG_WPS_CFG_METHOD    250
+#define WNI_CFG_WPS_UUID    251
+#define WNI_CFG_WPS_PRIMARY_DEVICE_CATEGORY    252
+#define WNI_CFG_WPS_PIMARY_DEVICE_OUI    253
+#define WNI_CFG_WPS_DEVICE_SUB_CATEGORY    254
+#define WNI_CFG_WPS_ASSOCIATION_STATE    255
+#define WNI_CFG_WPS_CONFIGURATION_ERROR    256
+#define WNI_CFG_WPS_DEVICE_PASSWORD_ID    257
+#define WNI_CFG_WPS_ASSOC_METHOD    258
+#define WNI_CFG_LOW_GAIN_OVERRIDE    259
+#define WNI_CFG_ENABLE_PHY_AGC_LISTEN_MODE    260
+#define WNI_CFG_RPE_POLLING_THRESHOLD    261
+#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG    262
+#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG    263
+#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG    264
+#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG    265
+#define WNI_CFG_NO_OF_ONCHIP_REORDER_SESSIONS    266
+#define WNI_CFG_SINGLE_TID_RC    267
+#define WNI_CFG_RRM_ENABLED    268
+#define WNI_CFG_RRM_OPERATING_CHAN_MAX    269
+#define WNI_CFG_RRM_NON_OPERATING_CHAN_MAX    270
+#define WNI_CFG_TX_PWR_CTRL_ENABLE    271
+#define WNI_CFG_MCAST_BCAST_FILTER_SETTING    272
+#define WNI_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK    273
+#define WNI_CFG_DYNAMIC_PS_POLL_VALUE    274
+#define WNI_CFG_PS_NULLDATA_AP_RESP_TIMEOUT    275
+#define WNI_CFG_TELE_BCN_WAKEUP_EN    276
+#define WNI_CFG_TELE_BCN_TRANS_LI    277
+#define WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS    278
+#define WNI_CFG_TELE_BCN_MAX_LI    279
+#define WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS    280
+#define WNI_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS    281
+#define WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD    282
+#define WNI_CFG_ASSOC_STA_LIMIT    283
+#define WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL    284
+#define WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL    285
+#define WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND    286
+#define WNI_CFG_AP_DATA_AVAIL_POLL_PERIOD    287
+#define WNI_CFG_ENABLE_CLOSE_LOOP    288
+#define WNI_CFG_ENABLE_LTE_COEX    289
+#define WNI_CFG_AP_KEEP_ALIVE_TIMEOUT    290
+#define WNI_CFG_GO_KEEP_ALIVE_TIMEOUT    291
+#define WNI_CFG_ENABLE_MC_ADDR_LIST    292
+#define WNI_CFG_ENABLE_UC_FILTER    293
+#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION    294
+#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED    295
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP    296
+#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT    297
 
 /*
  * String parameter lengths 
@@ -2002,6 +2003,14 @@
 #define WNI_CFG_ADDBA_REQ_DECLINE_APMAX    255
 #define WNI_CFG_ADDBA_REQ_DECLINE_APDEF    0
 
+#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_STAMIN    0
+#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_STAMAX    1
+#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_STADEF    0
+
+#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_APMIN    0
+#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_APMAX    1
+#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_APDEF    0
+
 #define WNI_CFG_MAX_MEDIUM_TIME_STAMIN    0
 #define WNI_CFG_MAX_MEDIUM_TIME_STAMAX    65535
 #define WNI_CFG_MAX_MEDIUM_TIME_STADEF    2048
@@ -2477,10 +2486,10 @@
 #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_PARAM_MAX_NUM         298
+#define CFG_AP_IBUF_MAX_SIZE      237
 #define CFG_AP_SBUF_MAX_SIZE      3422
-#define CFG_STA_IBUF_MAX_SIZE     231
+#define CFG_STA_IBUF_MAX_SIZE     232
 #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 571d559..4d1e31a 100644
--- a/CORE/MAC/inc/wniCfgSta.h
+++ b/CORE/MAC/inc/wniCfgSta.h
@@ -284,75 +284,76 @@
 #define WNI_CFG_MAX_BA_SESSIONS    225
 #define WNI_CFG_BA_AUTO_SETUP    226
 #define WNI_CFG_ADDBA_REQ_DECLINE    227
-#define WNI_CFG_BG_SCAN_CHANNEL_LIST    228
-#define WNI_CFG_MAX_MEDIUM_TIME    229
-#define WNI_CFG_MAX_MPDUS_IN_AMPDU    230
-#define WNI_CFG_IBSS_AUTO_BSSID    231
-#define WNI_CFG_PROBE_REQ_ADDNIE_FLAG    232
-#define WNI_CFG_PROBE_REQ_ADDNIE_DATA    233
-#define WNI_CFG_PROBE_RSP_ADDNIE_FLAG    234
-#define WNI_CFG_PROBE_RSP_ADDNIE_DATA1    235
-#define WNI_CFG_PROBE_RSP_ADDNIE_DATA2    236
-#define WNI_CFG_PROBE_RSP_ADDNIE_DATA3    237
-#define WNI_CFG_ASSOC_RSP_ADDNIE_FLAG    238
-#define WNI_CFG_ASSOC_RSP_ADDNIE_DATA    239
-#define WNI_CFG_PROBE_REQ_ADDNP2PIE_FLAG    240
-#define WNI_CFG_PROBE_REQ_ADDNP2PIE_DATA    241
-#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG    242
-#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA    243
-#define WNI_CFG_WPS_ENABLE    244
-#define WNI_CFG_WPS_STATE    245
-#define WNI_CFG_WPS_PROBE_REQ_FLAG    246
-#define WNI_CFG_WPS_VERSION    247
-#define WNI_CFG_WPS_REQUEST_TYPE    248
-#define WNI_CFG_WPS_CFG_METHOD    249
-#define WNI_CFG_WPS_UUID    250
-#define WNI_CFG_WPS_PRIMARY_DEVICE_CATEGORY    251
-#define WNI_CFG_WPS_PIMARY_DEVICE_OUI    252
-#define WNI_CFG_WPS_DEVICE_SUB_CATEGORY    253
-#define WNI_CFG_WPS_ASSOCIATION_STATE    254
-#define WNI_CFG_WPS_CONFIGURATION_ERROR    255
-#define WNI_CFG_WPS_DEVICE_PASSWORD_ID    256
-#define WNI_CFG_WPS_ASSOC_METHOD    257
-#define WNI_CFG_LOW_GAIN_OVERRIDE    258
-#define WNI_CFG_ENABLE_PHY_AGC_LISTEN_MODE    259
-#define WNI_CFG_RPE_POLLING_THRESHOLD    260
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG    261
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG    262
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG    263
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG    264
-#define WNI_CFG_NO_OF_ONCHIP_REORDER_SESSIONS    265
-#define WNI_CFG_SINGLE_TID_RC    266
-#define WNI_CFG_RRM_ENABLED    267
-#define WNI_CFG_RRM_OPERATING_CHAN_MAX    268
-#define WNI_CFG_RRM_NON_OPERATING_CHAN_MAX    269
-#define WNI_CFG_TX_PWR_CTRL_ENABLE    270
-#define WNI_CFG_MCAST_BCAST_FILTER_SETTING    271
-#define WNI_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK    272
-#define WNI_CFG_DYNAMIC_PS_POLL_VALUE    273
-#define WNI_CFG_PS_NULLDATA_AP_RESP_TIMEOUT    274
-#define WNI_CFG_TELE_BCN_WAKEUP_EN    275
-#define WNI_CFG_TELE_BCN_TRANS_LI    276
-#define WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS    277
-#define WNI_CFG_TELE_BCN_MAX_LI    278
-#define WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS    279
-#define WNI_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS    280
-#define WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD    281
-#define WNI_CFG_ASSOC_STA_LIMIT    282
-#define WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL    283
-#define WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL    284
-#define WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND    285
-#define WNI_CFG_AP_DATA_AVAIL_POLL_PERIOD    286
-#define WNI_CFG_ENABLE_CLOSE_LOOP    287
-#define WNI_CFG_ENABLE_LTE_COEX    288
-#define WNI_CFG_AP_KEEP_ALIVE_TIMEOUT    289
-#define WNI_CFG_GO_KEEP_ALIVE_TIMEOUT    290
-#define WNI_CFG_ENABLE_MC_ADDR_LIST    291
-#define WNI_CFG_ENABLE_UC_FILTER    292
-#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
+#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC    228
+#define WNI_CFG_BG_SCAN_CHANNEL_LIST    229
+#define WNI_CFG_MAX_MEDIUM_TIME    230
+#define WNI_CFG_MAX_MPDUS_IN_AMPDU    231
+#define WNI_CFG_IBSS_AUTO_BSSID    232
+#define WNI_CFG_PROBE_REQ_ADDNIE_FLAG    233
+#define WNI_CFG_PROBE_REQ_ADDNIE_DATA    234
+#define WNI_CFG_PROBE_RSP_ADDNIE_FLAG    235
+#define WNI_CFG_PROBE_RSP_ADDNIE_DATA1    236
+#define WNI_CFG_PROBE_RSP_ADDNIE_DATA2    237
+#define WNI_CFG_PROBE_RSP_ADDNIE_DATA3    238
+#define WNI_CFG_ASSOC_RSP_ADDNIE_FLAG    239
+#define WNI_CFG_ASSOC_RSP_ADDNIE_DATA    240
+#define WNI_CFG_PROBE_REQ_ADDNP2PIE_FLAG    241
+#define WNI_CFG_PROBE_REQ_ADDNP2PIE_DATA    242
+#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG    243
+#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA    244
+#define WNI_CFG_WPS_ENABLE    245
+#define WNI_CFG_WPS_STATE    246
+#define WNI_CFG_WPS_PROBE_REQ_FLAG    247
+#define WNI_CFG_WPS_VERSION    248
+#define WNI_CFG_WPS_REQUEST_TYPE    249
+#define WNI_CFG_WPS_CFG_METHOD    250
+#define WNI_CFG_WPS_UUID    251
+#define WNI_CFG_WPS_PRIMARY_DEVICE_CATEGORY    252
+#define WNI_CFG_WPS_PIMARY_DEVICE_OUI    253
+#define WNI_CFG_WPS_DEVICE_SUB_CATEGORY    254
+#define WNI_CFG_WPS_ASSOCIATION_STATE    255
+#define WNI_CFG_WPS_CONFIGURATION_ERROR    256
+#define WNI_CFG_WPS_DEVICE_PASSWORD_ID    257
+#define WNI_CFG_WPS_ASSOC_METHOD    258
+#define WNI_CFG_LOW_GAIN_OVERRIDE    259
+#define WNI_CFG_ENABLE_PHY_AGC_LISTEN_MODE    260
+#define WNI_CFG_RPE_POLLING_THRESHOLD    261
+#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG    262
+#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG    263
+#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG    264
+#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG    265
+#define WNI_CFG_NO_OF_ONCHIP_REORDER_SESSIONS    266
+#define WNI_CFG_SINGLE_TID_RC    267
+#define WNI_CFG_RRM_ENABLED    268
+#define WNI_CFG_RRM_OPERATING_CHAN_MAX    269
+#define WNI_CFG_RRM_NON_OPERATING_CHAN_MAX    270
+#define WNI_CFG_TX_PWR_CTRL_ENABLE    271
+#define WNI_CFG_MCAST_BCAST_FILTER_SETTING    272
+#define WNI_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK    273
+#define WNI_CFG_DYNAMIC_PS_POLL_VALUE    274
+#define WNI_CFG_PS_NULLDATA_AP_RESP_TIMEOUT    275
+#define WNI_CFG_TELE_BCN_WAKEUP_EN    276
+#define WNI_CFG_TELE_BCN_TRANS_LI    277
+#define WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS    278
+#define WNI_CFG_TELE_BCN_MAX_LI    279
+#define WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS    280
+#define WNI_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS    281
+#define WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD    282
+#define WNI_CFG_ASSOC_STA_LIMIT    283
+#define WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL    284
+#define WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL    285
+#define WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND    286
+#define WNI_CFG_AP_DATA_AVAIL_POLL_PERIOD    287
+#define WNI_CFG_ENABLE_CLOSE_LOOP    288
+#define WNI_CFG_ENABLE_LTE_COEX    289
+#define WNI_CFG_AP_KEEP_ALIVE_TIMEOUT    290
+#define WNI_CFG_GO_KEEP_ALIVE_TIMEOUT    291
+#define WNI_CFG_ENABLE_MC_ADDR_LIST    292
+#define WNI_CFG_ENABLE_UC_FILTER    293
+#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION    294
+#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED    295
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP    296
+#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT    297
 
 /*
  * String parameter lengths 
@@ -1367,6 +1368,10 @@
 #define WNI_CFG_ADDBA_REQ_DECLINE_STAMAX    255
 #define WNI_CFG_ADDBA_REQ_DECLINE_STADEF    0
 
+#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_STAMIN    0
+#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_STAMAX    1
+#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_STADEF    0
+
 #define WNI_CFG_MAX_MEDIUM_TIME_STAMIN    0
 #define WNI_CFG_MAX_MEDIUM_TIME_STAMAX    65535
 #define WNI_CFG_MAX_MEDIUM_TIME_STADEF    2048
@@ -1610,8 +1615,8 @@
 #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_PARAM_MAX_NUM        298
+#define CFG_STA_IBUF_MAX_SIZE    232
 #define CFG_STA_SBUF_MAX_SIZE    3388
 #define CFG_SEM_MAX_NUM          19
 
diff --git a/CORE/MAC/src/cfg/cfgUtil/cfg.txt b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
index 463bdd0..7240b7d 100644
--- a/CORE/MAC/src/cfg/cfgUtil/cfg.txt
+++ b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
@@ -3460,6 +3460,19 @@
 0    0xff    0
 
 *
+* Delete all Rx BA sessions in 2.4 GHz
+* when BTC requests to disable agg.
+*
+WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC I    4    7
+V    RW    NP
+LIM
+0    1    0
+V    RW    NP
+LIM
+0    1    0
+
+
+*
 * Valid Channel List
 *
 
diff --git a/CORE/MAC/src/pe/include/limGlobal.h b/CORE/MAC/src/pe/include/limGlobal.h
index ea74fda..c8b8eb0 100644
--- a/CORE/MAC/src/pe/include/limGlobal.h
+++ b/CORE/MAC/src/pe/include/limGlobal.h
@@ -113,7 +113,7 @@
     eLIM_BT_AMP_AP_ROLE,
     eLIM_P2P_DEVICE_ROLE,
     eLIM_P2P_DEVICE_GO,
-    eLIM_P2P_DEVICE_CLINET
+    eLIM_P2P_DEVICE_CLIENT
 } tLimSystemRole;
 
 /**
diff --git a/CORE/MAC/src/pe/lim/limProcessActionFrame.c b/CORE/MAC/src/pe/lim/limProcessActionFrame.c
index f7a25a4..29dbf7b 100644
--- a/CORE/MAC/src/pe/lim/limProcessActionFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessActionFrame.c
@@ -1198,6 +1198,7 @@
     pHdr = WDA_GET_RX_MAC_HEADER( pRxPacketInfo );
     pBody = WDA_GET_RX_MPDU_DATA( pRxPacketInfo );
     frameLen = WDA_GET_RX_PAYLOAD_LEN( pRxPacketInfo );
+    val = 0;
 
     // Unpack the received frame
     nStatus = dot11fUnpackAddBAReq( pMac, pBody, frameLen, &frmAddBAReq );
@@ -1230,7 +1231,7 @@
     {
         limLog( pMac, LOGE,
             FL( "STA context not found - ignoring ADDBA from " ));
-        limPrintMacAddr( pMac, pHdr->sa, LOGW );
+        limPrintMacAddr( pMac, pHdr->sa, LOGE );
 
         // FIXME - Should we do this?
         status = eSIR_MAC_INABLITY_TO_CONFIRM_ASSOC_STATUS;
@@ -1250,6 +1251,23 @@
     }
 #endif //WLAN_SOFTAP_VSTA_FEATURE
 
+    if (wlan_cfgGetInt(pMac, WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC, &val) !=
+                    eSIR_SUCCESS)
+    {
+        limLog(pMac, LOGE,
+               FL("Unable to get WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC"));
+        val = 0;
+    }
+    if ((SIR_BAND_2_4_GHZ == limGetRFBand(psessionEntry->currentOperChannel)) &&
+                    val)
+    {
+        limLog( pMac, LOGW,
+            FL( "BTC disabled aggregation - ignoring ADDBA from " ));
+        limPrintMacAddr( pMac, pHdr->sa, LOGW );
+
+        status = eSIR_MAC_REQ_DECLINED_STATUS;
+        goto returnAfterError;
+    }
 
     // Now, validate the ADDBA Req
     if( eSIR_MAC_SUCCESS_STATUS !=
@@ -1306,7 +1324,7 @@
   {
       frmAddBAReq.AddBAParameterSet.bufferSize = val;
   }
-  limLog( pMac, LOGE, FL( "ADDBAREQ NUMBUFF %d" ),
+  limLog( pMac, LOG1, FL( "ADDBAREQ NUMBUFF %d" ),
                         frmAddBAReq.AddBAParameterSet.bufferSize);
 
   if( eSIR_SUCCESS != limPostMsgAddBAReq( pMac,
diff --git a/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c b/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c
index e607920..6ae8ee5 100644
--- a/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c
+++ b/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c
@@ -610,6 +610,28 @@
         pMac->lim.gLimAssocStaLimit = (tANI_U16)val1;
         break;
 
+    case WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC:
+        if (wlan_cfgGetInt
+           (pMac, WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC, &val1) !=
+                 eSIR_SUCCESS)
+        {
+            limLog(pMac, LOGE,
+                 FL( "Unable to get WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC"));
+            break;
+        }
+        if (val1)
+        {
+            limLog(pMac, LOGW,
+                FL("BTC requested to disable all RX BA sessions"));
+            limDelAllBASessionsBtc(pMac);
+        }
+        else
+        {
+            limLog(pMac, LOGW,
+                FL("Resetting the WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC"));
+        }
+        break;
+
     default:
             break;
     }
diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
index e2cd741..cf7b4b0 100644
--- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
+++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
@@ -1464,7 +1464,7 @@
             limProcessAddBaInd(pMac, limMsg);
             break;
         case SIR_LIM_DEL_BA_ALL_IND:
-            limDelAllBASessions(pMac);  // refer notes and change
+            limDelAllBASessions(pMac);
             break;
         case SIR_LIM_DEL_BA_IND:
             limProcessMlmHalBADeleteInd( pMac, limMsg );
diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
index f3d8666..ae2c512 100644
--- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
@@ -2142,7 +2142,7 @@
      *  is lost upon disassociation and reassociation.
      */
 
-    limDelAllBASessions(pMac);
+    limDeleteBASessions(pMac, psessionEntry, BA_BOTH_DIRECTIONS);
 
     pMlmReassocReq->listenInterval = (tANI_U16) val;
 
diff --git a/CORE/MAC/src/pe/lim/limUtils.c b/CORE/MAC/src/pe/lim/limUtils.c
index bcdea00..49decb2 100644
--- a/CORE/MAC/src/pe/lim/limUtils.c
+++ b/CORE/MAC/src/pe/lim/limUtils.c
@@ -5608,60 +5608,135 @@
 
 
 /** -------------------------------------------------------------
-\fn limDelAllBASessions
-\brief Deletes all the exisitng BA sessions.
-\        Note : This API is provided for Mac OSx only. The reason for this is that Mac OSx may not
-\                  restart after CFG update.
+\fn      limDeleteBASessions
+\brief   Deletes all the exisitng BA sessions for given session
+         and BA direction.
 \param   tpAniSirGlobal pMac
-\return None
+\param   tpPESession pSessionEntry
+\param   tANI_U32 baDirection
+\return  None
 -------------------------------------------------------------*/
 
 void 
-limDelAllBASessions(tpAniSirGlobal pMac)
+limDeleteBASessions(tpAniSirGlobal pMac, tpPESession pSessionEntry,
+                    tANI_U32 baDirection)
 {
     tANI_U32 i;
     tANI_U8 tid;
     tpDphHashNode pSta;
 
-    tpPESession psessionEntry =  &pMac->lim.gpSession[0]; //TBD-RAJESH HOW TO GET sessionEntry?????
-    for(tid = 0; tid < STACFG_MAX_TC; tid++)
+    if (NULL == pSessionEntry)
     {
-        if((eLIM_AP_ROLE == psessionEntry->limSystemRole) ||(psessionEntry->limSystemRole == eLIM_BT_AMP_AP_ROLE)||
-              (eLIM_STA_IN_IBSS_ROLE == psessionEntry->limSystemRole))
+        limLog(pMac, LOGE, FL("Session does not exist"));
+    }
+    else
+    {
+        for(tid = 0; tid < STACFG_MAX_TC; tid++)
         {
-            for(i = 0; i < pMac->lim.maxStation; i++)
+            if ((eLIM_AP_ROLE == pSessionEntry->limSystemRole) ||
+                (pSessionEntry->limSystemRole == eLIM_BT_AMP_AP_ROLE) ||
+                (eLIM_STA_IN_IBSS_ROLE == pSessionEntry->limSystemRole) ||
+                (pSessionEntry->limSystemRole == eLIM_P2P_DEVICE_GO))
             {
-                pSta = psessionEntry->dph.dphHashTable.pDphNodeArray + i;
-                if (pSta && pSta->added)
+                for (i = 0; i < pMac->lim.maxStation; i++)
                 {
-                    if(eBA_ENABLE == pSta->tcCfg[tid].fUseBATx)
+                    pSta = pSessionEntry->dph.dphHashTable.pDphNodeArray + i;
+                    if (pSta && pSta->added)
                     {
-                        limPostMlmDelBAReq(pMac, pSta, eBA_INITIATOR, tid, eSIR_MAC_UNSPEC_FAILURE_REASON,psessionEntry);
-                    }
-                    else if(eBA_ENABLE == pSta->tcCfg[tid].fUseBARx)
-                    {
-                        limPostMlmDelBAReq(pMac, pSta, eBA_RECIPIENT, tid, eSIR_MAC_UNSPEC_FAILURE_REASON,psessionEntry);
+                        if ((eBA_ENABLE == pSta->tcCfg[tid].fUseBATx) &&
+                                       (baDirection & BA_INITIATOR))
+                        {
+                            limPostMlmDelBAReq(pMac, pSta, eBA_INITIATOR, tid,
+                                               eSIR_MAC_UNSPEC_FAILURE_REASON,
+                                               pSessionEntry);
+                        }
+                        if ((eBA_ENABLE == pSta->tcCfg[tid].fUseBARx) &&
+                                        (baDirection & BA_RECIPIENT))
+                        {
+                            limPostMlmDelBAReq(pMac, pSta, eBA_RECIPIENT, tid,
+                                               eSIR_MAC_UNSPEC_FAILURE_REASON,
+                                               pSessionEntry);
+                        }
                     }
                 }
             }
-        }
-        else if((eLIM_STA_ROLE == psessionEntry->limSystemRole)||(eLIM_BT_AMP_STA_ROLE == psessionEntry->limSystemRole))
-        {
-            pSta = dphGetHashEntry(pMac, DPH_STA_HASH_INDEX_PEER, &psessionEntry->dph.dphHashTable);
-            if (pSta && pSta->added)
+            else if ((eLIM_STA_ROLE == pSessionEntry->limSystemRole) ||
+                     (eLIM_BT_AMP_STA_ROLE == pSessionEntry->limSystemRole) ||
+                     (eLIM_P2P_DEVICE_ROLE == pSessionEntry->limSystemRole))
             {
-                if(eBA_ENABLE == pSta->tcCfg[tid].fUseBATx)
+                pSta = dphGetHashEntry(pMac, DPH_STA_HASH_INDEX_PEER,
+                                       &pSessionEntry->dph.dphHashTable);
+                if (pSta && pSta->added)
                 {
-                    limPostMlmDelBAReq(pMac, pSta, eBA_INITIATOR, tid, eSIR_MAC_UNSPEC_FAILURE_REASON,psessionEntry);
-                }
-                if(eBA_ENABLE == pSta->tcCfg[tid].fUseBARx)
-                {
-                    limPostMlmDelBAReq(pMac, pSta, eBA_RECIPIENT, tid, eSIR_MAC_UNSPEC_FAILURE_REASON,psessionEntry);
+                    if ((eBA_ENABLE == pSta->tcCfg[tid].fUseBATx) &&
+                                    (baDirection & BA_INITIATOR))
+                    {
+                        limPostMlmDelBAReq(pMac, pSta, eBA_INITIATOR, tid,
+                                           eSIR_MAC_UNSPEC_FAILURE_REASON,
+                                           pSessionEntry);
+                    }
+                    if ((eBA_ENABLE == pSta->tcCfg[tid].fUseBARx) &&
+                                    (baDirection & BA_RECIPIENT))
+                    {
+                        limPostMlmDelBAReq(pMac, pSta, eBA_RECIPIENT, tid,
+                                           eSIR_MAC_UNSPEC_FAILURE_REASON,
+                                           pSessionEntry);
+                    }
                 }
             }
         }
     }
 }
+
+/** -------------------------------------------------------------
+\fn     limDelAllBASessions
+\brief  Deletes all the exisitng BA sessions.
+\param  tpAniSirGlobal pMac
+\return None
+-------------------------------------------------------------*/
+
+void limDelAllBASessions(tpAniSirGlobal pMac)
+{
+    tANI_U32 i;
+    tpPESession pSessionEntry;
+
+    for (i = 0; i < pMac->lim.maxBssId; i++)
+    {
+        pSessionEntry = peFindSessionBySessionId(pMac, i);
+        if (pSessionEntry)
+        {
+            limDeleteBASessions(pMac, pSessionEntry, BA_BOTH_DIRECTIONS);
+        }
+    }
+}
+
+/** -------------------------------------------------------------
+\fn     limDelAllBASessionsBtc
+\brief  Deletes all the exisitng BA receipent sessions in 2.4GHz
+        band.
+\param  tpAniSirGlobal pMac
+\return None
+-------------------------------------------------------------*/
+
+void limDelAllBASessionsBtc(tpAniSirGlobal pMac)
+{
+    tANI_U32 i;
+    tpPESession pSessionEntry;
+
+    for (i = 0; i < pMac->lim.maxBssId; i++)
+    {
+        pSessionEntry = peFindSessionBySessionId(pMac, i);
+        if (pSessionEntry)
+        {
+            if (SIR_BAND_2_4_GHZ ==
+                limGetRFBand(pSessionEntry->currentOperChannel))
+            {
+                limDeleteBASessions(pMac, pSessionEntry, BA_RECIPIENT);
+            }
+        }
+    }
+}
+
 /** -------------------------------------------------------------
 \fn limProcessDelTsInd
 \brief handles the DeleteTS indication coming from HAL or generated by PE itself in some error cases.
diff --git a/CORE/MAC/src/pe/lim/limUtils.h b/CORE/MAC/src/pe/lim/limUtils.h
index 3a1f9b6..d4a1781 100644
--- a/CORE/MAC/src/pe/lim/limUtils.h
+++ b/CORE/MAC/src/pe/lim/limUtils.h
@@ -348,6 +348,8 @@
 
 void limDeleteStaContext(tpAniSirGlobal pMac, tpSirMsgQ limMsg);
 void limProcessAddBaInd(tpAniSirGlobal pMac, tpSirMsgQ limMsg);
+void limDeleteBASessions(tpAniSirGlobal pMac, tpPESession pSessionEntry, tANI_U32 baDirection);
+void limDelAllBASessionsBtc(tpAniSirGlobal pMac);
 void limDelAllBASessions(tpAniSirGlobal pMac);
 void limDeleteDialogueTokenList(tpAniSirGlobal pMac);
 tSirRetStatus limSearchAndDeleteDialogueToken(tpAniSirGlobal pMac, tANI_U8 token, tANI_U16 assocId, tANI_U16 tid);
diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h
index 844323d..4b8b869 100644
--- a/CORE/SME/inc/csrApi.h
+++ b/CORE/SME/inc/csrApi.h
@@ -1019,6 +1019,7 @@
 
     tANI_U32  nActiveMinChnTimeBtc;     //in units of milliseconds
     tANI_U32  nActiveMaxChnTimeBtc;     //in units of milliseconds
+    tANI_U32  disableAggWithBtc;
 #ifdef WLAN_AP_STA_CONCURRENCY
     tANI_U32  nPassiveMinChnTimeConc;    //in units of milliseconds
     tANI_U32  nPassiveMaxChnTimeConc;    //in units of milliseconds
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index 82dc258..55592ae 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -574,6 +574,7 @@
 
     tANI_U32  nActiveMinChnTimeBtc;     //in units of milliseconds
     tANI_U32  nActiveMaxChnTimeBtc;     //in units of milliseconds
+    tANI_U8   disableAggWithBtc;
 #ifdef WLAN_AP_STA_CONCURRENCY
     tANI_U32  nPassiveMinChnTimeConc;    //in units of milliseconds
     tANI_U32  nPassiveMaxChnTimeConc;    //in units of milliseconds
diff --git a/CORE/SME/src/btc/btcApi.c b/CORE/SME/src/btc/btcApi.c
index 3359eb4..e7758c4 100644
--- a/CORE/SME/src/btc/btcApi.c
+++ b/CORE/SME/src/btc/btcApi.c
@@ -1942,6 +1942,28 @@
          smsLog(pMac, LOGW, "Coex indication in %s(), type - SIR_COEX_IND_TYPE_SCAN_NOT_COMPROMISED",
              __func__);
      }
+     else if (pSmeCoexInd->coexIndType == SIR_COEX_IND_TYPE_DISABLE_AGGREGATION_IN_2p4)
+     {
+         if (pMac->roam.configParam.disableAggWithBtc)
+         {
+             ccmCfgSetInt(pMac, WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC, 1,
+                             NULL, eANI_BOOLEAN_FALSE);
+             smsLog(pMac, LOGW,
+             "Coex indication in %s(), type - SIR_COEX_IND_TYPE_DISABLE_AGGREGATION_IN_2p4",
+                 __func__);
+         }
+     }
+     else if (pSmeCoexInd->coexIndType == SIR_COEX_IND_TYPE_ENABLE_AGGREGATION_IN_2p4)
+     {
+         if (pMac->roam.configParam.disableAggWithBtc)
+         {
+             ccmCfgSetInt(pMac, WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC, 0,
+                             NULL, eANI_BOOLEAN_FALSE);
+             smsLog(pMac, LOGW,
+             "Coex indication in %s(), type - SIR_COEX_IND_TYPE_ENABLE_AGGREGATION_IN_2p4",
+                 __func__);
+         }
+     }
      // unknown indication type
      else
      {
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 50c14d7..f39780f 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -947,6 +947,7 @@
     pMac->roam.configParam.nPassiveMinChnTime = CSR_PASSIVE_MIN_CHANNEL_TIME;
     pMac->roam.configParam.nActiveMaxChnTimeBtc = CSR_ACTIVE_MAX_CHANNEL_TIME_BTC;
     pMac->roam.configParam.nActiveMinChnTimeBtc = CSR_ACTIVE_MIN_CHANNEL_TIME_BTC;
+    pMac->roam.configParam.disableAggWithBtc = eANI_BOOLEAN_TRUE;
 #ifdef WLAN_AP_STA_CONCURRENCY
     pMac->roam.configParam.nActiveMaxChnTimeConc = CSR_ACTIVE_MAX_CHANNEL_TIME_CONC;
     pMac->roam.configParam.nActiveMinChnTimeConc = CSR_ACTIVE_MIN_CHANNEL_TIME_CONC;
@@ -1404,6 +1405,7 @@
         pMac->roam.configParam.bandCapability = pParam->bandCapability;
         pMac->roam.configParam.cbChoice = pParam->cbChoice;
         pMac->roam.configParam.bgScanInterval = pParam->bgScanInterval;
+        pMac->roam.configParam.disableAggWithBtc = pParam->disableAggWithBtc;
         //if HDD passed down non zero values then only update,
         //otherwise keep using the defaults
         if (pParam->nActiveMaxChnTime)
@@ -1637,6 +1639,9 @@
         pParam->nActiveMinChnTime = pMac->roam.configParam.nActiveMinChnTime;
         pParam->nPassiveMaxChnTime = pMac->roam.configParam.nPassiveMaxChnTime;
         pParam->nPassiveMinChnTime = pMac->roam.configParam.nPassiveMinChnTime;
+        pParam->nActiveMaxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc;
+        pParam->nActiveMinChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc;
+        pParam->disableAggWithBtc = pMac->roam.configParam.disableAggWithBtc;
 #ifdef WLAN_AP_STA_CONCURRENCY
         pParam->nActiveMaxChnTimeConc = pMac->roam.configParam.nActiveMaxChnTimeConc;
         pParam->nActiveMinChnTimeConc = pMac->roam.configParam.nActiveMinChnTimeConc;
diff --git a/firmware_bin/WCNSS_cfg.dat b/firmware_bin/WCNSS_cfg.dat
index 297b3cd..a5ee46c 100644
--- a/firmware_bin/WCNSS_cfg.dat
+++ b/firmware_bin/WCNSS_cfg.dat
Binary files differ