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:

committed by
Madan Koyyalamudi

parent
06c5d97195
commit
6b576c65bb
@@ -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
|
||||||
|
@@ -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_ */
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
@@ -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)
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user