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