From 24174b7be8e5a3f313f39a21927ceae5d89964c8 Mon Sep 17 00:00:00 2001 From: Jhalak Naik Date: Tue, 1 Mar 2022 10:32:46 +0530 Subject: [PATCH] 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 --- spectral/dispatcher/inc/spectral_ioctl.h | 5 ++++ .../inc/wlan_spectral_public_structs.h | 2 ++ target_if/spectral/target_if_spectral.c | 29 +++++++++++++++++-- wmi/inc/wmi_unified_param.h | 2 ++ wmi/src/wmi_unified_tlv.c | 2 ++ 5 files changed, 37 insertions(+), 3 deletions(-) diff --git a/spectral/dispatcher/inc/spectral_ioctl.h b/spectral/dispatcher/inc/spectral_ioctl.h index c654794fd8..1b57949678 100644 --- a/spectral/dispatcher/inc/spectral_ioctl.h +++ b/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 diff --git a/spectral/dispatcher/inc/wlan_spectral_public_structs.h b/spectral/dispatcher/inc/wlan_spectral_public_structs.h index be4ae9216d..b89c3ae3bc 100644 --- a/spectral/dispatcher/inc/wlan_spectral_public_structs.h +++ b/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 */ diff --git a/target_if/spectral/target_if_spectral.c b/target_if/spectral/target_if_spectral.c index c059c1f242..7386a12875 100644 --- a/target_if/spectral/target_if_spectral.c +++ b/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; diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index ad7d06dee3..b86ca7ccfe 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/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; diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 7fdc6225c7..e09d1001b9 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/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);