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
This commit is contained in:
@@ -6676,10 +6676,10 @@ static void dp_txrx_path_stats(struct dp_soc *soc)
|
|||||||
DP_TRACE(FATAL, "hal ring access fail: %u msdus",
|
DP_TRACE(FATAL, "hal ring access fail: %u msdus",
|
||||||
pdev->soc->stats.rx.err.hal_ring_access_fail);
|
pdev->soc->stats.rx.err.hal_ring_access_fail);
|
||||||
|
|
||||||
DP_TRACE(FATAL, "Reo errors");
|
|
||||||
|
|
||||||
for (error_code = 0; error_code < HAL_REO_ERR_MAX;
|
for (error_code = 0; error_code < HAL_REO_ERR_MAX;
|
||||||
error_code++) {
|
error_code++) {
|
||||||
|
if (!pdev->soc->stats.rx.err.reo_error[error_code])
|
||||||
|
continue;
|
||||||
DP_TRACE(FATAL, "Reo error number (%u): %u msdus",
|
DP_TRACE(FATAL, "Reo error number (%u): %u msdus",
|
||||||
error_code,
|
error_code,
|
||||||
pdev->soc->stats.rx.err.reo_error[error_code]);
|
pdev->soc->stats.rx.err.reo_error[error_code]);
|
||||||
@@ -6687,6 +6687,8 @@ static void dp_txrx_path_stats(struct dp_soc *soc)
|
|||||||
|
|
||||||
for (error_code = 0; error_code < HAL_RXDMA_ERR_MAX;
|
for (error_code = 0; error_code < HAL_RXDMA_ERR_MAX;
|
||||||
error_code++) {
|
error_code++) {
|
||||||
|
if (!pdev->soc->stats.rx.err.rxdma_error[error_code])
|
||||||
|
continue;
|
||||||
DP_TRACE(FATAL, "Rxdma error number (%u): %u msdus",
|
DP_TRACE(FATAL, "Rxdma error number (%u): %u msdus",
|
||||||
error_code,
|
error_code,
|
||||||
pdev->soc->stats.rx.err
|
pdev->soc->stats.rx.err
|
||||||
|
@@ -1500,6 +1500,14 @@ done:
|
|||||||
peer_id = DP_PEER_METADATA_PEER_ID_GET(peer_mdata);
|
peer_id = DP_PEER_METADATA_PEER_ID_GET(peer_mdata);
|
||||||
peer = dp_peer_find_by_id(soc, peer_id);
|
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++;
|
rx_bufs_used++;
|
||||||
|
|
||||||
if (deliver_list_head && peer && (vdev != peer->vdev)) {
|
if (deliver_list_head && peer && (vdev != peer->vdev)) {
|
||||||
|
@@ -551,6 +551,34 @@ struct dp_tx_ext_desc_elem_s *dp_tx_prepare_ext_desc(struct dp_vdev *vdev,
|
|||||||
return msdu_ext_desc;
|
return msdu_ext_desc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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
|
* dp_tx_desc_prepare_single - Allocate and prepare Tx descriptor
|
||||||
* @vdev: DP vdev handle
|
* @vdev: DP vdev handle
|
||||||
@@ -597,6 +625,8 @@ struct dp_tx_desc_s *dp_tx_prepare_desc_single(struct dp_vdev *vdev,
|
|||||||
tx_desc->msdu_ext_desc = NULL;
|
tx_desc->msdu_ext_desc = NULL;
|
||||||
tx_desc->pkt_offset = 0;
|
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
|
* For special modes (vdev_type == ocb or mesh), data frames should be
|
||||||
* transmitted using varying transmit parameters (tx spec) which include
|
* transmitted using varying transmit parameters (tx spec) which include
|
||||||
@@ -723,6 +753,8 @@ static struct dp_tx_desc_s *dp_tx_prepare_desc(struct dp_vdev *vdev,
|
|||||||
tx_desc->tso_desc = msdu_info->u.tso_info.curr_seg;
|
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;
|
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 */
|
/* Handle scattered frames - TSO/SG/ME */
|
||||||
/* Allocate and prepare an extension descriptor for scattered frames */
|
/* Allocate and prepare an extension descriptor for scattered frames */
|
||||||
msdu_ext_desc = dp_tx_prepare_ext_desc(vdev, msdu_info, desc_pool_id);
|
msdu_ext_desc = dp_tx_prepare_ext_desc(vdev, msdu_info, desc_pool_id);
|
||||||
@@ -2859,6 +2891,15 @@ static void dp_tx_comp_process_desc(struct dp_soc *soc,
|
|||||||
|
|
||||||
dp_tx_comp_process_tx_status(desc, length);
|
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*/
|
/*currently m_copy/tx_capture is not supported for scatter gather packets*/
|
||||||
if (!(desc->msdu_ext_desc) && (dp_get_completion_indication_for_stack(soc,
|
if (!(desc->msdu_ext_desc) && (dp_get_completion_indication_for_stack(soc,
|
||||||
desc->pdev, ts.peer_id, ts.ppdu_id,
|
desc->pdev, ts.peer_id, ts.ppdu_id,
|
||||||
|
@@ -119,6 +119,7 @@
|
|||||||
#define QDF_NBUF_TX_PKT_INVALID 0
|
#define QDF_NBUF_TX_PKT_INVALID 0
|
||||||
#define QDF_NBUF_TX_PKT_DATA_TRACK 1
|
#define QDF_NBUF_TX_PKT_DATA_TRACK 1
|
||||||
#define QDF_NBUF_TX_PKT_MGMT_TRACK 2
|
#define QDF_NBUF_TX_PKT_MGMT_TRACK 2
|
||||||
|
#define QDF_NBUF_RX_PKT_DATA_TRACK 3
|
||||||
|
|
||||||
/* Different Packet states */
|
/* Different Packet states */
|
||||||
#define QDF_NBUF_TX_PKT_HDD 1
|
#define QDF_NBUF_TX_PKT_HDD 1
|
||||||
|
@@ -67,7 +67,8 @@ typedef int (qdf_abstract_print)(void *priv, const char *fmt, ...);
|
|||||||
/* DP Trace Implementation */
|
/* DP Trace Implementation */
|
||||||
#ifdef CONFIG_DP_TRACE
|
#ifdef CONFIG_DP_TRACE
|
||||||
#define DPTRACE(p) p
|
#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
|
#else
|
||||||
#define DPTRACE(p)
|
#define DPTRACE(p)
|
||||||
#define DPTRACE_PRINT(args...)
|
#define DPTRACE_PRINT(args...)
|
||||||
@@ -188,6 +189,10 @@ typedef struct s_qdf_trace_data {
|
|||||||
* @QDF_DP_TRACE_RX_PACKET_RECORD - record 32 bytes of rx pkt at any layer
|
* @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_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_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_FREE_PACKET_PTR_RECORD - tx completion ptr record
|
||||||
* @QDF_DP_TRACE_LOW_VERBOSITY - below this are part of low verbosity
|
* @QDF_DP_TRACE_LOW_VERBOSITY - below this are part of low verbosity
|
||||||
* @QDF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD - HDD layer ptr record
|
* @QDF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD - HDD layer ptr record
|
||||||
@@ -207,12 +212,11 @@ typedef struct s_qdf_trace_data {
|
|||||||
* @QDF_DP_TRACE_HTC_PACKET_PTR_RECORD - htc packet ptr record
|
* @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_HIF_PACKET_PTR_RECORD - hif packet ptr record
|
||||||
* @QDF_DP_TRACE_RX_TXRX_PACKET_PTR_RECORD - txrx 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
|
* @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
|
* @QDF_DP_TRACE_HIGH_VERBOSITY - below this are part of high verbosity
|
||||||
*/
|
*/
|
||||||
|
|
||||||
enum QDF_DP_TRACE_ID {
|
enum QDF_DP_TRACE_ID {
|
||||||
QDF_DP_TRACE_INVALID,
|
QDF_DP_TRACE_INVALID,
|
||||||
QDF_DP_TRACE_DROP_PACKET_RECORD,
|
QDF_DP_TRACE_DROP_PACKET_RECORD,
|
||||||
@@ -231,6 +235,9 @@ enum QDF_DP_TRACE_ID {
|
|||||||
QDF_DP_TRACE_RX_PACKET_RECORD,
|
QDF_DP_TRACE_RX_PACKET_RECORD,
|
||||||
QDF_DP_TRACE_HDD_TX_PACKET_RECORD,
|
QDF_DP_TRACE_HDD_TX_PACKET_RECORD,
|
||||||
QDF_DP_TRACE_HDD_RX_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_FREE_PACKET_PTR_RECORD,
|
||||||
QDF_DP_TRACE_LOW_VERBOSITY,
|
QDF_DP_TRACE_LOW_VERBOSITY,
|
||||||
QDF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD,
|
QDF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD,
|
||||||
@@ -250,8 +257,6 @@ enum QDF_DP_TRACE_ID {
|
|||||||
QDF_DP_TRACE_HTC_PACKET_PTR_RECORD,
|
QDF_DP_TRACE_HTC_PACKET_PTR_RECORD,
|
||||||
QDF_DP_TRACE_HIF_PACKET_PTR_RECORD,
|
QDF_DP_TRACE_HIF_PACKET_PTR_RECORD,
|
||||||
QDF_DP_TRACE_RX_TXRX_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_LI_DP_NULL_RX_PACKET_RECORD,
|
||||||
QDF_DP_TRACE_HIGH_VERBOSITY,
|
QDF_DP_TRACE_HIGH_VERBOSITY,
|
||||||
QDF_DP_TRACE_MAX
|
QDF_DP_TRACE_MAX
|
||||||
|
@@ -87,87 +87,87 @@ typedef union {
|
|||||||
* @paddr : physical addressed retrieved by dma_map of nbuf->data
|
* @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.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.fctx: ctx to handle special pkts defined by ftype
|
||||||
* @rx.dev.priv_cb_w.reserved1 : reserved
|
* @rx.dev.priv_cb_w.reserved1: reserved
|
||||||
* @rx.dev.priv_cb_w.reserved2 : 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_seq_num: TCP sequence number
|
||||||
* @rx.dev.priv_cb_m.tcp_ack_num : TCP ACK 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.lro_ctx: LRO context
|
||||||
* @rx.dev.priv_cb_m.map_index :
|
* @rx.dev.priv_cb_m.map_index:
|
||||||
* @rx.dev.priv_cb_m.reserved : reserved
|
* @rx.dev.priv_cb_m.reserved: reserved
|
||||||
*
|
*
|
||||||
* @rx.lro_eligible : flag to indicate whether the MSDU is LRO eligible
|
* @rx.lro_eligible: flag to indicate whether the MSDU is LRO eligible
|
||||||
* @rx.peer_cached_buf_frm : peer cached buffer
|
* @rx.peer_cached_buf_frm: peer cached buffer
|
||||||
* @rx.tcp_proto : L4 protocol is TCP
|
* @rx.tcp_proto: L4 protocol is TCP
|
||||||
* @rx.tcp_pure_ack : A TCP ACK packet with no payload
|
* @rx.tcp_pure_ack: A TCP ACK packet with no payload
|
||||||
* @rx.ipv6_proto : L3 protocol is IPV6
|
* @rx.ipv6_proto: L3 protocol is IPV6
|
||||||
* @rx.ip_offset : offset to IP header
|
* @rx.ip_offset: offset to IP header
|
||||||
* @rx.tcp_offset : offset to TCP header
|
* @rx.tcp_offset: offset to TCP header
|
||||||
* @rx_ctx_id : Rx context id
|
* @rx_ctx_id: Rx context id
|
||||||
*
|
*
|
||||||
* @rx.tcp_udp_chksum : L4 payload checksum
|
* @rx.tcp_udp_chksum: L4 payload checksum
|
||||||
* @rx.tcp_wim : TCP window size
|
* @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_start: first MSDU in an AMSDU
|
||||||
* @rx.flag_chfrag_cont : middle or part of 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.flag_chfrag_end: last MSDU in an AMSDU
|
||||||
* @rx.rsrvd : reserved
|
* @rx.rsrvd: reserved
|
||||||
*
|
*
|
||||||
* @rx.trace : combined structure for DP and protocol trace
|
* @rx.trace: combined structure for DP and protocol trace
|
||||||
* @rx.trace.packet_state: {NBUF_TX_PKT_[(HDD)|(TXRX_ENQUEUE)|(TXRX_DEQUEUE)|
|
* @rx.trace.packet_stat: {NBUF_TX_PKT_[(HDD)|(TXRX_ENQUEUE)|(TXRX_DEQUEUE)|
|
||||||
* + (TXRX)|(HTT)|(HTC)|(HIF)|(CE)|(FREE)]
|
* + (TXRX)|(HTT)|(HTC)|(HIF)|(CE)|(FREE)]
|
||||||
* @rx.trace.dp_trace : flag (Datapath trace)
|
* @rx.trace.dp_trace: flag (Datapath trace)
|
||||||
* @rx.trace.rsrvd : enable packet logging
|
* @rx.trace.packet_track: RX_DATA packet
|
||||||
|
* @rx.trace.rsrvd: enable packet logging
|
||||||
*
|
*
|
||||||
* @rx.ftype : mcast2ucast, TSO, SG, MESH
|
* @rx.ftype: mcast2ucast, TSO, SG, MESH
|
||||||
* @rx.reserved : reserved
|
* @rx.reserved: reserved
|
||||||
*
|
*
|
||||||
* @tx.dev.priv_cb_w.fctx : ctx to handle special pkts defined by ftype
|
* @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.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
|
* + (1) CE classification enablement bit
|
||||||
* + (2) packet type (802.3 or Ethernet type II)
|
* + (2) packet type (802.3 or Ethernet type II)
|
||||||
* + (3) packet offset (usually length of HTC/HTT descr)
|
* + (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.owned: packet owned by IPA
|
||||||
* @tx.dev.priv_cb_m.ipa.priv : private data, used 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.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.mgmt_desc_id: mgmt descriptor for tx completion cb
|
||||||
* @tx.dev.priv_cb_m.reserved : reserved
|
* @tx.dev.priv_cb_m.reserved: reserved
|
||||||
*
|
*
|
||||||
* @tx.ftype : mcast2ucast, TSO, SG, MESH
|
* @tx.ftype: mcast2ucast, TSO, SG, MESH
|
||||||
* @tx.vdev_id : vdev (for protocol trace)
|
* @tx.vdev_id: vdev (for protocol trace)
|
||||||
* @tx.len : length of efrag pointed by the above pointers
|
* @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.flag_efrag: flag, efrag payload to be swapped (wordstream)
|
||||||
* @tx.flags.bits.num : number of extra frags ( 0 or 1)
|
* @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.nbuf: flag, nbuf payload to be swapped (wordstream)
|
||||||
* @tx.flags.bits.flag_chfrag_start : first MSDU in an AMSDU
|
* @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_cont: middle or part of MSDU in an AMSDU
|
||||||
* @tx.flags.bits.flag_chfrag_end : last 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.flag_ext_header: extended flags
|
||||||
* @tx.flags.bits.reserved : reserved
|
* @tx.flags.bits.reserved: reserved
|
||||||
* @tx.trace : combined structure for DP and protocol trace
|
* @tx.trace: combined structure for DP and protocol trace
|
||||||
* @tx.trace.packet_state: {NBUF_TX_PKT_[(HDD)|(TXRX_ENQUEUE)|(TXRX_DEQUEUE)|
|
* @tx.trace.packet_stat: {NBUF_TX_PKT_[(HDD)|(TXRX_ENQUEUE)|(TXRX_DEQUEUE)|
|
||||||
* + (TXRX)|(HTT)|(HTC)|(HIF)|(CE)|(FREE)]
|
* + (TXRX)|(HTT)|(HTC)|(HIF)|(CE)|(FREE)]
|
||||||
* @tx.trace.is_packet_priv :
|
* @tx.trace.is_packet_priv:
|
||||||
* @tx.trace.packet_track : {NBUF_TX_PKT_[(DATA)|(MGMT)]_TRACK}
|
* @tx.trace.packet_track: {NBUF_TX_PKT_[(DATA)|(MGMT)]_TRACK}
|
||||||
* @tx.trace.proto_type : bitmap of NBUF_PKT_TRAC_TYPE[(EAPOL)|(DHCP)|
|
* @tx.trace.proto_type: bitmap of NBUF_PKT_TRAC_TYPE[(EAPOL)|(DHCP)|
|
||||||
* + (MGMT_ACTION)] - 4 bits
|
* + (MGMT_ACTION)] - 4 bits
|
||||||
* @tx.trace.dp_trace : flag (Datapath trace)
|
* @tx.trace.dp_trace: flag (Datapath trace)
|
||||||
* @tx.trace.is_bcast : flag (Broadcast packet)
|
* @tx.trace.is_bcast: flag (Broadcast packet)
|
||||||
* @tx.trace.is_mcast : flag (Multicast packet)
|
* @tx.trace.is_mcast: flag (Multicast packet)
|
||||||
* @tx.trace.packet_type : flag (Packet type)
|
* @tx.trace.packet_type: flag (Packet type)
|
||||||
* @tx.trace.htt2_frm : flag (high-latency path only)
|
* @tx.trace.htt2_frm: flag (high-latency path only)
|
||||||
* @tx.trace.print : enable packet logging
|
* @tx.trace.print: enable packet logging
|
||||||
*
|
*
|
||||||
* @tx.vaddr : virtual address of ~
|
* @tx.vaddr: virtual address of ~
|
||||||
* @tx.paddr : physical/DMA address of ~
|
* @tx.paddr: physical/DMA address of ~
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct qdf_nbuf_cb {
|
struct qdf_nbuf_cb {
|
||||||
/* common */
|
/* common */
|
||||||
qdf_paddr_t paddr; /* of skb->data */
|
qdf_paddr_t paddr; /* of skb->data */
|
||||||
@@ -208,7 +208,8 @@ struct qdf_nbuf_cb {
|
|||||||
union {
|
union {
|
||||||
uint8_t packet_state;
|
uint8_t packet_state;
|
||||||
uint8_t dp_trace:1,
|
uint8_t dp_trace:1,
|
||||||
rsrvd:1;
|
packet_track:4,
|
||||||
|
rsrvd:3;
|
||||||
} trace;
|
} trace;
|
||||||
uint8_t ftype;
|
uint8_t ftype;
|
||||||
uint8_t reserved;
|
uint8_t reserved;
|
||||||
@@ -378,6 +379,10 @@ QDF_COMPILE_TIME_ASSERT(qdf_nbuf_cb_size,
|
|||||||
(((struct qdf_nbuf_cb *) \
|
(((struct qdf_nbuf_cb *) \
|
||||||
((skb)->cb))->u.tx.trace.packet_track)
|
((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)\
|
#define QDF_NBUF_CB_TX_PROTO_TYPE(skb)\
|
||||||
(((struct qdf_nbuf_cb *) \
|
(((struct qdf_nbuf_cb *) \
|
||||||
((skb)->cb))->u.tx.trace.proto_type)
|
((skb)->cb))->u.tx.trace.proto_type)
|
||||||
|
@@ -870,11 +870,14 @@ void qdf_dp_trace_init(bool live_mode_config, uint8_t thresh,
|
|||||||
qdf_dp_trace_cb_table[QDF_DP_TRACE_TX_PACKET_RECORD] =
|
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_RX_PACKET_RECORD] =
|
||||||
qdf_dp_trace_cb_table[QDF_DP_TRACE_DROP_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_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_PACKET_PTR_RECORD] =
|
||||||
qdf_dp_trace_cb_table[QDF_DP_TRACE_TXRX_FAST_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_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_display_ptr_record;
|
||||||
qdf_dp_trace_cb_table[QDF_DP_TRACE_EAPOL_PACKET_RECORD] =
|
qdf_dp_trace_cb_table[QDF_DP_TRACE_EAPOL_PACKET_RECORD] =
|
||||||
qdf_dp_trace_cb_table[QDF_DP_TRACE_DHCP_PACKET_RECORD] =
|
qdf_dp_trace_cb_table[QDF_DP_TRACE_DHCP_PACKET_RECORD] =
|
||||||
@@ -983,7 +986,7 @@ qdf_export_symbol(qdf_dp_get_no_of_record);
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
* @code: defines the event
|
||||||
*
|
*
|
||||||
* In High verbosity all codes are logged.
|
* In High verbosity all codes are logged.
|
||||||
@@ -993,7 +996,7 @@ qdf_export_symbol(qdf_dp_get_no_of_record);
|
|||||||
*
|
*
|
||||||
* Return: true or false depends on whether tracing enabled
|
* 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) {
|
switch (g_qdf_dp_trace_data.verbosity) {
|
||||||
case QDF_DP_TRACE_VERBOSITY_HIGH:
|
case QDF_DP_TRACE_VERBOSITY_HIGH:
|
||||||
@@ -1010,7 +1013,6 @@ static bool qdf_dp_trace_enable_track(enum QDF_DP_TRACE_ID code)
|
|||||||
if (code <= QDF_DP_TRACE_ULTRA_LOW_VERBOSITY)
|
if (code <= QDF_DP_TRACE_ULTRA_LOW_VERBOSITY)
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
case QDF_DP_TRACE_VERBOSITY_BASE:
|
case QDF_DP_TRACE_VERBOSITY_BASE:
|
||||||
if (code <= QDF_DP_TRACE_BASE_VERBOSITY)
|
if (code <= QDF_DP_TRACE_BASE_VERBOSITY)
|
||||||
return true;
|
return true;
|
||||||
@@ -1019,7 +1021,6 @@ static bool qdf_dp_trace_enable_track(enum QDF_DP_TRACE_ID code)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
qdf_export_symbol(qdf_dp_trace_enable_track);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* qdf_dp_get_proto_bitmap() - get dp trace proto bitmap
|
* qdf_dp_get_proto_bitmap() - get dp trace proto bitmap
|
||||||
@@ -1136,7 +1137,6 @@ const char *qdf_dp_code_to_string(enum QDF_DP_TRACE_ID code)
|
|||||||
case QDF_DP_TRACE_HDD_TX_PACKET_RECORD:
|
case QDF_DP_TRACE_HDD_TX_PACKET_RECORD:
|
||||||
return "HDD: TX: DATA:";
|
return "HDD: TX: DATA:";
|
||||||
case QDF_DP_TRACE_LI_DP_TX_PACKET_RECORD:
|
case QDF_DP_TRACE_LI_DP_TX_PACKET_RECORD:
|
||||||
return "LI_DP: TX: DATA:";
|
|
||||||
case QDF_DP_TRACE_TX_PACKET_RECORD:
|
case QDF_DP_TRACE_TX_PACKET_RECORD:
|
||||||
return "TX:";
|
return "TX:";
|
||||||
case QDF_DP_TRACE_CE_PACKET_PTR_RECORD:
|
case QDF_DP_TRACE_CE_PACKET_PTR_RECORD:
|
||||||
@@ -1145,6 +1145,7 @@ const char *qdf_dp_code_to_string(enum QDF_DP_TRACE_ID code)
|
|||||||
return "CE: TX: FAST: PTR:";
|
return "CE: TX: FAST: PTR:";
|
||||||
case QDF_DP_TRACE_CE_FAST_PACKET_ERR_RECORD:
|
case QDF_DP_TRACE_CE_FAST_PACKET_ERR_RECORD:
|
||||||
return "CE: TX: FAST: ERR:";
|
return "CE: TX: FAST: ERR:";
|
||||||
|
case QDF_DP_TRACE_LI_DP_FREE_PACKET_PTR_RECORD:
|
||||||
case QDF_DP_TRACE_FREE_PACKET_PTR_RECORD:
|
case QDF_DP_TRACE_FREE_PACKET_PTR_RECORD:
|
||||||
return "FREE: TX: PTR:";
|
return "FREE: TX: PTR:";
|
||||||
case QDF_DP_TRACE_RX_HTT_PACKET_PTR_RECORD:
|
case QDF_DP_TRACE_RX_HTT_PACKET_PTR_RECORD:
|
||||||
@@ -1157,10 +1158,9 @@ const char *qdf_dp_code_to_string(enum QDF_DP_TRACE_ID code)
|
|||||||
return "LI_DP: RX: PTR:";
|
return "LI_DP: RX: PTR:";
|
||||||
case QDF_DP_TRACE_HDD_RX_PACKET_RECORD:
|
case QDF_DP_TRACE_HDD_RX_PACKET_RECORD:
|
||||||
return "HDD: RX: DATA:";
|
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:
|
case QDF_DP_TRACE_LI_DP_NULL_RX_PACKET_RECORD:
|
||||||
return "LI_DP_NULL: RX: DATA:";
|
return "LI_DP_NULL: RX: DATA:";
|
||||||
|
case QDF_DP_TRACE_LI_DP_RX_PACKET_RECORD:
|
||||||
case QDF_DP_TRACE_RX_PACKET_RECORD:
|
case QDF_DP_TRACE_RX_PACKET_RECORD:
|
||||||
return "RX:";
|
return "RX:";
|
||||||
case QDF_DP_TRACE_TXRX_QUEUE_PACKET_PTR_RECORD:
|
case QDF_DP_TRACE_TXRX_QUEUE_PACKET_PTR_RECORD:
|
||||||
@@ -1301,9 +1301,10 @@ static const char *qdf_dp_subtype_to_str(enum qdf_proto_subtype subtype)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
* @nbuf: nbuf
|
||||||
* @code: dptrace code
|
* @code: dptrace code
|
||||||
|
* @dir: TX or RX direction
|
||||||
*
|
*
|
||||||
* Return: true/false
|
* Return: true/false
|
||||||
*/
|
*/
|
||||||
@@ -1314,13 +1315,18 @@ static bool qdf_dp_enable_check(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code,
|
|||||||
if (!g_qdf_dp_trace_data.enable)
|
if (!g_qdf_dp_trace_data.enable)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (qdf_dp_trace_enable_track(code) == false)
|
if (qdf_dp_trace_verbosity_check(code) == false)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if ((nbuf) && ((QDF_NBUF_CB_TX_PACKET_TRACK(nbuf) !=
|
if (!nbuf)
|
||||||
QDF_NBUF_TX_PKT_DATA_TRACK) ||
|
return false;
|
||||||
((dir == QDF_TX) && (QDF_NBUF_CB_TX_DP_TRACE(nbuf) == 0)) ||
|
|
||||||
((dir == QDF_RX) && (QDF_NBUF_CB_RX_DP_TRACE(nbuf) == 0))))
|
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 false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -1450,7 +1456,7 @@ static void qdf_dp_add_record(enum QDF_DP_TRACE_ID code, uint8_t pdev_id,
|
|||||||
g_qdf_dp_trace_data.high_tput_thresh) {
|
g_qdf_dp_trace_data.high_tput_thresh) {
|
||||||
g_qdf_dp_trace_data.live_mode = 0;
|
g_qdf_dp_trace_data.live_mode = 0;
|
||||||
g_qdf_dp_trace_data.verbosity =
|
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;
|
info |= QDF_DP_TRACE_RECORD_INFO_THROTTLED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1524,17 +1530,18 @@ static bool qdf_log_icmpv6_pkt(uint8_t session_id, struct sk_buff *skb,
|
|||||||
(dir == QDF_RX && qdf_nbuf_is_icmpv6_pkt(skb) == true))) {
|
(dir == QDF_RX && qdf_nbuf_is_icmpv6_pkt(skb) == true))) {
|
||||||
|
|
||||||
subtype = qdf_nbuf_get_icmpv6_subtype(skb);
|
subtype = qdf_nbuf_get_icmpv6_subtype(skb);
|
||||||
DPTRACE(qdf_dp_trace_proto_pkt(
|
|
||||||
QDF_DP_TRACE_ICMPv6_PACKET_RECORD,
|
QDF_NBUF_CB_DP_TRACE_PRINT(skb) = false;
|
||||||
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));
|
|
||||||
if (dir == QDF_TX)
|
if (dir == QDF_TX)
|
||||||
QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
|
QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
|
||||||
else if (dir == QDF_RX)
|
else if (dir == QDF_RX)
|
||||||
QDF_NBUF_CB_RX_DP_TRACE(skb) = 1;
|
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) {
|
switch (subtype) {
|
||||||
case QDF_PROTO_ICMPV6_REQ:
|
case QDF_PROTO_ICMPV6_REQ:
|
||||||
@@ -1580,17 +1587,23 @@ static bool qdf_log_icmp_pkt(uint8_t session_id, struct sk_buff *skb,
|
|||||||
if ((qdf_dp_get_proto_bitmap() & QDF_NBUF_PKT_TRAC_TYPE_ICMP) &&
|
if ((qdf_dp_get_proto_bitmap() & QDF_NBUF_PKT_TRAC_TYPE_ICMP) &&
|
||||||
(qdf_nbuf_is_icmp_pkt(skb) == true)) {
|
(qdf_nbuf_is_icmp_pkt(skb) == true)) {
|
||||||
|
|
||||||
|
QDF_NBUF_CB_DP_TRACE_PRINT(skb) = false;
|
||||||
proto_subtype = qdf_nbuf_get_icmp_subtype(skb);
|
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)
|
if (QDF_TX == dir)
|
||||||
QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
|
QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
|
||||||
else if (QDF_RX == dir)
|
else if (QDF_RX == dir)
|
||||||
QDF_NBUF_CB_RX_DP_TRACE(skb) = 1;
|
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)
|
if (proto_subtype == QDF_PROTO_ICMP_REQ)
|
||||||
g_qdf_dp_trace_data.icmp_req++;
|
g_qdf_dp_trace_data.icmp_req++;
|
||||||
@@ -1622,15 +1635,21 @@ static bool qdf_log_eapol_pkt(uint8_t session_id, struct sk_buff *skb,
|
|||||||
(dir == QDF_RX && qdf_nbuf_is_ipv4_eapol_pkt(skb) == true))) {
|
(dir == QDF_RX && qdf_nbuf_is_ipv4_eapol_pkt(skb) == true))) {
|
||||||
|
|
||||||
subtype = qdf_nbuf_get_eapol_subtype(skb);
|
subtype = qdf_nbuf_get_eapol_subtype(skb);
|
||||||
DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_EAPOL_PACKET_RECORD,
|
QDF_NBUF_CB_DP_TRACE_PRINT(skb) = true;
|
||||||
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));
|
|
||||||
if (QDF_TX == dir)
|
if (QDF_TX == dir)
|
||||||
QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
|
QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
|
||||||
else if (QDF_RX == dir)
|
else if (QDF_RX == dir)
|
||||||
QDF_NBUF_CB_RX_DP_TRACE(skb) = 1;
|
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) {
|
switch (subtype) {
|
||||||
case QDF_PROTO_EAPOL_M1:
|
case QDF_PROTO_EAPOL_M1:
|
||||||
g_qdf_dp_trace_data.eapol_m1++;
|
g_qdf_dp_trace_data.eapol_m1++;
|
||||||
@@ -1648,7 +1667,6 @@ static bool qdf_log_eapol_pkt(uint8_t session_id, struct sk_buff *skb,
|
|||||||
g_qdf_dp_trace_data.eapol_others++;
|
g_qdf_dp_trace_data.eapol_others++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
QDF_NBUF_CB_DP_TRACE_PRINT(skb) = true;
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -1674,17 +1692,21 @@ static bool qdf_log_dhcp_pkt(uint8_t session_id, struct sk_buff *skb,
|
|||||||
(dir == QDF_RX && qdf_nbuf_is_ipv4_dhcp_pkt(skb) == true))) {
|
(dir == QDF_RX && qdf_nbuf_is_ipv4_dhcp_pkt(skb) == true))) {
|
||||||
|
|
||||||
subtype = qdf_nbuf_get_dhcp_subtype(skb);
|
subtype = qdf_nbuf_get_dhcp_subtype(skb);
|
||||||
DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_DHCP_PACKET_RECORD,
|
QDF_NBUF_CB_DP_TRACE_PRINT(skb) = true;
|
||||||
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));
|
|
||||||
|
|
||||||
if (QDF_TX == dir)
|
if (QDF_TX == dir)
|
||||||
QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
|
QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
|
||||||
else if (QDF_RX == dir)
|
else if (QDF_RX == dir)
|
||||||
QDF_NBUF_CB_RX_DP_TRACE(skb) = 1;
|
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) {
|
switch (subtype) {
|
||||||
case QDF_PROTO_DHCP_DISCOVER:
|
case QDF_PROTO_DHCP_DISCOVER:
|
||||||
g_qdf_dp_trace_data.dhcp_disc++;
|
g_qdf_dp_trace_data.dhcp_disc++;
|
||||||
@@ -1731,16 +1753,21 @@ static bool qdf_log_arp_pkt(uint8_t session_id, struct sk_buff *skb,
|
|||||||
(dir == QDF_RX && qdf_nbuf_is_ipv4_arp_pkt(skb) == true))) {
|
(dir == QDF_RX && qdf_nbuf_is_ipv4_arp_pkt(skb) == true))) {
|
||||||
|
|
||||||
proto_subtype = qdf_nbuf_get_arp_subtype(skb);
|
proto_subtype = qdf_nbuf_get_arp_subtype(skb);
|
||||||
DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_ARP_PACKET_RECORD,
|
QDF_NBUF_CB_DP_TRACE_PRINT(skb) = true;
|
||||||
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_TX == dir)
|
if (QDF_TX == dir)
|
||||||
QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
|
QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
|
||||||
else if (QDF_RX == dir)
|
else if (QDF_RX == dir)
|
||||||
QDF_NBUF_CB_RX_DP_TRACE(skb) = 1;
|
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)
|
if (QDF_PROTO_ARP_REQ == proto_subtype)
|
||||||
g_qdf_dp_trace_data.arp_req++;
|
g_qdf_dp_trace_data.arp_req++;
|
||||||
@@ -1886,13 +1913,14 @@ void qdf_dp_display_proto_pkt(struct qdf_dp_trace_record_s *record,
|
|||||||
loc = qdf_dp_trace_fill_meta_str(prepend_str, sizeof(prepend_str),
|
loc = qdf_dp_trace_fill_meta_str(prepend_str, sizeof(prepend_str),
|
||||||
index, info, record);
|
index, info, record);
|
||||||
DPTRACE_PRINT("%s [%d] [%s] SA: "
|
DPTRACE_PRINT("%s [%d] [%s] SA: "
|
||||||
QDF_MAC_ADDR_STR " %s DA: "
|
QDF_MAC_ADDR_STR " %s DA: "
|
||||||
QDF_MAC_ADDR_STR,
|
QDF_MAC_ADDR_STR,
|
||||||
prepend_str,
|
prepend_str,
|
||||||
buf->vdev_id,
|
buf->vdev_id,
|
||||||
qdf_dp_subtype_to_str(buf->subtype),
|
qdf_dp_subtype_to_str(buf->subtype),
|
||||||
QDF_MAC_ADDR_ARRAY(buf->sa.bytes),
|
QDF_MAC_ADDR_ARRAY(buf->sa.bytes),
|
||||||
qdf_dp_dir_to_str(buf->dir), QDF_MAC_ADDR_ARRAY(buf->da.bytes));
|
qdf_dp_dir_to_str(buf->dir),
|
||||||
|
QDF_MAC_ADDR_ARRAY(buf->da.bytes));
|
||||||
}
|
}
|
||||||
qdf_export_symbol(qdf_dp_display_proto_pkt);
|
qdf_export_symbol(qdf_dp_display_proto_pkt);
|
||||||
|
|
||||||
@@ -1928,6 +1956,11 @@ void qdf_dp_display_ptr_record(struct qdf_dp_trace_record_s *record,
|
|||||||
char prepend_str[QDF_DP_TRACE_PREPEND_STR_SIZE];
|
char prepend_str[QDF_DP_TRACE_PREPEND_STR_SIZE];
|
||||||
struct qdf_dp_trace_ptr_buf *buf =
|
struct qdf_dp_trace_ptr_buf *buf =
|
||||||
(struct qdf_dp_trace_ptr_buf *)record->data;
|
(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));
|
qdf_mem_set(prepend_str, 0, sizeof(prepend_str));
|
||||||
loc = qdf_dp_trace_fill_meta_str(prepend_str, sizeof(prepend_str),
|
loc = qdf_dp_trace_fill_meta_str(prepend_str, sizeof(prepend_str),
|
||||||
@@ -1937,9 +1970,7 @@ void qdf_dp_display_ptr_record(struct qdf_dp_trace_record_s *record,
|
|||||||
scnprintf(&prepend_str[loc], sizeof(prepend_str) - loc,
|
scnprintf(&prepend_str[loc], sizeof(prepend_str) - loc,
|
||||||
"[msdu id %d %s %d]",
|
"[msdu id %d %s %d]",
|
||||||
buf->msdu_id,
|
buf->msdu_id,
|
||||||
(record->code ==
|
is_free_pkt_ptr_record ? "status" : "vdev_id",
|
||||||
QDF_DP_TRACE_FREE_PACKET_PTR_RECORD) ?
|
|
||||||
"status" : "vdev_id",
|
|
||||||
buf->status);
|
buf->status);
|
||||||
|
|
||||||
if (info & QDF_DP_TRACE_RECORD_INFO_LIVE) {
|
if (info & QDF_DP_TRACE_RECORD_INFO_LIVE) {
|
||||||
@@ -2027,8 +2058,6 @@ void qdf_dp_display_record(struct qdf_dp_trace_record_s *record,
|
|||||||
case QDF_DP_TRACE_CE_FAST_PACKET_ERR_RECORD:
|
case QDF_DP_TRACE_CE_FAST_PACKET_ERR_RECORD:
|
||||||
DPTRACE_PRINT(" %s: CE Fast Packet Error", prepend_str);
|
DPTRACE_PRINT(" %s: CE Fast Packet Error", prepend_str);
|
||||||
break;
|
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:
|
case QDF_DP_TRACE_LI_DP_NULL_RX_PACKET_RECORD:
|
||||||
default:
|
default:
|
||||||
dump_dp_hex_trace(prepend_str, record->data, record->size);
|
dump_dp_hex_trace(prepend_str, record->data, record->size);
|
||||||
@@ -2136,7 +2165,9 @@ qdf_export_symbol(qdf_dp_trace_clear_buffer);
|
|||||||
|
|
||||||
void qdf_dp_trace_dump_stats(void)
|
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_req,
|
||||||
g_qdf_dp_trace_data.icmp_resp,
|
g_qdf_dp_trace_data.icmp_resp,
|
||||||
g_qdf_dp_trace_data.arp_req,
|
g_qdf_dp_trace_data.arp_req,
|
||||||
@@ -2493,6 +2524,9 @@ QDF_STATUS qdf_dpt_dump_stats_debugfs(qdf_debugfs_file_t file,
|
|||||||
case QDF_DP_TRACE_HDD_RX_PACKET_RECORD:
|
case QDF_DP_TRACE_HDD_RX_PACKET_RECORD:
|
||||||
case QDF_DP_TRACE_TX_PACKET_RECORD:
|
case QDF_DP_TRACE_TX_PACKET_RECORD:
|
||||||
case QDF_DP_TRACE_RX_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:
|
default:
|
||||||
qdf_dpt_display_record_debugfs(file, &p_record, i);
|
qdf_dpt_display_record_debugfs(file, &p_record, i);
|
||||||
break;
|
break;
|
||||||
@@ -2646,8 +2680,6 @@ void qdf_dp_trace_throttle_live_mode(bool high_bw_request)
|
|||||||
g_qdf_dp_trace_data.live_mode = 1;
|
g_qdf_dp_trace_data.live_mode = 1;
|
||||||
|
|
||||||
g_qdf_dp_trace_data.print_pkt_cnt = 0;
|
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);
|
spin_unlock_bh(&l_dp_trace_lock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2655,18 +2687,20 @@ qdf_export_symbol(qdf_dp_trace_throttle_live_mode);
|
|||||||
|
|
||||||
void qdf_dp_trace_apply_tput_policy(bool is_data_traffic)
|
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;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (is_data_traffic) {
|
if (is_data_traffic) {
|
||||||
g_qdf_dp_trace_data.verbosity =
|
g_qdf_dp_trace_data.verbosity =
|
||||||
QDF_DP_TRACE_ULTRA_LOW_VERBOSITY;
|
QDF_DP_TRACE_VERBOSITY_ULTRA_LOW;
|
||||||
qdf_dp_trace_throttle_live_mode(true);
|
|
||||||
} else {
|
} else {
|
||||||
g_qdf_dp_trace_data.verbosity =
|
g_qdf_dp_trace_data.verbosity =
|
||||||
g_qdf_dp_trace_data.ini_conf_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
|
#endif
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user