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