xref: /wlan-driver/qca-wifi-host-cmn/os_if/linux/scan/inc/wlan_cfg80211_scan.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2017-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: declares driver functions interfacing with linux kernel
22*5113495bSYour Name  */
23*5113495bSYour Name 
24*5113495bSYour Name 
25*5113495bSYour Name #ifndef _WLAN_CFG80211_SCAN_H_
26*5113495bSYour Name #define _WLAN_CFG80211_SCAN_H_
27*5113495bSYour Name 
28*5113495bSYour Name #include <linux/version.h>
29*5113495bSYour Name #include <linux/netdevice.h>
30*5113495bSYour Name #include <net/cfg80211.h>
31*5113495bSYour Name #include <qca_vendor.h>
32*5113495bSYour Name #include <wlan_scan_public_structs.h>
33*5113495bSYour Name #include <qdf_list.h>
34*5113495bSYour Name #include <qdf_types.h>
35*5113495bSYour Name #include <wlan_scan_ucfg_api.h>
36*5113495bSYour Name #include <wlan_mgmt_txrx_utils_api.h>
37*5113495bSYour Name 
38*5113495bSYour Name /* Max number of scans allowed from userspace */
39*5113495bSYour Name #define WLAN_MAX_SCAN_COUNT 8
40*5113495bSYour Name 
41*5113495bSYour Name extern const struct nla_policy cfg80211_scan_policy[
42*5113495bSYour Name 			QCA_WLAN_VENDOR_ATTR_SCAN_MAX + 1];
43*5113495bSYour Name 
44*5113495bSYour Name #define FEATURE_ABORT_SCAN_VENDOR_COMMANDS \
45*5113495bSYour Name 	{ \
46*5113495bSYour Name 		.info.vendor_id = QCA_NL80211_VENDOR_ID, \
47*5113495bSYour Name 		.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_ABORT_SCAN, \
48*5113495bSYour Name 		.flags = WIPHY_VENDOR_CMD_NEED_WDEV | \
49*5113495bSYour Name 			WIPHY_VENDOR_CMD_NEED_NETDEV | \
50*5113495bSYour Name 			WIPHY_VENDOR_CMD_NEED_RUNNING, \
51*5113495bSYour Name 		.doit = wlan_hdd_vendor_abort_scan, \
52*5113495bSYour Name 		vendor_command_policy(cfg80211_scan_policy, \
53*5113495bSYour Name 				      QCA_WLAN_VENDOR_ATTR_SCAN_MAX) \
54*5113495bSYour Name 	},
55*5113495bSYour Name 
56*5113495bSYour Name #define SCAN_DONE_EVENT_BUF_SIZE 4096
57*5113495bSYour Name #define SCAN_WAKE_LOCK_CONNECT_DURATION (1 * 1000) /* in msec */
58*5113495bSYour Name #define SCAN_WAKE_LOCK_SCAN_DURATION (5 * 1000) /* in msec */
59*5113495bSYour Name 
60*5113495bSYour Name /**
61*5113495bSYour Name  * struct osif_scan_pdev - OS scan private structure
62*5113495bSYour Name  * @scan_req_q: Scan request queue
63*5113495bSYour Name  * @scan_req_q_lock: Protect scan request queue
64*5113495bSYour Name  * @req_id: Scan request Id
65*5113495bSYour Name  * @runtime_pm_lock: Runtime suspend lock
66*5113495bSYour Name  * @scan_wake_lock: Scan wake lock
67*5113495bSYour Name  */
68*5113495bSYour Name struct osif_scan_pdev{
69*5113495bSYour Name 	qdf_list_t scan_req_q;
70*5113495bSYour Name 	qdf_mutex_t scan_req_q_lock;
71*5113495bSYour Name 	wlan_scan_requester req_id;
72*5113495bSYour Name 	qdf_runtime_lock_t runtime_pm_lock;
73*5113495bSYour Name 	qdf_wake_lock_t scan_wake_lock;
74*5113495bSYour Name };
75*5113495bSYour Name 
76*5113495bSYour Name /*
77*5113495bSYour Name  * enum scan_source - scan request source
78*5113495bSYour Name  * @NL_SCAN: Scan initiated from NL
79*5113495bSYour Name  * @VENDOR_SCAN: Scan intiated from vendor command
80*5113495bSYour Name  */
81*5113495bSYour Name enum scan_source {
82*5113495bSYour Name 	NL_SCAN,
83*5113495bSYour Name 	VENDOR_SCAN,
84*5113495bSYour Name };
85*5113495bSYour Name 
86*5113495bSYour Name /**
87*5113495bSYour Name  * struct scan_req - Scan Request entry
88*5113495bSYour Name  * @node : List entry element
89*5113495bSYour Name  * @scan_request: scan request holder
90*5113495bSYour Name  * @scan_id: scan identifier used across host layers which is generated at WMI
91*5113495bSYour Name  * @source: scan request originator (NL/Vendor scan)
92*5113495bSYour Name  * @dev: net device (same as what is in scan_request)
93*5113495bSYour Name  * @scan_start_timestamp: scan start time
94*5113495bSYour Name  *
95*5113495bSYour Name  * Scan request linked list element
96*5113495bSYour Name  */
97*5113495bSYour Name struct scan_req {
98*5113495bSYour Name 	qdf_list_node_t node;
99*5113495bSYour Name 	struct cfg80211_scan_request *scan_request;
100*5113495bSYour Name 	uint32_t scan_id;
101*5113495bSYour Name 	uint8_t source;
102*5113495bSYour Name 	struct net_device *dev;
103*5113495bSYour Name 	qdf_time_t scan_start_timestamp;
104*5113495bSYour Name };
105*5113495bSYour Name 
106*5113495bSYour Name /**
107*5113495bSYour Name  * struct scan_params - Scan params
108*5113495bSYour Name  * @source: scan request source
109*5113495bSYour Name  * @default_ie: default scan ie
110*5113495bSYour Name  * @vendor_ie: vendor ie
111*5113495bSYour Name  * @priority: scan priority
112*5113495bSYour Name  * @half_rate: Half rate flag
113*5113495bSYour Name  * @quarter_rate: Quarter rate flag
114*5113495bSYour Name  * @strict_pscan: strict passive scan flag
115*5113495bSYour Name  * @dwell_time_active: Active dwell time. Ignored if zero or inapplicable.
116*5113495bSYour Name  * @dwell_time_active_2g: 2.4 GHz specific active dwell time. Ignored if zero or
117*5113495bSYour Name  * inapplicable.
118*5113495bSYour Name  * @dwell_time_passive: Passive dwell time. Ignored if zero or inapplicable.
119*5113495bSYour Name  * @dwell_time_active_6g: 6 GHz specific active dwell time. Ignored if zero or
120*5113495bSYour Name  * inapplicable.
121*5113495bSYour Name  * @dwell_time_passive_6g: 6 GHz specific passive dwell time. Ignored if zero or
122*5113495bSYour Name  * inapplicable.
123*5113495bSYour Name  * @scan_probe_unicast_ra: Use BSSID in probe request frame RA.
124*5113495bSYour Name  * @scan_f_2ghz: Scan only 2GHz channels
125*5113495bSYour Name  * @scan_f_5ghz: Scan only 5+6GHz channels
126*5113495bSYour Name  * @mld_id: MLD ID of the requested BSS within ML probe request
127*5113495bSYour Name  */
128*5113495bSYour Name struct scan_params {
129*5113495bSYour Name 	uint8_t source;
130*5113495bSYour Name 	struct element_info default_ie;
131*5113495bSYour Name 	struct element_info vendor_ie;
132*5113495bSYour Name 	enum scan_priority priority;
133*5113495bSYour Name 	bool half_rate;
134*5113495bSYour Name 	bool quarter_rate;
135*5113495bSYour Name 	bool strict_pscan;
136*5113495bSYour Name 	uint32_t dwell_time_active;
137*5113495bSYour Name 	uint32_t dwell_time_active_2g;
138*5113495bSYour Name 	uint32_t dwell_time_passive;
139*5113495bSYour Name 	uint32_t dwell_time_active_6g;
140*5113495bSYour Name 	uint32_t dwell_time_passive_6g;
141*5113495bSYour Name 	bool scan_probe_unicast_ra;
142*5113495bSYour Name 	bool scan_f_2ghz;
143*5113495bSYour Name 	bool scan_f_5ghz;
144*5113495bSYour Name 	uint8_t mld_id;
145*5113495bSYour Name };
146*5113495bSYour Name 
147*5113495bSYour Name /**
148*5113495bSYour Name  * struct wlan_cfg80211_inform_bss - BSS inform data
149*5113495bSYour Name  * @chan: channel the frame was received on
150*5113495bSYour Name  * @mgmt: beacon/probe resp frame
151*5113495bSYour Name  * @frame_len: frame length
152*5113495bSYour Name  * @rssi: signal strength in mBm (100*dBm)
153*5113495bSYour Name  * @boottime_ns: timestamp (CLOCK_BOOTTIME) when the information was received.
154*5113495bSYour Name  * @per_chain_rssi: per chain rssi received
155*5113495bSYour Name  */
156*5113495bSYour Name struct wlan_cfg80211_inform_bss {
157*5113495bSYour Name 	struct ieee80211_channel *chan;
158*5113495bSYour Name 	struct ieee80211_mgmt *mgmt;
159*5113495bSYour Name 	size_t frame_len;
160*5113495bSYour Name 	int rssi;
161*5113495bSYour Name 	uint64_t boottime_ns;
162*5113495bSYour Name 	uint8_t per_chain_rssi[WLAN_MGMT_TXRX_HOST_MAX_ANTENNA];
163*5113495bSYour Name };
164*5113495bSYour Name 
165*5113495bSYour Name 
166*5113495bSYour Name #ifdef FEATURE_WLAN_SCAN_PNO
167*5113495bSYour Name /**
168*5113495bSYour Name  * wlan_cfg80211_sched_scan_start() - cfg80211 scheduled scan(pno) start
169*5113495bSYour Name  * @vdev: vdev pointer
170*5113495bSYour Name  * @request: Pointer to cfg80211 scheduled scan start request
171*5113495bSYour Name  * @scan_backoff_multiplier: multiply scan period by this after max cycles
172*5113495bSYour Name  *
173*5113495bSYour Name  * Return: 0 for success, non zero for failure
174*5113495bSYour Name  */
175*5113495bSYour Name int wlan_cfg80211_sched_scan_start(struct wlan_objmgr_vdev *vdev,
176*5113495bSYour Name 				   struct cfg80211_sched_scan_request *request,
177*5113495bSYour Name 				   uint8_t scan_backoff_multiplier);
178*5113495bSYour Name 
179*5113495bSYour Name /**
180*5113495bSYour Name  * wlan_cfg80211_sched_scan_stop() - cfg80211 scheduled scan(pno) stop
181*5113495bSYour Name  * @vdev: vdev pointer
182*5113495bSYour Name  *
183*5113495bSYour Name  * Return: 0 for success, non zero for failure
184*5113495bSYour Name  */
185*5113495bSYour Name int wlan_cfg80211_sched_scan_stop(struct wlan_objmgr_vdev *vdev);
186*5113495bSYour Name #endif
187*5113495bSYour Name 
188*5113495bSYour Name /**
189*5113495bSYour Name  * wlan_scan_runtime_pm_init() - API to initialize runtime pm context for scan
190*5113495bSYour Name  * @pdev: Pointer to pdev
191*5113495bSYour Name  *
192*5113495bSYour Name  * This will help to initialize scan runtime pm context separately.
193*5113495bSYour Name  *
194*5113495bSYour Name  * Return: QDF_STATUS
195*5113495bSYour Name  */
196*5113495bSYour Name QDF_STATUS wlan_scan_runtime_pm_init(struct wlan_objmgr_pdev *pdev);
197*5113495bSYour Name 
198*5113495bSYour Name /**
199*5113495bSYour Name  * wlan_scan_runtime_pm_deinit() - API to deinitialize runtime pm
200*5113495bSYour Name  * for scan.
201*5113495bSYour Name  * @pdev: Pointer to pdev
202*5113495bSYour Name  *
203*5113495bSYour Name  * This will help to deinitialize scan runtime pm before deinitialize
204*5113495bSYour Name  * HIF
205*5113495bSYour Name  *
206*5113495bSYour Name  * Return: void
207*5113495bSYour Name  */
208*5113495bSYour Name void wlan_scan_runtime_pm_deinit(struct wlan_objmgr_pdev *pdev);
209*5113495bSYour Name 
210*5113495bSYour Name /**
211*5113495bSYour Name  * wlan_cfg80211_scan_priv_init() - API to initialize cfg80211 scan
212*5113495bSYour Name  * @pdev: Pointer to net device
213*5113495bSYour Name  *
214*5113495bSYour Name  * API to initialize cfg80211 scan module.
215*5113495bSYour Name  *
216*5113495bSYour Name  * Return: QDF_STATUS
217*5113495bSYour Name  */
218*5113495bSYour Name QDF_STATUS wlan_cfg80211_scan_priv_init(struct wlan_objmgr_pdev *pdev);
219*5113495bSYour Name 
220*5113495bSYour Name /**
221*5113495bSYour Name  * wlan_cfg80211_scan_priv_deinit() - API to deinitialize cfg80211 scan
222*5113495bSYour Name  * @pdev: Pointer to net device
223*5113495bSYour Name  *
224*5113495bSYour Name  * API to deinitialize cfg80211 scan module.
225*5113495bSYour Name  *
226*5113495bSYour Name  * Return: QDF_STATUS
227*5113495bSYour Name  */
228*5113495bSYour Name QDF_STATUS wlan_cfg80211_scan_priv_deinit(
229*5113495bSYour Name 		struct wlan_objmgr_pdev *pdev);
230*5113495bSYour Name 
231*5113495bSYour Name /**
232*5113495bSYour Name  * wlan_cfg80211_scan() - API to process cfg80211 scan request
233*5113495bSYour Name  * @vdev: Pointer to vdev
234*5113495bSYour Name  * @request: Pointer to scan request
235*5113495bSYour Name  * @params: scan params
236*5113495bSYour Name  *
237*5113495bSYour Name  * API to trigger scan and update cfg80211 scan database.
238*5113495bSYour Name  * scan dump command can be used to fetch scan results
239*5113495bSYour Name  * on receipt of scan complete event.
240*5113495bSYour Name  *
241*5113495bSYour Name  * Return: 0 for success, non zero for failure
242*5113495bSYour Name  */
243*5113495bSYour Name int wlan_cfg80211_scan(struct wlan_objmgr_vdev *vdev,
244*5113495bSYour Name 		       struct cfg80211_scan_request *request,
245*5113495bSYour Name 		       struct scan_params *params);
246*5113495bSYour Name 
247*5113495bSYour Name /**
248*5113495bSYour Name  * wlan_cfg80211_inform_bss_frame_data() - API to inform beacon to cfg80211
249*5113495bSYour Name  * @wiphy: wiphy
250*5113495bSYour Name  * @bss: bss data
251*5113495bSYour Name  *
252*5113495bSYour Name  * API to inform beacon to cfg80211
253*5113495bSYour Name  *
254*5113495bSYour Name  * Return: pointer to bss entry
255*5113495bSYour Name  */
256*5113495bSYour Name struct cfg80211_bss *
257*5113495bSYour Name wlan_cfg80211_inform_bss_frame_data(struct wiphy *wiphy,
258*5113495bSYour Name 		struct wlan_cfg80211_inform_bss *bss);
259*5113495bSYour Name 
260*5113495bSYour Name /**
261*5113495bSYour Name  * wlan_cfg80211_inform_bss_frame() - API to inform beacon to cfg80211
262*5113495bSYour Name  * @pdev: Pointer to pdev
263*5113495bSYour Name  * @scan_params: scan entry
264*5113495bSYour Name  *
265*5113495bSYour Name  * API to inform beacon to cfg80211
266*5113495bSYour Name  *
267*5113495bSYour Name  * Return: void
268*5113495bSYour Name  */
269*5113495bSYour Name void wlan_cfg80211_inform_bss_frame(struct wlan_objmgr_pdev *pdev,
270*5113495bSYour Name 	struct scan_cache_entry *scan_params);
271*5113495bSYour Name 
272*5113495bSYour Name /**
273*5113495bSYour Name  * __wlan_cfg80211_unlink_bss_list() - flush bss from the kernel cache
274*5113495bSYour Name  * @wiphy: wiphy
275*5113495bSYour Name  * @pdev: pdev object
276*5113495bSYour Name  * @bssid: bssid of the BSS to find
277*5113495bSYour Name  * @ssid: ssid of the BSS to find
278*5113495bSYour Name  * @ssid_len: ssid len of of the BSS to find
279*5113495bSYour Name  *
280*5113495bSYour Name  * Return: QDF_STATUS
281*5113495bSYour Name  */
282*5113495bSYour Name QDF_STATUS __wlan_cfg80211_unlink_bss_list(struct wiphy *wiphy,
283*5113495bSYour Name 					   struct wlan_objmgr_pdev *pdev,
284*5113495bSYour Name 					   uint8_t *bssid, uint8_t *ssid,
285*5113495bSYour Name 					   uint8_t ssid_len);
286*5113495bSYour Name 
287*5113495bSYour Name /**
288*5113495bSYour Name  * wlan_cfg80211_get_bss() - Get the bss entry matching the chan, bssid and ssid
289*5113495bSYour Name  * @wiphy: wiphy
290*5113495bSYour Name  * @channel: channel of the BSS to find
291*5113495bSYour Name  * @bssid: bssid of the BSS to find
292*5113495bSYour Name  * @ssid: ssid of the BSS to find
293*5113495bSYour Name  * @ssid_len: ssid len of of the BSS to find
294*5113495bSYour Name  *
295*5113495bSYour Name  * The API is a wrapper to get bss from kernel matching the chan,
296*5113495bSYour Name  * bssid and ssid
297*5113495bSYour Name  *
298*5113495bSYour Name  * Return: bss structure if found else NULL
299*5113495bSYour Name  */
300*5113495bSYour Name struct cfg80211_bss *wlan_cfg80211_get_bss(struct wiphy *wiphy,
301*5113495bSYour Name 					   struct ieee80211_channel *channel,
302*5113495bSYour Name 					   const u8 *bssid,
303*5113495bSYour Name 					   const u8 *ssid, size_t ssid_len);
304*5113495bSYour Name 
305*5113495bSYour Name /*
306*5113495bSYour Name  * wlan_cfg80211_unlink_bss_list : flush bss from the kernel cache
307*5113495bSYour Name  * @pdev: Pointer to pdev
308*5113495bSYour Name  * @scan_entry: scan entry
309*5113495bSYour Name  *
310*5113495bSYour Name  * Return: bss which is unlinked from kernel cache
311*5113495bSYour Name  */
312*5113495bSYour Name void wlan_cfg80211_unlink_bss_list(struct wlan_objmgr_pdev *pdev,
313*5113495bSYour Name 				   struct scan_cache_entry *scan_entry);
314*5113495bSYour Name 
315*5113495bSYour Name /**
316*5113495bSYour Name  * wlan_vendor_abort_scan() - API to vendor abort scan
317*5113495bSYour Name  * @pdev: Pointer to pdev
318*5113495bSYour Name  * @data: pointer to data
319*5113495bSYour Name  * @data_len: Data length
320*5113495bSYour Name  *
321*5113495bSYour Name  * API to abort scan through vendor command
322*5113495bSYour Name  *
323*5113495bSYour Name  * Return: 0 for success, non zero for failure
324*5113495bSYour Name  */
325*5113495bSYour Name int wlan_vendor_abort_scan(struct wlan_objmgr_pdev *pdev,
326*5113495bSYour Name 				const void *data, int data_len);
327*5113495bSYour Name 
328*5113495bSYour Name /**
329*5113495bSYour Name  * wlan_cfg80211_abort_scan() - API to abort scan through cfg80211
330*5113495bSYour Name  * @pdev: Pointer to pdev
331*5113495bSYour Name  *
332*5113495bSYour Name  * API to abort scan through cfg80211 request
333*5113495bSYour Name  *
334*5113495bSYour Name  * Return: 0 for success, non zero for failure
335*5113495bSYour Name  */
336*5113495bSYour Name int wlan_cfg80211_abort_scan(struct wlan_objmgr_pdev *pdev);
337*5113495bSYour Name 
338*5113495bSYour Name /**
339*5113495bSYour Name  * wlan_abort_scan() - Generic API to abort scan request
340*5113495bSYour Name  * @pdev: Pointer to pdev
341*5113495bSYour Name  * @pdev_id: pdev id
342*5113495bSYour Name  * @vdev_id: vdev id
343*5113495bSYour Name  * @scan_id: scan id
344*5113495bSYour Name  * @sync: if wait for scan complete is required
345*5113495bSYour Name  *
346*5113495bSYour Name  * Generic API to abort scans
347*5113495bSYour Name  *
348*5113495bSYour Name  * Return: 0 for success, non zero for failure
349*5113495bSYour Name  */
350*5113495bSYour Name QDF_STATUS wlan_abort_scan(struct wlan_objmgr_pdev *pdev,
351*5113495bSYour Name 				   uint32_t pdev_id,
352*5113495bSYour Name 				   uint32_t vdev_id,
353*5113495bSYour Name 				   wlan_scan_id scan_id,
354*5113495bSYour Name 				   bool sync);
355*5113495bSYour Name 
356*5113495bSYour Name /**
357*5113495bSYour Name  * wlan_cfg80211_cleanup_scan_queue() - remove entries in scan queue
358*5113495bSYour Name  * @pdev: pdev pointer
359*5113495bSYour Name  * @dev: net device pointer
360*5113495bSYour Name  *
361*5113495bSYour Name  * Removes entries in scan queue depending on dev provided and sends scan
362*5113495bSYour Name  * complete event to NL.
363*5113495bSYour Name  * Removes all entries in scan queue, if dev provided is NULL
364*5113495bSYour Name  *
365*5113495bSYour Name  * Return: None
366*5113495bSYour Name  */
367*5113495bSYour Name void wlan_cfg80211_cleanup_scan_queue(struct wlan_objmgr_pdev *pdev,
368*5113495bSYour Name 				      struct net_device *dev);
369*5113495bSYour Name 
370*5113495bSYour Name /**
371*5113495bSYour Name  * wlan_scan_cfg80211_add_connected_pno_support() - Set connected PNO support
372*5113495bSYour Name  * @wiphy: Pointer to wireless phy
373*5113495bSYour Name  *
374*5113495bSYour Name  * This function is used to set connected PNO support to kernel
375*5113495bSYour Name  *
376*5113495bSYour Name  * Return: None
377*5113495bSYour Name  */
378*5113495bSYour Name #if defined(CFG80211_REPORT_BETTER_BSS_IN_SCHED_SCAN) || \
379*5113495bSYour Name 	(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0))
380*5113495bSYour Name void wlan_scan_cfg80211_add_connected_pno_support(struct wiphy *wiphy);
381*5113495bSYour Name 
382*5113495bSYour Name #else
383*5113495bSYour Name static inline
wlan_scan_cfg80211_add_connected_pno_support(struct wiphy * wiphy)384*5113495bSYour Name void wlan_scan_cfg80211_add_connected_pno_support(struct wiphy *wiphy)
385*5113495bSYour Name {
386*5113495bSYour Name }
387*5113495bSYour Name #endif
388*5113495bSYour Name 
389*5113495bSYour Name #if ((LINUX_VERSION_CODE > KERNEL_VERSION(4, 4, 0)) || \
390*5113495bSYour Name 		defined(CFG80211_MULTI_SCAN_PLAN_BACKPORT)) && \
391*5113495bSYour Name 		defined(FEATURE_WLAN_SCAN_PNO)
392*5113495bSYour Name /**
393*5113495bSYour Name  * wlan_config_sched_scan_plans_to_wiphy() - configure sched scan plans to wiphy
394*5113495bSYour Name  * @wiphy: pointer to wiphy
395*5113495bSYour Name  * @psoc: pointer to psoc object
396*5113495bSYour Name  *
397*5113495bSYour Name  * Return: None
398*5113495bSYour Name  */
399*5113495bSYour Name void wlan_config_sched_scan_plans_to_wiphy(struct wiphy *wiphy,
400*5113495bSYour Name 					   struct wlan_objmgr_psoc *psoc);
401*5113495bSYour Name #else
402*5113495bSYour Name static inline
wlan_config_sched_scan_plans_to_wiphy(struct wiphy * wiphy,struct wlan_objmgr_psoc * psoc)403*5113495bSYour Name void wlan_config_sched_scan_plans_to_wiphy(struct wiphy *wiphy,
404*5113495bSYour Name 					   struct wlan_objmgr_psoc *psoc)
405*5113495bSYour Name {
406*5113495bSYour Name }
407*5113495bSYour Name #endif /* FEATURE_WLAN_SCAN_PNO */
408*5113495bSYour Name 
409*5113495bSYour Name /**
410*5113495bSYour Name  * wlan_cfg80211_scan_done() - Scan completed callback to cfg80211
411*5113495bSYour Name  * @netdev: Net device
412*5113495bSYour Name  * @req : Scan request
413*5113495bSYour Name  * @aborted : true scan aborted false scan success
414*5113495bSYour Name  * @osif_priv: OS private structure
415*5113495bSYour Name  *
416*5113495bSYour Name  * This function notifies scan done to cfg80211
417*5113495bSYour Name  *
418*5113495bSYour Name  * Return: none
419*5113495bSYour Name  */
420*5113495bSYour Name void wlan_cfg80211_scan_done(struct net_device *netdev,
421*5113495bSYour Name 			     struct cfg80211_scan_request *req,
422*5113495bSYour Name 			     bool aborted, struct pdev_osif_priv *osif_priv);
423*5113495bSYour Name 
424*5113495bSYour Name /**
425*5113495bSYour Name  * convert_nl_scan_priority_to_internal() - Convert NL80211 based scan prioirty
426*5113495bSYour Name  * value to internal scan priority value
427*5113495bSYour Name  * @nl_scan_priority : Scan priority value received in vendor attribute
428*5113495bSYour Name  *
429*5113495bSYour Name  * Return: Internal scan priority value
430*5113495bSYour Name  */
431*5113495bSYour Name enum scan_priority convert_nl_scan_priority_to_internal(
432*5113495bSYour Name 	enum qca_wlan_vendor_scan_priority nl_scan_priority);
433*5113495bSYour Name 
434*5113495bSYour Name /**
435*5113495bSYour Name  * wlan_is_scan_allowed() - Allow/reject scan if any scan is running
436*5113495bSYour Name  * @vdev: vdev on which current scan issued
437*5113495bSYour Name  *
438*5113495bSYour Name  * Check if any other scan is in queue and decide whether to allow or reject
439*5113495bSYour Name  * current scan based on simultaneous_scan feature support
440*5113495bSYour Name  *
441*5113495bSYour Name  * Return: True if current scan can be allowed
442*5113495bSYour Name  */
443*5113495bSYour Name bool wlan_is_scan_allowed(struct wlan_objmgr_vdev *vdev);
444*5113495bSYour Name #endif
445