qcacmn: Add packet logging support for initial 32 packets

Add packet logging support by registering
Rx and Tx callback functions for packet logging of
initial 32 Tx and Rx packets.

Change-Id: I91b59b7c5f65f505e3ee730c497347be28955128
CRs-Fixed: 3224881
This commit is contained in:
Amit Mehta
2022-05-30 06:09:09 -07:00
committed by Madan Koyyalamudi
parent 06c5d97195
commit 6b576c65bb
8 changed files with 150 additions and 0 deletions

View File

@@ -592,6 +592,8 @@ done:
tid_stats = tid_stats =
&rx_pdev->stats.tid_stats.tid_rx_stats[reo_ring_num][tid]; &rx_pdev->stats.tid_stats.tid_rx_stats[reo_ring_num][tid];
dp_rx_send_pktlog(soc, rx_pdev, nbuf, QDF_TX_RX_STATUS_OK);
/* /*
* Check if DMA completed -- msdu_done is the last bit * Check if DMA completed -- msdu_done is the last bit
* to be written * to be written

View File

@@ -3647,4 +3647,68 @@ QDF_STATUS
dp_get_peer_telemetry_stats(struct cdp_soc_t *soc_hdl, uint8_t *addr, dp_get_peer_telemetry_stats(struct cdp_soc_t *soc_hdl, uint8_t *addr,
struct cdp_peer_telemetry_stats *stats); struct cdp_peer_telemetry_stats *stats);
#endif /* WLAN_TELEMETRY_STATS_SUPPORT */ #endif /* WLAN_TELEMETRY_STATS_SUPPORT */
#ifdef CONNECTIVITY_PKTLOG
/*
* dp_tx_send_pktlog() - send tx packet log
* @soc: soc handle
* @pdev: pdev handle
* @nbuf: nbuf
* @status: status of tx packet
*
* This function is used to send tx packet for logging
*
* Return: None
*
*/
static inline
void dp_tx_send_pktlog(struct dp_soc *soc, struct dp_pdev *pdev,
qdf_nbuf_t nbuf, enum qdf_dp_tx_rx_status status)
{
ol_txrx_pktdump_cb packetdump_cb = pdev->dp_tx_packetdump_cb;
if (qdf_unlikely(packetdump_cb)) {
packetdump_cb((ol_txrx_soc_handle)soc, pdev->pdev_id,
QDF_NBUF_CB_TX_VDEV_CTX(nbuf),
nbuf, status, QDF_TX_DATA_PKT);
}
}
/*
* dp_rx_send_pktlog() - send rx packet log
* @soc: soc handle
* @pdev: pdev handle
* @nbuf: nbuf
* @status: status of rx packet
*
* This function is used to send rx packet for logging
*
* Return: None
*
*/
static inline
void dp_rx_send_pktlog(struct dp_soc *soc, struct dp_pdev *pdev,
qdf_nbuf_t nbuf, enum qdf_dp_tx_rx_status status)
{
ol_txrx_pktdump_cb packetdump_cb = pdev->dp_rx_packetdump_cb;
if (qdf_unlikely(packetdump_cb)) {
packetdump_cb((ol_txrx_soc_handle)soc, pdev->pdev_id,
QDF_NBUF_CB_RX_VDEV_ID(nbuf),
nbuf, status, QDF_RX_DATA_PKT);
}
}
#else
static inline
void dp_tx_send_pktlog(struct dp_soc *soc, struct dp_pdev *pdev,
qdf_nbuf_t nbuf, enum qdf_dp_tx_rx_status status)
{
}
static inline
void dp_rx_send_pktlog(struct dp_soc *soc, struct dp_pdev *pdev,
qdf_nbuf_t nbuf, enum qdf_dp_tx_rx_status status)
{
}
#endif
#endif /* #ifndef _DP_INTERNAL_H_ */ #endif /* #ifndef _DP_INTERNAL_H_ */

View File

