diff --git a/hif/src/ce/ce_main.c b/hif/src/ce/ce_main.c index 286c742d7c..d91d991d12 100644 --- a/hif/src/ce/ce_main.c +++ b/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); diff --git a/hif/src/ce/ce_service.c b/hif/src/ce/ce_service.c index 136be8bd60..86cdcc8909 100644 --- a/hif/src/ce/ce_service.c +++ b/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)); } diff --git a/hif/src/ce/ce_service_srng.c b/hif/src/ce/ce_service_srng.c index 51c8411485..c9e2458316 100644 --- a/hif/src/ce/ce_service_srng.c +++ b/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 { diff --git a/htc/htc_send.c b/htc/htc_send.c index 38e46a17e9..172a5c2a4d 100644 --- a/htc/htc_send.c +++ b/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) { diff --git a/qdf/inc/qdf_nbuf.h b/qdf/inc/qdf_nbuf.h index 3eab871bbe..19243d1382 100644 --- a/qdf/inc/qdf_nbuf.h +++ b/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 diff --git a/qdf/inc/qdf_trace.h b/qdf/inc/qdf_trace.h index 81d2d64c58..9f9f0e063e 100644 --- a/qdf/inc/qdf_trace.h +++ b/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 diff --git a/qdf/linux/src/i_qdf_nbuf.h b/qdf/linux/src/i_qdf_nbuf.h index 727f96f586..1812b8a2bd 100644 --- a/qdf/linux/src/i_qdf_nbuf.h +++ b/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_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) +#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.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); diff --git a/qdf/linux/src/i_qdf_trace.h b/qdf/linux/src/i_qdf_trace.h index 1ec827fe39..5c53f1be14 100644 --- a/qdf/linux/src/i_qdf_trace.h +++ b/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, ...) { } diff --git a/qdf/linux/src/qdf_nbuf.c b/qdf/linux/src/qdf_nbuf.c index 0ddc32058e..88665521dc 100644 --- a/qdf/linux/src/qdf_nbuf.c +++ b/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); diff --git a/qdf/linux/src/qdf_trace.c b/qdf/linux/src/qdf_trace.c index 62552a267a..188c0600f7 100644 --- a/qdf/linux/src/qdf_trace.c +++ b/qdf/linux/src/qdf_trace.c @@ -41,7 +41,6 @@ #include #include 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) + uint16_t recIndex, uint8_t pdev_id) { - 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); + 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] = {