xref: /wlan-driver/qcacld-3.0/core/hdd/src/wlan_hdd_scan.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2022-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: wlan_hdd_scan.h
22*5113495bSYour Name  *
23*5113495bSYour Name  * WLAN Host Device Driver scan related implementation
24*5113495bSYour Name  *
25*5113495bSYour Name  */
26*5113495bSYour Name 
27*5113495bSYour Name #if !defined(WLAN_HDD_SCAN_H)
28*5113495bSYour Name #define WLAN_HDD_SCAN_H
29*5113495bSYour Name 
30*5113495bSYour Name #include "wlan_hdd_main.h"
31*5113495bSYour Name #include "csr_inside_api.h"
32*5113495bSYour Name #include <wlan_cfg80211_scan.h>
33*5113495bSYour Name #include "qca_vendor.h"
34*5113495bSYour Name 
35*5113495bSYour Name extern const struct nla_policy scan_policy[
36*5113495bSYour Name 			QCA_WLAN_VENDOR_ATTR_SCAN_MAX + 1];
37*5113495bSYour Name 
38*5113495bSYour Name #define FEATURE_TRIGGER_SCAN_VENDOR_COMMANDS \
39*5113495bSYour Name { \
40*5113495bSYour Name 	.info.vendor_id = QCA_NL80211_VENDOR_ID, \
41*5113495bSYour Name 	.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_TRIGGER_SCAN, \
42*5113495bSYour Name 	.flags = WIPHY_VENDOR_CMD_NEED_WDEV | \
43*5113495bSYour Name 		WIPHY_VENDOR_CMD_NEED_NETDEV | \
44*5113495bSYour Name 		WIPHY_VENDOR_CMD_NEED_RUNNING, \
45*5113495bSYour Name 	.doit = wlan_hdd_cfg80211_vendor_scan, \
46*5113495bSYour Name 	vendor_command_policy(scan_policy, \
47*5113495bSYour Name 			      QCA_WLAN_VENDOR_ATTR_SCAN_MAX) \
48*5113495bSYour Name },
49*5113495bSYour Name 
50*5113495bSYour Name #define EXTSCAN_PARAM_MAX QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX
51*5113495bSYour Name 
52*5113495bSYour Name int hdd_scan_context_init(struct hdd_context *hdd_ctx);
53*5113495bSYour Name void hdd_scan_context_destroy(struct hdd_context *hdd_ctx);
54*5113495bSYour Name 
55*5113495bSYour Name int wlan_hdd_cfg80211_scan(struct wiphy *wiphy,
56*5113495bSYour Name 			   struct cfg80211_scan_request *request);
57*5113495bSYour Name 
58*5113495bSYour Name #ifdef FEATURE_WLAN_SCAN_PNO
59*5113495bSYour Name int wlan_hdd_cfg80211_sched_scan_start(struct wiphy *wiphy,
60*5113495bSYour Name 				       struct net_device *dev,
61*5113495bSYour Name 				       struct cfg80211_sched_scan_request
62*5113495bSYour Name 				       *request);
63*5113495bSYour Name 
64*5113495bSYour Name #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
65*5113495bSYour Name /**
66*5113495bSYour Name  * wlan_hdd_cfg80211_sched_scan_stop() - stop cfg80211 scheduled (PNO) scan
67*5113495bSYour Name  * @wiphy: Pointer to wiphy
68*5113495bSYour Name  * @dev: Pointer network device
69*5113495bSYour Name  *
70*5113495bSYour Name  * Note, this returns success if the driver is recovering or unloading to
71*5113495bSYour Name  * prevent race conditions between PLD initiating an unload and kernel
72*5113495bSYour Name  * initiating a scheduled scan stop via cfg80211. Unload is expected to stop
73*5113495bSYour Name  * any pending scheduled scans in this case.
74*5113495bSYour Name  *
75*5113495bSYour Name  * Return: 0 for success, non zero for failure
76*5113495bSYour Name  */
77*5113495bSYour Name int wlan_hdd_cfg80211_sched_scan_stop(struct wiphy *wiphy,
78*5113495bSYour Name 				      struct net_device *dev);
79*5113495bSYour Name #else
80*5113495bSYour Name int wlan_hdd_cfg80211_sched_scan_stop(struct wiphy *wiphy,
81*5113495bSYour Name 				      struct net_device *dev,
82*5113495bSYour Name 				      uint64_t reqid);
83*5113495bSYour Name 
84*5113495bSYour Name #endif /* KERNEL_VERSION(4, 12, 0) */
85*5113495bSYour Name 
86*5113495bSYour Name /**
87*5113495bSYour Name  * wlan_hdd_sched_scan_stop() - stop scheduled (PNO) scans
88*5113495bSYour Name  * @dev: Pointer network device
89*5113495bSYour Name  *
90*5113495bSYour Name  * Return: 0 for success, non zero for failure
91*5113495bSYour Name  */
92*5113495bSYour Name int wlan_hdd_sched_scan_stop(struct net_device *dev);
93*5113495bSYour Name #else
wlan_hdd_sched_scan_stop(struct net_device * dev)94*5113495bSYour Name static inline int wlan_hdd_sched_scan_stop(struct net_device *dev)
95*5113495bSYour Name {
96*5113495bSYour Name 	return 0;
97*5113495bSYour Name }
98*5113495bSYour Name #endif /* End of FEATURE_WLAN_SCAN_PNO */
99*5113495bSYour Name 
100*5113495bSYour Name int wlan_hdd_cfg80211_vendor_scan(struct wiphy *wiphy,
101*5113495bSYour Name 		struct wireless_dev *wdev, const void *data,
102*5113495bSYour Name 		int data_len);
103*5113495bSYour Name 
104*5113495bSYour Name /**
105*5113495bSYour Name  * wlan_hdd_vendor_abort_scan() - API to process vendor command for
106*5113495bSYour Name  * abort scan
107*5113495bSYour Name  * @wiphy: Pointer to wiphy
108*5113495bSYour Name  * @wdev: Pointer to net device
109*5113495bSYour Name  * @data : Pointer to the data
110*5113495bSYour Name  * @data_len : length of the data
111*5113495bSYour Name  *
112*5113495bSYour Name  * This is called from supplicant to abort scan
113*5113495bSYour Name  *
114*5113495bSYour Name  * Return: zero for success and non zero for failure.
115*5113495bSYour Name  */
116*5113495bSYour Name int wlan_hdd_vendor_abort_scan(
117*5113495bSYour Name 	struct wiphy *wiphy, struct wireless_dev *wdev,
118*5113495bSYour Name 	const void *data, int data_len);
119*5113495bSYour Name 
120*5113495bSYour Name #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0)) || \
121*5113495bSYour Name 	defined(CFG80211_ABORT_SCAN)
122*5113495bSYour Name void wlan_hdd_cfg80211_abort_scan(struct wiphy *wiphy,
123*5113495bSYour Name 				  struct wireless_dev *wdev);
124*5113495bSYour Name #endif
125*5113495bSYour Name 
126*5113495bSYour Name /**
127*5113495bSYour Name  * hdd_init_scan_reject_params() - init scan reject params
128*5113495bSYour Name  * @hdd_ctx: hdd contxt
129*5113495bSYour Name  *
130*5113495bSYour Name  * Return: None
131*5113495bSYour Name  */
132*5113495bSYour Name void hdd_init_scan_reject_params(struct hdd_context *hdd_ctx);
133*5113495bSYour Name 
134*5113495bSYour Name /**
135*5113495bSYour Name  * wlan_hdd_cfg80211_scan_block() - scan block handler
136*5113495bSYour Name  * @adapter: HDD adapter to work against
137*5113495bSYour Name  *
138*5113495bSYour Name  * Return: none
139*5113495bSYour Name  */
140*5113495bSYour Name void wlan_hdd_cfg80211_scan_block(struct hdd_adapter *adapter);
141*5113495bSYour Name 
142*5113495bSYour Name #ifdef FEATURE_WLAN_EXTSCAN
143*5113495bSYour Name extern const struct nla_policy
144*5113495bSYour Name wlan_hdd_extscan_config_policy[EXTSCAN_PARAM_MAX + 1];
145*5113495bSYour Name extern const struct nla_policy
146*5113495bSYour Name wlan_hdd_pno_config_policy[QCA_WLAN_VENDOR_ATTR_PNO_MAX + 1];
147*5113495bSYour Name 
148*5113495bSYour Name #define FEATURE_EXTSCAN_VENDOR_COMMANDS					       \
149*5113495bSYour Name {									       \
150*5113495bSYour Name 	.info.vendor_id = QCA_NL80211_VENDOR_ID,			       \
151*5113495bSYour Name 	.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_START,		       \
152*5113495bSYour Name 	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |				       \
153*5113495bSYour Name 		 WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, \
154*5113495bSYour Name 	.doit = wlan_hdd_cfg80211_extscan_start,			       \
155*5113495bSYour Name 	vendor_command_policy(wlan_hdd_extscan_config_policy,		       \
156*5113495bSYour Name 			      EXTSCAN_PARAM_MAX)			       \
157*5113495bSYour Name },									       \
158*5113495bSYour Name {									       \
159*5113495bSYour Name 	.info.vendor_id = QCA_NL80211_VENDOR_ID,			       \
160*5113495bSYour Name 	.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_STOP,		       \
161*5113495bSYour Name 	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |				       \
162*5113495bSYour Name 		 WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, \
163*5113495bSYour Name 	.doit = wlan_hdd_cfg80211_extscan_stop,				       \
164*5113495bSYour Name 	vendor_command_policy(wlan_hdd_extscan_config_policy,		       \
165*5113495bSYour Name 			      EXTSCAN_PARAM_MAX)			       \
166*5113495bSYour Name },									       \
167*5113495bSYour Name {									       \
168*5113495bSYour Name 	.info.vendor_id = QCA_NL80211_VENDOR_ID,			       \
169*5113495bSYour Name 	.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_GET_CAPABILITIES,     \
170*5113495bSYour Name 	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |				       \
171*5113495bSYour Name 		 WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, \
172*5113495bSYour Name 	.doit = wlan_hdd_cfg80211_extscan_get_capabilities,		       \
173*5113495bSYour Name 	vendor_command_policy(wlan_hdd_extscan_config_policy,		       \
174*5113495bSYour Name 			      EXTSCAN_PARAM_MAX)			       \
175*5113495bSYour Name },									       \
176*5113495bSYour Name {									       \
177*5113495bSYour Name 	.info.vendor_id = QCA_NL80211_VENDOR_ID,			       \
178*5113495bSYour Name 	.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_GET_CACHED_RESULTS,   \
179*5113495bSYour Name 	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |				       \
180*5113495bSYour Name 		 WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, \
181*5113495bSYour Name 	.doit = wlan_hdd_cfg80211_extscan_get_cached_results,		       \
182*5113495bSYour Name 	vendor_command_policy(wlan_hdd_extscan_config_policy,		       \
183*5113495bSYour Name 			      EXTSCAN_PARAM_MAX)			       \
184*5113495bSYour Name },									       \
185*5113495bSYour Name {									       \
186*5113495bSYour Name 	.info.vendor_id = QCA_NL80211_VENDOR_ID,			       \
187*5113495bSYour Name 	.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_BSSID_HOTLIST,    \
188*5113495bSYour Name 	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |				       \
189*5113495bSYour Name 		 WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, \
190*5113495bSYour Name 	.doit = wlan_hdd_cfg80211_extscan_set_bssid_hotlist,		       \
191*5113495bSYour Name 	vendor_command_policy(wlan_hdd_extscan_config_policy,		       \
192*5113495bSYour Name 			      EXTSCAN_PARAM_MAX)			       \
193*5113495bSYour Name },									       \
194*5113495bSYour Name {									       \
195*5113495bSYour Name 	.info.vendor_id = QCA_NL80211_VENDOR_ID,			       \
196*5113495bSYour Name 	.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_BSSID_HOTLIST,  \
197*5113495bSYour Name 	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |				       \
198*5113495bSYour Name 		 WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, \
199*5113495bSYour Name 	.doit = wlan_hdd_cfg80211_extscan_reset_bssid_hotlist,		       \
200*5113495bSYour Name 	vendor_command_policy(wlan_hdd_extscan_config_policy,		       \
201*5113495bSYour Name 			      EXTSCAN_PARAM_MAX)			       \
202*5113495bSYour Name },									       \
203*5113495bSYour Name {									       \
204*5113495bSYour Name 	.info.vendor_id = QCA_NL80211_VENDOR_ID,			       \
205*5113495bSYour Name 	.info.subcmd =							       \
206*5113495bSYour Name 		QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SIGNIFICANT_CHANGE,      \
207*5113495bSYour Name 	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |				       \
208*5113495bSYour Name 		 WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, \
209*5113495bSYour Name 	.doit = wlan_hdd_cfg80211_extscan_set_significant_change,	       \
210*5113495bSYour Name 	vendor_command_policy(wlan_hdd_extscan_config_policy,		       \
211*5113495bSYour Name 			      EXTSCAN_PARAM_MAX)			       \
212*5113495bSYour Name },									       \
213*5113495bSYour Name {									       \
214*5113495bSYour Name 	.info.vendor_id = QCA_NL80211_VENDOR_ID,			       \
215*5113495bSYour Name 	.info.subcmd =							       \
216*5113495bSYour Name 		QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SIGNIFICANT_CHANGE,    \
217*5113495bSYour Name 	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |				       \
218*5113495bSYour Name 		 WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, \
219*5113495bSYour Name 	.doit = wlan_hdd_cfg80211_extscan_reset_significant_change,	       \
220*5113495bSYour Name 	vendor_command_policy(wlan_hdd_extscan_config_policy,		       \
221*5113495bSYour Name 			      EXTSCAN_PARAM_MAX)			       \
222*5113495bSYour Name },									       \
223*5113495bSYour Name {									       \
224*5113495bSYour Name 	.info.vendor_id = QCA_NL80211_VENDOR_ID,			       \
225*5113495bSYour Name 	.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_PNO_SET_LIST,	       \
226*5113495bSYour Name 	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |				       \
227*5113495bSYour Name 		 WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, \
228*5113495bSYour Name 	.doit = wlan_hdd_cfg80211_set_epno_list,				       \
229*5113495bSYour Name 	vendor_command_policy(wlan_hdd_pno_config_policy,		       \
230*5113495bSYour Name 			      QCA_WLAN_VENDOR_ATTR_PNO_MAX)		       \
231*5113495bSYour Name },									       \
232*5113495bSYour Name {									       \
233*5113495bSYour Name 	.info.vendor_id = QCA_NL80211_VENDOR_ID,			       \
234*5113495bSYour Name 	.info.subcmd =							       \
235*5113495bSYour Name 		QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_PNO_SET_PASSPOINT_LIST,      \
236*5113495bSYour Name 	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |				       \
237*5113495bSYour Name 		 WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, \
238*5113495bSYour Name 	.doit = wlan_hdd_cfg80211_set_passpoint_list,			       \
239*5113495bSYour Name 	vendor_command_policy(wlan_hdd_pno_config_policy,		       \
240*5113495bSYour Name 			      QCA_WLAN_VENDOR_ATTR_PNO_MAX)		       \
241*5113495bSYour Name },									       \
242*5113495bSYour Name {									       \
243*5113495bSYour Name 	.info.vendor_id = QCA_NL80211_VENDOR_ID,			       \
244*5113495bSYour Name 	.info.subcmd =							       \
245*5113495bSYour Name 		QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_PNO_RESET_PASSPOINT_LIST,    \
246*5113495bSYour Name 	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |				       \
247*5113495bSYour Name 		 WIPHY_VENDOR_CMD_NEED_NETDEV | WIPHY_VENDOR_CMD_NEED_RUNNING, \
248*5113495bSYour Name 	.doit = wlan_hdd_cfg80211_reset_passpoint_list,			       \
249*5113495bSYour Name 	vendor_command_policy(wlan_hdd_pno_config_policy,		       \
250*5113495bSYour Name 			      QCA_WLAN_VENDOR_ATTR_PNO_MAX)		       \
251*5113495bSYour Name },
252*5113495bSYour Name #else
253*5113495bSYour Name #define FEATURE_EXTSCAN_VENDOR_COMMANDS
254*5113495bSYour Name #endif /* FEATURE_WLAN_EXTSCAN */
255*5113495bSYour Name 
256*5113495bSYour Name #endif /* end #if !defined(WLAN_HDD_SCAN_H) */
257*5113495bSYour Name 
258