Prechádzať zdrojové kódy

qcacmn: Add support for Spectral FFT recapture config

Add support to handle the FFT recapture config and
pass this to FW. The recapture feature must be
enabled only for spectral scan period > 52 us and
Normal Spectral scan.

Change-Id: I6b92fcd674ae95bcd0a23892ef9ccc6ba487d6ad
CRs-Fixed: 3140890
Jhalak Naik 3 rokov pred
rodič
commit
24174b7be8

+ 5 - 0
spectral/dispatcher/inc/spectral_ioctl.h

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2011, 2017-2021 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -247,6 +248,7 @@ struct spectral_config_frequency {
  * struct spectral_config - spectral config parameters
  * @ss_fft_period:        Skip interval for FFT reports
  * @ss_period:            Spectral scan period
+ * @ss_recapture          Set this to allow FFT recapture if scan period > 52us
  * @ss_count:             # of reports to return from ss_active
  * @ss_short_report:      Set to report only 1 set of FFT results
  * @radar_bin_thresh_sel: Select threshold to classify strong bin for FFT
@@ -322,6 +324,7 @@ struct spectral_config_frequency {
 struct spectral_config {
 	uint16_t ss_fft_period;
 	uint16_t ss_period;
+	uint16_t ss_recapture;
 	uint16_t ss_count;
 	uint16_t ss_short_report;
 	uint8_t radar_bin_thresh_sel;
@@ -410,6 +413,8 @@ struct spectral_caps {
 #define MAX_NUM_DETECTORS             (2)
 #define MAX_SPECTRAL_PAYLOAD          (3028)
 
+#define SPECTRAL_RECAPTURE_SCAN_PERIOD_THRESHOLD   (52)
+
 /**
  * enum dcs_int_type - Interference type indicated by DCS
  * @SPECTRAL_DCS_INT_NONE:  No interference

+ 2 - 0
spectral/dispatcher/inc/wlan_spectral_public_structs.h

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2011,2017-2021 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  *
  * Permission to use, copy, modify, and/or distribute this software for
@@ -89,6 +90,7 @@
 #define SPECTRAL_SCAN_DBM_ADJ_DEFAULT          (1)
 #define SPECTRAL_SCAN_CHN_MASK_DEFAULT         (1)
 #define SPECTRAL_SCAN_FREQUENCY_DEFAULT        (0)
+#define SPECTRAL_FFT_RECAPTURE_DEFAULT         (0)
 #endif				/* SPECTRAL_USE_EMU_DEFAULTS */
 
 /* The below two definitions apply only to pre-11ac chipsets */

+ 26 - 3
target_if/spectral/target_if_spectral.c

@@ -518,6 +518,7 @@ target_if_send_vdev_spectral_configure_cmd(struct target_if_spectral *spectral,
 
 	sparam.count = param->ss_count;
 	sparam.period = param->ss_period;
+	sparam.fft_recap = param->ss_recapture;
 	sparam.spectral_pri = param->ss_spectral_pri;
 	sparam.fft_size = param->ss_fft_size;
 	sparam.gc_enable = param->ss_gc_ena;
@@ -883,6 +884,8 @@ target_if_spectral_info_init_defaults(struct target_if_spectral *spectral,
 		info->osps_cache.osc_params.ss_period =
 			SPECTRAL_SCAN_PERIOD_GEN_II_DEFAULT;
 
+	info->osps_cache.osc_params.ss_recapture =
+				SPECTRAL_FFT_RECAPTURE_DEFAULT;
 	info->osps_cache.osc_params.ss_spectral_pri =
 	    SPECTRAL_SCAN_PRIORITY_DEFAULT;
 
@@ -1011,10 +1014,11 @@ target_if_log_read_spectral_params(
 	const char *function_name,
 	struct spectral_config *pparam)
 {
-	spectral_debug("%s: TARGET_IF_SPECTRAL_INFO_PARAMS. Returning following params:\nss_count = %u\nss_period = %u\nss_spectral_pri = %u\nss_fft_size = %u\nss_gc_ena = %u\nss_restart_ena = %u\nss_noise_floor_ref = %d\nss_init_delay = %u\nss_nb_tone_thr = %u\nss_str_bin_thr = %u\nss_wb_rpt_mode = %u\nss_rssi_rpt_mode = %u\nss_rssi_thr = %d\nss_pwr_format = %u\nss_rpt_mode = %u\nss_bin_scale = %u\nss_dbm_adj = %u\nss_chn_mask = %u\nss_frequency1=%u\nss_frequency2=%u\n",
+	spectral_debug("%s: TARGET_IF_SPECTRAL_INFO_PARAMS. Returning following params:\nss_count = %u\nss_period = %u\nss_recapture = %u\nss_spectral_pri = %u\nss_fft_size = %u\nss_gc_ena = %u\nss_restart_ena = %u\nss_noise_floor_ref = %d\nss_init_delay = %u\nss_nb_tone_thr = %u\nss_str_bin_thr = %u\nss_wb_rpt_mode = %u\nss_rssi_rpt_mode = %u\nss_rssi_thr = %d\nss_pwr_format = %u\nss_rpt_mode = %u\nss_bin_scale = %u\nss_dbm_adj = %u\nss_chn_mask = %u\nss_frequency1=%u\nss_frequency2=%u\n",
 		       function_name,
 		       pparam->ss_count,
 		       pparam->ss_period,
+		       pparam->ss_recapture,
 		       pparam->ss_spectral_pri,
 		       pparam->ss_fft_size,
 		       pparam->ss_gc_ena,
@@ -1088,10 +1092,11 @@ target_if_log_read_spectral_params_catch_validate(
 	const char *function_name,
 	struct spectral_config *pparam)
 {
-	spectral_debug("%s: TARGET_IF_SPECTRAL_INFO_PARAMS on initial cache validation\nReturning following params:\nss_count = %u\nss_period = %u\nss_spectral_pri = %u\nss_fft_size = %u\nss_gc_ena = %u\nss_restart_ena = %u\nss_noise_floor_ref = %d\nss_init_delay = %u\nss_nb_tone_thr = %u\nss_str_bin_thr = %u\nss_wb_rpt_mode = %u\nss_rssi_rpt_mode = %u\nss_rssi_thr = %d\nss_pwr_format = %u\nss_rpt_mode = %u\nss_bin_scale = %u\nss_dbm_adj = %u\nss_chn_mask = %u",
+	spectral_debug("%s: TARGET_IF_SPECTRAL_INFO_PARAMS on initial cache validation\nReturning following params:\nss_count = %u\nss_period = %u\nss_recapture = %u\nss_spectral_pri = %u\nss_fft_size = %u\nss_gc_ena = %u\nss_restart_ena = %u\nss_noise_floor_ref = %d\nss_init_delay = %u\nss_nb_tone_thr = %u\nss_str_bin_thr = %u\nss_wb_rpt_mode = %u\nss_rssi_rpt_mode = %u\nss_rssi_thr = %d\nss_pwr_format = %u\nss_rpt_mode = %u\nss_bin_scale = %u\nss_dbm_adj = %u\nss_chn_mask = %u",
 		       function_name,
 		       pparam->ss_count,
 		       pparam->ss_period,
+		       pparam->ss_recapture,
 		       pparam->ss_spectral_pri,
 		       pparam->ss_fft_size,
 		       pparam->ss_gc_ena,
@@ -1334,10 +1339,11 @@ target_if_log_write_spectral_params(
 	const char *function_name,
 	int ret)
 {
-	spectral_debug("%s: TARGET_IF_SPECTRAL_INFO_PARAMS. Params:\nss_count = %u\nss_period = %u\nss_spectral_pri = %u\nss_fft_size = %u\nss_gc_ena = %u\nss_restart_ena = %u\nss_noise_floor_ref = %d\nss_init_delay = %u\nss_nb_tone_thr = %u\nss_str_bin_thr = %u\nss_wb_rpt_mode = %u\nss_rssi_rpt_mode = %u\nss_rssi_thr = %d\nss_pwr_format = %u\nss_rpt_mode = %u\nss_bin_scale = %u\nss_dbm_adj = %u\nss_chn_mask = %u\nss_frequency1=%u\nss_frequency2=%u\nstatus = %d",
+	spectral_debug("%s: TARGET_IF_SPECTRAL_INFO_PARAMS. Params:\nss_count = %u\nss_period = %u\nss_recapture = %u\nss_spectral_pri = %u\nss_fft_size = %u\nss_gc_ena = %u\nss_restart_ena = %u\nss_noise_floor_ref = %d\nss_init_delay = %u\nss_nb_tone_thr = %u\nss_str_bin_thr = %u\nss_wb_rpt_mode = %u\nss_rssi_rpt_mode = %u\nss_rssi_thr = %d\nss_pwr_format = %u\nss_rpt_mode = %u\nss_bin_scale = %u\nss_dbm_adj = %u\nss_chn_mask = %u\nss_frequency1=%u\nss_frequency2=%u\nstatus = %d",
 		       function_name,
 		       param->ss_count,
 		       param->ss_period,
+		       param->ss_recapture,
 		       param->ss_spectral_pri,
 		       param->ss_fft_size,
 		       param->ss_gc_ena,
@@ -1769,6 +1775,17 @@ target_if_sops_stop_spectral_scan(void *arg, enum spectral_scan_mode smode)
 		p_sops->configure_spectral(spectral, sparams, smode);
 	}
 
+	if (ret == 0 && smode == SPECTRAL_SCAN_MODE_NORMAL) {
+		struct target_if_spectral_ops *p_sops;
+		struct spectral_config *sparams;
+
+		p_sops = GET_TARGET_IF_SPECTRAL_OPS(spectral);
+		sparams = &spectral->params[smode];
+		sparams->ss_recapture = false;
+
+		p_sops->configure_spectral(spectral, sparams, smode);
+	}
+
 	return ret;
 }
 
@@ -4414,6 +4431,12 @@ _target_if_set_spectral_config(struct target_if_spectral *spectral,
 		break;
 	case SPECTRAL_PARAM_SCAN_PERIOD:
 		sparams->ss_period = param->value;
+		if ((sparams->ss_period >=
+		     SPECTRAL_RECAPTURE_SCAN_PERIOD_THRESHOLD) &&
+		    (smode == SPECTRAL_SCAN_MODE_NORMAL))
+			sparams->ss_recapture = true;
+		else
+			sparams->ss_recapture = false;
 		break;
 	case SPECTRAL_PARAM_SCAN_COUNT:
 		sparams->ss_count = param->value;

+ 2 - 0
wmi/inc/wmi_unified_param.h

@@ -2950,6 +2950,7 @@ struct smart_ant_enable_tx_feedback_params {
  * @vdev_id: VDEV id
  * @count: count
  * @period: period
+ * @fft_recap: FFT recapture enable/disable
  * @spectral_pri: Spectral priority
  * @fft_size: FFT size
  * @gc_enable: GC enable
@@ -2976,6 +2977,7 @@ struct vdev_spectral_configure_params {
 	uint8_t vdev_id;
 	uint16_t count;
 	uint16_t period;
+	uint16_t fft_recap;
 	uint16_t spectral_pri;
 	uint16_t fft_size;
 	uint16_t gc_enable;

+ 2 - 0
wmi/src/wmi_unified_tlv.c

@@ -7179,6 +7179,7 @@ static QDF_STATUS send_vdev_spectral_configure_cmd_tlv(wmi_unified_t wmi_handle,
 	cmd->spectral_scan_center_freq1 = param->center_freq1;
 	cmd->spectral_scan_center_freq2 = param->center_freq2;
 	cmd->spectral_scan_chan_width = param->chan_width;
+	cmd->recapture_sample_on_gain_change = param->fft_recap;
 	/* Not used, fill with zeros */
 	cmd->spectral_scan_chan_freq = 0;
 
@@ -7196,6 +7197,7 @@ static QDF_STATUS send_vdev_spectral_configure_cmd_tlv(wmi_unified_t wmi_handle,
 		 param->vdev_id, param->count);
 	wmi_debug("spectral_scan_period: %u spectral_scan_priority: %u",
 		 param->period, param->spectral_pri);
+	wmi_debug("spectral_fft_recapture_cap: %u", param->fft_recap);
 	wmi_debug("spectral_scan_fft_size: %u spectral_scan_gc_ena: %u",
 		 param->fft_size, param->gc_enable);
 	wmi_debug("spectral_scan_restart_ena: %u", param->restart_enable);