Bladeren bron

qcacmn: Dptrace changes to take per pdev stats

Initial changes for adding dp trace in common framework. Modified dp_trace
record sturcture to include pdev_id as a member to take per_pdev stats.
Dump command has been modified to dump stats per pdev.

Change-Id: I8aede0bd8ab6f381c7fa0542d077bdd8bf66b3d2
CRs-fixed: 2038944
Nandha Kishore Easwaran 8 jaren geleden
bovenliggende
commit
e43583f3c1

+ 2 - 2
hif/src/ce/ce_main.c

@@ -1445,8 +1445,8 @@ hif_send_head(struct hif_opaque_softc *hif_ctx,
 
 	QDF_NBUF_UPDATE_TX_PKT_COUNT(nbuf, QDF_NBUF_TX_PKT_HIF);
 	DPTRACE(qdf_dp_trace(nbuf, QDF_DP_TRACE_HIF_PACKET_PTR_RECORD,
-				qdf_nbuf_data_addr(nbuf),
-				sizeof(qdf_nbuf_data(nbuf)), QDF_TX));
+		QDF_TRACE_DEFAULT_PDEV_ID, qdf_nbuf_data_addr(nbuf),
+		sizeof(qdf_nbuf_data(nbuf)), QDF_TX));
 	status = ce_sendlist_send(ce_hdl, nbuf, &sendlist, transfer_id);
 	QDF_ASSERT(status == QDF_STATUS_SUCCESS);
 

+ 2 - 1
hif/src/ce/ce_service.c

@@ -572,6 +572,7 @@ ce_sendlist_send_legacy(struct CE_handle *copyeng,
 					QDF_NBUF_TX_PKT_CE);
 		DPTRACE(qdf_dp_trace((qdf_nbuf_t)per_transfer_context,
 			QDF_DP_TRACE_CE_PACKET_PTR_RECORD,
+			QDF_TRACE_DEFAULT_PDEV_ID,
 			(uint8_t *)&(((qdf_nbuf_t)per_transfer_context)->data),
 			sizeof(((qdf_nbuf_t)per_transfer_context)->data),
 			QDF_TX));
@@ -756,7 +757,7 @@ int ce_send_fast(struct CE_handle *copyeng, qdf_nbuf_t msdu,
 
 		DPTRACE(qdf_dp_trace(msdu,
 			QDF_DP_TRACE_CE_FAST_PACKET_PTR_RECORD,
-			qdf_nbuf_data_addr(msdu),
+			QDF_TRACE_DEFAULT_PDEV_ID, qdf_nbuf_data_addr(msdu),
 			sizeof(qdf_nbuf_data(msdu)), QDF_TX));
 	}
 

+ 1 - 0
hif/src/ce/ce_service_srng.c

@@ -206,6 +206,7 @@ ce_sendlist_send_srng(struct CE_handle *copyeng,
 					QDF_NBUF_TX_PKT_CE);
 		DPTRACE(qdf_dp_trace((qdf_nbuf_t)per_transfer_context,
 			QDF_DP_TRACE_CE_PACKET_PTR_RECORD,
+			QDF_TRACE_DEFAULT_PDEV_ID,
 			(uint8_t *)(((qdf_nbuf_t)per_transfer_context)->data),
 			sizeof(((qdf_nbuf_t)per_transfer_context)->data), QDF_TX));
 	} else {

+ 4 - 4
htc/htc_send.c

@@ -1636,8 +1636,8 @@ A_STATUS htc_send_data_pkt(HTC_HANDLE HTCHandle, qdf_nbuf_t netbuf, int Epid,
 
 	QDF_NBUF_UPDATE_TX_PKT_COUNT(netbuf, QDF_NBUF_TX_PKT_HTC);
 	DPTRACE(qdf_dp_trace(netbuf, QDF_DP_TRACE_HTC_PACKET_PTR_RECORD,
-				qdf_nbuf_data_addr(netbuf),
-				sizeof(qdf_nbuf_data(netbuf)), QDF_TX));
+		QDF_TRACE_DEFAULT_PDEV_ID, qdf_nbuf_data_addr(netbuf),
+		sizeof(qdf_nbuf_data(netbuf)), QDF_TX));
 	status = hif_send_head(target->hif_dev,
 			       pEndpoint->UL_PipeID,
 			       pEndpoint->Id, ActualLength, netbuf, data_attr);
