qcacmn: fix dptrace for data packets

Enable tracing for TX/RX data packets
Donot print stats with 0 value

Change-Id: I4bab6537494c4ee0fe290e3778fb5662bf5abd66
CRs-Fixed: 2269193
diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c
index fcdd72e..4ccc2eb 100644
--- a/dp/wifi3.0/dp_main.c
+++ b/dp/wifi3.0/dp_main.c
@@ -6676,10 +6676,10 @@
 		DP_TRACE(FATAL, "hal ring access fail: %u msdus",
 			pdev->soc->stats.rx.err.hal_ring_access_fail);
 
-		DP_TRACE(FATAL, "Reo errors");
-
 		for (error_code = 0; error_code < HAL_REO_ERR_MAX;
 				error_code++) {
+			if (!pdev->soc->stats.rx.err.reo_error[error_code])
+				continue;
 			DP_TRACE(FATAL, "Reo error number (%u): %u msdus",
 				error_code,
 				pdev->soc->stats.rx.err.reo_error[error_code]);
@@ -6687,6 +6687,8 @@
 
 		for (error_code = 0; error_code < HAL_RXDMA_ERR_MAX;
 				error_code++) {
+			if (!pdev->soc->stats.rx.err.rxdma_error[error_code])
+				continue;
 			DP_TRACE(FATAL, "Rxdma error number (%u): %u msdus",
 				error_code,
 				pdev->soc->stats.rx.err
diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c
index 2628348..cc4249a 100644
--- a/dp/wifi3.0/dp_rx.c
+++ b/dp/wifi3.0/dp_rx.c
@@ -1500,6 +1500,14 @@
 		peer_id = DP_PEER_METADATA_PEER_ID_GET(peer_mdata);
 		peer = dp_peer_find_by_id(soc, peer_id);
 
+		if (peer) {
+			QDF_NBUF_CB_DP_TRACE_PRINT(nbuf) = false;
+			qdf_dp_trace_set_track(nbuf, QDF_RX);
+			QDF_NBUF_CB_RX_DP_TRACE(nbuf) = 1;
+			QDF_NBUF_CB_RX_PACKET_TRACK(nbuf) =
+				QDF_NBUF_RX_PKT_DATA_TRACK;
+		}
+
 		rx_bufs_used++;
 
 		if (deliver_list_head && peer && (vdev != peer->vdev)) {
diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c
index 1229bb8..1429fe0 100644
--- a/dp/wifi3.0/dp_tx.c
+++ b/dp/wifi3.0/dp_tx.c
@@ -552,6 +552,34 @@
 }
 
 /**
+ * dp_tx_trace_pkt() - Trace TX packet at DP layer
+ *
+ * @skb: skb to be traced
+ * @msdu_id: msdu_id of the packet
+ * @vdev_id: vdev_id of the packet
+ *
+ * Return: None
+ */
+static void dp_tx_trace_pkt(qdf_nbuf_t skb, uint16_t msdu_id,
+			    uint8_t vdev_id)
+{
+	QDF_NBUF_CB_TX_PACKET_TRACK(skb) = QDF_NBUF_TX_PKT_DATA_TRACK;
+	QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
+	DPTRACE(qdf_dp_trace_ptr(skb,
+				 QDF_DP_TRACE_LI_DP_TX_PACKET_PTR_RECORD,
+				 QDF_TRACE_DEFAULT_PDEV_ID,
+				 qdf_nbuf_data_addr(skb),
+				 sizeof(qdf_nbuf_data(skb)),
+				 msdu_id, vdev_id));
+
+	qdf_dp_trace_log_pkt(vdev_id, skb, QDF_TX, QDF_TRACE_DEFAULT_PDEV_ID);
+
+	DPTRACE(qdf_dp_trace_data_pkt(skb, QDF_TRACE_DEFAULT_PDEV_ID,
+				      QDF_DP_TRACE_LI_DP_TX_PACKET_RECORD,
+				      msdu_id, QDF_TX));
+}
+
+/**
  * dp_tx_desc_prepare_single - Allocate and prepare Tx descriptor
  * @vdev: DP vdev handle
  * @nbuf: skb
@@ -597,6 +625,8 @@
 	tx_desc->msdu_ext_desc = NULL;
 	tx_desc->pkt_offset = 0;
 
+	dp_tx_trace_pkt(nbuf, tx_desc->id, vdev->vdev_id);
+
 	/*
 	 * For special modes (vdev_type == ocb or mesh), data frames should be
 	 * transmitted using varying transmit parameters (tx spec) which include
@@ -723,6 +753,8 @@
 	tx_desc->tso_desc = msdu_info->u.tso_info.curr_seg;
 	tx_desc->tso_num_desc = msdu_info->u.tso_info.tso_num_seg_list;
 
+	dp_tx_trace_pkt(nbuf, tx_desc->id, vdev->vdev_id);
+
 	/* Handle scattered frames - TSO/SG/ME */
 	/* Allocate and prepare an extension descriptor for scattered frames */
 	msdu_ext_desc = dp_tx_prepare_ext_desc(vdev, msdu_info, desc_pool_id);
@@ -2859,6 +2891,15 @@
 
 		dp_tx_comp_process_tx_status(desc, length);
 
+		DPTRACE(qdf_dp_trace_ptr
+				(desc->nbuf,
+				 QDF_DP_TRACE_LI_DP_FREE_PACKET_PTR_RECORD,
+				 QDF_TRACE_DEFAULT_PDEV_ID,
+				 qdf_nbuf_data_addr(desc->nbuf),
+				 sizeof(qdf_nbuf_data(desc->nbuf)),
+				 desc->id, ts.status)
+			);
+
 		/*currently m_copy/tx_capture is not supported for scatter gather packets*/
 		if (!(desc->msdu_ext_desc) && (dp_get_completion_indication_for_stack(soc,
 					desc->pdev, ts.peer_id, ts.ppdu_id,
diff --git a/qdf/inc/qdf_nbuf.h b/qdf/inc/qdf_nbuf.h
index f2f74ad..4c7c7d8 100644
--- a/qdf/inc/qdf_nbuf.h
+++ b/qdf/inc/qdf_nbuf.h
@@ -119,6 +119,7 @@
 #define QDF_NBUF_TX_PKT_INVALID              0
 #define QDF_NBUF_TX_PKT_DATA_TRACK           1
 #define QDF_NBUF_TX_PKT_MGMT_TRACK           2
+#define QDF_NBUF_RX_PKT_DATA_TRACK           3
 
 /* Different Packet states */
 #define QDF_NBUF_TX_PKT_HDD                  1
diff --git a/qdf/inc/qdf_trace.h b/qdf/inc/qdf_trace.h
index 24ba8e3..638412a 100644
--- a/qdf/inc/qdf_trace.h
+++ b/qdf/inc/qdf_trace.h
@@ -67,7 +67,8 @@
 /* DP Trace Implementation */
 #ifdef CONFIG_DP_TRACE
 #define DPTRACE(p) p
-#define DPTRACE_PRINT(args...) QDF_TRACE_DEBUG(QDF_MODULE_ID_QDF, args)
+#define DPTRACE_PRINT(args...) \
+	QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_DEBUG, args)
 #else
 #define DPTRACE(p)
 #define DPTRACE_PRINT(args...)
@@ -188,6 +189,10 @@
  * @QDF_DP_TRACE_RX_PACKET_RECORD - record 32 bytes of rx pkt at any layer
  * @QDF_DP_TRACE_HDD_TX_PACKET_RECORD - record 32 bytes of tx pkt at HDD
  * @QDF_DP_TRACE_HDD_RX_PACKET_RECORD - record 32 bytes of rx pkt at HDD
+ * @QDF_DP_TRACE_LI_DP_TX_PACKET_RECORD - record data bytes of tx pkt at LI_DP
+ * @QDF_DP_TRACE_LI_DP_RX_PACKET_RECORD - record data bytes of rx pkt at LI_DP
+ * @QDF_DP_TRACE_LI_DP_FREE_PACKET_PTR_RECORD - tx completion ptr record for
+ *						lithium
  * @QDF_DP_TRACE_FREE_PACKET_PTR_RECORD - tx completion ptr record
  * @QDF_DP_TRACE_LOW_VERBOSITY - below this are part of low verbosity
  * @QDF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD - HDD layer ptr record
@@ -207,12 +212,11 @@
  * @QDF_DP_TRACE_HTC_PACKET_PTR_RECORD - htc packet ptr record
  * @QDF_DP_TRACE_HIF_PACKET_PTR_RECORD - hif packet ptr record
  * @QDF_DP_TRACE_RX_TXRX_PACKET_PTR_RECORD - txrx packet ptr record
- * @QDF_DP_TRACE_LI_DP_TX_PACKET_RECORD - record 32 bytes of tx pkt at LI_DP
- * @QDF_DP_TRACE_LI_DP_RX_PACKET_RECORD - record 32 bytes of rx pkt at LI_DP
  * @QDF_DP_TRACE_LI_DP_NULL_RX_PACKET_RECORD
- *		- record 32 bytes of rx null_queue pkt at LI_DP
+ *		- record data bytes of rx null_queue pkt at LI_DP
  * @QDF_DP_TRACE_HIGH_VERBOSITY - below this are part of high verbosity
  */
+
 enum  QDF_DP_TRACE_ID {
 	QDF_DP_TRACE_INVALID,
 	QDF_DP_TRACE_DROP_PACKET_RECORD,
@@ -231,6 +235,9 @@
 	QDF_DP_TRACE_RX_PACKET_RECORD,
 	QDF_DP_TRACE_HDD_TX_PACKET_RECORD,
 	QDF_DP_TRACE_HDD_RX_PACKET_RECORD,
+	QDF_DP_TRACE_LI_DP_TX_PACKET_RECORD,
+	QDF_DP_TRACE_LI_DP_RX_PACKET_RECORD,
+	QDF_DP_TRACE_LI_DP_FREE_PACKET_PTR_RECORD,
 	QDF_DP_TRACE_FREE_PACKET_PTR_RECORD,
 	QDF_DP_TRACE_LOW_VERBOSITY,
 	QDF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD,
@@ -250,8 +257,6 @@
 	QDF_DP_TRACE_HTC_PACKET_PTR_RECORD,
 	QDF_DP_TRACE_HIF_PACKET_PTR_RECORD,
 	QDF_DP_TRACE_RX_TXRX_PACKET_PTR_RECORD,
-	QDF_DP_TRACE_LI_DP_TX_PACKET_RECORD,
-	QDF_DP_TRACE_LI_DP_RX_PACKET_RECORD,
 	QDF_DP_TRACE_LI_DP_NULL_RX_PACKET_RECORD,
 	QDF_DP_TRACE_HIGH_VERBOSITY,
 	QDF_DP_TRACE_MAX
diff --git a/qdf/linux/src/i_qdf_nbuf.h b/qdf/linux/src/i_qdf_nbuf.h
index 2f569ce..22ece80 100644
--- a/qdf/linux/src/i_qdf_nbuf.h
+++ b/qdf/linux/src/i_qdf_nbuf.h
@@ -87,87 +87,87 @@
  * @paddr   : physical addressed retrieved by dma_map of nbuf->data
  *
  * @rx.dev.priv_cb_w.ext_cb_ptr: extended cb pointer
- * @rx.dev.priv_cb_w.fctx      : ctx to handle special pkts defined by ftype
- * @rx.dev.priv_cb_w.reserved1 : reserved
- * @rx.dev.priv_cb_w.reserved2 : reserved
+ * @rx.dev.priv_cb_w.fctx: ctx to handle special pkts defined by ftype
+ * @rx.dev.priv_cb_w.reserved1: reserved
+ * @rx.dev.priv_cb_w.reserved2: reserved
  *
- * @rx.dev.priv_cb_m.tcp_seq_num     : TCP sequence number
- * @rx.dev.priv_cb_m.tcp_ack_num     : TCP ACK number
- * @rx.dev.priv_cb_m.lro_ctx         : LRO context
- * @rx.dev.priv_cb_m.map_index       :
- * @rx.dev.priv_cb_m.reserved        : reserved
+ * @rx.dev.priv_cb_m.tcp_seq_num: TCP sequence number
+ * @rx.dev.priv_cb_m.tcp_ack_num: TCP ACK number
+ * @rx.dev.priv_cb_m.lro_ctx: LRO context
+ * @rx.dev.priv_cb_m.map_index:
+ * @rx.dev.priv_cb_m.reserved: reserved
  *
- * @rx.lro_eligible        : flag to indicate whether the MSDU is LRO eligible
- * @rx.peer_cached_buf_frm : peer cached buffer
- * @rx.tcp_proto           : L4 protocol is TCP
- * @rx.tcp_pure_ack        : A TCP ACK packet with no payload
- * @rx.ipv6_proto          : L3 protocol is IPV6
- * @rx.ip_offset           : offset to IP header
- * @rx.tcp_offset          : offset to TCP header
- * @rx_ctx_id              : Rx context id
+ * @rx.lro_eligible: flag to indicate whether the MSDU is LRO eligible
+ * @rx.peer_cached_buf_frm: peer cached buffer
+ * @rx.tcp_proto: L4 protocol is TCP
+ * @rx.tcp_pure_ack: A TCP ACK packet with no payload
+ * @rx.ipv6_proto: L3 protocol is IPV6
+ * @rx.ip_offset: offset to IP header
+ * @rx.tcp_offset: offset to TCP header
+ * @rx_ctx_id: Rx context id
  *
- * @rx.tcp_udp_chksum  : L4 payload checksum
- * @rx.tcp_wim         : TCP window size
+ * @rx.tcp_udp_chksum: L4 payload checksum
+ * @rx.tcp_wim: TCP window size
  *
- * @rx.flow_id         : 32bit flow id
+ * @rx.flow_id: 32bit flow id
  *
- * @rx.flag_chfrag_start : first MSDU in an AMSDU
- * @rx.flag_chfrag_cont  : middle or part of MSDU in an AMSDU
- * @rx.flag_chfrag_end   : last MSDU in an AMSDU
- * @rx.rsrvd             : reserved
+ * @rx.flag_chfrag_start: first MSDU in an AMSDU
+ * @rx.flag_chfrag_cont: middle or part of MSDU in an AMSDU
+ * @rx.flag_chfrag_end: last MSDU in an AMSDU
+ * @rx.rsrvd: reserved
  *
- * @rx.trace       : combined structure for DP and protocol trace
- * @rx.trace.packet_state: {NBUF_TX_PKT_[(HDD)|(TXRX_ENQUEUE)|(TXRX_DEQUEUE)|
+ * @rx.trace: combined structure for DP and protocol trace
+ * @rx.trace.packet_stat: {NBUF_TX_PKT_[(HDD)|(TXRX_ENQUEUE)|(TXRX_DEQUEUE)|
  *                       +          (TXRX)|(HTT)|(HTC)|(HIF)|(CE)|(FREE)]
- * @rx.trace.dp_trace       : flag (Datapath trace)
- * @rx.trace.rsrvd          : enable packet logging
+ * @rx.trace.dp_trace: flag (Datapath trace)
+ * @rx.trace.packet_track: RX_DATA packet
+ * @rx.trace.rsrvd: enable packet logging
  *
- * @rx.ftype              : mcast2ucast, TSO, SG, MESH
- * @rx.reserved           : reserved
+ * @rx.ftype: mcast2ucast, TSO, SG, MESH
+ * @rx.reserved: reserved
  *
- * @tx.dev.priv_cb_w.fctx       : ctx to handle special pkts defined by ftype
- * @tx.dev.priv_cb_w.ext_cb_ptr : extended cb pointer
+ * @tx.dev.priv_cb_w.fctx: ctx to handle special pkts defined by ftype
+ * @tx.dev.priv_cb_w.ext_cb_ptr: extended cb pointer
  *
- * @tx.dev.priv_cb_w.data_attr : value that is programmed in CE descr, includes
+ * @tx.dev.priv_cb_w.data_attr: value that is programmed in CE descr, includes
  *                 + (1) CE classification enablement bit
  *                 + (2) packet type (802.3 or Ethernet type II)
  *                 + (3) packet offset (usually length of HTC/HTT descr)
- * @tx.dev.priv_cb_m.ipa.owned : packet owned by IPA
- * @tx.dev.priv_cb_m.ipa.priv  : private data, used by IPA
- * @tx.dev.priv_cb_m.desc_id   : tx desc id, used to sync between host and fw
- * @tx.dev.priv_cb_m.mgmt_desc_id  : mgmt descriptor for tx completion cb
- * @tx.dev.priv_cb_m.reserved  : reserved
+ * @tx.dev.priv_cb_m.ipa.owned: packet owned by IPA
+ * @tx.dev.priv_cb_m.ipa.priv: private data, used by IPA
+ * @tx.dev.priv_cb_m.desc_id: tx desc id, used to sync between host and fw
+ * @tx.dev.priv_cb_m.mgmt_desc_id: mgmt descriptor for tx completion cb
+ * @tx.dev.priv_cb_m.reserved: reserved
  *
- * @tx.ftype             : mcast2ucast, TSO, SG, MESH
- * @tx.vdev_id           : vdev (for protocol trace)
- * @tx.len               : length of efrag pointed by the above pointers
+ * @tx.ftype: mcast2ucast, TSO, SG, MESH
+ * @tx.vdev_id: vdev (for protocol trace)
+ * @tx.len: length of efrag pointed by the above pointers
  *
- * @tx.flags.bits.flag_efrag  : flag, efrag payload to be swapped (wordstream)
- * @tx.flags.bits.num         : number of extra frags ( 0 or 1)
- * @tx.flags.bits.nbuf        : flag, nbuf payload to be swapped (wordstream)
- * @tx.flags.bits.flag_chfrag_start : first MSDU in an AMSDU
- * @tx.flags.bits.flag_chfrag_cont  : middle or part of MSDU in an AMSDU
- * @tx.flags.bits.flag_chfrag_end   : last MSDU in an AMSDU
- * @tx.flags.bits.flag_ext_header   : extended flags
- * @tx.flags.bits.reserved          : reserved
- * @tx.trace       : combined structure for DP and protocol trace
- * @tx.trace.packet_state: {NBUF_TX_PKT_[(HDD)|(TXRX_ENQUEUE)|(TXRX_DEQUEUE)|
+ * @tx.flags.bits.flag_efrag: flag, efrag payload to be swapped (wordstream)
+ * @tx.flags.bits.num: number of extra frags ( 0 or 1)
+ * @tx.flags.bits.nbuf: flag, nbuf payload to be swapped (wordstream)
+ * @tx.flags.bits.flag_chfrag_start: first MSDU in an AMSDU
+ * @tx.flags.bits.flag_chfrag_cont: middle or part of MSDU in an AMSDU
+ * @tx.flags.bits.flag_chfrag_end: last MSDU in an AMSDU
+ * @tx.flags.bits.flag_ext_header: extended flags
+ * @tx.flags.bits.reserved: reserved
+ * @tx.trace: combined structure for DP and protocol trace
+ * @tx.trace.packet_stat: {NBUF_TX_PKT_[(HDD)|(TXRX_ENQUEUE)|(TXRX_DEQUEUE)|
  *                       +          (TXRX)|(HTT)|(HTC)|(HIF)|(CE)|(FREE)]
- * @tx.trace.is_packet_priv :
- * @tx.trace.packet_track   : {NBUF_TX_PKT_[(DATA)|(MGMT)]_TRACK}
- * @tx.trace.proto_type     : bitmap of NBUF_PKT_TRAC_TYPE[(EAPOL)|(DHCP)|
+ * @tx.trace.is_packet_priv:
+ * @tx.trace.packet_track: {NBUF_TX_PKT_[(DATA)|(MGMT)]_TRACK}
+ * @tx.trace.proto_type: bitmap of NBUF_PKT_TRAC_TYPE[(EAPOL)|(DHCP)|
  *                          + (MGMT_ACTION)] - 4 bits
- * @tx.trace.dp_trace       : flag (Datapath trace)
- * @tx.trace.is_bcast       : flag (Broadcast packet)
- * @tx.trace.is_mcast       : flag (Multicast packet)
- * @tx.trace.packet_type    : flag (Packet type)
- * @tx.trace.htt2_frm       : flag (high-latency path only)
- * @tx.trace.print          : enable packet logging
+ * @tx.trace.dp_trace: flag (Datapath trace)
+ * @tx.trace.is_bcast: flag (Broadcast packet)
+ * @tx.trace.is_mcast: flag (Multicast packet)
+ * @tx.trace.packet_type: flag (Packet type)
+ * @tx.trace.htt2_frm: flag (high-latency path only)
+ * @tx.trace.print: enable packet logging
  *
- * @tx.vaddr             : virtual address of ~
- * @tx.paddr             : physical/DMA address of ~
+ * @tx.vaddr: virtual address of ~
+ * @tx.paddr: physical/DMA address of ~
  */
-
 struct qdf_nbuf_cb {
 	/* common */
 	qdf_paddr_t paddr; /* of skb->data */
@@ -208,7 +208,8 @@
 			union {
 				uint8_t packet_state;
 				uint8_t dp_trace:1,
-					rsrvd:1;
+					packet_track:4,
+					rsrvd:3;
 			} trace;
 			uint8_t ftype;
 			uint8_t reserved;
@@ -378,6 +379,10 @@
 	(((struct qdf_nbuf_cb *) \
 		((skb)->cb))->u.tx.trace.packet_track)
 
+#define QDF_NBUF_CB_RX_PACKET_TRACK(skb)\
+		(((struct qdf_nbuf_cb *) \
+			((skb)->cb))->u.rx.trace.packet_track)
+
 #define QDF_NBUF_CB_TX_PROTO_TYPE(skb)\
 	(((struct qdf_nbuf_cb *) \
 		((skb)->cb))->u.tx.trace.proto_type)
diff --git a/qdf/linux/src/qdf_trace.c b/qdf/linux/src/qdf_trace.c
index c0dabaf..1d20040 100644
--- a/qdf/linux/src/qdf_trace.c
+++ b/qdf/linux/src/qdf_trace.c
@@ -870,11 +870,14 @@
 		qdf_dp_trace_cb_table[QDF_DP_TRACE_TX_PACKET_RECORD] =
 		qdf_dp_trace_cb_table[QDF_DP_TRACE_RX_PACKET_RECORD] =
 		qdf_dp_trace_cb_table[QDF_DP_TRACE_DROP_PACKET_RECORD] =
+		qdf_dp_trace_cb_table[QDF_DP_TRACE_LI_DP_TX_PACKET_RECORD] =
+		qdf_dp_trace_cb_table[QDF_DP_TRACE_LI_DP_RX_PACKET_RECORD] =
 		qdf_dp_display_data_pkt_record;
 
 	qdf_dp_trace_cb_table[QDF_DP_TRACE_TXRX_PACKET_PTR_RECORD] =
 	qdf_dp_trace_cb_table[QDF_DP_TRACE_TXRX_FAST_PACKET_PTR_RECORD] =
 	qdf_dp_trace_cb_table[QDF_DP_TRACE_FREE_PACKET_PTR_RECORD] =
+	qdf_dp_trace_cb_table[QDF_DP_TRACE_LI_DP_FREE_PACKET_PTR_RECORD] =
 						qdf_dp_display_ptr_record;
 	qdf_dp_trace_cb_table[QDF_DP_TRACE_EAPOL_PACKET_RECORD] =
 	qdf_dp_trace_cb_table[QDF_DP_TRACE_DHCP_PACKET_RECORD] =
@@ -983,7 +986,7 @@
 
 
 /**
- * qdf_dp_trace_enable_track() - enable the tracing for netbuf
+ * qdf_dp_trace_verbosity_check() - check whether verbosity level is enabled
  * @code: defines the event
  *
  * In High verbosity all codes are logged.
@@ -993,7 +996,7 @@
  *
  * Return: true or false depends on whether tracing enabled
  */
-static bool qdf_dp_trace_enable_track(enum QDF_DP_TRACE_ID code)
+static bool qdf_dp_trace_verbosity_check(enum QDF_DP_TRACE_ID code)
 {
 	switch (g_qdf_dp_trace_data.verbosity) {
 	case QDF_DP_TRACE_VERBOSITY_HIGH:
@@ -1010,7 +1013,6 @@
 		if (code <= QDF_DP_TRACE_ULTRA_LOW_VERBOSITY)
 			return true;
 		return false;
-
 	case QDF_DP_TRACE_VERBOSITY_BASE:
 		if (code <= QDF_DP_TRACE_BASE_VERBOSITY)
 			return true;
@@ -1019,7 +1021,6 @@
 		return false;
 	}
 }
-qdf_export_symbol(qdf_dp_trace_enable_track);
 
 /**
  * qdf_dp_get_proto_bitmap() - get dp trace proto bitmap
@@ -1136,7 +1137,6 @@
 	case QDF_DP_TRACE_HDD_TX_PACKET_RECORD:
 		return "HDD: TX: DATA:";
 	case QDF_DP_TRACE_LI_DP_TX_PACKET_RECORD:
-		return "LI_DP: TX: DATA:";
 	case QDF_DP_TRACE_TX_PACKET_RECORD:
 		return "TX:";
 	case QDF_DP_TRACE_CE_PACKET_PTR_RECORD:
@@ -1145,6 +1145,7 @@
 		return "CE: TX: FAST: PTR:";
 	case QDF_DP_TRACE_CE_FAST_PACKET_ERR_RECORD:
 		return "CE: TX: FAST: ERR:";
+	case QDF_DP_TRACE_LI_DP_FREE_PACKET_PTR_RECORD:
 	case QDF_DP_TRACE_FREE_PACKET_PTR_RECORD:
 		return "FREE: TX: PTR:";
 	case QDF_DP_TRACE_RX_HTT_PACKET_PTR_RECORD:
@@ -1157,10 +1158,9 @@
 		return "LI_DP: RX: PTR:";
 	case QDF_DP_TRACE_HDD_RX_PACKET_RECORD:
 		return "HDD: RX: DATA:";
-	case QDF_DP_TRACE_LI_DP_RX_PACKET_RECORD:
-		return "LI_DP: RX: DATA:";
 	case QDF_DP_TRACE_LI_DP_NULL_RX_PACKET_RECORD:
 		return "LI_DP_NULL: RX: DATA:";
+	case QDF_DP_TRACE_LI_DP_RX_PACKET_RECORD:
 	case QDF_DP_TRACE_RX_PACKET_RECORD:
 		return "RX:";
 	case QDF_DP_TRACE_TXRX_QUEUE_PACKET_PTR_RECORD:
@@ -1301,9 +1301,10 @@
 }
 
 /**
- * qdf_dp_enable_check() - check if dptrace is enable or not
+ * qdf_dp_enable_check() - check if dptrace, TX/RX tracing is enabled
  * @nbuf: nbuf
  * @code: dptrace code
+ * @dir: TX or RX direction
  *
  * Return: true/false
  */
@@ -1314,13 +1315,18 @@
 	if (!g_qdf_dp_trace_data.enable)
 		return false;
 
-	if (qdf_dp_trace_enable_track(code) == false)
+	if (qdf_dp_trace_verbosity_check(code) == false)
 		return false;
 
-	if ((nbuf) && ((QDF_NBUF_CB_TX_PACKET_TRACK(nbuf) !=
-		 QDF_NBUF_TX_PKT_DATA_TRACK) ||
-		 ((dir == QDF_TX) && (QDF_NBUF_CB_TX_DP_TRACE(nbuf) == 0)) ||
-		 ((dir == QDF_RX) && (QDF_NBUF_CB_RX_DP_TRACE(nbuf) == 0))))
+	if (!nbuf)
+		return false;
+
+	if ((dir == QDF_TX) &&
+	    ((QDF_NBUF_CB_TX_DP_TRACE(nbuf) == 0) ||
+	     (QDF_NBUF_CB_TX_PACKET_TRACK(nbuf) != QDF_NBUF_TX_PKT_DATA_TRACK)))
+		return false;
+
+	if ((dir == QDF_RX) && (QDF_NBUF_CB_RX_DP_TRACE(nbuf) == 0))
 		return false;
 
 	return true;
@@ -1450,7 +1456,7 @@
 				g_qdf_dp_trace_data.high_tput_thresh) {
 			g_qdf_dp_trace_data.live_mode = 0;
 			g_qdf_dp_trace_data.verbosity =
-					QDF_DP_TRACE_ULTRA_LOW_VERBOSITY;
+					QDF_DP_TRACE_VERBOSITY_ULTRA_LOW;
 			info |= QDF_DP_TRACE_RECORD_INFO_THROTTLED;
 		}
 	}
@@ -1524,17 +1530,18 @@
 		 (dir == QDF_RX && qdf_nbuf_is_icmpv6_pkt(skb) == true))) {
 
 		subtype = qdf_nbuf_get_icmpv6_subtype(skb);
-		DPTRACE(qdf_dp_trace_proto_pkt(
-			QDF_DP_TRACE_ICMPv6_PACKET_RECORD,
-			session_id, (skb->data + QDF_NBUF_SRC_MAC_OFFSET),
-			(skb->data + QDF_NBUF_DEST_MAC_OFFSET),
-			QDF_PROTO_TYPE_ICMPv6, subtype, dir, pdev_id, false));
+
+		QDF_NBUF_CB_DP_TRACE_PRINT(skb) = false;
 		if (dir == QDF_TX)
 			QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
 		else if (dir == QDF_RX)
 			QDF_NBUF_CB_RX_DP_TRACE(skb) = 1;
 
-		QDF_NBUF_CB_DP_TRACE_PRINT(skb) = false;
+		DPTRACE(qdf_dp_trace_proto_pkt(
+			QDF_DP_TRACE_ICMPv6_PACKET_RECORD,
+			session_id, (skb->data + QDF_NBUF_SRC_MAC_OFFSET),
+			(skb->data + QDF_NBUF_DEST_MAC_OFFSET),
+			QDF_PROTO_TYPE_ICMPv6, subtype, dir, pdev_id, false));
 
 		switch (subtype) {
 		case QDF_PROTO_ICMPV6_REQ:
@@ -1580,17 +1587,23 @@
 	if ((qdf_dp_get_proto_bitmap() & QDF_NBUF_PKT_TRAC_TYPE_ICMP) &&
 	    (qdf_nbuf_is_icmp_pkt(skb) == true)) {
 
+		QDF_NBUF_CB_DP_TRACE_PRINT(skb) = false;
 		proto_subtype = qdf_nbuf_get_icmp_subtype(skb);
-		DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_ICMP_PACKET_RECORD,
-			session_id, (skb->data + QDF_NBUF_SRC_MAC_OFFSET),
-			(skb->data + QDF_NBUF_DEST_MAC_OFFSET),
-			QDF_PROTO_TYPE_ICMP, proto_subtype, dir, pdev_id, false));
+
 		if (QDF_TX == dir)
 			QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
 		else if (QDF_RX == dir)
 			QDF_NBUF_CB_RX_DP_TRACE(skb) = 1;
 
-		QDF_NBUF_CB_DP_TRACE_PRINT(skb) = false;
+		DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_ICMP_PACKET_RECORD,
+					       session_id,
+					       skb->data +
+					       QDF_NBUF_SRC_MAC_OFFSET,
+					       skb->data +
+					       QDF_NBUF_DEST_MAC_OFFSET,
+					       QDF_PROTO_TYPE_ICMP,
+					       proto_subtype, dir, pdev_id,
+					       false));
 
 		if (proto_subtype == QDF_PROTO_ICMP_REQ)
 			g_qdf_dp_trace_data.icmp_req++;
@@ -1622,15 +1635,21 @@
 		 (dir == QDF_RX && qdf_nbuf_is_ipv4_eapol_pkt(skb) == true))) {
 
 		subtype = qdf_nbuf_get_eapol_subtype(skb);
-		DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_EAPOL_PACKET_RECORD,
-			session_id, (skb->data + QDF_NBUF_SRC_MAC_OFFSET),
-			(skb->data + QDF_NBUF_DEST_MAC_OFFSET),
-			QDF_PROTO_TYPE_EAPOL, subtype, dir, pdev_id, true));
+		QDF_NBUF_CB_DP_TRACE_PRINT(skb) = true;
 		if (QDF_TX == dir)
 			QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
 		else if (QDF_RX == dir)
 			QDF_NBUF_CB_RX_DP_TRACE(skb) = 1;
 
+		DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_EAPOL_PACKET_RECORD,
+					       session_id,
+					       skb->data +
+					       QDF_NBUF_SRC_MAC_OFFSET,
+					       skb->data +
+					       QDF_NBUF_DEST_MAC_OFFSET,
+					       QDF_PROTO_TYPE_EAPOL, subtype,
+					       dir, pdev_id, true));
+
 		switch (subtype) {
 		case QDF_PROTO_EAPOL_M1:
 			g_qdf_dp_trace_data.eapol_m1++;
@@ -1648,7 +1667,6 @@
 			g_qdf_dp_trace_data.eapol_others++;
 			break;
 		}
-		QDF_NBUF_CB_DP_TRACE_PRINT(skb) = true;
 		return true;
 	}
 	return false;
@@ -1674,17 +1692,21 @@
 		 (dir == QDF_RX && qdf_nbuf_is_ipv4_dhcp_pkt(skb) == true))) {
 
 		subtype = qdf_nbuf_get_dhcp_subtype(skb);
-		DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_DHCP_PACKET_RECORD,
-			session_id, (skb->data + QDF_NBUF_SRC_MAC_OFFSET),
-			(skb->data + QDF_NBUF_DEST_MAC_OFFSET),
-			QDF_PROTO_TYPE_DHCP, subtype, dir, pdev_id, true));
-
+		QDF_NBUF_CB_DP_TRACE_PRINT(skb) = true;
 		if (QDF_TX == dir)
 			QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
 		else if (QDF_RX == dir)
 			QDF_NBUF_CB_RX_DP_TRACE(skb) = 1;
 
