diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index 56c4e649ac..4dc61558e2 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -1052,7 +1052,10 @@ struct ol_if_ops { uint16_t hdr_space); uint8_t (*freq_to_channel)(struct cdp_ctrl_objmgr_psoc *psoc, - uint8_t vdev_id, uint16_t freq); + uint8_t pdev_id, uint16_t freq); + + uint8_t (*freq_to_band)(struct cdp_ctrl_objmgr_psoc *psoc, + uint8_t pdev_id, uint16_t freq); #ifdef ATH_SUPPORT_NAC_RSSI int (*config_fw_for_nac_rssi)(struct cdp_ctrl_objmgr_psoc *psoc, diff --git a/dp/wifi3.0/dp_htt.c b/dp/wifi3.0/dp_htt.c index 71760521c6..1998ce0428 100644 --- a/dp/wifi3.0/dp_htt.c +++ b/dp/wifi3.0/dp_htt.c @@ -2136,10 +2136,18 @@ static void dp_process_ppdu_stats_common_tlv(struct dp_pdev *pdev, if (freq != ppdu_desc->channel) { soc = pdev->soc; ppdu_desc->channel = freq; + pdev->operating_channel.freq = freq; if (soc && soc->cdp_soc.ol_ops->freq_to_channel) - pdev->operating_channel = - soc->cdp_soc.ol_ops->freq_to_channel(soc->ctrl_psoc, - pdev->pdev_id, freq); + pdev->operating_channel.num = + soc->cdp_soc.ol_ops->freq_to_channel(soc->ctrl_psoc, + pdev->pdev_id, + freq); + + if (soc && soc->cdp_soc.ol_ops->freq_to_band) + pdev->operating_channel.band = + soc->cdp_soc.ol_ops->freq_to_band(soc->ctrl_psoc, + pdev->pdev_id, + freq); } ppdu_desc->phy_mode = HTT_PPDU_STATS_COMMON_TLV_PHY_MODE_GET(*tag_buf); diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c index b94801e1dd..f1912109cb 100644 --- a/dp/wifi3.0/dp_rx.c +++ b/dp/wifi3.0/dp_rx.c @@ -546,6 +546,9 @@ void dp_rx_fill_mesh_stats(struct dp_vdev *vdev, qdf_nbuf_t nbuf, uint32_t nss; uint32_t rate_mcs; uint32_t bw; + uint8_t primary_chan_num; + uint32_t center_chan_freq; + struct dp_soc *soc; /* fill recv mesh stats */ rx_info = qdf_mem_malloc(sizeof(struct mesh_recv_hdr_s)); @@ -577,7 +580,18 @@ void dp_rx_fill_mesh_stats(struct dp_vdev *vdev, qdf_nbuf_t nbuf, } rx_info->rs_rssi = hal_rx_msdu_start_get_rssi(rx_tlv_hdr); - rx_info->rs_channel = hal_rx_msdu_start_get_freq(rx_tlv_hdr); + + soc = vdev->pdev->soc; + primary_chan_num = hal_rx_msdu_start_get_freq(rx_tlv_hdr); + center_chan_freq = hal_rx_msdu_start_get_freq(rx_tlv_hdr) >> 16; + + if (soc->cdp_soc.ol_ops && soc->cdp_soc.ol_ops->freq_to_band) { + rx_info->rs_band = soc->cdp_soc.ol_ops->freq_to_band( + soc->ctrl_psoc, + vdev->pdev->pdev_id, + center_chan_freq); + } + rx_info->rs_channel = primary_chan_num; pkt_type = hal_rx_msdu_start_get_pkt_type(rx_tlv_hdr); rate_mcs = hal_rx_msdu_start_rate_mcs_get(rx_tlv_hdr); bw = hal_rx_msdu_start_bw_get(rx_tlv_hdr); diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index ef04175b8d..c2ea5f4d38 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/dp/wifi3.0/dp_tx.c @@ -2834,7 +2834,8 @@ void dp_tx_comp_fill_tx_completion_stats(struct dp_tx_desc_s *tx_desc, mhdr = (struct meta_hdr_s *)qdf_nbuf_data(netbuf); mhdr->rssi = ts->ack_frame_rssi; - mhdr->channel = tx_desc->pdev->operating_channel; + mhdr->band = tx_desc->pdev->operating_channel.band; + mhdr->channel = tx_desc->pdev->operating_channel.num; } #else diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index 3b30f89863..3c24f1f1a9 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -1581,7 +1581,11 @@ struct dp_pdev { struct hal_rx_ppdu_info ppdu_info; /* operating channel */ - uint8_t operating_channel; + struct { + uint8_t num; + uint8_t band; + uint16_t freq; + } operating_channel; qdf_nbuf_queue_t rx_status_q; uint32_t mon_ppdu_status;