@@ -1793,8 +1793,8 @@ A_STATUS htc_send_data_pkt(HTC_HANDLE HTCHandle, HTC_PACKET *pPacket,
 	}
 	QDF_NBUF_UPDATE_TX_PKT_COUNT(netbuf, QDF_NBUF_TX_PKT_HTC);
 	DPTRACE(qdf_dp_trace(netbuf, QDF_DP_TRACE_HTC_PACKET_PTR_RECORD,
-				qdf_nbuf_data_addr(netbuf),
-				sizeof(qdf_nbuf_data(netbuf)), QDF_TX));
+		QDF_TRACE_DEFAULT_PDEV_ID, qdf_nbuf_data_addr(netbuf),
+		sizeof(qdf_nbuf_data(netbuf)), QDF_TX));
 
 	/* send what we can */
 	while (true) {

+ 1 - 0
qdf/inc/qdf_nbuf.h

@@ -100,6 +100,7 @@
 #define QDF_NBUF_TX_PKT_CE                   8
 #define QDF_NBUF_TX_PKT_FREE                 9
 #define QDF_NBUF_TX_PKT_STATE_MAX            10
+#define QDF_NBUF_TX_PKT_LI_DP                11
 
 /* Enable flag to print TSO specific prints in datapath */
 #ifdef TSO_DEBUG_LOG_ENABLE

+ 53 - 34
qdf/inc/qdf_trace.h

@@ -69,7 +69,17 @@ typedef int (qdf_abstract_print)(void *priv, const char *fmt, ...);
 #define QDF_DEBUG_ERROR         0x20
 #define QDF_DEBUG_CFG           0x40
 
+
+/* DP Trace Implementation */
+#ifdef CONFIG_DP_TRACE
+#define DPTRACE(p) p
+#else
+#define DPTRACE(p)
+#endif
+
 #ifdef CONFIG_MCL
+void qdf_trace(uint8_t module, uint8_t code, uint16_t session, uint32_t data);
+#endif
 
 /* By default Data Path module will have all log levels enabled, except debug
  * log level. Debug level will be left up to the framework or user space modules
@@ -84,6 +94,7 @@ typedef int (qdf_abstract_print)(void *priv, const char *fmt, ...);
 /* Preprocessor definitions and constants */
 #define ASSERT_BUFFER_SIZE (512)
 
+#define QDF_TRACE_DEFAULT_PDEV_ID 0xff
 #define MAX_QDF_TRACE_RECORDS 4000
 #define INVALID_QDF_TRACE_ADDR 0xffffffff
 #define DEFAULT_QDF_TRACE_DUMP_COUNT 0
@@ -142,12 +153,6 @@ typedef struct s_qdf_trace_data {
 
 #define CASE_RETURN_STRING(str) case ((str)): return (uint8_t *)(# str);
 
-/* DP Trace Implementation */
-#ifdef FEATURE_DP_TRACE
-#define DPTRACE(p) p
-#else
-#define DPTRACE(p)
-#endif
 
 #define MAX_QDF_DP_TRACE_RECORDS       4000
 #define QDF_DP_TRACE_RECORD_SIZE       16
@@ -170,12 +175,14 @@ typedef struct s_qdf_trace_data {
  * @QDF_DP_TRACE_HDD_TX_TIMEOUT - HDD tx timeout
  * @QDF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT- SOFTAP HDD tx timeout
  * @QDF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD - HDD layer ptr record
+ * @QDF_DP_TRACE_LI_DP_TX_PACKET_PTR_RECORD - Lithium DP layer ptr record
  * @QDF_DP_TRACE_CE_PACKET_PTR_RECORD - CE layer ptr record
  * @QDF_DP_TRACE_CE_FAST_PACKET_PTR_RECORD- CE fastpath ptr record
  * @QDF_DP_TRACE_FREE_PACKET_PTR_RECORD - tx completion ptr record
  * @QDF_DP_TRACE_RX_HTT_PACKET_PTR_RECORD - HTT RX record
  * @QDF_DP_TRACE_RX_OFFLOAD_HTT_PACKET_PTR_RECORD- HTT RX offload record
  * @QDF_DP_TRACE_RX_HDD_PACKET_PTR_RECORD - HDD RX record
+ * @QDF_DP_TRACE_RX_LI_DP_PACKET_PTR_RECORD - Lithium DP RX record
  * @QDF_DP_TRACE_LOW_VERBOSITY - below this are part of low verbosity
  * @QDF_DP_TRACE_TXRX_QUEUE_PACKET_PTR_RECORD -tx queue ptr record
  * @QDF_DP_TRACE_TXRX_PACKET_PTR_RECORD - txrx packet ptr record
@@ -187,6 +194,10 @@ typedef struct s_qdf_trace_data {
  * @QDF_DP_TRACE_MED_VERBOSITY - below this are part of med verbosity
  * @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 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
  * @QDF_DP_TRACE_HIGH_VERBOSITY - below this are part of high verbosity
  */
 enum  QDF_DP_TRACE_ID {
@@ -201,12 +212,14 @@ enum  QDF_DP_TRACE_ID {
 	QDF_DP_TRACE_HDD_TX_TIMEOUT,
 	QDF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT,
 	QDF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD,
+	QDF_DP_TRACE_LI_DP_TX_PACKET_PTR_RECORD,
 	QDF_DP_TRACE_CE_PACKET_PTR_RECORD,
 	QDF_DP_TRACE_CE_FAST_PACKET_PTR_RECORD,
 	QDF_DP_TRACE_FREE_PACKET_PTR_RECORD,
 	QDF_DP_TRACE_RX_HTT_PACKET_PTR_RECORD,
 	QDF_DP_TRACE_RX_OFFLOAD_HTT_PACKET_PTR_RECORD,
 	QDF_DP_TRACE_RX_HDD_PACKET_PTR_RECORD,
+	QDF_DP_TRACE_RX_LI_DP_PACKET_PTR_RECORD,
 	QDF_DP_TRACE_LOW_VERBOSITY,
 	QDF_DP_TRACE_TXRX_QUEUE_PACKET_PTR_RECORD,
 	QDF_DP_TRACE_TXRX_PACKET_PTR_RECORD,
@@ -218,6 +231,9 @@ enum  QDF_DP_TRACE_ID {
 	QDF_DP_TRACE_MED_VERBOSITY,
 	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_NULL_RX_PACKET_RECORD,
 	QDF_DP_TRACE_HIGH_VERBOSITY,
 	QDF_DP_TRACE_MAX
 };
@@ -302,6 +318,7 @@ struct qdf_dp_trace_record_s {
 	uint8_t data[QDF_DP_TRACE_RECORD_SIZE];
 	uint8_t size;
 	uint32_t pid;
+	uint8_t pdev_id;
 };
 
 /**
@@ -371,7 +388,6 @@ void qdf_register_debug_callback(QDF_MODULE_ID module_id,
 					tp_qdf_state_info_cb qdf_state_infocb);
 QDF_STATUS qdf_state_info_dump_all(char *buf, uint16_t size,
 			uint16_t *driver_dump_size);
-void qdf_trace(uint8_t module, uint8_t code, uint16_t session, uint32_t data);
 void qdf_trace_register(QDF_MODULE_ID, tp_qdf_trace_cb);
 QDF_STATUS qdf_trace_spin_lock_init(void);
 void qdf_trace_init(void);
@@ -379,46 +395,56 @@ void qdf_trace_enable(uint32_t, uint8_t enable);
 void qdf_trace_dump_all(void *, uint8_t, uint8_t, uint32_t, uint32_t);
 
 
-#ifdef FEATURE_DP_TRACE
+#ifdef CONFIG_DP_TRACE
+void qdf_dp_set_proto_bitmap(uint32_t val);
+void qdf_dp_trace_set_verbosity(uint32_t val);
+void qdf_dp_set_no_of_record(uint32_t val);
 void qdf_dp_trace_log_pkt(uint8_t session_id, struct sk_buff *skb,
-				enum qdf_proto_dir dir);
+				enum qdf_proto_dir dir, uint8_t pdev_id);
 void qdf_dp_trace_init(void);
 void qdf_dp_trace_spin_lock_init(void);
 void qdf_dp_trace_set_value(uint8_t proto_bitmap, uint8_t no_of_records,
 			 uint8_t verbosity);
 void qdf_dp_trace_set_track(qdf_nbuf_t nbuf, enum qdf_proto_dir dir);
-void qdf_dp_trace(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code,
+void qdf_dp_trace(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, uint8_t pdev_id,
 			uint8_t *data, uint8_t size, enum qdf_proto_dir dir);
-void qdf_dp_trace_dump_all(uint32_t count);
-typedef void (*tp_qdf_dp_trace_cb)(struct qdf_dp_trace_record_s* , uint16_t);
+void qdf_dp_trace_dump_all(uint32_t count, uint8_t pdev_id);
+typedef void (*tp_qdf_dp_trace_cb)(struct qdf_dp_trace_record_s*,
+				uint16_t, uint8_t);
 void qdf_dp_display_record(struct qdf_dp_trace_record_s *record,
-							uint16_t index);
+					uint16_t index, uint8_t pdev_id);
 void qdf_dp_trace_ptr(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code,
-		uint8_t *data, uint8_t size, uint16_t msdu_id, uint16_t status);
+	uint8_t pdev_id, uint8_t *data, uint8_t size, uint16_t msdu_id,
+	uint16_t status);
 
 void qdf_dp_display_ptr_record(struct qdf_dp_trace_record_s *pRecord,
-				uint16_t recIndex);
+				uint16_t recIndex, uint8_t pdev_id);
 uint8_t qdf_dp_get_proto_bitmap(void);
+uint8_t qdf_dp_get_verbosity(void);
+uint8_t qdf_dp_get_no_of_record(void);
 void
 qdf_dp_trace_proto_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id,
-		uint8_t *sa, uint8_t *da, enum qdf_proto_type type,
-		enum qdf_proto_subtype subtype, enum qdf_proto_dir dir);
+	uint8_t *sa, uint8_t *da, enum qdf_proto_type type,
+	enum qdf_proto_subtype subtype, enum qdf_proto_dir dir,
+	uint8_t pdev_id);
 void qdf_dp_display_proto_pkt(struct qdf_dp_trace_record_s *record,
-				uint16_t index);
+				uint16_t index, uint8_t pdev_id);
 void qdf_dp_trace_enable_live_mode(void);
 void qdf_dp_trace_clear_buffer(void);
 void qdf_dp_trace_mgmt_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id,
-		enum qdf_proto_type type, enum qdf_proto_subtype subtype);
+	uint8_t pdev_id, enum qdf_proto_type type,
+	enum qdf_proto_subtype subtype);
 void qdf_dp_display_mgmt_pkt(struct qdf_dp_trace_record_s *record,
-			      uint16_t index);
+			      uint16_t index, uint8_t pdev_id);
 void qdf_dp_display_event_record(struct qdf_dp_trace_record_s *record,
-			      uint16_t index);
+			      uint16_t index, uint8_t pdev_id);
 void qdf_dp_trace_record_event(enum QDF_DP_TRACE_ID code, uint8_t vdev_id,
-		enum qdf_proto_type type, enum qdf_proto_subtype subtype);
+	uint8_t pdev_id, enum qdf_proto_type type,
+	enum qdf_proto_subtype subtype);
 #else
 static inline
 void qdf_dp_trace_log_pkt(uint8_t session_id, struct sk_buff *skb,
-				enum qdf_proto_dir dir)
+				enum qdf_proto_dir dir, uint8_t pdev_id)
 {
 }
 static inline
@@ -435,7 +461,7 @@ void qdf_dp_trace_set_value(uint8_t proto_bitmap, uint8_t no_of_records,
 {
 }
 static inline
-void qdf_dp_trace_dump_all(uint32_t count)
+void qdf_dp_trace_dump_all(uint32_t count, uint8_t pdev_id)
 {
 }
 
@@ -452,8 +478,6 @@ void qdf_dp_trace_clear_buffer(void)
 #endif
 
 
-void qdf_trace_hex_dump(QDF_MODULE_ID module, QDF_TRACE_LEVEL level,
-			void *data, int buf_len);
 
 void qdf_trace_display(void);
 
@@ -467,14 +491,6 @@ void __printf(3, 4) qdf_snprintf(char *str_buffer, unsigned int size,
 
 #define QDF_SNPRINTF qdf_snprintf
 
-#else
-
-#define DPTRACE(x)
-#define qdf_trace_hex_dump(x, y, z, q)
-
-#endif /* CONFIG_MCL */
-
-
 #ifdef TSOSEG_DEBUG
 static inline
 int qdf_tso_seg_dbg_record(struct qdf_tso_seg_elem_t *tsoseg,
@@ -531,6 +547,9 @@ qdf_tso_seg_dbg_zero(struct qdf_tso_seg_elem_t *tsoseg)
 
 #endif /* TSOSEG_DEBUG */
 
+void qdf_trace_hex_dump(QDF_MODULE_ID module, QDF_TRACE_LEVEL level,
+			void *data, int buf_len);
+
 #define ERROR_CODE                      -1
 #define QDF_MAX_NAME_SIZE               32
 #define MAX_PRINT_CONFIG_SUPPORTED      32

+ 110 - 17
qdf/linux/src/i_qdf_nbuf.h

@@ -177,10 +177,26 @@ struct qdf_nbuf_cb {
 			}  extra_frag; /* 19 bytes */
 			union {
 				struct {
-					uint8_t ftype;
-					uint32_t submit_ts;
+					union {
+						struct {
+							uint8_t packet_state:7,
+							is_packet_priv:1;
+							uint8_t packet_track:4,
+								proto_type:4;
+							uint8_t dp_trace:1,
+								is_bcast:1,
+								is_mcast:1,
+								packet_type:3,
+							/* used only for hl*/
+								htt2_frm:1,
+								print:1;
+							uint8_t vdev_id;
+						} trace; /* 4 bytes */
+						uint32_t submit_ts;
+					} u;
 					void *fctx;
 					void *vdev_ctx;
+					uint8_t ftype;
 				} win; /* 21 bytes*/
 				struct {
 					uint32_t data_attr; /* 4 bytes */
@@ -281,6 +297,34 @@ struct qdf_nbuf_cb {
 		((skb)->cb))->u.tx.extra_frag.flags.bits.flag_nbuf)
 #define QDF_NBUF_CB_TX_DATA_ATTR(skb) \
 	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.data_attr)
+#define QDF_NBUF_UPDATE_TX_PKT_COUNT(skb, PACKET_STATE) \
+	qdf_nbuf_set_state(skb, PACKET_STATE)
+
+
+#define QDF_NBUF_CB_TX_IPA_OWNED(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.ipa.owned)
+
+#define QDF_NBUF_CB_TX_IPA_PRIV(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.ipa.priv)
+
+#define QDF_NBUF_CB_TX_FTYPE(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.ftype)
+
+#define QDF_NBUF_CB_TX_FCTX(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.fctx)
+
+#define QDF_NBUF_CB_TX_VDEV_CTX(skb) \
+		(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.vdev_ctx)
+
+
+#ifndef CONFIG_WIN
+
+#define QDF_NBUF_CB_TX_IS_PACKET_PRIV(skb) \
+	(((struct qdf_nbuf_cb *) \
+		((skb)->cb))->u.tx.dev.mcl.trace.is_packet_priv)
+
+#define QDF_NBUF_CB_TX_DESC_ID(skb) \
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.desc_id)
 #define QDF_NBUF_CB_TX_PACKET_STATE(skb) \
 	(((struct qdf_nbuf_cb *) \
 		((skb)->cb))->u.tx.dev.mcl.trace.packet_state)
@@ -290,8 +334,6 @@ struct qdf_nbuf_cb {
 #define QDF_NBUF_CB_TX_PROTO_TYPE(skb) \
 	(((struct qdf_nbuf_cb *) \
 		((skb)->cb))->u.tx.dev.mcl.trace.proto_type)
-#define QDF_NBUF_UPDATE_TX_PKT_COUNT(skb, PACKET_STATE) \
-	qdf_nbuf_set_state(skb, PACKET_STATE)
 #define QDF_NBUF_GET_PACKET_TRACK(skb) \
 	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.packet_track)
 #define QDF_NBUF_CB_TX_DP_TRACE(skb) \
@@ -302,27 +344,77 @@ struct qdf_nbuf_cb {
 	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.htt2_frm)
 #define QDF_NBUF_CB_TX_VDEV_ID(skb) \
 	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.vdev_id)
+
 #define QDF_NBUF_CB_GET_IS_BCAST(skb) \
 	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.is_bcast)
 #define QDF_NBUF_CB_GET_IS_MCAST(skb) \
 	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.is_mcast)
 #define QDF_NBUF_CB_GET_PACKET_TYPE(skb) \
 	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.packet_type)
-#define QDF_NBUF_CB_TX_IPA_OWNED(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.ipa.owned)
-#define QDF_NBUF_CB_TX_IPA_PRIV(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.ipa.priv)
-#define QDF_NBUF_CB_TX_DESC_ID(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.desc_id)
-#define QDF_NBUF_CB_TX_FTYPE(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.ftype)
+
+#define QDF_NBUF_CB_SET_BCAST(skb) \
+	(((struct qdf_nbuf_cb *) \
+		((skb)->cb))->u.tx.dev.mcl.trace.is_bcast = true)
+#define QDF_NBUF_CB_SET_MCAST(skb) \
+	(((struct qdf_nbuf_cb *) \
+		((skb)->cb))->u.tx.dev.mcl.trace.is_mcast = true)
+
+#else
+
+#define QDF_NBUF_CB_TX_DESC_ID(skb)\
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.desc_id)
+
+#define QDF_NBUF_CB_TX_PACKET_STATE(skb)\
+	(((struct qdf_nbuf_cb *) \
+		((skb)->cb))->u.tx.dev.win.u.trace.packet_state)
+
+#define QDF_NBUF_CB_TX_IS_PACKET_PRIV(skb) \
+	(((struct qdf_nbuf_cb *) \
+		((skb)->cb))->u.tx.dev.win.u.trace.is_packet_priv)
+
+#define QDF_NBUF_CB_TX_PACKET_TRACK(skb)\
+	(((struct qdf_nbuf_cb *) \
+		((skb)->cb))->u.tx.dev.win.u.trace.packet_track)
+
 #define QDF_NBUF_CB_TX_SUBMIT_TS(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.submit_ts)
-#define QDF_NBUF_CB_TX_FCTX(skb) \
-	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.fctx)
-#define QDF_NBUF_CB_TX_VDEV_CTX(skb) \
-		(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.vdev_ctx)
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.submit_ts)
+
+#define QDF_NBUF_CB_TX_PROTO_TYPE(skb)\
+	(((struct qdf_nbuf_cb *) \
+		((skb)->cb))->u.tx.dev.win.u.trace.proto_type)
+
+#define QDF_NBUF_GET_PACKET_TRACK(skb)\
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.trace.packet_track)
+
+#define QDF_NBUF_CB_TX_DP_TRACE(skb)\
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.dp_trace)
+
+#define QDF_NBUF_CB_DP_TRACE_PRINT(skb)	\
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.print)
+
+#define QDF_NBUF_CB_TX_HL_HTT2_FRM(skb)	\
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.htt2_frm)
 