-		QDF_NBUF_CB_DP_TRACE_PRINT(skb) = true;
+		DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_DHCP_PACKET_RECORD,
+					       session_id,
+					       skb->data +
+					       QDF_NBUF_SRC_MAC_OFFSET,
+					       skb->data +
+					       QDF_NBUF_DEST_MAC_OFFSET,
+					       QDF_PROTO_TYPE_DHCP, subtype,
+					       dir, pdev_id, true));
+
 		switch (subtype) {
 		case QDF_PROTO_DHCP_DISCOVER:
 			g_qdf_dp_trace_data.dhcp_disc++;
@@ -1731,16 +1753,21 @@
 		 (dir == QDF_RX && qdf_nbuf_is_ipv4_arp_pkt(skb) == true))) {
 
 		proto_subtype = qdf_nbuf_get_arp_subtype(skb);
-		DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_ARP_PACKET_RECORD,
-			session_id, (skb->data + QDF_NBUF_SRC_MAC_OFFSET),
-			(skb->data + QDF_NBUF_DEST_MAC_OFFSET),
-			QDF_PROTO_TYPE_ARP, proto_subtype, dir, pdev_id, true));
+		QDF_NBUF_CB_DP_TRACE_PRINT(skb) = true;
 		if (QDF_TX == dir)
 			QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
 		else if (QDF_RX == dir)
 			QDF_NBUF_CB_RX_DP_TRACE(skb) = 1;
 
