xref: /wlan-dirver/qca-wifi-host-cmn/umac/scan/core/src/wlan_scan_main.h (revision dae10a5fbc53d54c53c4ba24fa018ad8b1e7c008)
1 /*
2  * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for
5  * any purpose with or without fee is hereby granted, provided that the
6  * above copyright notice and this permission notice appear in all
7  * copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16  * PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 /*
20  * DOC: contains scan init/deinit public api
21  */
22 
23 #ifndef _WLAN_SCAN_MAIN_API_H_
24 #define _WLAN_SCAN_MAIN_API_H_
25 
26 #include <qdf_atomic.h>
27 #include <wlan_objmgr_psoc_obj.h>
28 #include <wlan_objmgr_pdev_obj.h>
29 #include <wlan_objmgr_vdev_obj.h>
30 #include <wlan_scan_public_structs.h>
31 #include "wlan_scan_cache_db.h"
32 #include "wlan_scan_11d.h"
33 
34 #define scm_alert(params...) \
35 	QDF_TRACE_FATAL(QDF_MODULE_ID_SCAN, params)
36 #define scm_err(params...) \
37 	QDF_TRACE_ERROR(QDF_MODULE_ID_SCAN, params)
38 #define scm_warn(params...) \
39 	QDF_TRACE_WARN(QDF_MODULE_ID_SCAN, params)
40 #define scm_notice(params...) \
41 	QDF_TRACE_INFO(QDF_MODULE_ID_SCAN, params)
42 #define scm_info(params...) \
43 	QDF_TRACE_INFO(QDF_MODULE_ID_SCAN, params)
44 #define scm_debug(params...) \
45 	QDF_TRACE_DEBUG(QDF_MODULE_ID_SCAN, params)
46 
47 /* Rate Limited Logs */
48 #define scm_alert_rl(params...) \
49 	QDF_TRACE_FATAL_RL(QDF_MODULE_ID_SCAN, params)
50 #define scm_err_rl(params...) \
51 	QDF_TRACE_ERROR_RL(QDF_MODULE_ID_SCAN, params)
52 #define scm_warn_rl(params...) \
53 	QDF_TRACE_WARN_RL(QDF_MODULE_ID_SCAN, params)
54 #define scm_info_rl(params...) \
55 	QDF_TRACE_INFO_RL(QDF_MODULE_ID_SCAN, params)
56 #define scm_debug_rl(params...) \
57 	QDF_TRACE_DEBUG_RL(QDF_MODULE_ID_SCAN, params)
58 
59 #define scm_nofl_alert(params...) \
60 	QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_SCAN, params)
61 #define scm_nofl_err(params...) \
62 	QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_SCAN, params)
63 #define scm_nofl_warn(params...) \
64 	QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_SCAN, params)
65 #define scm_nofl_info(params...) \
66 	QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_SCAN, params)
67 #define scm_nofl_debug(params...) \
68 	QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_SCAN, params)
69 
70 #define scm_hex_dump(level, data, buf_len) \
71 		qdf_trace_hex_dump(QDF_MODULE_ID_SCAN, level, data, buf_len)
72 
73 #define MAX_SCAN_EVENT_HANDLERS_PER_PDEV   100
74 #define WLAN_MAX_MODULE_NAME    40
75 #define WLAN_MAX_REQUESTORS     200
76 #define WLAN_SCAN_ID_MASK 0x00000FFF
77 #define WLAN_HOST_SCAN_REQ_ID_PREFIX 0x0000A000
78 #define SCAN_NPROBES_DEFAULT 2
79 #define WLAN_P2P_SOCIAL_CHANNELS 3
80 
81 #define SCAN_BURST_SCAN_MAX_NUM_OFFCHANNELS  (3)
82 #define SCAN_SCAN_IDLE_TIME_DEFAULT          (25)
83 #define SCAN_3PORT_CONC_SCAN_MAX_BURST_DURATION  (25)
84 #define SCAN_CTS_DURATION_MS_MAX             (32)
85 #define SCAN_ROAM_SCAN_CHANNEL_SWITCH_TIME    (4)
86 #define SCAN_DWELL_TIME_PROBE_TIME_MAP_SIZE      (11)
87 #define SCAN_GO_MIN_ACTIVE_SCAN_BURST_DURATION   (40)
88 #define SCAN_GO_MAX_ACTIVE_SCAN_BURST_DURATION   (120)
89 #define SCAN_P2P_SCAN_MAX_BURST_DURATION     (180)
90 
91 /**
92  * struct probe_time_dwell_time - probe time, dwell time map
93  * @dwell_time: dwell time
94  * @probe_time: repeat probe time
95  */
96 struct probe_time_dwell_time {
97 	uint8_t dwell_time;
98 	uint8_t probe_time;
99 };
100 
101 /*
102  * For the requestor id:
103  *     bit  0~12 is used for real requestor id.
104  *     bit 13~15 is used for requestor prefix.
105  *     bit 16~19 is used by specific user to aware it is issued by himself.
106  *     bit 20~31 is reserved.
107  */
108 #define WLAN_SCAN_REQUESTER_ID_PREFIX 0x0000A000
109 #define WLAN_SCAN_REQUESTER_ID_MASK 0x00001FFF
110 
111 #define SCM_NUM_RSSI_CAT        15
112 #define SCAN_STA_MIRACAST_MCC_REST_TIME 400
113 
114 #ifdef CONFIG_MCL
115 #define MAX_SCAN_CACHE_SIZE 300
116 #define SCAN_ACTIVE_DWELL_TIME 40
117 #define SCAN_PASSIVE_DWELL_TIME 110
118 #define SCAN_MAX_REST_TIME 0
119 #define SCAN_MIN_REST_TIME 0
120 #define SCAN_BURST_DURATION 0
121 #define SCAN_CONC_ACTIVE_DWELL_TIME 20
122 #define SCAN_CONC_PASSIVE_DWELL_TIME 100
123 #define SCAN_CONC_IDLE_TIME 25
124 #define SCAN_CONC_MAX_REST_TIME 20
125 #define SCAN_CONC_MIN_REST_TIME 10
126 #define SCAN_PROBE_SPACING_TIME 0
127 #define SCAN_PROBE_DELAY 0
128 #define SCAN_MAX_SCAN_TIME 30000
129 #define SCAN_NETWORK_IDLE_TIMEOUT 0
130 #define HIDDEN_SSID_TIME (1*60*1000)
131 #define SCAN_CHAN_STATS_EVENT_ENAB (false)
132 #else
133 #define MAX_SCAN_CACHE_SIZE 1024
134 #define SCAN_ACTIVE_DWELL_TIME 105
135 #define SCAN_PASSIVE_DWELL_TIME 300
136 #define SCAN_MAX_REST_TIME 0
137 #define SCAN_MIN_REST_TIME 50
138 #define SCAN_BURST_DURATION 0
139 #define SCAN_CONC_ACTIVE_DWELL_TIME 0
140 #define SCAN_CONC_PASSIVE_DWELL_TIME 0
141 #define SCAN_CONC_IDLE_TIME 0
142 #define SCAN_CONC_MAX_REST_TIME 0
143 #define SCAN_CONC_MIN_REST_TIME 0
144 #define SCAN_PROBE_SPACING_TIME 0
145 #define SCAN_PROBE_DELAY 0
146 #define SCAN_MAX_SCAN_TIME 50000
147 #define SCAN_NETWORK_IDLE_TIMEOUT 200
148 #define HIDDEN_SSID_TIME (0xFFFFFFFF)
149 #define SCAN_CHAN_STATS_EVENT_ENAB (true)
150 #endif
151 
152 #define SCAN_TIMEOUT_GRACE_PERIOD 10
153 /* scan age time in millisec */
154 #ifdef QCA_WIFI_NAPIER_EMULATION
155 #define SCAN_CACHE_AGING_TIME (90 * 1000)
156 #else
157 #define SCAN_CACHE_AGING_TIME (30 * 1000)
158 #endif
159 #define SCAN_MAX_BSS_PDEV 100
160 #define SCAN_PRIORITY SCAN_PRIORITY_LOW
161 
162 /* DBS Scan policy selection ext flags */
163 #define SCAN_FLAG_EXT_DBS_SCAN_POLICY_MASK  0x00000003
164 #define SCAN_FLAG_EXT_DBS_SCAN_POLICY_BIT   0
165 #define SCAN_DBS_POLICY_DEFAULT             0x0
166 #define SCAN_DBS_POLICY_FORCE_NONDBS        0x1
167 #define SCAN_DBS_POLICY_IGNORE_DUTY         0x2
168 #define SCAN_DBS_POLICY_MAX                 0x3
169 /* Minimum number of channels for enabling DBS Scan */
170 #define SCAN_MIN_CHAN_DBS_SCAN_THRESHOLD         8
171 /*
172  * Enable Reception of Public Action frame with this flag
173  */
174 #define SCAN_FLAG_EXT_FILTER_PUBLIC_ACTION_FRAME 0x4
175 
176 /* Passive dwell time if bt_a2dp is enabled. Time in msecs*/
177 #define PASSIVE_DWELL_TIME_BT_A2DP_ENABLED 28
178 
179 /**
180  * struct cb_handler - defines scan event handler
181  * call back function and arguments
182  * @func: handler function pointer
183  * @arg: argument to handler function
184  */
185 struct cb_handler {
186 	scan_event_handler func;
187 	void *arg;
188 };
189 
190 /**
191  * struct pdev_scan_ev_handler - pdev scan event handlers
192  * @cb_handler: array of registered scan handlers
193  */
194 struct pdev_scan_ev_handler {
195 	uint32_t handler_cnt;
196 	struct cb_handler cb_handlers[MAX_SCAN_EVENT_HANDLERS_PER_PDEV];
197 };
198 
199 /**
200  * struct global_scan_ev_handlers - per pdev registered scan event handlers
201  * @pdev_scan_ev_handler: per pdev registered scan event handlers
202  */
203 struct global_scan_ev_handlers {
204 	struct pdev_scan_ev_handler pdev_ev_handlers[WLAN_UMAC_MAX_PDEVS];
205 };
206 
207 /**
208  * struct scan_requester_info - defines scan requester id
209  * and event handler mapping
210  * @requester:   requester ID allocated
211  * @module:      module name of requester
212  * @ev_handler:  event handlerto be invoked
213  */
214 struct scan_requester_info {
215 	wlan_scan_requester requester;
216 	uint8_t module[WLAN_MAX_MODULE_NAME];
217 	struct cb_handler ev_handler;
218 };
219 
220 /**
221  * struct pdev_scan_info - defines per pdev scan info
222  * @wide_band_scan: wide band scan capability
223  * @last_scan_time: time of last scan start on this pdev
224  * @custom_chan_list: scan only these channels
225  * @conf_bssid: configured bssid of the hidden AP
226  * @conf_ssid: configured desired ssid
227  */
228 struct pdev_scan_info {
229 	bool wide_band_scan;
230 	qdf_time_t last_scan_time;
231 	struct chan_list custom_chan_list;
232 	uint8_t conf_bssid[QDF_MAC_ADDR_SIZE];
233 	struct wlan_ssid conf_ssid;
234 };
235 
236 /**
237  * struct scan_vdev_obj - scan vdev obj
238  * @pno_match_evt_received: pno match received
239  * @pno_in_progress: pno in progress
240  * @is_vdev_delete_in_progress: flag to indicate if vdev del is in progress
241  */
242 struct scan_vdev_obj {
243 	bool pno_match_evt_received;
244 	bool pno_in_progress;
245 	bool is_vdev_delete_in_progress;
246 };
247 
248 /**
249  * struct pno_def_config - def configuration for PNO
250  * @channel_prediction: config PNO channel prediction feature status
251  * @top_k_num_of_channels: def top K number of channels are used for tanimoto
252  * distance calculation.
253  * @stationary_thresh: def threshold val to determine that STA is stationary.
254  * @pnoscan_adaptive_dwell_mode: def adaptive dwelltime mode for pno scan
255  * @channel_prediction_full_scan: def periodic timer upon which full scan needs
256  * to be triggered.
257  * @pno_wake_lock: pno wake lock
258  * @pno_cb: callback to call on PNO completion
259  * @mawc_params: Configuration parameters for NLO MAWC.
260  */
261 struct pno_def_config {
262 	bool channel_prediction;
263 	uint8_t top_k_num_of_channels;
264 	uint8_t stationary_thresh;
265 	enum scan_dwelltime_adaptive_mode adaptive_dwell_mode;
266 	uint32_t channel_prediction_full_scan;
267 	qdf_wake_lock_t pno_wake_lock;
268 	struct cb_handler pno_cb;
269 	struct nlo_mawc_params mawc_params;
270 };
271 
272 /**
273  * struct extscan_def_config - def configuration for EXTSCAN
274  * @extscan_enabled: enable extscan
275  * @extscan_passive_max_chn_time: max passive channel time
276  * @extscan_passive_min_chn_time: min passive channel time
277  * @extscan_active_max_chn_time: max active channel time
278  * @extscan_active_min_chn_time: min active channel time
279  */
280 struct extscan_def_config {
281 	bool     extscan_enabled;
282 	uint32_t extscan_passive_max_chn_time;
283 	uint32_t extscan_passive_min_chn_time;
284 	uint32_t extscan_active_max_chn_time;
285 	uint32_t extscan_active_min_chn_time;
286 };
287 
288 /**
289  * struct scan_default_params - default scan parameters to be used
290  * @active_dwell: default active dwell time
291  * @active_dwell_2g: default active dwell time for 2G channels, if it's not zero
292  * @passive_dwell:default passive dwell time
293  * @max_rest_time: default max rest time
294  * @sta_miracast_mcc_rest_time: max rest time for miracast and mcc
295  * @min_rest_time: default min rest time
296  * @idle_time: default idle time
297  * @conc_active_dwell: default concurrent active dwell time
298  * @conc_passive_dwell: default concurrent passive dwell time
299  * @conc_max_rest_time: default concurrent max rest time
300  * @conc_min_rest_time: default concurrent min rest time
301  * @conc_idle_time: default concurrent idle time
302  * @repeat_probe_time: default repeat probe time
303  * @probe_spacing_time: default probe spacing time
304  * @probe_delay: default probe delay
305  * @burst_duration: default burst duration
306  * @max_scan_time: default max scan time
307  * @num_probes: default maximum number of probes to sent
308  * @cache_aging_time: default scan cache aging time
309  * @prefer_5ghz: Prefer 5ghz AP over 2.4Ghz AP
310  * @select_5gh_margin: Prefer connecting to 5G AP even if
311  *      its RSSI is lower by select_5gh_margin dbm than 2.4G AP.
312  *      applicable if prefer_5ghz is set.
313  * @is_bssid_hint_priority: True if bssid_hint is given priority
314  * @enable_mac_spoofing: enable mac address spoof in scan
315  * @bss_prefer_val: bss prefer value for the RSSI category
316  * @rssi_cat: RSSI category
317  * @max_bss_per_pdev: maximum number of bss entries to be maintained per pdev
318  * @max_active_scans_allowed: maximum number of active parallel scan allowed
319  *                            per psoc
320  * @scan_priority: default scan priority
321  * @scan_f_passive: passively scan all channels including active channels
322  * @scan_f_bcast_probe: add wild card ssid prbreq even if ssid_list is specified
323  * @scan_f_cck_rates: add cck rates to rates/xrates ie in prb req
324  * @scan_f_ofdm_rates: add ofdm rates to rates/xrates ie in prb req
325  * @scan_f_chan_stat_evnt: enable indication of chan load and noise floor
326  * @scan_f_filter_prb_req: filter Probe request frames
327  * @scan_f_bypass_dfs_chn: when set, do not scan DFS channels
328  * @scan_f_continue_on_err:continue scan even if few certain erros have occurred
329  * @scan_f_offchan_mgmt_tx: allow mgmt transmission during off channel scan
330  * @scan_f_offchan_data_tx: allow data transmission during off channel scan
331  * @scan_f_promisc_mode: scan with promiscuous mode
332  * @scan_f_capture_phy_err: enable capture ppdu with phy errrors
333  * @scan_f_strict_passive_pch: do passive scan on passive channels
334  * @scan_f_half_rate: enable HALF (10MHz) rate support
335  * @scan_f_quarter_rate: set Quarter (5MHz) rate support
336  * @scan_f_force_active_dfs_chn: allow to send probe req on DFS channel
337  * @scan_f_add_tpc_ie_in_probe: add TPC ie in probe req frame
338  * @scan_f_add_ds_ie_in_probe: add DS ie in probe req frame
339  * @scan_f_add_spoofed_mac_in_probe: use random mac address for TA in probe
340  * @scan_f_add_rand_seq_in_probe: use random sequence number in probe
341  * @scan_f_en_ie_whitelist_in_probe: enable ie whitelist in probe
342  * @scan_f_forced: force scan even in presence of data traffic
343  * @scan_f_2ghz: scan 2.4 GHz channels
344  * @scan_f_5ghz: scan 5 GHz channels
345  * @scan_f_wide_band: scan in 40 MHz or higher bandwidth
346  * @scan_flags: variable to read and set scan_f_* flags in one shot
347  *              can be used to dump all scan_f_* flags for debug
348  * @scan_ev_started: notify scan started event
349  * @scan_ev_completed: notify scan completed event
350  * @scan_ev_bss_chan: notify bss chan event
351  * @scan_ev_foreign_chan: notify foreign chan event
352  * @scan_ev_dequeued: notify scan request dequed event
353  * @scan_ev_preempted: notify scan preempted event
354  * @scan_ev_start_failed: notify scan start failed event
355  * @scan_ev_restarted: notify scan restarted event
356  * @scan_ev_foreign_chn_exit: notify foreign chan exit event
357  * @scan_ev_invalid: notify invalid scan request event
358  * @scan_ev_gpio_timeout: notify gpio timeout event
359  * @scan_ev_suspended: notify scan suspend event
360  * @scan_ev_resumed: notify scan resumed event
361  * @scan_events: variable to read and set scan_ev_* flags in one shot
362  *               can be used to dump all scan_ev_* flags for debug
363  * @roam_params: roam related params
364  */
365 struct scan_default_params {
366 	uint32_t active_dwell;
367 	uint32_t active_dwell_2g;
368 	uint32_t passive_dwell;
369 	uint32_t max_rest_time;
370 	uint32_t sta_miracast_mcc_rest_time;
371 	uint32_t min_rest_time;
372 	uint32_t idle_time;
373 	uint32_t conc_active_dwell;
374 	uint32_t conc_passive_dwell;
375 	uint32_t conc_max_rest_time;
376 	uint32_t conc_min_rest_time;
377 	uint32_t conc_idle_time;
378 	uint32_t repeat_probe_time;
379 	uint32_t probe_spacing_time;
380 	uint32_t probe_delay;
381 	uint32_t burst_duration;
382 	uint32_t max_scan_time;
383 	uint32_t num_probes;
384 	uint32_t scan_cache_aging_time;
385 	uint32_t prefer_5ghz;
386 	uint32_t select_5ghz_margin;
387 	bool enable_mac_spoofing;
388 	bool is_bssid_hint_priority;
389 	uint32_t usr_cfg_probe_rpt_time;
390 	uint32_t usr_cfg_num_probes;
391 	/* each RSSI category has one value */
392 	uint32_t bss_prefer_val[SCM_NUM_RSSI_CAT];
393 	int rssi_cat[SCM_NUM_RSSI_CAT];
394 	uint16_t max_bss_per_pdev;
395 	uint32_t max_active_scans_allowed;
396 	enum scan_priority scan_priority;
397 	enum scan_dwelltime_adaptive_mode adaptive_dwell_time_mode;
398 	union {
399 		struct {
400 			uint32_t scan_f_passive:1,
401 				scan_f_bcast_probe:1,
402 				scan_f_cck_rates:1,
403 				scan_f_ofdm_rates:1,
404 				scan_f_chan_stat_evnt:1,
405 				scan_f_filter_prb_req:1,
406 				scan_f_bypass_dfs_chn:1,
407 				scan_f_continue_on_err:1,
408 				scan_f_offchan_mgmt_tx:1,
409 				scan_f_offchan_data_tx:1,
410 				scan_f_promisc_mode:1,
411 				scan_f_capture_phy_err:1,
412 				scan_f_strict_passive_pch:1,
413 				scan_f_half_rate:1,
414 				scan_f_quarter_rate:1,
415 				scan_f_force_active_dfs_chn:1,
416 				scan_f_add_tpc_ie_in_probe:1,
417 				scan_f_add_ds_ie_in_probe:1,
418 				scan_f_add_spoofed_mac_in_probe:1,
419 				scan_f_add_rand_seq_in_probe:1,
420 				scan_f_en_ie_whitelist_in_probe:1,
421 				scan_f_forced:1,
422 				scan_f_2ghz:1,
423 				scan_f_5ghz:1,
424 				scan_f_wide_band:1;
425 		};
426 		uint32_t scan_flags;
427 	};
428 	union {
429 		struct {
430 			uint32_t scan_ev_started:1,
431 				scan_ev_completed:1,
432 				scan_ev_bss_chan:1,
433 				scan_ev_foreign_chan:1,
434 				scan_ev_dequeued:1,
435 				scan_ev_preempted:1,
436 				scan_ev_start_failed:1,
437 				scan_ev_restarted:1,
438 				scan_ev_foreign_chn_exit:1,
439 				scan_ev_invalid:1,
440 				scan_ev_gpio_timeout:1,
441 				scan_ev_suspended:1,
442 				scan_ev_resumed:1;
443 		};
444 		uint32_t scan_events;
445 	};
446 	struct roam_filter_params roam_params;
447 	struct scoring_config score_config;
448 };
449 
450 /**
451  * struct scan_cb - nif/sif function callbacks
452  * @inform_beacon: cb to indicate frame to OS
453  * @update_beacon: cb to indicate frame to MLME
454  */
455 struct scan_cb {
456 	update_beacon_cb inform_beacon;
457 	update_beacon_cb update_beacon;
458 	/* Define nif/sif function callbacks here */
459 };
460 
461 /**
462  * struct wlan_scan_obj - scan object definition
463  * @enable_scan: if scan is enabled
464  * @scan_db:    scan cache data base
465  * @cc_db:      pointer of country code data base
466  * @lock:       spin lock
467  * @scan_def:   default scan parameters
468  * @cb:         nif/sif function callbacks
469  * @requesters: requester allocation pool
470  * @scan_ids:   last allocated scan id
471  * @global_evhandlers:  registered scan event handlers
472  * @pdev_info: pointer to pdev info
473  * @pno_cfg: default pno configuration
474  * @extscan_cfg: default extscan configuration
475  * @ie_whitelist: default ie whitelist attrs
476  * @bt_a2dp_enabled: if bt a2dp is enabled
477  * @miracast_enabled: miracast enabled
478  * @disable_timeout: command timeout disabled
479  * @drop_bcn_on_chan_mismatch: drop bcn if channel mismatch
480  * @scan_start_request_buff: buffer used to pass
481  *      scan config to event handlers
482  */
483 struct wlan_scan_obj {
484 	bool enable_scan;
485 	qdf_spinlock_t lock;
486 	qdf_atomic_t scan_ids;
487 	struct scan_dbs scan_db[WLAN_UMAC_MAX_PDEVS];
488 	struct scan_country_code_db *cc_db;
489 	struct scan_default_params scan_def;
490 	struct scan_cb cb;
491 	struct scan_requester_info requesters[WLAN_MAX_REQUESTORS];
492 	struct global_scan_ev_handlers global_evhandlers;
493 	struct pdev_scan_info pdev_info[WLAN_UMAC_MAX_PDEVS];
494 	struct pno_def_config pno_cfg;
495 #ifdef FEATURE_WLAN_EXTSCAN
496 	struct extscan_def_config extscan_cfg;
497 #endif
498 	struct probe_req_whitelist_attr ie_whitelist;
499 	bool bt_a2dp_enabled;
500 	bool miracast_enabled;
501 	bool disable_timeout;
502 	bool drop_bcn_on_chan_mismatch;
503 	struct scan_start_request scan_start_request_buff;
504 };
505 
506 /**
507  * wlan_psoc_get_scan_obj() - private API to get scan object from psoc
508  * @psoc: psoc object
509  *
510  * Return: scan object
511  */
512 static inline struct wlan_scan_obj *
513 wlan_psoc_get_scan_obj(struct wlan_objmgr_psoc *psoc)
514 {
515 	struct wlan_scan_obj *scan_obj;
516 
517 	scan_obj = (struct wlan_scan_obj *)
518 		wlan_objmgr_psoc_get_comp_private_obj(psoc,
519 				WLAN_UMAC_COMP_SCAN);
520 
521 	return scan_obj;
522 }
523 
524 /**
525  * wlan_pdev_get_scan_obj() - private API to get scan object from pdev
526  * @psoc: pdev object
527  *
528  * Return: scan object
529  */
530 static inline struct wlan_scan_obj *
531 wlan_pdev_get_scan_obj(struct wlan_objmgr_pdev *pdev)
532 {
533 	struct wlan_objmgr_psoc *psoc;
534 
535 	psoc = wlan_pdev_get_psoc(pdev);
536 
537 	return wlan_psoc_get_scan_obj(psoc);
538 }
539 
540 /**
541  * wlan_vdev_get_scan_obj() - private API to get scan object from vdev
542  * @psoc: vdev object
543  *
544  * Return: scan object
545  */
546 static inline struct wlan_scan_obj *
547 wlan_vdev_get_scan_obj(struct wlan_objmgr_vdev *vdev)
548 {
549 	struct wlan_objmgr_pdev *pdev;
550 
551 	pdev = wlan_vdev_get_pdev(vdev);
552 
553 	return wlan_pdev_get_scan_obj(pdev);
554 }
555 
556 /**
557  * wlan_get_vdev_scan_obj() - private API to get scan object vdev
558  * @vdev: vdev object
559  *
560  * Return: scan object
561  */
562 static inline struct scan_vdev_obj *
563 wlan_get_vdev_scan_obj(struct wlan_objmgr_vdev *vdev)
564 {
565 	struct scan_vdev_obj *scan_vdev_obj;
566 
567 	scan_vdev_obj = (struct scan_vdev_obj *)
568 		wlan_objmgr_vdev_get_comp_private_obj(vdev,
569 				WLAN_UMAC_COMP_SCAN);
570 
571 	return scan_vdev_obj;
572 }
573 
574 /**
575  * wlan_scan_vdev_get_pdev_id() - private API to get pdev id from vdev object
576  * @vdev: vdev object
577  *
578  * Return: parent pdev id
579  */
580 static inline uint8_t
581 wlan_scan_vdev_get_pdev_id(struct wlan_objmgr_vdev *vdev)
582 {
583 	struct wlan_objmgr_pdev *pdev;
584 
585 	pdev = wlan_vdev_get_pdev(vdev);
586 
587 	return wlan_objmgr_pdev_get_pdev_id(pdev);
588 }
589 
590 /**
591  * wlan_pdev_get_pdev_scan_ev_handlers() - private API to get
592  * pdev scan event handlers
593  * @vdev: pdev object
594  *
595  * Return: pdev_scan_ev_handler object
596  */
597 static inline struct pdev_scan_ev_handler*
598 wlan_pdev_get_pdev_scan_ev_handlers(struct wlan_objmgr_pdev *pdev)
599 {
600 	uint8_t pdevid;
601 	struct wlan_scan_obj *scan;
602 	struct pdev_scan_ev_handler *pdev_ev_handler;
603 
604 	pdevid = wlan_objmgr_pdev_get_pdev_id(pdev);
605 
606 	scan = wlan_pdev_get_scan_obj(pdev);
607 
608 	pdev_ev_handler =
609 		&scan->global_evhandlers.pdev_ev_handlers[pdevid];
610 
611 	return pdev_ev_handler;
612 }
613 
614 /**
615  * wlan_vdev_get_pdev_scan_ev_handlers() - private API to get
616  * pdev scan event handlers
617  * @vdev: vdev object
618  *
619  * Return: pdev_scan_ev_handler object
620  */
621 static inline struct pdev_scan_ev_handler*
622 wlan_vdev_get_pdev_scan_ev_handlers(struct wlan_objmgr_vdev *vdev)
623 {
624 	struct wlan_objmgr_pdev *pdev;
625 
626 	pdev = wlan_vdev_get_pdev(vdev);
627 
628 	return wlan_pdev_get_pdev_scan_ev_handlers(pdev);
629 }
630 
631 /**
632  * wlan_scan_psoc_get_def_params() - private API to get scan defaults
633  * @psoc: psoc object
634  *
635  * Return: scan defaults
636  */
637 static inline struct scan_default_params*
638 wlan_scan_psoc_get_def_params(struct wlan_objmgr_psoc *psoc)
639 {
640 	struct wlan_scan_obj *scan = NULL;
641 
642 	if (!psoc) {
643 		scm_err("null psoc");
644 		return NULL;
645 	}
646 	scan = wlan_psoc_get_scan_obj(psoc);
647 
648 	if (!scan)
649 		return NULL;
650 
651 	return &scan->scan_def;
652 }
653 
654 /**
655  * wlan_vdev_get_def_scan_params() - private API to get scan defaults
656  * @vdev: vdev object
657  *
658  * Return: scan defaults
659  */
660 static inline struct scan_default_params*
661 wlan_vdev_get_def_scan_params(struct wlan_objmgr_vdev *vdev)
662 {
663 	struct wlan_objmgr_psoc *psoc = NULL;
664 
665 	if (!vdev) {
666 		scm_err("null vdev");
667 		return NULL;
668 	}
669 	psoc = wlan_vdev_get_psoc(vdev);
670 
671 	return wlan_scan_psoc_get_def_params(psoc);
672 }
673 
674 /**
675  * wlan_scan_psoc_created_notification() - scan psoc create handler
676  * @psoc: psoc object
677  * @arg_list: Argument list
678  *
679  * Return: QDF_STATUS
680  */
681 QDF_STATUS wlan_scan_psoc_created_notification(struct wlan_objmgr_psoc *psoc,
682 	void *arg_list);
683 
684 /**
685  * wlan_scan_psoc_deleted_notification() - scan psoc delete handler
686  * @psoc: psoc object
687  * @arg_list: Argument list
688  *
689  * Return: QDF_STATUS
690  */
691 QDF_STATUS wlan_scan_psoc_destroyed_notification(struct wlan_objmgr_psoc *psoc,
692 	void *arg_list);
693 
694 /**
695  * wlan_scan_vdev_created_notification() - scan psoc create handler
696  * @vdev: vdev object
697  * @arg_list: Argument list
698  *
699  * Return: QDF_STATUS
700  */
701 QDF_STATUS wlan_scan_vdev_created_notification(struct wlan_objmgr_vdev *vdev,
702 	void *arg_list);
703 
704 /**
705  * wlan_scan_vdev_destroyed_notification() - scan psoc delete handler
706  * @vdev: vdev object
707  * @arg_list: Argument list
708  *
709  * Return: QDF_STATUS
710  */
711 QDF_STATUS wlan_scan_vdev_destroyed_notification(struct wlan_objmgr_vdev *vdev,
712 	void *arg_list);
713 
714 #endif
715