xref: /wlan-driver/qca-wifi-host-cmn/os_if/linux/spectral/inc/wlan_cfg80211_spectral.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2017, 2019-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name  * above copyright notice and this permission notice appear in all
8*5113495bSYour Name  * copies.
9*5113495bSYour Name  *
10*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name  */
19*5113495bSYour Name 
20*5113495bSYour Name /**
21*5113495bSYour Name  * DOC: declares driver functions interfacing with linux kernel
22*5113495bSYour Name  */
23*5113495bSYour Name 
24*5113495bSYour Name #ifndef _WLAN_CFG80211_SPECTRAL_H_
25*5113495bSYour Name #define _WLAN_CFG80211_SPECTRAL_H_
26*5113495bSYour Name 
27*5113495bSYour Name #include <linux/version.h>
28*5113495bSYour Name #include <linux/netdevice.h>
29*5113495bSYour Name #include <net/cfg80211.h>
30*5113495bSYour Name #include <qca_vendor.h>
31*5113495bSYour Name #include <qdf_list.h>
32*5113495bSYour Name #include <qdf_types.h>
33*5113495bSYour Name #include <spectral_ioctl.h>
34*5113495bSYour Name #include <wlan_spectral_public_structs.h>
35*5113495bSYour Name 
36*5113495bSYour Name extern const struct nla_policy
37*5113495bSYour Name 	spectral_scan_policy
38*5113495bSYour Name 	[QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CONFIG_MAX + 1];
39*5113495bSYour Name 
40*5113495bSYour Name extern const struct nla_policy
41*5113495bSYour Name 	spectral_scan_get_status_policy
42*5113495bSYour Name 	[QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_STATUS_MAX + 1];
43*5113495bSYour Name 
44*5113495bSYour Name #define CONFIG_REQUESTED(type)    ((type == \
45*5113495bSYour Name 	QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_REQUEST_TYPE_SCAN_AND_CONFIG) || \
46*5113495bSYour Name 	(type == QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_REQUEST_TYPE_CONFIG))
47*5113495bSYour Name 
48*5113495bSYour Name #define SCAN_REQUESTED(type)    ((type == \
49*5113495bSYour Name 	QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_REQUEST_TYPE_SCAN_AND_CONFIG) || \
50*5113495bSYour Name 	(type == QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_REQUEST_TYPE_SCAN))
51*5113495bSYour Name 
52*5113495bSYour Name /**
53*5113495bSYour Name  * wlan_spectral_get_nl80211_chwidth() - Get nl80211_chan_width value for
54*5113495bSYour Name  * channel width from enum phy_ch_width
55*5113495bSYour Name  * @phy_chwidth: enum phy_ch_width channel width value
56*5113495bSYour Name  *
57*5113495bSYour Name  * Return: channel width converted to nl80211_chan_width
58*5113495bSYour Name  */
59*5113495bSYour Name int
60*5113495bSYour Name wlan_spectral_get_nl80211_chwidth(uint8_t phy_chwidth);
61*5113495bSYour Name 
62*5113495bSYour Name /**
63*5113495bSYour Name  * wlan_spectral_get_phy_ch_width() - Convert channel width from
64*5113495bSYour Name  * nl80211_chan_width to enum phy_ch_width
65*5113495bSYour Name  * @nl_chwidth: nl80211 channel width value
66*5113495bSYour Name  *
67*5113495bSYour Name  * Return: channel width converted to phy_ch_width
68*5113495bSYour Name  */
69*5113495bSYour Name uint8_t
70*5113495bSYour Name wlan_spectral_get_phy_ch_width(uint8_t nl_chwidth);
71*5113495bSYour Name 
72*5113495bSYour Name /**
73*5113495bSYour Name  * wlan_cfg80211_register_spectral_cmd_handler() - Registration api for spectral
74*5113495bSYour Name  * @pdev:    Pointer to pdev
75*5113495bSYour Name  * @handlers: Pointer to handlers
76*5113495bSYour Name  *
77*5113495bSYour Name  * Return: 0 on success, negative value on failure
78*5113495bSYour Name  */
79*5113495bSYour Name void wlan_cfg80211_register_spectral_cmd_handler(
80*5113495bSYour Name 			struct wlan_objmgr_pdev *pdev,
81*5113495bSYour Name 			struct spectral_cfg80211_vendor_cmd_handlers *handlers);
82*5113495bSYour Name 
83*5113495bSYour Name /**
84*5113495bSYour Name  * wlan_cfg80211_spectral_scan_config_and_start() - Start spectral scan
85*5113495bSYour Name  * @wiphy:    Pointer to wiphy
86*5113495bSYour Name  * @pdev:     Pointer to pdev
87*5113495bSYour Name  * @vdev:     Pointer to vdev
88*5113495bSYour Name  * @data:     Reference to data
89*5113495bSYour Name  * @data_len: Length of @data
90*5113495bSYour Name  *
91*5113495bSYour Name  * Return: 0 on success, negative value on failure
92*5113495bSYour Name  */
93*5113495bSYour Name int wlan_cfg80211_spectral_scan_config_and_start(struct wiphy *wiphy,
94*5113495bSYour Name 						 struct wlan_objmgr_pdev *pdev,
95*5113495bSYour Name 						 struct wlan_objmgr_vdev *vdev,
96*5113495bSYour Name 						 const void *data,
97*5113495bSYour Name 						 int data_len);
98*5113495bSYour Name 
99*5113495bSYour Name /**
100*5113495bSYour Name  * wlan_cfg80211_spectral_scan_stop() - Stop spectral scan
101*5113495bSYour Name  * @wiphy:    Pointer to wiphy
102*5113495bSYour Name  * @pdev:     Pointer to pdev
103*5113495bSYour Name  * @vdev:     Pointer to vdev
104*5113495bSYour Name  * @data:     Reference to data
105*5113495bSYour Name  * @data_len: Length of @data
106*5113495bSYour Name  *
107*5113495bSYour Name  * Return: 0 on success, negative value on failure
108*5113495bSYour Name  */
109*5113495bSYour Name int wlan_cfg80211_spectral_scan_stop(struct wiphy *wiphy,
110*5113495bSYour Name 				     struct wlan_objmgr_pdev *pdev,
111*5113495bSYour Name 				     struct wlan_objmgr_vdev *vdev,
112*5113495bSYour Name 				     const void *data,
113*5113495bSYour Name 				     int data_len);
114*5113495bSYour Name 
115*5113495bSYour Name /**
116*5113495bSYour Name  * wlan_cfg80211_spectral_scan_get_config() - Get spectral scan config
117*5113495bSYour Name  * @wiphy:    Pointer to wiphy
118*5113495bSYour Name  * @pdev:     Pointer to pdev
119*5113495bSYour Name  * @vdev:     Pointer to vdev
120*5113495bSYour Name  * @data:     Reference to data
121*5113495bSYour Name  * @data_len: Length of @data
122*5113495bSYour Name  *
123*5113495bSYour Name  * Return: 0 on success, negative value on failure
124*5113495bSYour Name  */
125*5113495bSYour Name int wlan_cfg80211_spectral_scan_get_config(struct wiphy *wiphy,
126*5113495bSYour Name 					   struct wlan_objmgr_pdev *pdev,
127*5113495bSYour Name 					   struct wlan_objmgr_vdev *vdev,
128*5113495bSYour Name 					   const void *data,
129*5113495bSYour Name 					   int data_len);
130*5113495bSYour Name 
131*5113495bSYour Name /**
132*5113495bSYour Name  * wlan_cfg80211_spectral_scan_get_cap() - Get spectral system capabilities
133*5113495bSYour Name  * @wiphy:    Pointer to wiphy
134*5113495bSYour Name  * @pdev:     Pointer to pdev
135*5113495bSYour Name  * @vdev:     Pointer to vdev
136*5113495bSYour Name  * @data:     Reference to data
137*5113495bSYour Name  * @data_len: Length of @data
138*5113495bSYour Name  *
139*5113495bSYour Name  * Return: 0 on success, negative value on failure
140*5113495bSYour Name  */
141*5113495bSYour Name int wlan_cfg80211_spectral_scan_get_cap(struct wiphy *wiphy,
142*5113495bSYour Name 					struct wlan_objmgr_pdev *pdev,
143*5113495bSYour Name 					struct wlan_objmgr_vdev *vdev,
144*5113495bSYour Name 					const void *data,
145*5113495bSYour Name 					int data_len);
146*5113495bSYour Name 
147*5113495bSYour Name /**
148*5113495bSYour Name  * wlan_cfg80211_spectral_scan_get_diag_stats() - Get spectral diag stats
149*5113495bSYour Name  * @wiphy:    Pointer to wiphy
150*5113495bSYour Name  * @pdev:     Pointer to pdev
151*5113495bSYour Name  * @vdev:     Pointer to vdev
152*5113495bSYour Name  * @data:     Reference to data
153*5113495bSYour Name  * @data_len: Length of @data
154*5113495bSYour Name  *
155*5113495bSYour Name  * Return: 0 on success, negative value on failure
156*5113495bSYour Name  */
157*5113495bSYour Name int wlan_cfg80211_spectral_scan_get_diag_stats(struct wiphy *wiphy,
158*5113495bSYour Name 					       struct wlan_objmgr_pdev *pdev,
159*5113495bSYour Name 					       struct wlan_objmgr_vdev *vdev,
160*5113495bSYour Name 					       const void *data,
161*5113495bSYour Name 					       int data_len);
162*5113495bSYour Name 
163*5113495bSYour Name /**
164*5113495bSYour Name  * wlan_cfg80211_spectral_scan_get_status() - Get spectral scan status
165*5113495bSYour Name  * @wiphy:    Pointer to wiphy
166*5113495bSYour Name  * @pdev:     Pointer to pdev
167*5113495bSYour Name  * @vdev:     Pointer to vdev
168*5113495bSYour Name  * @data:     Reference to data
169*5113495bSYour Name  * @data_len: Length of @data
170*5113495bSYour Name  *
171*5113495bSYour Name  * Return: 0 on success, negative value on failure
172*5113495bSYour Name  */
173*5113495bSYour Name int wlan_cfg80211_spectral_scan_get_status(struct wiphy *wiphy,
174*5113495bSYour Name 					   struct wlan_objmgr_pdev *pdev,
175*5113495bSYour Name 					   struct wlan_objmgr_vdev *vdev,
176*5113495bSYour Name 					   const void *data,
177*5113495bSYour Name 					   int data_len);
178*5113495bSYour Name 
179*5113495bSYour Name /**
180*5113495bSYour Name  * wlan_cfg80211_spectral_scan_dma_debug_config() - configure DMA debug
181*5113495bSYour Name  * @pdev:       Pointer to pdev
182*5113495bSYour Name  * @vdev:       Pointer to vdev
183*5113495bSYour Name  * @tb:         Pointer to Spectral Scan config attribute
184*5113495bSYour Name  * @sscan_mode: Spectral scan mode
185*5113495bSYour Name  *
186*5113495bSYour Name  * Return QDF_STATUS_SUCCESS on success, QDF_STATUS_E_FAILURE on failure
187*5113495bSYour Name  */
188*5113495bSYour Name QDF_STATUS wlan_cfg80211_spectral_scan_dma_debug_config(
189*5113495bSYour Name 		struct wlan_objmgr_pdev *pdev,
190*5113495bSYour Name 		struct wlan_objmgr_vdev *vdev,
191*5113495bSYour Name 		struct nlattr **tb,
192*5113495bSYour Name 		enum spectral_scan_mode sscan_mode);
193*5113495bSYour Name #endif
194