-		QDF_NBUF_CB_DP_TRACE_PRINT(skb) = true;
+		DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_ARP_PACKET_RECORD,
+					       session_id,
+					       skb->data +
+					       QDF_NBUF_SRC_MAC_OFFSET,
+					       skb->data +
+					       QDF_NBUF_DEST_MAC_OFFSET,
+					       QDF_PROTO_TYPE_ARP,
+					       proto_subtype, dir, pdev_id,
+					       true));
 
 		if (QDF_PROTO_ARP_REQ == proto_subtype)
 			g_qdf_dp_trace_data.arp_req++;
@@ -1886,13 +1913,14 @@
 	loc = qdf_dp_trace_fill_meta_str(prepend_str, sizeof(prepend_str),
 					 index, info, record);
 	DPTRACE_PRINT("%s [%d] [%s] SA: "
-		QDF_MAC_ADDR_STR " %s DA: "
-		QDF_MAC_ADDR_STR,
-		prepend_str,
-		buf->vdev_id,
-		qdf_dp_subtype_to_str(buf->subtype),
-		QDF_MAC_ADDR_ARRAY(buf->sa.bytes),
-		qdf_dp_dir_to_str(buf->dir), QDF_MAC_ADDR_ARRAY(buf->da.bytes));
+		      QDF_MAC_ADDR_STR " %s DA: "
+		      QDF_MAC_ADDR_STR,
+		      prepend_str,
+		      buf->vdev_id,
+		      qdf_dp_subtype_to_str(buf->subtype),
+		      QDF_MAC_ADDR_ARRAY(buf->sa.bytes),
+		      qdf_dp_dir_to_str(buf->dir),
+		      QDF_MAC_ADDR_ARRAY(buf->da.bytes));
 }
 qdf_export_symbol(qdf_dp_display_proto_pkt);
 
