From fb1db3030811479ea8908d8d00fff3846243f398 Mon Sep 17 00:00:00 2001 From: Jianmin Zhu Date: Mon, 25 Oct 2021 16:17:37 +0800 Subject: [PATCH] qcacmn: Fix wrong rssi in monitor mode If ppdu rssi unit is dbm, need convert to db for API: qdf_nbuf_update_radiotap, only need convert once for first mdpu in the ppdu. if convert for each mpdu, wrong rssi will be saved. Change-Id: I85e92121ddb289e3513022ff092083825197efb4 CRs-Fixed: 3057041 --- dp/wifi3.0/monitor/dp_rx_mon.c | 2 -- dp/wifi3.0/monitor/dp_rx_mon.h | 22 ---------------------- qdf/linux/src/qdf_nbuf.c | 10 +++++++++- 3 files changed, 9 insertions(+), 25 deletions(-) diff --git a/dp/wifi3.0/monitor/dp_rx_mon.c b/dp/wifi3.0/monitor/dp_rx_mon.c index 2afc5db5a7..3f9d7a452c 100644 --- a/dp/wifi3.0/monitor/dp_rx_mon.c +++ b/dp/wifi3.0/monitor/dp_rx_mon.c @@ -1419,8 +1419,6 @@ QDF_STATUS dp_rx_mon_deliver(struct dp_soc *soc, uint32_t mac_id, mon_pdev->ppdu_info.rx_status.device_id = soc->device_id; mon_pdev->ppdu_info.rx_status.chan_noise_floor = pdev->chan_noise_floor; - /* convert rssi_comb from dBm to positive dB value */ - dp_rx_mon_rssi_convert(&mon_pdev->ppdu_info.rx_status); dp_handle_tx_capture(soc, pdev, mon_mpdu); diff --git a/dp/wifi3.0/monitor/dp_rx_mon.h b/dp/wifi3.0/monitor/dp_rx_mon.h index 57cf9b8513..99788f0ce8 100644 --- a/dp/wifi3.0/monitor/dp_rx_mon.h +++ b/dp/wifi3.0/monitor/dp_rx_mon.h @@ -581,28 +581,6 @@ dp_cfr_rcc_mode_status(struct dp_pdev *pdev) } #endif /* WLAN_CFR_ENABLE && WLAN_ENH_CFR_ENABLE */ - -#ifdef DP_MON_RSSI_IN_DBM -/* - * dp_rx_mon_rssi_convert(): convert rssi_comb from unit dBm to dB - * to match with radiotap further conversion requirement - * @rx_status: monitor mode rx status pointer - * - * Return: none - */ -static inline -void dp_rx_mon_rssi_convert(struct mon_rx_status *rx_status) -{ - rx_status->rssi_comb = rx_status->rssi_comb - - rx_status->chan_noise_floor; -} -#else -static inline -void dp_rx_mon_rssi_convert(struct mon_rx_status *rx_status) -{ -} -#endif - /* * dp_rx_mon_deliver(): function to deliver packets to stack * @soc: DP soc diff --git a/qdf/linux/src/qdf_nbuf.c b/qdf/linux/src/qdf_nbuf.c index 0b171058d6..4abf4fe101 100644 --- a/qdf/linux/src/qdf_nbuf.c +++ b/qdf/linux/src/qdf_nbuf.c @@ -4630,6 +4630,14 @@ static unsigned int qdf_nbuf_update_radiotap_ampdu_flags( return rtap_len; } +#ifdef DP_MON_RSSI_IN_DBM +#define QDF_MON_STATUS_GET_RSSI_IN_DBM(rx_status) \ +(rx_status->rssi_comb) +#else +#define QDF_MON_STATUS_GET_RSSI_IN_DBM(rx_status) \ +(rx_status->rssi_comb + rx_status->chan_noise_floor) +#endif + /** * qdf_nbuf_update_radiotap() - Update radiotap header from rx_status * @rx_status: Pointer to rx_status. @@ -4705,7 +4713,7 @@ unsigned int qdf_nbuf_update_radiotap(struct mon_rx_status *rx_status, * rssi_comb is int dB, need to convert it to dBm. * normalize value to noise floor of -96 dBm */ - rtap_buf[rtap_len] = rx_status->rssi_comb + rx_status->chan_noise_floor; + rtap_buf[rtap_len] = QDF_MON_STATUS_GET_RSSI_IN_DBM(rx_status); rtap_len += 1; /* RX signal noise floor */