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