@@ -1928,6 +1956,11 @@
 	char prepend_str[QDF_DP_TRACE_PREPEND_STR_SIZE];
 	struct qdf_dp_trace_ptr_buf *buf =
 		(struct qdf_dp_trace_ptr_buf *)record->data;
+	bool is_free_pkt_ptr_record;
+
+	if ((record->code == QDF_DP_TRACE_FREE_PACKET_PTR_RECORD) ||
+	    (record->code == QDF_DP_TRACE_LI_DP_FREE_PACKET_PTR_RECORD))
+		is_free_pkt_ptr_record = true;
 
 	qdf_mem_set(prepend_str, 0, sizeof(prepend_str));
 	loc = qdf_dp_trace_fill_meta_str(prepend_str, sizeof(prepend_str),
@@ -1937,9 +1970,7 @@
 		scnprintf(&prepend_str[loc], sizeof(prepend_str) - loc,
 			  "[msdu id %d %s %d]",
 			  buf->msdu_id,
-			  (record->code ==
-				QDF_DP_TRACE_FREE_PACKET_PTR_RECORD) ?
-			  "status" : "vdev_id",
+			  is_free_pkt_ptr_record ? "status" : "vdev_id",
 			  buf->status);
 
 	if (info & QDF_DP_TRACE_RECORD_INFO_LIVE) {
@@ -2027,8 +2058,6 @@
 	case  QDF_DP_TRACE_CE_FAST_PACKET_ERR_RECORD:
 		DPTRACE_PRINT(" %s: CE Fast Packet Error", prepend_str);
 		break;
-	case QDF_DP_TRACE_LI_DP_TX_PACKET_RECORD:
-	case QDF_DP_TRACE_LI_DP_RX_PACKET_RECORD:
 	case QDF_DP_TRACE_LI_DP_NULL_RX_PACKET_RECORD:
 	default:
 		dump_dp_hex_trace(prepend_str, record->data, record->size);
@@ -2136,7 +2165,9 @@
 
 void qdf_dp_trace_dump_stats(void)
 {
-		DPTRACE_PRINT("STATS |DPT: icmp(%u %u) arp(%u %u) icmpv6(%u %u %u %u %u %u) dhcp(%u %u %u %u %u %u) eapol(%u %u %u %u %u)",
+		DPTRACE_PRINT("STATS |DPT: tx %u rx %u icmp(%u %u) arp(%u %u) icmpv6(%u %u %u %u %u %u) dhcp(%u %u %u %u %u %u) eapol(%u %u %u %u %u)",
+			      g_qdf_dp_trace_data.tx_count,
+			      g_qdf_dp_trace_data.rx_count,
 			      g_qdf_dp_trace_data.icmp_req,
 			      g_qdf_dp_trace_data.icmp_resp,
 			      g_qdf_dp_trace_data.arp_req,
@@ -2493,6 +2524,9 @@
 		case QDF_DP_TRACE_HDD_RX_PACKET_RECORD:
 		case QDF_DP_TRACE_TX_PACKET_RECORD:
 		case QDF_DP_TRACE_RX_PACKET_RECORD:
+		case QDF_DP_TRACE_LI_DP_TX_PACKET_RECORD:
+		case QDF_DP_TRACE_LI_DP_RX_PACKET_RECORD:
+
 		default:
 			qdf_dpt_display_record_debugfs(file, &p_record, i);
 			break;
@@ -2646,8 +2680,6 @@
 				g_qdf_dp_trace_data.live_mode = 1;
 
 		g_qdf_dp_trace_data.print_pkt_cnt = 0;
-		g_qdf_dp_trace_data.verbosity =
-					g_qdf_dp_trace_data.ini_conf_verbosity;
 		spin_unlock_bh(&l_dp_trace_lock);
 	}
 }
@@ -2655,18 +2687,20 @@
 
 void qdf_dp_trace_apply_tput_policy(bool is_data_traffic)
 {
-	if (g_qdf_dp_trace_data.dynamic_verbosity_modify)
+	if (g_qdf_dp_trace_data.dynamic_verbosity_modify) {
+		goto check_live_mode;
 		return;
+	}
 
 	if (is_data_traffic) {
 		g_qdf_dp_trace_data.verbosity =
-					QDF_DP_TRACE_ULTRA_LOW_VERBOSITY;
-		qdf_dp_trace_throttle_live_mode(true);
+					QDF_DP_TRACE_VERBOSITY_ULTRA_LOW;
 	} else {
 		g_qdf_dp_trace_data.verbosity =
 					g_qdf_dp_trace_data.ini_conf_verbosity;
-		qdf_dp_trace_throttle_live_mode(false);
 	}
+check_live_mode:
+	qdf_dp_trace_throttle_live_mode(is_data_traffic);
 }
 #endif