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