Lines Matching +full:disable +full:- +full:radar +full:- +full:background
1 // SPDX-License-Identifier: ISC
3 * Copyright (c) 2013-2017 Qualcomm Atheros, Inc.
9 #include "wmi-ops.h"
16 if (!ar->spectral.rfs_chan_spec_scan) in send_fft_sample()
19 length = __be16_to_cpu(fft_sample_tlv->length) + in send_fft_sample()
21 relay_write(ar->spectral.rfs_chan_spec_scan, fft_sample_tlv, length); in send_fft_sample()
33 if (dc_pos < max_index || -dc_pos >= max_index) in get_max_exp()
54 * radar detection purpose. Strip last 'm' bytes to make bin size in ath10k_spectral_fix_bin_size()
58 bin_len -= ar->hw_params.spectral_bin_discard; in ath10k_spectral_fix_bin_size()
80 return -EINVAL; in ath10k_spectral_process_fft()
82 reg0 = __le32_to_cpu(fftr->reg0); in ath10k_spectral_process_fft()
83 reg1 = __le32_to_cpu(fftr->reg1); in ath10k_spectral_process_fft()
85 length = sizeof(*fft_sample) - sizeof(struct fft_sample_tlv) + bin_len; in ath10k_spectral_process_fft()
86 fft_sample->tlv.type = ATH_FFT_SAMPLE_ATH10K; in ath10k_spectral_process_fft()
87 fft_sample->tlv.length = __cpu_to_be16(length); in ath10k_spectral_process_fft()
92 switch (phyerr->chan_width_mhz) { in ath10k_spectral_process_fft()
94 fft_sample->chan_width_mhz = 22; in ath10k_spectral_process_fft()
97 fft_sample->chan_width_mhz = 44; in ath10k_spectral_process_fft()
101 * configurations (fft-sizes of 64/128/256 and 20/40/80 Mhz) in ath10k_spectral_process_fft()
107 return -EINVAL; in ath10k_spectral_process_fft()
108 fft_sample->chan_width_mhz = 88; in ath10k_spectral_process_fft()
111 fft_sample->chan_width_mhz = phyerr->chan_width_mhz; in ath10k_spectral_process_fft()
114 fft_sample->relpwr_db = MS(reg1, SEARCH_FFT_REPORT_REG1_RELPWR_DB); in ath10k_spectral_process_fft()
115 fft_sample->avgpwr_db = MS(reg1, SEARCH_FFT_REPORT_REG1_AVGPWR_DB); in ath10k_spectral_process_fft()
118 fft_sample->max_magnitude = __cpu_to_be16(peak_mag); in ath10k_spectral_process_fft()
119 fft_sample->max_index = MS(reg0, SEARCH_FFT_REPORT_REG0_PEAK_SIDX); in ath10k_spectral_process_fft()
120 fft_sample->rssi = phyerr->rssi_combined; in ath10k_spectral_process_fft()
124 fft_sample->total_gain_db = __cpu_to_be16(total_gain_db); in ath10k_spectral_process_fft()
125 fft_sample->base_pwr_db = __cpu_to_be16(base_pwr_db); in ath10k_spectral_process_fft()
127 freq1 = phyerr->freq1; in ath10k_spectral_process_fft()
128 freq2 = phyerr->freq2; in ath10k_spectral_process_fft()
129 fft_sample->freq1 = __cpu_to_be16(freq1); in ath10k_spectral_process_fft()
130 fft_sample->freq2 = __cpu_to_be16(freq2); in ath10k_spectral_process_fft()
134 fft_sample->noise = __cpu_to_be16(phyerr->nf_chains[chain_idx]); in ath10k_spectral_process_fft()
137 bins += sizeof(*fftr) + ar->hw_params.spectral_bin_offset; in ath10k_spectral_process_fft()
139 fft_sample->tsf = __cpu_to_be64(tsf); in ath10k_spectral_process_fft()
144 fft_sample->max_exp = get_max_exp(fft_sample->max_index, peak_mag, in ath10k_spectral_process_fft()
147 memcpy(fft_sample->data, bins, bin_len); in ath10k_spectral_process_fft()
153 fft_sample->data[dc_pos] = (fft_sample->data[dc_pos + 1] + in ath10k_spectral_process_fft()
154 fft_sample->data[dc_pos - 1]) / 2; in ath10k_spectral_process_fft()
156 send_fft_sample(ar, &fft_sample->tlv); in ath10k_spectral_process_fft()
165 lockdep_assert_held(&ar->conf_mutex); in ath10k_get_spectral_vdev()
167 if (list_empty(&ar->arvifs)) in ath10k_get_spectral_vdev()
171 list_for_each_entry(arvif, &ar->arvifs, list) in ath10k_get_spectral_vdev()
172 if (arvif->spectral_enabled) in ath10k_get_spectral_vdev()
176 return list_first_entry(&ar->arvifs, typeof(*arvif), list); in ath10k_get_spectral_vdev()
185 lockdep_assert_held(&ar->conf_mutex); in ath10k_spectral_scan_trigger()
189 return -ENODEV; in ath10k_spectral_scan_trigger()
190 vdev_id = arvif->vdev_id; in ath10k_spectral_scan_trigger()
192 if (ar->spectral.mode == SPECTRAL_DISABLED) in ath10k_spectral_scan_trigger()
217 lockdep_assert_held(&ar->conf_mutex); in ath10k_spectral_scan_config()
221 return -ENODEV; in ath10k_spectral_scan_config()
223 vdev_id = arvif->vdev_id; in ath10k_spectral_scan_config()
225 arvif->spectral_enabled = (mode != SPECTRAL_DISABLED); in ath10k_spectral_scan_config()
226 ar->spectral.mode = mode; in ath10k_spectral_scan_config()
242 count = max_t(u8, 1, ar->spectral.config.count); in ath10k_spectral_scan_config()
248 arg.scan_fft_size = ar->spectral.config.fft_size; in ath10k_spectral_scan_config()
276 struct ath10k *ar = file->private_data; in read_file_spec_scan_ctl()
281 mutex_lock(&ar->conf_mutex); in read_file_spec_scan_ctl()
282 spectral_mode = ar->spectral.mode; in read_file_spec_scan_ctl()
283 mutex_unlock(&ar->conf_mutex); in read_file_spec_scan_ctl()
287 mode = "disable"; in read_file_spec_scan_ctl()
290 mode = "background"; in read_file_spec_scan_ctl()
305 struct ath10k *ar = file->private_data; in write_file_spec_scan_ctl()
310 len = min(count, sizeof(buf) - 1); in write_file_spec_scan_ctl()
312 return -EFAULT; in write_file_spec_scan_ctl()
316 mutex_lock(&ar->conf_mutex); in write_file_spec_scan_ctl()
319 if (ar->spectral.mode == SPECTRAL_MANUAL || in write_file_spec_scan_ctl()
320 ar->spectral.mode == SPECTRAL_BACKGROUND) { in write_file_spec_scan_ctl()
325 ar->spectral.mode); in write_file_spec_scan_ctl()
336 res = -EINVAL; in write_file_spec_scan_ctl()
338 } else if (strncmp("background", buf, 10) == 0) { in write_file_spec_scan_ctl()
342 } else if (strncmp("disable", buf, 7) == 0) { in write_file_spec_scan_ctl()
345 res = -EINVAL; in write_file_spec_scan_ctl()
348 mutex_unlock(&ar->conf_mutex); in write_file_spec_scan_ctl()
368 struct ath10k *ar = file->private_data; in read_file_spectral_count()
373 mutex_lock(&ar->conf_mutex); in read_file_spectral_count()
374 spectral_count = ar->spectral.config.count; in read_file_spectral_count()
375 mutex_unlock(&ar->conf_mutex); in read_file_spectral_count()
385 struct ath10k *ar = file->private_data; in write_file_spectral_count()
394 return -EINVAL; in write_file_spectral_count()
396 mutex_lock(&ar->conf_mutex); in write_file_spectral_count()
397 ar->spectral.config.count = val; in write_file_spectral_count()
398 mutex_unlock(&ar->conf_mutex); in write_file_spectral_count()
415 struct ath10k *ar = file->private_data; in read_file_spectral_bins()
420 mutex_lock(&ar->conf_mutex); in read_file_spectral_bins()
422 fft_size = ar->spectral.config.fft_size; in read_file_spectral_bins()
424 bins = 1 << (fft_size - bin_scale); in read_file_spectral_bins()
426 mutex_unlock(&ar->conf_mutex); in read_file_spectral_bins()
436 struct ath10k *ar = file->private_data; in write_file_spectral_bins()
445 return -EINVAL; in write_file_spectral_bins()
448 return -EINVAL; in write_file_spectral_bins()
450 mutex_lock(&ar->conf_mutex); in write_file_spectral_bins()
451 ar->spectral.config.fft_size = ilog2(val); in write_file_spectral_bins()
452 ar->spectral.config.fft_size += WMI_SPECTRAL_BIN_SCALE_DEFAULT; in write_file_spectral_bins()
453 mutex_unlock(&ar->conf_mutex); in write_file_spectral_bins()
499 lockdep_assert_held(&ar->conf_mutex); in ath10k_spectral_start()
501 list_for_each_entry(arvif, &ar->arvifs, list) in ath10k_spectral_start()
502 arvif->spectral_enabled = 0; in ath10k_spectral_start()
504 ar->spectral.mode = SPECTRAL_DISABLED; in ath10k_spectral_start()
505 ar->spectral.config.count = WMI_SPECTRAL_COUNT_DEFAULT; in ath10k_spectral_start()
506 ar->spectral.config.fft_size = WMI_SPECTRAL_FFT_SIZE_DEFAULT; in ath10k_spectral_start()
513 if (!arvif->spectral_enabled) in ath10k_spectral_vif_stop()
516 return ath10k_spectral_scan_config(arvif->ar, SPECTRAL_DISABLED); in ath10k_spectral_vif_stop()
524 ar->spectral.rfs_chan_spec_scan = relay_open("spectral_scan", in ath10k_spectral_create()
525 ar->debug.debugfs_phy, in ath10k_spectral_create()
530 ar->debug.debugfs_phy, ar, in ath10k_spectral_create()
534 ar->debug.debugfs_phy, ar, in ath10k_spectral_create()
538 ar->debug.debugfs_phy, ar, in ath10k_spectral_create()
546 if (ar->spectral.rfs_chan_spec_scan) { in ath10k_spectral_destroy()
547 relay_close(ar->spectral.rfs_chan_spec_scan); in ath10k_spectral_destroy()
548 ar->spectral.rfs_chan_spec_scan = NULL; in ath10k_spectral_destroy()