@@ -13445,6 +13445,72 @@ static int dp_set_peer_txq_flush_config(struct cdp_soc_t *soc_hdl,
} }
#endif #endif
#ifdef CONNECTIVITY_PKTLOG
/**
* dp_register_packetdump_callback() - registers
* tx data packet, tx mgmt. packet and rx data packet
* dump callback handler.
*
* @soc_hdl: Datapath soc handle
* @pdev_id: id of data path pdev handle
* @dp_tx_packetdump_cb: tx packetdump cb
* @dp_rx_packetdump_cb: rx packetdump cb
*
* This function is used to register tx data pkt, tx mgmt.
* pkt and rx data pkt dump callback
*
* Return: None
*
*/
static inline
void dp_register_packetdump_callback(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
ol_txrx_pktdump_cb dp_tx_packetdump_cb,
ol_txrx_pktdump_cb dp_rx_packetdump_cb)
{
struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
struct dp_pdev *pdev;
pdev = dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id);
if (!pdev) {
dp_err("pdev is NULL!");
return;
}
pdev->dp_tx_packetdump_cb = dp_tx_packetdump_cb;
pdev->dp_rx_packetdump_cb = dp_rx_packetdump_cb;
}
/**
* dp_deregister_packetdump_callback() - deregidters
* tx data packet, tx mgmt. packet and rx data packet
* dump callback handler
* @soc_hdl: Datapath soc handle
* @pdev_id: id of data path pdev handle
*
* This function is used to deregidter tx data pkt.,
* tx mgmt. pkt and rx data pkt. dump callback
*
* Return: None
*
*/
static inline
void dp_deregister_packetdump_callback(struct cdp_soc_t *soc_hdl,
uint8_t pdev_id)
{
struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
struct dp_pdev *pdev;
pdev = dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id);
if (!pdev) {
dp_err("pdev is NULL!");
return;
}
pdev->dp_tx_packetdump_cb = NULL;
pdev->dp_rx_packetdump_cb = NULL;
}
#endif
#ifdef DP_PEER_EXTENDED_API #ifdef DP_PEER_EXTENDED_API
static struct cdp_misc_ops dp_ops_misc = { static struct cdp_misc_ops dp_ops_misc = {
#ifdef FEATURE_WLAN_TDLS #ifdef FEATURE_WLAN_TDLS
@@ -13481,6 +13547,10 @@ static struct cdp_misc_ops dp_ops_misc = {
#ifdef WLAN_FEATURE_PEER_TXQ_FLUSH_CONF #ifdef WLAN_FEATURE_PEER_TXQ_FLUSH_CONF
.set_peer_txq_flush_config = dp_set_peer_txq_flush_config, .set_peer_txq_flush_config = dp_set_peer_txq_flush_config,
#endif #endif
#ifdef CONNECTIVITY_PKTLOG
.register_pktdump_cb = dp_register_packetdump_callback,
.unregister_pktdump_cb = dp_deregister_packetdump_callback,
#endif
}; };
#endif #endif

View File

@@ -2044,6 +2044,7 @@ uint32_t dp_rx_frag_handle(struct dp_soc *soc, hal_ring_desc_t ring_desc,
if (rx_desc->unmapped) if (rx_desc->unmapped)
return rx_bufs_used; return rx_bufs_used;
dp_rx_send_pktlog(soc, pdev, msdu, QDF_TX_RX_STATUS_OK);
dp_ipa_rx_buf_smmu_mapping_lock(soc); dp_ipa_rx_buf_smmu_mapping_lock(soc);
dp_rx_nbuf_unmap_pool(soc, rx_desc_pool, rx_desc->nbuf); dp_rx_nbuf_unmap_pool(soc, rx_desc_pool, rx_desc->nbuf);
rx_desc->unmapped = 1; rx_desc->unmapped = 1;

View File

@@ -370,6 +370,9 @@ more_msdu_link_desc:
if (hal_rx_encryption_info_valid(soc->hal_soc, rx_tlv_hdr)) if (hal_rx_encryption_info_valid(soc->hal_soc, rx_tlv_hdr))
hal_rx_print_pn(soc->hal_soc, rx_tlv_hdr); hal_rx_print_pn(soc->hal_soc, rx_tlv_hdr);
dp_rx_send_pktlog(soc, pdev, rx_desc->nbuf,
QDF_TX_RX_STATUS_DROP);
/* Just free the buffers */ /* Just free the buffers */
dp_rx_buffer_pool_nbuf_free(soc, rx_desc->nbuf, *mac_id); dp_rx_buffer_pool_nbuf_free(soc, rx_desc->nbuf, *mac_id);
@@ -862,6 +865,7 @@ dp_rx_bar_frame_handle(struct dp_soc *soc,
_dp_rx_bar_frame_handle(soc, nbuf, mpdu_desc_info, tid, err_status, _dp_rx_bar_frame_handle(soc, nbuf, mpdu_desc_info, tid, err_status,
err_code); err_code);
dp_rx_send_pktlog(soc, pdev, nbuf, QDF_TX_RX_STATUS_DROP);
dp_rx_link_desc_return(soc, ring_desc, dp_rx_link_desc_return(soc, ring_desc,
HAL_BM_ACTION_PUT_IN_IDLE_LIST); HAL_BM_ACTION_PUT_IN_IDLE_LIST);
dp_rx_buffer_pool_nbuf_free(soc, rx_desc->nbuf, dp_rx_buffer_pool_nbuf_free(soc, rx_desc->nbuf,
@@ -1539,6 +1543,7 @@ more_msdu_link_desc:
/* all buffers from a MSDU link belong to same pdev */ /* all buffers from a MSDU link belong to same pdev */
pdev = dp_get_pdev_for_lmac_id(soc, rx_desc_pool_id); pdev = dp_get_pdev_for_lmac_id(soc, rx_desc_pool_id);
dp_rx_send_pktlog(soc, pdev, nbuf, QDF_TX_RX_STATUS_OK);
rx_desc_pool = &soc->rx_desc_buf[rx_desc_pool_id]; rx_desc_pool = &soc->rx_desc_buf[rx_desc_pool_id];
dp_ipa_rx_buf_smmu_mapping_lock(soc); dp_ipa_rx_buf_smmu_mapping_lock(soc);
dp_rx_nbuf_unmap_pool(soc, rx_desc_pool, nbuf); dp_rx_nbuf_unmap_pool(soc, rx_desc_pool, nbuf);

View File

@@ -4792,6 +4792,7 @@ void dp_tx_comp_process_tx_status(struct dp_soc *soc,
dp_tx_update_peer_delay_stats(txrx_peer, tx_desc, ts->tid, ring_id); dp_tx_update_peer_delay_stats(txrx_peer, tx_desc, ts->tid, ring_id);
dp_tx_update_peer_sawf_stats(soc, vdev, txrx_peer, tx_desc, dp_tx_update_peer_sawf_stats(soc, vdev, txrx_peer, tx_desc,
ts, ts->tid); ts, ts->tid);
dp_tx_send_pktlog(soc, vdev->pdev, nbuf, dp_status);
#ifdef QCA_SUPPORT_RDK_STATS #ifdef QCA_SUPPORT_RDK_STATS
if (soc->peerstats_enabled) if (soc->peerstats_enabled)

View File

@@ -2930,6 +2930,11 @@ struct dp_pdev {
#ifdef WLAN_FEATURE_MARK_FIRST_WAKEUP_PACKET #ifdef WLAN_FEATURE_MARK_FIRST_WAKEUP_PACKET
uint8_t is_first_wakeup_packet; uint8_t is_first_wakeup_packet;
#endif #endif
#ifdef CONNECTIVITY_PKTLOG
/* packetdump callback functions */
ol_txrx_pktdump_cb dp_tx_packetdump_cb;
ol_txrx_pktdump_cb dp_rx_packetdump_cb;
#endif
}; };
struct dp_peer; struct dp_peer;

View File

@@ -658,6 +658,8 @@ done:
old_tid = tid; old_tid = tid;
} }
dp_rx_send_pktlog(soc, rx_pdev, nbuf, QDF_TX_RX_STATUS_OK);
/* /*
* Check if DMA completed -- msdu_done is the last bit * Check if DMA completed -- msdu_done is the last bit
* to be written * to be written