diff --git a/dp/wifi3.0/monitor/1.0/dp_mon_1.0.c b/dp/wifi3.0/monitor/1.0/dp_mon_1.0.c index 3522ff8a81..7714bba672 100644 --- a/dp/wifi3.0/monitor/1.0/dp_mon_1.0.c +++ b/dp/wifi3.0/monitor/1.0/dp_mon_1.0.c @@ -1219,7 +1219,6 @@ dp_mon_register_feature_ops_1_0(struct dp_soc *soc) mon_ops->mon_filter_reset_undecoded_metadata_capture = dp_mon_filter_reset_undecoded_metadata_capture_1_0; #endif - mon_ops->mon_rx_stats_update_rssi_dbm_params = NULL; mon_ops->mon_rx_print_advanced_stats = NULL; } @@ -1319,6 +1318,8 @@ struct cdp_mon_ops dp_ops_mon_1_0 = { .txrx_get_lite_mon_peer_config = NULL, .txrx_is_lite_mon_enabled = NULL, #endif + .txrx_set_mon_pdev_params_rssi_dbm_conv = + dp_mon_pdev_params_rssi_dbm_conv, }; #ifdef QCA_MONITOR_OPS_PER_SOC_SUPPORT diff --git a/dp/wifi3.0/monitor/2.0/dp_mon_2.0.c b/dp/wifi3.0/monitor/2.0/dp_mon_2.0.c index 41834f2853..778c495b0b 100644 --- a/dp/wifi3.0/monitor/2.0/dp_mon_2.0.c +++ b/dp/wifi3.0/monitor/2.0/dp_mon_2.0.c @@ -33,15 +33,6 @@ #include "dp_lite_mon.h" #endif -/* 40MHZ BW 2 20MHZ sub bands */ -#define SUB40BW 2 -/* 80MHZ BW 4 20MHZ sub bands */ -#define SUB80BW 4 -/* 160MHZ BW 8 20MHZ sub bands */ -#define SUB160BW 8 -/* 320MHZ BW 16 20MHZ sub bands */ -#define SUB320BW 16 - #if !defined(DISABLE_MON_CONFIG) /** @@ -1262,140 +1253,6 @@ QDF_STATUS dp_vdev_set_monitor_mode_rings_2_0(struct dp_pdev *pdev, } #endif -#ifdef QCA_RSSI_DB2DBM -/* - * dp_mon_compute_min_nf() - calculate the min nf value in the - * active chains 20MHZ subbands. - * computation: Need to calculate nfInDbm[][] to A_MIN(nfHwDbm[][]) - * considering row index as active chains and column - * index as 20MHZ subbands per chain. - * example: chain_mask = 0x07 (consider 3 active chains 0,1,2 index) - * BandWidth = 40MHZ (40MHZ includes two 20MHZ subbands so need to - * consider 0,1 index calculate min_nf value) - * - *@conv_params: cdp_rssi_dbm_conv_param_dp structure value - *@chain_idx: active chain index in nfHwdbm array - * - * Return: QDF_STATUS_SUCCESS if value set successfully - * QDF_STATUS_E_INVAL false if error - */ -static QDF_STATUS -dp_mon_compute_min_nf(struct cdp_rssi_dbm_conv_param_dp *conv_params, - int8_t *min_nf, int chain_idx) -{ - int j; - *min_nf = conv_params->nf_hw_dbm[chain_idx][0]; - - switch (conv_params->curr_bw) { - case CHAN_WIDTH_20: - case CHAN_WIDTH_5: - case CHAN_WIDTH_10: - break; - case CHAN_WIDTH_40: - for (j = 1; j < SUB40BW; j++) { - if (conv_params->nf_hw_dbm[chain_idx][j] < *min_nf) - *min_nf = conv_params->nf_hw_dbm[chain_idx][j]; - } - break; - case CHAN_WIDTH_80: - for (j = 1; j < SUB80BW; j++) { - if (conv_params->nf_hw_dbm[chain_idx][j] < *min_nf) - *min_nf = conv_params->nf_hw_dbm[chain_idx][j]; - } - break; - case CHAN_WIDTH_160: - case CHAN_WIDTH_80P80: - case CHAN_WIDTH_165: - for (j = 1; j < SUB160BW; j++) { - if (conv_params->nf_hw_dbm[chain_idx][j] < *min_nf) - *min_nf = conv_params->nf_hw_dbm[chain_idx][j]; - } - break; - case CHAN_WIDTH_160P160: - case CHAN_WIDTH_320: - for (j = 1; j < SUB320BW; j++) { - if (conv_params->nf_hw_dbm[chain_idx][j] < *min_nf) - *min_nf = conv_params->nf_hw_dbm[chain_idx][j]; - } - break; - default: - dp_cdp_err("Invalid bandwidth %u", conv_params->curr_bw); - return QDF_STATUS_E_INVAL; - } - return QDF_STATUS_SUCCESS; -} - -/* - * dp_mon_pdev_params_rssi_dbm_conv() --> to set rssi in dbm converstion - * params into monitor pdev. - *@cdp_soc: dp soc handle. - *@params: cdp_rssi_db2dbm_param_dp structure value. - * - * Return: QDF_STATUS_SUCCESS if value set successfully - * QDF_STATUS_E_INVAL false if error - */ -static QDF_STATUS -dp_mon_pdev_params_rssi_dbm_conv(struct cdp_soc_t *cdp_soc, - struct cdp_rssi_db2dbm_param_dp *params) -{ - struct cdp_rssi_db2dbm_param_dp *dp_rssi_params = params; - uint8_t pdev_id = params->pdev_id; - struct dp_soc *soc = (struct dp_soc *)cdp_soc; - struct dp_pdev *pdev = - dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id); - struct dp_mon_pdev *mon_pdev; - struct dp_mon_pdev_be *mon_pdev_be; - struct cdp_rssi_temp_off_param_dp temp_off_param; - struct cdp_rssi_dbm_conv_param_dp conv_params; - int8_t min_nf = 0; - int i; - - if (!soc->features.rssi_dbm_conv_support) { - dp_cdp_err("rssi dbm converstion support is false"); - return QDF_STATUS_E_INVAL; - } - if (!pdev || !pdev->monitor_pdev) { - dp_cdp_err("Invalid pdev_id %u", pdev_id); - return QDF_STATUS_E_FAILURE; - } - - mon_pdev = pdev->monitor_pdev; - mon_pdev_be = dp_get_be_mon_pdev_from_dp_mon_pdev(mon_pdev); - - if (dp_rssi_params->rssi_temp_off_present) { - temp_off_param = dp_rssi_params->temp_off_param; - mon_pdev_be->rssi_temp_offset = temp_off_param.rssi_temp_offset; - } - if (dp_rssi_params->rssi_dbm_info_present) { - conv_params = dp_rssi_params->rssi_dbm_param; - for (i = 0; i < CDP_MAX_NUM_ANTENNA; i++) { - if (conv_params.curr_rx_chainmask & (0x01 << i)) { - if (QDF_STATUS_E_INVAL == dp_mon_compute_min_nf - (&conv_params, &min_nf, i)) - return QDF_STATUS_E_INVAL; - } else { - continue; - } - } - mon_pdev_be->xlna_bypass_offset = - conv_params.xlna_bypass_offset; - mon_pdev_be->xlna_bypass_threshold = - conv_params.xlna_bypass_threshold; - mon_pdev_be->xbar_config = conv_params.xbar_config; - - mon_pdev_be->min_nf_dbm = min_nf; - } - return QDF_STATUS_SUCCESS; -} -#else -static inline QDF_STATUS -dp_mon_pdev_params_rssi_dbm_conv(struct cdp_soc_t *cdp_soc, - struct cdp_rssi_db2dbm_param_dp *params) -{ - return 0; -} -#endif - #if defined(WDI_EVENT_ENABLE) &&\ (defined(QCA_ENHANCED_STATS_SUPPORT) || !defined(REMOVE_PKT_LOG)) static inline @@ -1562,8 +1419,6 @@ dp_mon_register_feature_ops_2_0(struct dp_soc *soc) mon_ops->mon_filter_reset_undecoded_metadata_capture = dp_mon_filter_reset_undecoded_metadata_capture_2_0; #endif - mon_ops->mon_rx_stats_update_rssi_dbm_params = - dp_mon_rx_stats_update_rssi_dbm_params_2_0; mon_ops->mon_rx_print_advanced_stats = dp_mon_rx_print_advanced_stats_2_0; } diff --git a/dp/wifi3.0/monitor/2.0/dp_mon_2.0.h b/dp/wifi3.0/monitor/2.0/dp_mon_2.0.h index 81f685a9a7..4b92438623 100644 --- a/dp/wifi3.0/monitor/2.0/dp_mon_2.0.h +++ b/dp/wifi3.0/monitor/2.0/dp_mon_2.0.h @@ -145,11 +145,6 @@ struct dp_mon_desc_pool { * @rx_mon_queue_depth: RxMON queue depth * @desc_count: reaped status desc count * @status: reaped status buffer per ppdu - * @rssi_temp_offset: Temperature based rssi offset - * @xlna_bypass_offset: Low noise amplifier bypass offset - * @xlna_bypass_threshold: Low noise amplifier bypass threshold - * @xbar_config: 3 Bytes of xbar_config are used for RF to BB mapping - * @min_nf_dbm: min noise floor in active chains per channel * @rx_ppdu_info_pool: rx ppdu info mem pool * @rx_ppdu_info_pool_head: rx ppdu info mem pool head segment * @rx_ppdu_info_pool_head_bytes: ppdu info pool head for array indexing @@ -175,13 +170,6 @@ struct dp_mon_pdev_be { #endif void *prev_rxmon_desc; uint32_t prev_rxmon_cookie; -#ifdef QCA_RSSI_DB2DBM - int32_t rssi_temp_offset; - int32_t xlna_bypass_offset; - int32_t xlna_bypass_threshold; - uint32_t xbar_config; - int8_t min_nf_dbm; -#endif struct qdf_flex_mem_pool rx_ppdu_info_pool; struct qdf_flex_mem_segment rx_ppdu_info_pool_head; uint8_t rx_ppdu_info_pool_head_bytes[QDF_FM_BITMAP_BITS * (sizeof(struct hal_rx_ppdu_info))]; diff --git a/dp/wifi3.0/monitor/2.0/dp_rx_mon_2.0.c b/dp/wifi3.0/monitor/2.0/dp_rx_mon_2.0.c index 82f79da270..45f03f633a 100644 --- a/dp/wifi3.0/monitor/2.0/dp_rx_mon_2.0.c +++ b/dp/wifi3.0/monitor/2.0/dp_rx_mon_2.0.c @@ -1748,27 +1748,6 @@ dp_rx_mon_populate_ppdu_info_2_0(struct hal_rx_ppdu_info *hal_ppdu_info, } #endif #endif -#ifdef QCA_RSSI_DB2DBM -void -dp_mon_rx_stats_update_rssi_dbm_params_2_0(struct dp_soc *soc, - struct dp_mon_pdev *mon_pdev) -{ - struct dp_mon_pdev_be *mon_pdev_be = - dp_get_be_mon_pdev_from_dp_mon_pdev(mon_pdev); - mon_pdev->ppdu_info.rx_status.rssi_temp_offset = - mon_pdev_be->rssi_temp_offset; - mon_pdev->ppdu_info.rx_status.xlna_bypass_offset = - mon_pdev_be->xlna_bypass_offset; - mon_pdev->ppdu_info.rx_status.xlna_bypass_threshold = - mon_pdev_be->xlna_bypass_threshold; - mon_pdev->ppdu_info.rx_status.min_nf_dbm = - mon_pdev_be->min_nf_dbm; - mon_pdev->ppdu_info.rx_status.xbar_config = - mon_pdev_be->xbar_config; - mon_pdev->ppdu_info.rx_status.rssi_dbm_conv_support = - soc->features.rssi_dbm_conv_support; -} -#endif void dp_mon_rx_print_advanced_stats_2_0(struct dp_soc *soc, struct dp_pdev *pdev) diff --git a/dp/wifi3.0/monitor/2.0/dp_rx_mon_2.0.h b/dp/wifi3.0/monitor/2.0/dp_rx_mon_2.0.h index 921027b7cb..51563c23bc 100644 --- a/dp/wifi3.0/monitor/2.0/dp_rx_mon_2.0.h +++ b/dp/wifi3.0/monitor/2.0/dp_rx_mon_2.0.h @@ -178,26 +178,6 @@ QDF_STATUS dp_rx_mon_handle_full_mon(struct dp_pdev *pdev, struct hal_rx_ppdu_info *ppdu_info, qdf_nbuf_t mpdu); -#ifdef QCA_RSSI_DB2DBM -/** - * dp_mon_rx_stats_update_rssi_dbm_params_2_0() - update rssi calibration - * parameters in rx stats - * @mon_pdev: monitor pdev - */ -void -dp_mon_rx_stats_update_rssi_dbm_params_2_0(struct dp_soc *soc, - struct dp_mon_pdev *mon_pdev); -#else -/** - * dp_mon_rx_stats_update_rssi_dbm_params_2_0() - update rssi calibration - * parameters in rx stats - * @mon_pdev: monitor pdev - */ -static inline void -dp_mon_rx_stats_update_rssi_dbm_params_2_0(struct dp_soc *soc, - struct dp_mon_pdev *mon_pdev) -{ } -#endif /** * dp_rx_mon_drain_wq() - Drain monitor buffers from rxmon workqueue diff --git a/dp/wifi3.0/monitor/dp_mon.c b/dp/wifi3.0/monitor/dp_mon.c index bb47887632..b154dc46eb 100644 --- a/dp/wifi3.0/monitor/dp_mon.c +++ b/dp/wifi3.0/monitor/dp_mon.c @@ -5714,6 +5714,135 @@ void dp_mon_ppdu_stats_handler_deregister(struct dp_mon_soc *mon_soc) } #endif +#ifdef QCA_RSSI_DB2DBM +/* + * dp_mon_compute_min_nf() - calculate the min nf value in the + * active chains 20MHZ subbands. + * computation: Need to calculate nfInDbm[][] to A_MIN(nfHwDbm[][]) + * considering row index as active chains and column + * index as 20MHZ subbands per chain. + * example: chain_mask = 0x07 (consider 3 active chains 0,1,2 index) + * BandWidth = 40MHZ (40MHZ includes two 20MHZ subbands so need to + * consider 0,1 index calculate min_nf value) + * + *@conv_params: cdp_rssi_dbm_conv_param_dp structure value + *@chain_idx: active chain index in nfHwdbm array + * + * Return: QDF_STATUS_SUCCESS if value set successfully + * QDF_STATUS_E_INVAL false if error + */ +static QDF_STATUS +dp_mon_compute_min_nf(struct cdp_rssi_dbm_conv_param_dp *conv_params, + int8_t *min_nf, int chain_idx) +{ + int j; + *min_nf = conv_params->nf_hw_dbm[chain_idx][0]; + + switch (conv_params->curr_bw) { + case CHAN_WIDTH_20: + case CHAN_WIDTH_5: + case CHAN_WIDTH_10: + break; + case CHAN_WIDTH_40: + for (j = 1; j < SUB40BW; j++) { + if (conv_params->nf_hw_dbm[chain_idx][j] < *min_nf) + *min_nf = conv_params->nf_hw_dbm[chain_idx][j]; + } + break; + case CHAN_WIDTH_80: + for (j = 1; j < SUB80BW; j++) { + if (conv_params->nf_hw_dbm[chain_idx][j] < *min_nf) + *min_nf = conv_params->nf_hw_dbm[chain_idx][j]; + } + break; + case CHAN_WIDTH_160: + case CHAN_WIDTH_80P80: + case CHAN_WIDTH_165: + for (j = 1; j < SUB160BW; j++) { + if (conv_params->nf_hw_dbm[chain_idx][j] < *min_nf) + *min_nf = conv_params->nf_hw_dbm[chain_idx][j]; + } + break; + case CHAN_WIDTH_160P160: + case CHAN_WIDTH_320: + for (j = 1; j < SUB320BW; j++) { + if (conv_params->nf_hw_dbm[chain_idx][j] < *min_nf) + *min_nf = conv_params->nf_hw_dbm[chain_idx][j]; + } + break; + default: + dp_cdp_err("Invalid bandwidth %u", conv_params->curr_bw); + return QDF_STATUS_E_INVAL; + } + return QDF_STATUS_SUCCESS; +} + +/* + * dp_mon_pdev_params_rssi_dbm_conv() --> to set rssi in dbm converstion + * params into monitor pdev. + *@cdp_soc: dp soc handle. + *@params: cdp_rssi_db2dbm_param_dp structure value. + * + * Return: QDF_STATUS_SUCCESS if value set successfully + * QDF_STATUS_E_INVAL false if error + */ +QDF_STATUS +dp_mon_pdev_params_rssi_dbm_conv(struct cdp_soc_t *cdp_soc, + struct cdp_rssi_db2dbm_param_dp *params) +{ + struct cdp_rssi_db2dbm_param_dp *dp_rssi_params = params; + uint8_t pdev_id = params->pdev_id; + struct dp_soc *soc = (struct dp_soc *)cdp_soc; + struct dp_pdev *pdev = + dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id); + struct dp_mon_pdev *mon_pdev; + struct cdp_rssi_temp_off_param_dp temp_off_param; + struct cdp_rssi_dbm_conv_param_dp conv_params; + int8_t min_nf = 0; + int i; + + if (!soc->features.rssi_dbm_conv_support) { + dp_cdp_err("rssi dbm converstion support is false"); + return QDF_STATUS_E_INVAL; + } + if (!pdev || !pdev->monitor_pdev) { + dp_cdp_err("Invalid pdev_id %u", pdev_id); + return QDF_STATUS_E_FAILURE; + } + + mon_pdev = pdev->monitor_pdev; + + if (dp_rssi_params->rssi_temp_off_present) { + temp_off_param = dp_rssi_params->temp_off_param; + mon_pdev->ppdu_info.rx_status.rssi_temp_offset = + temp_off_param.rssi_temp_offset; + } + if (dp_rssi_params->rssi_dbm_info_present) { + conv_params = dp_rssi_params->rssi_dbm_param; + for (i = 0; i < CDP_MAX_NUM_ANTENNA; i++) { + if (conv_params.curr_rx_chainmask & (0x01 << i)) { + if (QDF_STATUS_E_INVAL == dp_mon_compute_min_nf + (&conv_params, &min_nf, i)) + return QDF_STATUS_E_INVAL; + } else { + continue; + } + } + mon_pdev->ppdu_info.rx_status.xlna_bypass_offset = + conv_params.xlna_bypass_offset; + mon_pdev->ppdu_info.rx_status.xlna_bypass_threshold = + conv_params.xlna_bypass_threshold; + mon_pdev->ppdu_info.rx_status.xbar_config = + conv_params.xbar_config; + + mon_pdev->ppdu_info.rx_status.min_nf_dbm = min_nf; + mon_pdev->ppdu_info.rx_status.rssi_dbm_conv_support = + soc->features.rssi_dbm_conv_support; + } + return QDF_STATUS_SUCCESS; +} +#endif + void dp_mon_intr_ops_deregister(struct dp_soc *soc) { struct dp_mon_soc *mon_soc = soc->monitor_soc; @@ -5817,7 +5946,6 @@ void dp_mon_feature_ops_deregister(struct dp_soc *soc) mon_ops->mon_rx_populate_ppdu_usr_info = NULL; mon_ops->mon_rx_populate_ppdu_info = NULL; #endif - mon_ops->mon_rx_stats_update_rssi_dbm_params = NULL; } QDF_STATUS dp_mon_soc_attach(struct dp_soc *soc) diff --git a/dp/wifi3.0/monitor/dp_mon.h b/dp/wifi3.0/monitor/dp_mon.h index 5d8f050278..db2556064f 100644 --- a/dp/wifi3.0/monitor/dp_mon.h +++ b/dp/wifi3.0/monitor/dp_mon.h @@ -41,6 +41,15 @@ #define DP_MON_REAP_BUDGET 1024 #define MON_BUF_MIN_ENTRIES 64 +/* 40MHZ BW 2 20MHZ sub bands */ +#define SUB40BW 2 +/* 80MHZ BW 4 20MHZ sub bands */ +#define SUB80BW 4 +/* 160MHZ BW 8 20MHZ sub bands */ +#define SUB160BW 8 +/* 320MHZ BW 16 20MHZ sub bands */ +#define SUB320BW 16 + #define RNG_ERR "SRNG setup failed for" #define dp_mon_info(params...) \ __QDF_TRACE_FL(QDF_TRACE_LEVEL_INFO_HIGH, QDF_MODULE_ID_MON, ## params) @@ -530,6 +539,28 @@ bool dp_ppdu_stats_ind_handler(struct htt_soc *soc, void dp_ppdu_desc_deliver(struct dp_pdev *pdev, struct ppdu_info *ppdu_info); #endif +#ifdef QCA_RSSI_DB2DBM +/* + * dp_mon_pdev_params_rssi_dbm_conv() --> to set rssi in dbm converstion + * params into monitor pdev. + *@cdp_soc: dp soc handle. + *@params: cdp_rssi_db2dbm_param_dp structure value. + * + * Return: QDF_STATUS_SUCCESS if value set successfully + * QDF_STATUS_E_INVAL false if error + */ +QDF_STATUS +dp_mon_pdev_params_rssi_dbm_conv(struct cdp_soc_t *cdp_soc, + struct cdp_rssi_db2dbm_param_dp *params); +#else +static inline QDF_STATUS +dp_mon_pdev_params_rssi_dbm_conv(struct cdp_soc_t *cdp_soc, + struct cdp_rssi_db2dbm_param_dp *params) +{ + return QDF_STATUS_E_INVAL; +} +#endif /* QCA_RSSI_DB2DBM */ + struct dp_mon_ops { QDF_STATUS (*mon_soc_cfg_init)(struct dp_soc *soc); QDF_STATUS (*mon_soc_attach)(struct dp_soc *soc); @@ -781,8 +812,6 @@ struct dp_mon_ops { void (*mon_lite_mon_vdev_delete)(struct dp_pdev *pdev, struct dp_vdev *vdev); void (*mon_lite_mon_disable_rx)(struct dp_pdev *pdev); - void (*mon_rx_stats_update_rssi_dbm_params) - (struct dp_soc *soc, struct dp_mon_pdev *mon_pdev); /* Print advanced monitor stats */ void (*mon_rx_print_advanced_stats) (struct dp_soc *soc, struct dp_pdev *pdev); @@ -3770,27 +3799,6 @@ dp_rx_mon_enable(struct dp_soc *soc, uint32_t *msg_word, monitor_ops->rx_mon_enable(msg_word, tlv_filter); } -static inline void -dp_mon_rx_stats_update_rssi_dbm_params(struct dp_soc *soc, - struct dp_mon_pdev *mon_pdev) -{ - struct dp_mon_soc *mon_soc = soc->monitor_soc; - struct dp_mon_ops *monitor_ops; - - if (!mon_soc) { - dp_mon_debug("mon soc is NULL"); - return; - } - - monitor_ops = mon_soc->mon_ops; - if (!monitor_ops || - !monitor_ops->mon_rx_stats_update_rssi_dbm_params) { - dp_mon_debug("callback not registered"); - return; - } - monitor_ops->mon_rx_stats_update_rssi_dbm_params(soc, mon_pdev); -} - /** * dp_mon_rx_print_advanced_stats () - print advanced monitor stats * diff --git a/dp/wifi3.0/monitor/dp_rx_mon.c b/dp/wifi3.0/monitor/dp_rx_mon.c index f67d4ef9aa..db1149b5b8 100644 --- a/dp/wifi3.0/monitor/dp_rx_mon.c +++ b/dp/wifi3.0/monitor/dp_rx_mon.c @@ -1859,7 +1859,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; - dp_mon_rx_stats_update_rssi_dbm_params(soc, mon_pdev); dp_handle_tx_capture(soc, pdev, mon_mpdu); if (!qdf_nbuf_update_radiotap(&mon_pdev->ppdu_info.rx_status,