Browse Source

qcacmn: update RSSI specific parameters in mon pdev

Update RSSI specific parameter from beryllium
specific path to common path as part of
extending feature for lithium also.
RSSI calibration parameters are received as part
of WMI event from FW, update these parameters to
monitor pdev via CDP interface.

Change-Id: I4e35d873db6d1ad03d86694a8d36decffe409a0e
CRs-Fixed: 3231120
KARTHIK KUMAR T 3 years ago
parent
commit
0365423471

+ 2 - 1
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

+ 0 - 145
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;
 }

+ 0 - 12
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))];

+ 0 - 21
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)

+ 0 - 20
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

+ 129 - 1
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)

+ 31 - 23
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
  *

+ 0 - 1
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,