+#define QDF_NBUF_CB_TX_VDEV_ID(skb)\
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.vdev_id)
+
+#define QDF_NBUF_CB_GET_IS_BCAST(skb)\
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.is_bcast)
+
+#define QDF_NBUF_CB_GET_IS_MCAST(skb)\
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.is_mcast)
+
+#define QDF_NBUF_CB_GET_PACKET_TYPE(skb)\
+	(((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.packet_type)
+
+#define QDF_NBUF_CB_SET_BCAST(skb) \
+	(((struct qdf_nbuf_cb *) \
+		((skb)->cb))->u.tx.dev.win.u.trace.is_bcast = true)
+
+#define QDF_NBUF_CB_SET_MCAST(skb) \
+	(((struct qdf_nbuf_cb *) \
+		((skb)->cb))->u.tx.dev.win.u.trace.is_mcast = true)
+#endif
 
 /* assume the OS provides a single fragment */
 #define __qdf_nbuf_get_num_frags(skb)		   \
@@ -538,6 +630,7 @@ void __qdf_nbuf_frag_info(struct sk_buff *skb, qdf_sglist_t  *sg);
 QDF_STATUS __qdf_nbuf_frag_map(
 	qdf_device_t osdev, __qdf_nbuf_t nbuf,
 	int offset, qdf_dma_dir_t dir, int cur_frag);
+void qdf_nbuf_classify_pkt(struct sk_buff *skb);
 
 bool __qdf_nbuf_is_ipv4_wapi_pkt(struct sk_buff *skb);
 bool __qdf_nbuf_data_is_ipv4_pkt(uint8_t *data);

+ 2 - 1
qdf/linux/src/i_qdf_trace.h

@@ -95,7 +95,8 @@
 
 /* This code will be used for compilation if tracing is to be compiled out */
 /* of the code so these functions/macros are 'do nothing' */
-static inline void qdf_trace_msg(QDF_MODULE_ID module, ...)
+static inline void qdf_trace_msg(QDF_MODULE_ID module, QDF_TRACE_LEVEL level,
+		   char *str_format, ...)
 {
 }
 

+ 32 - 0
qdf/linux/src/qdf_nbuf.c

@@ -2788,3 +2788,35 @@ void __qdf_nbuf_reg_free_cb(qdf_nbuf_free_t cb_func_ptr)
 	nbuf_free_cb = cb_func_ptr;
 	return;
 }
+
+/**
+ * qdf_nbuf_classify_pkt() - classify packet
+ * @skb - sk buff
+ *
+ * Return: none
+ */
+void qdf_nbuf_classify_pkt(struct sk_buff *skb)
+{
+	struct ethhdr *eh = (struct ethhdr *)skb->data;
+	qdf_mem_set(skb->cb, sizeof(skb->cb), 0);
+
+	/* check destination mac address is broadcast/multicast */
+	if (is_broadcast_ether_addr((uint8_t *)eh))
+		QDF_NBUF_CB_SET_BCAST(skb);
+	else if (is_multicast_ether_addr((uint8_t *)eh))
+		QDF_NBUF_CB_SET_MCAST(skb);
+
+	if (qdf_nbuf_is_ipv4_arp_pkt(skb))
+		QDF_NBUF_CB_GET_PACKET_TYPE(skb) =
+			QDF_NBUF_CB_PACKET_TYPE_ARP;
+	else if (qdf_nbuf_is_ipv4_dhcp_pkt(skb))
+		QDF_NBUF_CB_GET_PACKET_TYPE(skb) =
+			QDF_NBUF_CB_PACKET_TYPE_DHCP;
+	else if (qdf_nbuf_is_ipv4_eapol_pkt(skb))
+		QDF_NBUF_CB_GET_PACKET_TYPE(skb) =
+			QDF_NBUF_CB_PACKET_TYPE_EAPOL;
+	else if (qdf_nbuf_is_ipv4_wapi_pkt(skb))
+		QDF_NBUF_CB_GET_PACKET_TYPE(skb) =
+			QDF_NBUF_CB_PACKET_TYPE_WAPI;
+}
+EXPORT_SYMBOL(qdf_nbuf_classify_pkt);

+ 157 - 74
qdf/linux/src/qdf_trace.c

@@ -41,7 +41,6 @@
 #include <wlan_logging_sock_svc.h>
 #include <qdf_module.h>
 static int qdf_pidx = -1;
-#ifdef CONFIG_MCL
 
 #include "qdf_time.h"
 #include "qdf_mc_timer.h"
@@ -110,7 +109,7 @@ static tp_qdf_trace_cb qdf_trace_cb_table[QDF_MODULE_ID_MAX];
 static tp_qdf_trace_cb qdf_trace_restore_cb_table[QDF_MODULE_ID_MAX];
 static tp_qdf_state_info_cb qdf_state_info_table[QDF_MODULE_ID_MAX];
 
-#ifdef FEATURE_DP_TRACE
+#ifdef CONFIG_DP_TRACE
 /* Static and Global variables */
 static spinlock_t l_dp_trace_lock;
 
@@ -441,6 +440,8 @@ void qdf_trace_init(void)
 }
 EXPORT_SYMBOL(qdf_trace_init);
 
