diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index 83a486384b72..de089878d5c1 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -644,6 +644,7 @@ struct ol_if_ops { void (*rx_mic_error)(void *ol_soc_handle, uint16_t vdev_id, void *wh); + uint8_t (*freq_to_channel)(void *ol_soc_handle, uint16_t vdev_id); /* TODO: Add any other control path calls required to OL_IF/WMA layer */ }; diff --git a/dp/wifi3.0/dp_htt.c b/dp/wifi3.0/dp_htt.c index c206873104c8..4f0cc4277dd9 100644 --- a/dp/wifi3.0/dp_htt.c +++ b/dp/wifi3.0/dp_htt.c @@ -1359,6 +1359,8 @@ static void dp_process_ppdu_stats_common_tlv(struct dp_pdev *pdev, uint32_t *tag_buf) { uint16_t frame_type; + uint16_t freq; + struct dp_soc *soc = NULL; struct cdp_tx_completion_ppdu *ppdu_desc; htt_ppdu_stats_common_tlv *dp_stats_buf = (htt_ppdu_stats_common_tlv *)tag_buf; @@ -1382,7 +1384,14 @@ static void dp_process_ppdu_stats_common_tlv(struct dp_pdev *pdev, ppdu_desc->ppdu_start_timestamp = dp_stats_buf->ppdu_start_tstmp_us; ppdu_desc->ppdu_end_timestamp = dp_stats_buf->ppdu_sch_end_tstmp_us; tag_buf += 6; - ppdu_desc->channel = HTT_PPDU_STATS_COMMON_TLV_CHAN_MHZ_GET(*tag_buf); + freq = HTT_PPDU_STATS_COMMON_TLV_CHAN_MHZ_GET(*tag_buf); + if (freq != ppdu_desc->channel) { + soc = pdev->soc; + ppdu_desc->channel = freq; + if (soc && soc->cdp_soc.ol_ops->freq_to_channel) + pdev->operating_channel = + soc->cdp_soc.ol_ops->freq_to_channel(pdev->osif_pdev, freq); + } ppdu_desc->phy_mode = HTT_PPDU_STATS_COMMON_TLV_PHY_MODE_GET(*tag_buf); }