1*9d11b7bfSKarthikeyan Periyasamy /* SPDX-License-Identifier: BSD-3-Clause-Clear */ 2*9d11b7bfSKarthikeyan Periyasamy /* 3*9d11b7bfSKarthikeyan Periyasamy * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved. 4*9d11b7bfSKarthikeyan Periyasamy */ 5*9d11b7bfSKarthikeyan Periyasamy 6*9d11b7bfSKarthikeyan Periyasamy #ifndef ATH11K_SPECTRAL_H 7*9d11b7bfSKarthikeyan Periyasamy #define ATH11K_SPECTRAL_H 8*9d11b7bfSKarthikeyan Periyasamy 9*9d11b7bfSKarthikeyan Periyasamy #include "../spectral_common.h" 10*9d11b7bfSKarthikeyan Periyasamy #include "dbring.h" 11*9d11b7bfSKarthikeyan Periyasamy 12*9d11b7bfSKarthikeyan Periyasamy /* enum ath11k_spectral_mode: 13*9d11b7bfSKarthikeyan Periyasamy * 14*9d11b7bfSKarthikeyan Periyasamy * @SPECTRAL_DISABLED: spectral mode is disabled 15*9d11b7bfSKarthikeyan Periyasamy * @SPECTRAL_BACKGROUND: hardware sends samples when it is not busy with 16*9d11b7bfSKarthikeyan Periyasamy * something else. 17*9d11b7bfSKarthikeyan Periyasamy * @SPECTRAL_MANUAL: spectral scan is enabled, triggering for samples 18*9d11b7bfSKarthikeyan Periyasamy * is performed manually. 19*9d11b7bfSKarthikeyan Periyasamy */ 20*9d11b7bfSKarthikeyan Periyasamy enum ath11k_spectral_mode { 21*9d11b7bfSKarthikeyan Periyasamy ATH11K_SPECTRAL_DISABLED = 0, 22*9d11b7bfSKarthikeyan Periyasamy ATH11K_SPECTRAL_BACKGROUND, 23*9d11b7bfSKarthikeyan Periyasamy ATH11K_SPECTRAL_MANUAL, 24*9d11b7bfSKarthikeyan Periyasamy }; 25*9d11b7bfSKarthikeyan Periyasamy 26*9d11b7bfSKarthikeyan Periyasamy struct ath11k_spectral { 27*9d11b7bfSKarthikeyan Periyasamy struct ath11k_dbring rx_ring; 28*9d11b7bfSKarthikeyan Periyasamy /* Protects enabled */ 29*9d11b7bfSKarthikeyan Periyasamy spinlock_t lock; 30*9d11b7bfSKarthikeyan Periyasamy struct rchan *rfs_scan; /* relay(fs) channel for spectral scan */ 31*9d11b7bfSKarthikeyan Periyasamy struct dentry *scan_ctl; 32*9d11b7bfSKarthikeyan Periyasamy struct dentry *scan_count; 33*9d11b7bfSKarthikeyan Periyasamy struct dentry *scan_bins; 34*9d11b7bfSKarthikeyan Periyasamy enum ath11k_spectral_mode mode; 35*9d11b7bfSKarthikeyan Periyasamy u16 count; 36*9d11b7bfSKarthikeyan Periyasamy u8 fft_size; 37*9d11b7bfSKarthikeyan Periyasamy bool enabled; 38*9d11b7bfSKarthikeyan Periyasamy }; 39*9d11b7bfSKarthikeyan Periyasamy 40*9d11b7bfSKarthikeyan Periyasamy #ifdef CONFIG_ATH11K_SPECTRAL 41*9d11b7bfSKarthikeyan Periyasamy 42*9d11b7bfSKarthikeyan Periyasamy int ath11k_spectral_init(struct ath11k_base *ab); 43*9d11b7bfSKarthikeyan Periyasamy void ath11k_spectral_deinit(struct ath11k_base *ab); 44*9d11b7bfSKarthikeyan Periyasamy int ath11k_spectral_vif_stop(struct ath11k_vif *arvif); 45*9d11b7bfSKarthikeyan Periyasamy void ath11k_spectral_reset_buffer(struct ath11k *ar); 46*9d11b7bfSKarthikeyan Periyasamy enum ath11k_spectral_mode ath11k_spectral_get_mode(struct ath11k *ar); 47*9d11b7bfSKarthikeyan Periyasamy struct ath11k_dbring *ath11k_spectral_get_dbring(struct ath11k *ar); 48*9d11b7bfSKarthikeyan Periyasamy 49*9d11b7bfSKarthikeyan Periyasamy #else 50*9d11b7bfSKarthikeyan Periyasamy 51*9d11b7bfSKarthikeyan Periyasamy static inline int ath11k_spectral_init(struct ath11k_base *ab) 52*9d11b7bfSKarthikeyan Periyasamy { 53*9d11b7bfSKarthikeyan Periyasamy return 0; 54*9d11b7bfSKarthikeyan Periyasamy } 55*9d11b7bfSKarthikeyan Periyasamy 56*9d11b7bfSKarthikeyan Periyasamy static inline void ath11k_spectral_deinit(struct ath11k_base *ab) 57*9d11b7bfSKarthikeyan Periyasamy { 58*9d11b7bfSKarthikeyan Periyasamy } 59*9d11b7bfSKarthikeyan Periyasamy 60*9d11b7bfSKarthikeyan Periyasamy static inline int ath11k_spectral_vif_stop(struct ath11k_vif *arvif) 61*9d11b7bfSKarthikeyan Periyasamy { 62*9d11b7bfSKarthikeyan Periyasamy return 0; 63*9d11b7bfSKarthikeyan Periyasamy } 64*9d11b7bfSKarthikeyan Periyasamy 65*9d11b7bfSKarthikeyan Periyasamy static inline void ath11k_spectral_reset_buffer(struct ath11k *ar) 66*9d11b7bfSKarthikeyan Periyasamy { 67*9d11b7bfSKarthikeyan Periyasamy } 68*9d11b7bfSKarthikeyan Periyasamy 69*9d11b7bfSKarthikeyan Periyasamy static inline 70*9d11b7bfSKarthikeyan Periyasamy enum ath11k_spectral_mode ath11k_spectral_get_mode(struct ath11k *ar) 71*9d11b7bfSKarthikeyan Periyasamy { 72*9d11b7bfSKarthikeyan Periyasamy return ATH11K_SPECTRAL_DISABLED; 73*9d11b7bfSKarthikeyan Periyasamy } 74*9d11b7bfSKarthikeyan Periyasamy 75*9d11b7bfSKarthikeyan Periyasamy static inline 76*9d11b7bfSKarthikeyan Periyasamy struct ath11k_dbring *ath11k_spectral_get_dbring(struct ath11k *ar) 77*9d11b7bfSKarthikeyan Periyasamy { 78*9d11b7bfSKarthikeyan Periyasamy return NULL; 79*9d11b7bfSKarthikeyan Periyasamy } 80*9d11b7bfSKarthikeyan Periyasamy 81*9d11b7bfSKarthikeyan Periyasamy #endif /* CONFIG_ATH11K_SPECTRAL */ 82*9d11b7bfSKarthikeyan Periyasamy #endif /* ATH11K_SPECTRAL_H */ 83