+#ifdef CONFIG_MCL
+
 /**
  * qdf_trace() - puts the messages in to ring-buffer
  * @module: Enum of module, basically module id.
@@ -510,6 +511,8 @@ void qdf_trace(uint8_t module, uint8_t code, uint16_t session, uint32_t data)
 }
 EXPORT_SYMBOL(qdf_trace);
 
+#endif
+
 /**
  * qdf_trace_spin_lock_init() - initializes the lock variable before use
  *
@@ -567,7 +570,7 @@ EXPORT_SYMBOL(qdf_trace_register);
  * Return: None
  */
 void qdf_trace_dump_all(void *p_mac, uint8_t code, uint8_t session,
-			uint32_t count, uint32_t bitmask_of_module)
+	uint32_t count, uint32_t bitmask_of_module)
 {
 	qdf_trace_record_t p_record;
 	int32_t i, tail;
@@ -713,9 +716,9 @@ QDF_STATUS qdf_state_info_dump_all(char *buf, uint16_t size,
 }
 EXPORT_SYMBOL(qdf_state_info_dump_all);
 
-#ifdef FEATURE_DP_TRACE
+#ifdef CONFIG_DP_TRACE
 static void qdf_dp_unused(struct qdf_dp_trace_record_s *record,
-			  uint16_t index)
+			  uint16_t index, uint8_t pdev_id)
 {
 	qdf_print("%s: QDF_DP_TRACE_MAX event should not be generated",
 		  __func__);
@@ -784,6 +787,68 @@ void qdf_dp_trace_set_value(uint8_t proto_bitmap, uint8_t no_of_record,
 }
 EXPORT_SYMBOL(qdf_dp_trace_set_value);
 
+/**
+ * qdf_dp_trace_set_verbosity() - set verbosity value
+ *
+ * @val: Value to set
+ *
+ * Return: Null
+ */
+void qdf_dp_trace_set_verbosity(uint32_t val)
+{
+	g_qdf_dp_trace_data.verbosity = val;
+}
+EXPORT_SYMBOL(qdf_dp_trace_set_verbosity);
+
+/**
+ * qdf_dp_get_verbosity) - get verbosity value
+ *
+ * Return: int
+ */
+uint8_t qdf_dp_get_verbosity(void)
+{
+	return g_qdf_dp_trace_data.verbosity;
+}
+EXPORT_SYMBOL(qdf_dp_get_verbosity);
+
+/**
+ * qdf_dp_set_proto_bitmap() - set dp trace proto bitmap
+ *
+ * @val         : unsigned bitmap to set
+ *
+ * Return: proto bitmap
+ */
+void qdf_dp_set_proto_bitmap(uint32_t val)
+{
+	g_qdf_dp_trace_data.proto_bitmap = val;
+}
+EXPORT_SYMBOL(qdf_dp_set_proto_bitmap);
+
+/**
+ * qdf_dp_set_no_of_record() - set dp trace no_of_record
+ *
+ * @val         : unsigned no_of_record to set
+ *
+ * Return: null
+ */
+void qdf_dp_set_no_of_record(uint32_t val)
+{
+	g_qdf_dp_trace_data.no_of_record = val;
+}
+EXPORT_SYMBOL(qdf_dp_set_no_of_record);
+
+/**
+ * qdf_dp_get_no_of_record() - get dp trace no_of_record
+ *
+ * Return: number of records
+ */
+uint8_t qdf_dp_get_no_of_record(void)
+{
+	return g_qdf_dp_trace_data.no_of_record;
+}
+EXPORT_SYMBOL(qdf_dp_get_no_of_record);
+
+
 /**
  * qdf_dp_trace_enable_track() - enable the tracing for netbuf
  * @code: defines the event
@@ -859,9 +924,13 @@ void qdf_dp_trace_set_track(qdf_nbuf_t nbuf, enum qdf_proto_dir dir)
 	return;
 }
 EXPORT_SYMBOL(qdf_dp_trace_set_track);
-
+#if CONFIG_MCL
 #define DPTRACE_PRINT(args...) \
 	QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_INFO, ## args)
+#else
+#define DPTRACE_PRINT(args...) \
+	QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_NONE, ## args)
+#endif
 
 /**
  * dump_hex_trace() - Display the data in buffer
@@ -913,8 +982,12 @@ const char *qdf_dp_code_to_string(enum QDF_DP_TRACE_ID code)
 		return "EVENT:";
 	case QDF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD:
 		return "HDD: TX: PTR:";
+	case QDF_DP_TRACE_LI_DP_TX_PACKET_PTR_RECORD:
+		return "LI_DP: TX: PTR:";
 	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_CE_PACKET_PTR_RECORD:
 		return "CE: TX: PTR:";
 	case QDF_DP_TRACE_CE_FAST_PACKET_PTR_RECORD:
@@ -927,8 +1000,14 @@ const char *qdf_dp_code_to_string(enum QDF_DP_TRACE_ID code)
 		return "HTT: RX: OF: PTR:";
 	case QDF_DP_TRACE_RX_HDD_PACKET_PTR_RECORD:
 		return "HDD: RX: PTR:";
+	case QDF_DP_TRACE_RX_LI_DP_PACKET_PTR_RECORD:
+		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_TXRX_QUEUE_PACKET_PTR_RECORD:
 		return "TXRX: TX: Q: PTR:";
 	case QDF_DP_TRACE_TXRX_PACKET_PTR_RECORD:
@@ -1081,12 +1160,13 @@ static bool qdf_dp_enable_check(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code,
  * @code: dptrace code
  * @data: data pointer
  * @size: size of buffer
+ * @pdev_id: pdev_id
  * @print: true to print it in kmsg
  *
  * Return: none
  */
-static void qdf_dp_add_record(enum QDF_DP_TRACE_ID code,
-			      uint8_t *data, uint8_t size, bool print)
+static void qdf_dp_add_record(enum QDF_DP_TRACE_ID code, uint8_t *data,
+			uint8_t size, uint8_t pdev_id, bool print)
 {
 	struct qdf_dp_trace_record_s *rec = NULL;
 	int index;
@@ -1119,6 +1199,7 @@ static void qdf_dp_add_record(enum QDF_DP_TRACE_ID code,
 	rec = &g_qdf_dp_trace_tbl[g_qdf_dp_trace_data.tail];
 	index = g_qdf_dp_trace_data.tail;
 	rec->code = code;
+	rec->pdev_id = pdev_id;
 	rec->size = 0;
 	if (data != NULL && size > 0) {
 		if (size > QDF_DP_TRACE_RECORD_SIZE)
@@ -1134,7 +1215,8 @@ static void qdf_dp_add_record(enum QDF_DP_TRACE_ID code,
 
 	if ((g_qdf_dp_trace_data.live_mode || (print == true)) &&
 	    (rec->code < QDF_DP_TRACE_MAX))
-		qdf_dp_trace_cb_table[rec->code] (rec, index);
+		qdf_dp_trace_cb_table[rec->code] (rec, index,
+			QDF_TRACE_DEFAULT_PDEV_ID);
 }
 
 
@@ -1143,11 +1225,12 @@ static void qdf_dp_add_record(enum QDF_DP_TRACE_ID code,
  * @session_id: vdev_id
  * @skb: skb pointer
  * @dir: direction
+ * @pdev_id: pdev_id
  *
  * Return: true/false
  */
 static bool qdf_log_eapol_pkt(uint8_t session_id, struct sk_buff *skb,
-			      enum qdf_proto_dir dir)
+			      enum qdf_proto_dir dir, uint8_t pdev_id)
 {
 	enum qdf_proto_subtype subtype;
 
@@ -1160,7 +1243,7 @@ static bool qdf_log_eapol_pkt(uint8_t session_id, struct sk_buff *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));
+			QDF_PROTO_TYPE_EAPOL, subtype, dir, pdev_id));
 		if (QDF_TX == dir)
 			QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
 		else if (QDF_RX == dir)
@@ -1177,11 +1260,12 @@ static bool qdf_log_eapol_pkt(uint8_t session_id, struct sk_buff *skb,
  * @session_id: vdev_id
  * @skb: skb pointer
  * @dir: direction
+ * @pdev_id: pdev_id
  *
  * Return: true/false
  */
 static bool qdf_log_dhcp_pkt(uint8_t session_id, struct sk_buff *skb,
-			     enum qdf_proto_dir dir)
+			     enum qdf_proto_dir dir, uint8_t pdev_id)
 {
 	enum qdf_proto_subtype subtype = QDF_PROTO_INVALID;
 
@@ -1194,7 +1278,7 @@ static bool qdf_log_dhcp_pkt(uint8_t session_id, struct sk_buff *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));
+			QDF_PROTO_TYPE_DHCP, subtype, dir, pdev_id));
 		if (QDF_TX == dir)
 			QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
 		else if (QDF_RX == dir)
