Revert "Revert "qcacld-3.0: Dump Tx/Rx packets during connection""

This reverts Change-Id I2aec7253511d2ca7b08ca77d858a46f9c01d4e9d

Adding support for dumping 32 tx/rx packets during connection
by reverting above change as "exceeding skb buffer size and
leading to crash" issue is resolved with this change.

Change-Id: I951355776461706bb52eeee0527819377e7b7857
CRs-Fixed: 1097280
diff --git a/core/wma/src/wma_mgmt.c b/core/wma/src/wma_mgmt.c
index d3bf3c3..317cb24 100644
--- a/core/wma/src/wma_mgmt.c
+++ b/core/wma/src/wma_mgmt.c
@@ -2508,6 +2508,11 @@
 	if (wmi_desc->nbuf)
 		qdf_nbuf_unmap_single(wma_handle->qdf_dev, wmi_desc->nbuf,
 					  QDF_DMA_TO_DEVICE);
+
+	if (wma_handle->wma_mgmt_tx_packetdump_cb)
+		wma_handle->wma_mgmt_tx_packetdump_cb(wmi_desc->nbuf,
+			QDF_STATUS_SUCCESS, wmi_desc->vdev_id, TX_MGMT_PKT);
+
 	if (wmi_desc->tx_cmpl_cb)
 		wmi_desc->tx_cmpl_cb(wma_handle->mac_context,
 					   wmi_desc->nbuf, 1);
@@ -3323,6 +3328,13 @@
 		return -EINVAL;
 	}
 
+	if ((mgt_type == IEEE80211_FC0_TYPE_MGT &&
+			mgt_subtype != IEEE80211_FC0_SUBTYPE_BEACON) &&
+			wma_handle->wma_mgmt_rx_packetdump_cb)
+		wma_handle->wma_mgmt_rx_packetdump_cb(rx_pkt->pkt_buf,
+			QDF_STATUS_SUCCESS, rx_pkt->pkt_meta.sessionId,
+			RX_MGMT_PKT);
+
 	wma_handle->mgmt_rx(wma_handle, rx_pkt);
 	return 0;
 }
@@ -3420,3 +3432,51 @@
 
 	return QDF_STATUS_SUCCESS;
 }
+
+/**
+ * wma_register_packetdump_callback() - stores tx and rx mgmt packet dump
+ *   callback handler
+ * @wma_mgmt_tx_packetdump_cb: tx mgmt packetdump cb
+ * @wma_mgmt_rx_packetdump_cb: rx mgmt packetdump cb
+ *
+ * This function is used to store tx and rx mgmt. packet dump callback
+ *
+ * Return: None
+ *
+ */
+void wma_register_packetdump_callback(
+	tp_wma_packetdump_cb wma_mgmt_tx_packetdump_cb,
+	tp_wma_packetdump_cb wma_mgmt_rx_packetdump_cb)
+{
+	tp_wma_handle wma_handle = cds_get_context(QDF_MODULE_ID_WMA);
+
+	if (!wma_handle) {
+		WMA_LOGE("wma handle is NULL");
+		return;
+	}
+
+	wma_handle->wma_mgmt_tx_packetdump_cb = wma_mgmt_tx_packetdump_cb;
+	wma_handle->wma_mgmt_rx_packetdump_cb = wma_mgmt_rx_packetdump_cb;
+}
+
+/**
+ * wma_deregister_packetdump_callback() - removes tx and rx mgmt packet dump
+ *   callback handler
+ *
+ * This function is used to remove tx and rx mgmt. packet dump callback
+ *
+ * Return: None
+ *
+ */
+void wma_deregister_packetdump_callback(void)
+{
+	tp_wma_handle wma_handle = cds_get_context(QDF_MODULE_ID_WMA);
+
+	if (!wma_handle) {
+		WMA_LOGE("wma handle is NULL");
+		return;
+	}
+
+	wma_handle->wma_mgmt_tx_packetdump_cb = NULL;
+	wma_handle->wma_mgmt_rx_packetdump_cb = NULL;
+}