diff --git a/dp/wifi3.0/dp_htt.c b/dp/wifi3.0/dp_htt.c index 5fe93875e200..c4cb061e8169 100644 --- a/dp/wifi3.0/dp_htt.c +++ b/dp/wifi3.0/dp_htt.c @@ -2002,7 +2002,8 @@ static void dp_txrx_ppdu_stats_handler(struct dp_soc *soc, int status; int i; - if (!pdev->enhanced_stats_en && !pdev->tx_sniffer_enable) + if (!pdev->enhanced_stats_en && !pdev->tx_sniffer_enable && + !pdev->am_copy_mode) return; if (!pdev->tx_ppdu_info.buf) { diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 02bdfaff1fe7..17704591065d 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -74,6 +74,8 @@ bool rx_hash = 1; qdf_declare_param(rx_hash, bool); #define STR_MAXLEN 64 + +#define DP_PPDU_STATS_CFG_ALL 0xffff /** * default_dscp_tid_map - Default DSCP-TID mapping * @@ -4644,16 +4646,30 @@ dp_config_tx_capture(struct cdp_pdev *pdev_handle, int val) { struct dp_pdev *pdev = (struct dp_pdev *)pdev_handle; - if (val) { - pdev->tx_sniffer_enable = 1; - dp_h2t_cfg_stats_msg_send(pdev, 0xffff); - } else { + switch (val) { + case 0: pdev->tx_sniffer_enable = 0; + pdev->am_copy_mode = 0; if (!pdev->enhanced_stats_en) dp_h2t_cfg_stats_msg_send(pdev, 0); - } + break; + case 1: + pdev->tx_sniffer_enable = 1; + pdev->am_copy_mode = 0; + dp_h2t_cfg_stats_msg_send(pdev, DP_PPDU_STATS_CFG_ALL); + break; + case 2: + pdev->am_copy_mode = 1; + pdev->tx_sniffer_enable = 0; + dp_h2t_cfg_stats_msg_send(pdev, DP_PPDU_STATS_CFG_ALL); + break; + default: + QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, + "Invalid value\n"); + break; + } } /* @@ -4685,7 +4701,7 @@ dp_disable_enhanced_stats(struct cdp_pdev *pdev_handle) pdev->enhanced_stats_en = 0; - if (!pdev->tx_sniffer_enable) + if (!pdev->tx_sniffer_enable && !pdev->am_copy_mode) dp_h2t_cfg_stats_msg_send(pdev, 0); } diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index 098830de809c..acd72235727c 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -1050,6 +1050,7 @@ struct dp_pdev { } tx_ppdu_info; bool tx_sniffer_enable; + bool am_copy_mode; }; struct dp_peer;