@@ -1211,11 +1295,12 @@ static bool qdf_log_dhcp_pkt(uint8_t session_id, struct sk_buff *skb,
  * @session_id: vdev_id
  * @skb: skb pointer
  * @dir: direction
+ * @pdev_id: pdev_id
  *
  * Return: true/false
  */
 static bool qdf_log_arp_pkt(uint8_t session_id, struct sk_buff *skb,
-			    enum qdf_proto_dir dir)
+			    enum qdf_proto_dir dir, uint8_t pdev_id)
 {
 	enum qdf_proto_subtype proto_subtype;
 
@@ -1228,7 +1313,7 @@ static bool qdf_log_arp_pkt(uint8_t session_id, struct sk_buff *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));
+			QDF_PROTO_TYPE_ARP, proto_subtype, dir, pdev_id));
 		if (QDF_TX == dir)
 			QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
 		else if (QDF_RX == dir)
@@ -1245,19 +1330,20 @@ static bool qdf_log_arp_pkt(uint8_t session_id, struct sk_buff *skb,
  * @session_id: vdev_id
  * @skb: skb pointer
  * @dir: direction
+ * @pdev_id: pdev_id
  *
  * Return: none
  */
 void qdf_dp_trace_log_pkt(uint8_t session_id, struct sk_buff *skb,
-			  enum qdf_proto_dir dir)
+			  enum qdf_proto_dir dir, uint8_t pdev_id)
 {
 	if (qdf_dp_get_proto_bitmap()) {
 		if (qdf_log_arp_pkt(session_id,
-			skb, dir) == false) {
+			skb, dir, pdev_id) == false) {
 			if (qdf_log_dhcp_pkt(session_id,
-				skb, dir) == false) {
+				skb, dir, pdev_id) == false) {
 				if (qdf_log_eapol_pkt(session_id,
-					skb, dir) == false) {
+					skb, dir, pdev_id) == false) {
 					return;
 				}
 			}
