Merge "qca-wifi: Resolving parse error in wmi_stats_event"
diff --git a/configs/wlan_cfg/ap_wlan_cfg.config b/configs/wlan_cfg/ap_wlan_cfg.config
index dd0ffb8..5f75ae4 100644
--- a/configs/wlan_cfg/ap_wlan_cfg.config
+++ b/configs/wlan_cfg/ap_wlan_cfg.config
@@ -25,7 +25,7 @@
 ifeq ($(strip ${CONFIG_WIFI_EMULATION_WIFI_3_0}),1)
 EXTRA_CFLAGS += -DWLAN_CFG_NUM_TX_DESC=0x2000
 else
-EXTRA_CFLAGS += -DWLAN_CFG_NUM_TX_DESC=0x320000
+EXTRA_CFLAGS += -DWLAN_CFG_NUM_TX_DESC=0x8000
 endif
 
 ifeq ($(strip ${NO_RX_PKT_HDR_TLV}),1)
diff --git a/dp/wifi3.0/dp_tx_capture.c b/dp/wifi3.0/dp_tx_capture.c
index e54de49..82fae44 100644
--- a/dp/wifi3.0/dp_tx_capture.c
+++ b/dp/wifi3.0/dp_tx_capture.c
@@ -2294,6 +2294,9 @@
 	ppdu_desc = (struct cdp_tx_completion_ppdu *)
 			qdf_nbuf_data(nbuf_ppdu_desc);
 
+	if (ppdu_desc->mprot_type)
+		dp_send_dummy_rts_cts_frame(pdev, ppdu_desc);
+
 	type = (ppdu_desc->frame_ctrl &
 		IEEE80211_FC0_TYPE_MASK) >>
 		IEEE80211_FC0_TYPE_SHIFT;
diff --git a/target_if/cfr/src/target_if_cfr_6018.c b/target_if/cfr/src/target_if_cfr_6018.c
index afea3aa..93c0378 100644
--- a/target_if/cfr/src/target_if_cfr_6018.c
+++ b/target_if/cfr/src/target_if_cfr_6018.c
@@ -988,7 +988,7 @@
 
 	psoc = wlan_pdev_get_psoc(pdev);
 	dbr_tx_ops = &psoc->soc_cb.tx_ops.dbr_tx_ops;
-	if (dbr_tx_ops->direct_buf_rx_module_register) {
+	if (dbr_tx_ops->direct_buf_rx_module_unregister) {
 		return dbr_tx_ops->direct_buf_rx_module_unregister
 			(pdev, DBR_MODULE_CFR);
 	}
diff --git a/target_if/cfr/src/target_if_cfr_8074v2.c b/target_if/cfr/src/target_if_cfr_8074v2.c
index 2c3eb3f..ee7b2c9 100644
--- a/target_if/cfr/src/target_if_cfr_8074v2.c
+++ b/target_if/cfr/src/target_if_cfr_8074v2.c
@@ -607,7 +607,7 @@
 
 	psoc = wlan_pdev_get_psoc(pdev);
 	dbr_tx_ops = &psoc->soc_cb.tx_ops.dbr_tx_ops;
-	if (dbr_tx_ops->direct_buf_rx_module_register) {
+	if (dbr_tx_ops->direct_buf_rx_module_unregister) {
 		return dbr_tx_ops->direct_buf_rx_module_unregister
 			(pdev, DBR_MODULE_CFR);
 	}
diff --git a/umac/mlme/vdev_mgr/core/src/vdev_mlme_sm_actions.c b/umac/mlme/vdev_mgr/core/src/vdev_mlme_sm_actions.c
index a9440d9..fe04d5d 100644
--- a/umac/mlme/vdev_mgr/core/src/vdev_mlme_sm_actions.c
+++ b/umac/mlme/vdev_mgr/core/src/vdev_mlme_sm_actions.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -293,6 +293,7 @@
 			     &pdev_mlme->restart_send_vdev_bmap,
 			     sizeof(pdev_mlme->pdev_restart.restart_bmap));
 
+		qdf_atomic_init(&pdev_mlme->multivdev_restart_wait_cnt);
 		if (!wlan_pdev_nif_feat_cap_get(pdev,
 						WLAN_PDEV_F_MULTIVDEV_RESTART))
 			wlan_objmgr_pdev_iterate_obj_list
@@ -316,6 +317,7 @@
 	}
 }
 
+#define MULTIVDEV_RESTART_MAX_RETRY_CNT 100
 static os_timer_func(mlme_restart_req_timeout)
 {
 	unsigned long restart_pend_vdev_bmap[2];
@@ -331,6 +333,13 @@
 		wlan_pdev_chan_change_pending_vdevs(pdev,
 						    restart_pend_vdev_bmap,
 						    WLAN_MLME_SB_ID);
+		qdf_atomic_inc(&pdev_mlme->multivdev_restart_wait_cnt);
+		if (qdf_atomic_read(&pdev_mlme->multivdev_restart_wait_cnt) > MULTIVDEV_RESTART_MAX_RETRY_CNT) {
+			mlme_err("Multivdev Restart_pend_vdev_bmap 0x%lx 0x%lx",
+				 pdev_mlme->restart_pend_vdev_bmap[1],
+				 pdev_mlme->restart_pend_vdev_bmap[0]);
+			QDF_BUG(0);
+		}
 
 		/* If all the pending vdevs goes down, this would fail,
 		 * otherwise start timer
@@ -566,6 +575,7 @@
 
 void mlme_restart_timer_init(struct pdev_mlme_obj *pdev_mlme)
 {
+	qdf_atomic_init(&pdev_mlme->multivdev_restart_wait_cnt);
 	qdf_timer_init(NULL, &pdev_mlme->restart_req_timer,
 		       mlme_restart_req_timeout, (void *)(pdev_mlme),
 		       QDF_TIMER_TYPE_WAKE_APPS);