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