@@ -1274,7 +1360,7 @@ EXPORT_SYMBOL(qdf_dp_trace_log_pkt);
  * Return: none
  */
 void qdf_dp_display_mgmt_pkt(struct qdf_dp_trace_record_s *record,
-			      uint16_t index)
+			      uint16_t index, uint8_t pdev_id)
 {
 	struct qdf_dp_trace_mgmt_buf *buf =
 		(struct qdf_dp_trace_mgmt_buf *)record->data;
@@ -1291,13 +1377,15 @@ EXPORT_SYMBOL(qdf_dp_display_mgmt_pkt);
  * qdf_dp_trace_mgmt_pkt() - record mgmt packet
  * @code: dptrace code
  * @vdev_id: vdev id
+ * @pdev_id: pdev_id
  * @type: proto type
  * @subtype: proto subtype
  *
  * Return: none
  */
 void qdf_dp_trace_mgmt_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id,
-		enum qdf_proto_type type, enum qdf_proto_subtype subtype)
+		uint8_t pdev_id, enum qdf_proto_type type,
+		enum qdf_proto_subtype subtype)
 {
 	struct qdf_dp_trace_mgmt_buf buf;
 	int buf_size = sizeof(struct qdf_dp_trace_mgmt_buf);
@@ -1311,7 +1399,7 @@ void qdf_dp_trace_mgmt_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id,
 	buf.type = type;
 	buf.subtype = subtype;
 	buf.vdev_id = vdev_id;
-	qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, true);
+	qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, pdev_id, true);
 }
 EXPORT_SYMBOL(qdf_dp_trace_mgmt_pkt);
 
@@ -1323,7 +1411,7 @@ EXPORT_SYMBOL(qdf_dp_trace_mgmt_pkt);
  * Return: none
  */
 void qdf_dp_display_event_record(struct qdf_dp_trace_record_s *record,
-			      uint16_t index)
+			      uint16_t index, uint8_t pdev_id)
 {
 	struct qdf_dp_trace_event_buf *buf =
 		(struct qdf_dp_trace_event_buf *)record->data;
@@ -1340,13 +1428,15 @@ EXPORT_SYMBOL(qdf_dp_display_event_record);
  * qdf_dp_trace_record_event() - record events
  * @code: dptrace code
  * @vdev_id: vdev id
+ * @pdev_id: pdev_id
  * @type: proto type
  * @subtype: proto subtype
  *
  * Return: none
  */
 void qdf_dp_trace_record_event(enum QDF_DP_TRACE_ID code, uint8_t vdev_id,
-		enum qdf_proto_type type, enum qdf_proto_subtype subtype)
+		uint8_t pdev_id, enum qdf_proto_type type,
+		enum qdf_proto_subtype subtype)
 {
 	struct qdf_dp_trace_event_buf buf;
 	int buf_size = sizeof(struct qdf_dp_trace_event_buf);
@@ -1360,7 +1450,7 @@ void qdf_dp_trace_record_event(enum QDF_DP_TRACE_ID code, uint8_t vdev_id,
 	buf.type = type;
 	buf.subtype = subtype;
 	buf.vdev_id = vdev_id;
-	qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, true);
+	qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, pdev_id, true);
 }
 EXPORT_SYMBOL(qdf_dp_trace_record_event);
 
@@ -1372,7 +1462,7 @@ EXPORT_SYMBOL(qdf_dp_trace_record_event);
  * Return: none
  */
 void qdf_dp_display_proto_pkt(struct qdf_dp_trace_record_s *record,
-			      uint16_t index)
+			      uint16_t index, uint8_t pdev_id)
 {
 	struct qdf_dp_trace_proto_buf *buf =
 		(struct qdf_dp_trace_proto_buf *)record->data;
@@ -1398,12 +1488,14 @@ EXPORT_SYMBOL(qdf_dp_display_proto_pkt);
  * @type: proto type
  * @subtype: proto subtype
  * @dir: direction
+ * @pdev_id: pdev id
  *
  * Return: none
  */
 void qdf_dp_trace_proto_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id,
 		uint8_t *sa, uint8_t *da, enum qdf_proto_type type,
-		enum qdf_proto_subtype subtype, enum qdf_proto_dir dir)
+		enum qdf_proto_subtype subtype, enum qdf_proto_dir dir,
+		uint8_t pdev_id)
 {
 	struct qdf_dp_trace_proto_buf buf;
 	int buf_size = sizeof(struct qdf_dp_trace_ptr_buf);
@@ -1420,7 +1512,7 @@ void qdf_dp_trace_proto_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id,
 	buf.type = type;
 	buf.subtype = subtype;
 	buf.vdev_id = vdev_id;
-	qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, true);
+	qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, pdev_id, true);
 }
 EXPORT_SYMBOL(qdf_dp_trace_proto_pkt);
 
@@ -1432,7 +1524,7 @@ EXPORT_SYMBOL(qdf_dp_trace_proto_pkt);
  * Return: none
  */
 void qdf_dp_display_ptr_record(struct qdf_dp_trace_record_s *record,
-				uint16_t index)
+				uint16_t index, uint8_t pdev_id)
 {
 	struct qdf_dp_trace_ptr_buf *buf =
 		(struct qdf_dp_trace_ptr_buf *)record->data;
@@ -1454,6 +1546,7 @@ EXPORT_SYMBOL(qdf_dp_display_ptr_record);
 /**
  * qdf_dp_trace_ptr() - record dptrace
  * @code: dptrace code
+ * @pdev_id: pdev_id
  * @data: data
  * @size: size of data
  * @msdu_id: msdu_id
@@ -1462,7 +1555,8 @@ EXPORT_SYMBOL(qdf_dp_display_ptr_record);
  * Return: none
  */
 void qdf_dp_trace_ptr(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code,
-		uint8_t *data, uint8_t size, uint16_t msdu_id, uint16_t status)
+		uint8_t pdev_id, uint8_t *data, uint8_t size,
+		uint16_t msdu_id, uint16_t status)
 {
 	struct qdf_dp_trace_ptr_buf buf;
 	int buf_size = sizeof(struct qdf_dp_trace_ptr_buf);
@@ -1476,7 +1570,7 @@ void qdf_dp_trace_ptr(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code,
 	qdf_mem_copy(&buf.cookie, data, size);
 	buf.msdu_id = msdu_id;
 	buf.status = status;
-	qdf_dp_add_record(code, (uint8_t *)&buf, buf_size,
+	qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, pdev_id,
 				QDF_NBUF_CB_DP_TRACE_PRINT(nbuf));
 }
 EXPORT_SYMBOL(qdf_dp_trace_ptr);
@@ -1489,23 +1583,31 @@ EXPORT_SYMBOL(qdf_dp_trace_ptr);
  * Return: None
  */
 void qdf_dp_display_record(struct qdf_dp_trace_record_s *pRecord,
-				uint16_t recIndex)
-{
-	DPTRACE_PRINT("DPT: %04d: %s: %s", recIndex,
-		pRecord->time, qdf_dp_code_to_string(pRecord->code));
-	switch (pRecord->code) {
-	case  QDF_DP_TRACE_HDD_TX_TIMEOUT:
-		DPTRACE_PRINT("DPT: HDD TX Timeout\n");
-		break;
-	case  QDF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT:
-		DPTRACE_PRINT("DPT: HDD SoftAP TX Timeout\n");
-		break;
-	case QDF_DP_TRACE_HDD_TX_PACKET_RECORD:
-	case QDF_DP_TRACE_HDD_RX_PACKET_RECORD:
-		dump_hex_trace("DATA", pRecord->data, pRecord->size);
-		break;
-	default:
-		dump_hex_trace("cookie", pRecord->data, pRecord->size);
+				uint16_t recIndex, uint8_t pdev_id)
+{
+	if (pdev_id == QDF_TRACE_DEFAULT_PDEV_ID ||
+			pdev_id == pRecord->pdev_id) {
+
+		DPTRACE_PRINT("DPT: %04d: PDEV_ID = %d: %s: %s", recIndex,
+			pRecord->pdev_id, pRecord->time,
+			qdf_dp_code_to_string(pRecord->code));
+		switch (pRecord->code) {
+		case  QDF_DP_TRACE_HDD_TX_TIMEOUT:
+			DPTRACE_PRINT("DPT: HDD TX Timeout\n");
+			break;
+		case  QDF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT:
+			DPTRACE_PRINT("DPT: HDD SoftAP TX Timeout\n");
+			break;
+		case QDF_DP_TRACE_HDD_TX_PACKET_RECORD:
+		case QDF_DP_TRACE_HDD_RX_PACKET_RECORD:
+		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:
+			dump_hex_trace("DATA", pRecord->data, pRecord->size);
+			break;
+		default:
+			dump_hex_trace("cookie", pRecord->data, pRecord->size);
+		}
 	}
 }
 EXPORT_SYMBOL(qdf_dp_display_record);
@@ -1515,19 +1617,20 @@ EXPORT_SYMBOL(qdf_dp_display_record);
  * qdf_dp_trace() - Stores the data in buffer
  * @nbuf  : defines the netbuf
  * @code : defines the event
+ * @pdev_id: pdev_id
  * @data : defines the data to be stored
  * @size : defines the size of the data record
  *
  * Return: None
  */
-void qdf_dp_trace(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code,
-			uint8_t *data, uint8_t size, enum qdf_proto_dir dir)
+void qdf_dp_trace(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, uint8_t pdev_id,
+	uint8_t *data, uint8_t size, enum qdf_proto_dir dir)
 {
 
 	if (qdf_dp_enable_check(nbuf, code, dir) == false)
 		return;
 
-	qdf_dp_add_record(code, data, size,
+	qdf_dp_add_record(code, data, size, pdev_id,
 		(nbuf != NULL) ? QDF_NBUF_CB_DP_TRACE_PRINT(nbuf) : false);
 }
 EXPORT_SYMBOL(qdf_dp_trace);
@@ -1587,12 +1690,12 @@ EXPORT_SYMBOL(qdf_dp_trace_clear_buffer);
 /**
  * qdf_dp_trace_dump_all() - Dump data from ring buffer via call back functions
  * registered with QDF
- * @code: Reason code
  * @count: Number of lines to dump starting from tail to head
+ * @pdev_id: pdev_id
  *
  * Return: None
  */
-void qdf_dp_trace_dump_all(uint32_t count)
+void qdf_dp_trace_dump_all(uint32_t count, uint8_t pdev_id)
 {
 	struct qdf_dp_trace_record_s p_record;
 	int32_t i, tail;
@@ -1632,7 +1735,7 @@ void qdf_dp_trace_dump_all(uint32_t count)
 		for (;; ) {
 
 			qdf_dp_trace_cb_table[p_record.
-					   code] (&p_record, (uint16_t)i);
+					code] (&p_record, (uint16_t)i, pdev_id);
 			if (i == tail)
 				break;
 			i += 1;
@@ -1652,26 +1755,6 @@ EXPORT_SYMBOL(qdf_dp_trace_dump_all);
 
 #endif
 
-#else /* CONFIG_MCL */
-
-void qdf_trace_msg(QDF_MODULE_ID module, QDF_TRACE_LEVEL level,
-		char *str_format, ...)
-{
-	va_list val;
-
-	va_start(val, str_format);
-	/*
-	 * TODO: remove this hack when modules start using the qdf_print_ctrl
-	 * framework.
-	 * Any newly added code that wishes to use QDF_TRACE needs to adapt
-	 * to the framework, and using it this way is not encouraged.
-	 */
-	qdf_trace_msg_cmn(qdf_pidx, module, level, str_format, val);
-	va_end(val);
-}
-EXPORT_SYMBOL(qdf_trace_msg);
-#endif /* CONFIG_MCL */
-
 struct qdf_print_ctrl print_ctrl_obj[MAX_PRINT_CONFIG_SUPPORTED];
 
 struct category_name_info g_qdf_category_name[MAX_SUPPORTED_CATEGORY] = {