1/****************************************************************************** 2 * 3 * This file is provided under a dual BSD/GPLv2 license. When using or 4 * redistributing this file, you may do so under either license. 5 * 6 * GPL LICENSE SUMMARY 7 * 8 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. 9 * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH 10 * 11 * This program is free software; you can redistribute it and/or modify 12 * it under the terms of version 2 of the GNU General Public License as 13 * published by the Free Software Foundation. 14 * 15 * This program is distributed in the hope that it will be useful, but 16 * WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 * General Public License for more details. 19 * 20 * You should have received a copy of the GNU General Public License 21 * along with this program; if not, write to the Free Software 22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, 23 * USA 24 * 25 * The full GNU General Public License is included in this distribution 26 * in the file called COPYING. 27 * 28 * Contact Information: 29 * Intel Linux Wireless <ilw@linux.intel.com> 30 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 31 * 32 * BSD LICENSE 33 * 34 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. 35 * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH 36 * All rights reserved. 37 * 38 * Redistribution and use in source and binary forms, with or without 39 * modification, are permitted provided that the following conditions 40 * are met: 41 * 42 * * Redistributions of source code must retain the above copyright 43 * notice, this list of conditions and the following disclaimer. 44 * * Redistributions in binary form must reproduce the above copyright 45 * notice, this list of conditions and the following disclaimer in 46 * the documentation and/or other materials provided with the 47 * distribution. 48 * * Neither the name Intel Corporation nor the names of its 49 * contributors may be used to endorse or promote products derived 50 * from this software without specific prior written permission. 51 * 52 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 53 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 54 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 55 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 56 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 57 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 58 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 59 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 60 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 61 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 62 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 63 * 64 *****************************************************************************/ 65 66#ifndef __fw_api_scan_h__ 67#define __fw_api_scan_h__ 68 69#include "fw-api.h" 70 71/* Scan Commands, Responses, Notifications */ 72 73/* Max number of IEs for direct SSID scans in a command */ 74#define PROBE_OPTION_MAX 20 75 76/** 77 * struct iwl_ssid_ie - directed scan network information element 78 * 79 * Up to 20 of these may appear in REPLY_SCAN_CMD, 80 * selected by "type" bit field in struct iwl_scan_channel; 81 * each channel may select different ssids from among the 20 entries. 82 * SSID IEs get transmitted in reverse order of entry. 83 */ 84struct iwl_ssid_ie { 85 u8 id; 86 u8 len; 87 u8 ssid[IEEE80211_MAX_SSID_LEN]; 88} __packed; /* SCAN_DIRECT_SSID_IE_API_S_VER_1 */ 89 90/* How many statistics are gathered for each channel */ 91#define SCAN_RESULTS_STATISTICS 1 92 93/** 94 * enum iwl_scan_complete_status - status codes for scan complete notifications 95 * @SCAN_COMP_STATUS_OK: scan completed successfully 96 * @SCAN_COMP_STATUS_ABORT: scan was aborted by user 97 * @SCAN_COMP_STATUS_ERR_SLEEP: sending null sleep packet failed 98 * @SCAN_COMP_STATUS_ERR_CHAN_TIMEOUT: timeout before channel is ready 99 * @SCAN_COMP_STATUS_ERR_PROBE: sending probe request failed 100 * @SCAN_COMP_STATUS_ERR_WAKEUP: sending null wakeup packet failed 101 * @SCAN_COMP_STATUS_ERR_ANTENNAS: invalid antennas chosen at scan command 102 * @SCAN_COMP_STATUS_ERR_INTERNAL: internal error caused scan abort 103 * @SCAN_COMP_STATUS_ERR_COEX: medium was lost ot WiMax 104 * @SCAN_COMP_STATUS_P2P_ACTION_OK: P2P public action frame TX was successful 105 * (not an error!) 106 * @SCAN_COMP_STATUS_ITERATION_END: indicates end of one repetition the driver 107 * asked for 108 * @SCAN_COMP_STATUS_ERR_ALLOC_TE: scan could not allocate time events 109*/ 110enum iwl_scan_complete_status { 111 SCAN_COMP_STATUS_OK = 0x1, 112 SCAN_COMP_STATUS_ABORT = 0x2, 113 SCAN_COMP_STATUS_ERR_SLEEP = 0x3, 114 SCAN_COMP_STATUS_ERR_CHAN_TIMEOUT = 0x4, 115 SCAN_COMP_STATUS_ERR_PROBE = 0x5, 116 SCAN_COMP_STATUS_ERR_WAKEUP = 0x6, 117 SCAN_COMP_STATUS_ERR_ANTENNAS = 0x7, 118 SCAN_COMP_STATUS_ERR_INTERNAL = 0x8, 119 SCAN_COMP_STATUS_ERR_COEX = 0x9, 120 SCAN_COMP_STATUS_P2P_ACTION_OK = 0xA, 121 SCAN_COMP_STATUS_ITERATION_END = 0x0B, 122 SCAN_COMP_STATUS_ERR_ALLOC_TE = 0x0C, 123}; 124 125/* scan offload */ 126#define IWL_SCAN_MAX_BLACKLIST_LEN 64 127#define IWL_SCAN_SHORT_BLACKLIST_LEN 16 128#define IWL_SCAN_MAX_PROFILES 11 129#define SCAN_OFFLOAD_PROBE_REQ_SIZE 512 130 131/* Default watchdog (in MS) for scheduled scan iteration */ 132#define IWL_SCHED_SCAN_WATCHDOG cpu_to_le16(15000) 133 134#define IWL_GOOD_CRC_TH_DEFAULT cpu_to_le16(1) 135#define CAN_ABORT_STATUS 1 136 137#define IWL_FULL_SCAN_MULTIPLIER 5 138#define IWL_FAST_SCHED_SCAN_ITERATIONS 3 139 140enum scan_framework_client { 141 SCAN_CLIENT_SCHED_SCAN = BIT(0), 142 SCAN_CLIENT_NETDETECT = BIT(1), 143 SCAN_CLIENT_ASSET_TRACKING = BIT(2), 144}; 145 146/** 147 * struct iwl_scan_offload_cmd - SCAN_REQUEST_FIXED_PART_API_S_VER_6 148 * @scan_flags: see enum iwl_scan_flags 149 * @channel_count: channels in channel list 150 * @quiet_time: dwell time, in milliseconds, on quiet channel 151 * @quiet_plcp_th: quiet channel num of packets threshold 152 * @good_CRC_th: passive to active promotion threshold 153 * @rx_chain: RXON rx chain. 154 * @max_out_time: max TUs to be out of associated channel 155 * @suspend_time: pause scan this TUs when returning to service channel 156 * @flags: RXON flags 157 * @filter_flags: RXONfilter 158 * @tx_cmd: tx command for active scan; for 2GHz and for 5GHz. 159 * @direct_scan: list of SSIDs for directed active scan 160 * @scan_type: see enum iwl_scan_type. 161 * @rep_count: repetition count for each scheduled scan iteration. 162 */ 163struct iwl_scan_offload_cmd { 164 __le16 len; 165 u8 scan_flags; 166 u8 channel_count; 167 __le16 quiet_time; 168 __le16 quiet_plcp_th; 169 __le16 good_CRC_th; 170 __le16 rx_chain; 171 __le32 max_out_time; 172 __le32 suspend_time; 173 /* RX_ON_FLAGS_API_S_VER_1 */ 174 __le32 flags; 175 __le32 filter_flags; 176 struct iwl_tx_cmd tx_cmd[2]; 177 /* SCAN_DIRECT_SSID_IE_API_S_VER_1 */ 178 struct iwl_ssid_ie direct_scan[PROBE_OPTION_MAX]; 179 __le32 scan_type; 180 __le32 rep_count; 181} __packed; 182 183enum iwl_scan_offload_channel_flags { 184 IWL_SCAN_OFFLOAD_CHANNEL_ACTIVE = BIT(0), 185 IWL_SCAN_OFFLOAD_CHANNEL_NARROW = BIT(22), 186 IWL_SCAN_OFFLOAD_CHANNEL_FULL = BIT(24), 187 IWL_SCAN_OFFLOAD_CHANNEL_PARTIAL = BIT(25), 188}; 189 190/* channel configuration for struct iwl_scan_offload_cfg. Each channels needs: 191 * __le32 type: bitmap; bits 1-20 are for directed scan to i'th ssid and 192 * see enum iwl_scan_offload_channel_flags. 193 * __le16 channel_number: channel number 1-13 etc. 194 * __le16 iter_count: repetition count for the channel. 195 * __le32 iter_interval: interval between two iterations on one channel. 196 * u8 active_dwell. 197 * u8 passive_dwell. 198 */ 199#define IWL_SCAN_CHAN_SIZE 14 200 201/** 202 * iwl_scan_offload_cfg - SCAN_OFFLOAD_CONFIG_API_S 203 * @scan_cmd: scan command fixed part 204 * @data: scan channel configuration and probe request frames 205 */ 206struct iwl_scan_offload_cfg { 207 struct iwl_scan_offload_cmd scan_cmd; 208 u8 data[0]; 209} __packed; 210 211/** 212 * iwl_scan_offload_blacklist - SCAN_OFFLOAD_BLACKLIST_S 213 * @ssid: MAC address to filter out 214 * @reported_rssi: AP rssi reported to the host 215 * @client_bitmap: clients ignore this entry - enum scan_framework_client 216 */ 217struct iwl_scan_offload_blacklist { 218 u8 ssid[ETH_ALEN]; 219 u8 reported_rssi; 220 u8 client_bitmap; 221} __packed; 222 223enum iwl_scan_offload_network_type { 224 IWL_NETWORK_TYPE_BSS = 1, 225 IWL_NETWORK_TYPE_IBSS = 2, 226 IWL_NETWORK_TYPE_ANY = 3, 227}; 228 229enum iwl_scan_offload_band_selection { 230 IWL_SCAN_OFFLOAD_SELECT_2_4 = 0x4, 231 IWL_SCAN_OFFLOAD_SELECT_5_2 = 0x8, 232 IWL_SCAN_OFFLOAD_SELECT_ANY = 0xc, 233}; 234 235/** 236 * iwl_scan_offload_profile - SCAN_OFFLOAD_PROFILE_S 237 * @ssid_index: index to ssid list in fixed part 238 * @unicast_cipher: encryption algorithm to match - bitmap 239 * @aut_alg: authentication algorithm to match - bitmap 240 * @network_type: enum iwl_scan_offload_network_type 241 * @band_selection: enum iwl_scan_offload_band_selection 242 * @client_bitmap: clients waiting for match - enum scan_framework_client 243 */ 244struct iwl_scan_offload_profile { 245 u8 ssid_index; 246 u8 unicast_cipher; 247 u8 auth_alg; 248 u8 network_type; 249 u8 band_selection; 250 u8 client_bitmap; 251 u8 reserved[2]; 252} __packed; 253 254/** 255 * iwl_scan_offload_profile_cfg - SCAN_OFFLOAD_PROFILES_CFG_API_S_VER_1 256 * @blaclist: AP list to filter off from scan results 257 * @profiles: profiles to search for match 258 * @blacklist_len: length of blacklist 259 * @num_profiles: num of profiles in the list 260 * @match_notify: clients waiting for match found notification 261 * @pass_match: clients waiting for the results 262 * @active_clients: active clients bitmap - enum scan_framework_client 263 * @any_beacon_notify: clients waiting for match notification without match 264 */ 265struct iwl_scan_offload_profile_cfg { 266 struct iwl_scan_offload_profile profiles[IWL_SCAN_MAX_PROFILES]; 267 u8 blacklist_len; 268 u8 num_profiles; 269 u8 match_notify; 270 u8 pass_match; 271 u8 active_clients; 272 u8 any_beacon_notify; 273 u8 reserved[2]; 274} __packed; 275 276/** 277 * iwl_scan_offload_schedule - schedule of scan offload 278 * @delay: delay between iterations, in seconds. 279 * @iterations: num of scan iterations 280 * @full_scan_mul: number of partial scans before each full scan 281 */ 282struct iwl_scan_offload_schedule { 283 __le16 delay; 284 u8 iterations; 285 u8 full_scan_mul; 286} __packed; 287 288/* 289 * iwl_scan_offload_flags 290 * 291 * IWL_SCAN_OFFLOAD_FLAG_PASS_ALL: pass all results - no filtering. 292 * IWL_SCAN_OFFLOAD_FLAG_CACHED_CHANNEL: add cached channels to partial scan. 293 * IWL_SCAN_OFFLOAD_FLAG_EBS_QUICK_MODE: EBS duration is 100mSec - typical 294 * beacon period. Finding channel activity in this mode is not guaranteed. 295 * IWL_SCAN_OFFLOAD_FLAG_EBS_ACCURATE_MODE: EBS duration is 200mSec. 296 * Assuming beacon period is 100ms finding channel activity is guaranteed. 297 */ 298enum iwl_scan_offload_flags { 299 IWL_SCAN_OFFLOAD_FLAG_PASS_ALL = BIT(0), 300 IWL_SCAN_OFFLOAD_FLAG_CACHED_CHANNEL = BIT(2), 301 IWL_SCAN_OFFLOAD_FLAG_EBS_QUICK_MODE = BIT(5), 302 IWL_SCAN_OFFLOAD_FLAG_EBS_ACCURATE_MODE = BIT(6), 303}; 304 305/** 306 * iwl_scan_offload_req - scan offload request command 307 * @flags: bitmap - enum iwl_scan_offload_flags. 308 * @watchdog: maximum scan duration in TU. 309 * @delay: delay in seconds before first iteration. 310 * @schedule_line: scan offload schedule, for fast and regular scan. 311 */ 312struct iwl_scan_offload_req { 313 __le16 flags; 314 __le16 watchdog; 315 __le16 delay; 316 __le16 reserved; 317 struct iwl_scan_offload_schedule schedule_line[2]; 318} __packed; 319 320enum iwl_scan_offload_compleate_status { 321 IWL_SCAN_OFFLOAD_COMPLETED = 1, 322 IWL_SCAN_OFFLOAD_ABORTED = 2, 323}; 324 325enum iwl_scan_ebs_status { 326 IWL_SCAN_EBS_SUCCESS, 327 IWL_SCAN_EBS_FAILED, 328 IWL_SCAN_EBS_CHAN_NOT_FOUND, 329}; 330 331/** 332 * iwl_scan_offload_complete - SCAN_OFFLOAD_COMPLETE_NTF_API_S_VER_1 333 * @last_schedule_line: last schedule line executed (fast or regular) 334 * @last_schedule_iteration: last scan iteration executed before scan abort 335 * @status: enum iwl_scan_offload_compleate_status 336 * @ebs_status: last EBS status, see IWL_SCAN_EBS_* 337 */ 338struct iwl_scan_offload_complete { 339 u8 last_schedule_line; 340 u8 last_schedule_iteration; 341 u8 status; 342 u8 ebs_status; 343} __packed; 344 345/** 346 * iwl_sched_scan_results - SCAN_OFFLOAD_MATCH_FOUND_NTF_API_S_VER_1 347 * @ssid_bitmap: SSIDs indexes found in this iteration 348 * @client_bitmap: clients that are active and wait for this notification 349 */ 350struct iwl_sched_scan_results { 351 __le16 ssid_bitmap; 352 u8 client_bitmap; 353 u8 reserved; 354}; 355 356/* Unified LMAC scan API */ 357 358#define IWL_MVM_BASIC_PASSIVE_DWELL 110 359 360/** 361 * iwl_scan_req_tx_cmd - SCAN_REQ_TX_CMD_API_S 362 * @tx_flags: combination of TX_CMD_FLG_* 363 * @rate_n_flags: rate for *all* Tx attempts, if TX_CMD_FLG_STA_RATE_MSK is 364 * cleared. Combination of RATE_MCS_* 365 * @sta_id: index of destination station in FW station table 366 * @reserved: for alignment and future use 367 */ 368struct iwl_scan_req_tx_cmd { 369 __le32 tx_flags; 370 __le32 rate_n_flags; 371 u8 sta_id; 372 u8 reserved[3]; 373} __packed; 374 375enum iwl_scan_channel_flags_lmac { 376 IWL_UNIFIED_SCAN_CHANNEL_FULL = BIT(27), 377 IWL_UNIFIED_SCAN_CHANNEL_PARTIAL = BIT(28), 378}; 379 380/** 381 * iwl_scan_channel_cfg_lmac - SCAN_CHANNEL_CFG_S_VER2 382 * @flags: bits 1-20: directed scan to i'th ssid 383 * other bits &enum iwl_scan_channel_flags_lmac 384 * @channel_number: channel number 1-13 etc 385 * @iter_count: scan iteration on this channel 386 * @iter_interval: interval in seconds between iterations on one channel 387 */ 388struct iwl_scan_channel_cfg_lmac { 389 __le32 flags; 390 __le16 channel_num; 391 __le16 iter_count; 392 __le32 iter_interval; 393} __packed; 394 395/* 396 * iwl_scan_probe_segment - PROBE_SEGMENT_API_S_VER_1 397 * @offset: offset in the data block 398 * @len: length of the segment 399 */ 400struct iwl_scan_probe_segment { 401 __le16 offset; 402 __le16 len; 403} __packed; 404 405/* iwl_scan_probe_req - PROBE_REQUEST_FRAME_API_S_VER_2 406 * @mac_header: first (and common) part of the probe 407 * @band_data: band specific data 408 * @common_data: last (and common) part of the probe 409 * @buf: raw data block 410 */ 411struct iwl_scan_probe_req { 412 struct iwl_scan_probe_segment mac_header; 413 struct iwl_scan_probe_segment band_data[2]; 414 struct iwl_scan_probe_segment common_data; 415 u8 buf[SCAN_OFFLOAD_PROBE_REQ_SIZE]; 416} __packed; 417 418enum iwl_scan_channel_flags { 419 IWL_SCAN_CHANNEL_FLAG_EBS = BIT(0), 420 IWL_SCAN_CHANNEL_FLAG_EBS_ACCURATE = BIT(1), 421 IWL_SCAN_CHANNEL_FLAG_CACHE_ADD = BIT(2), 422}; 423 424/* iwl_scan_channel_opt - CHANNEL_OPTIMIZATION_API_S 425 * @flags: enum iwl_scan_channel_flags 426 * @non_ebs_ratio: defines the ratio of number of scan iterations where EBS is 427 * involved. 428 * 1 - EBS is disabled. 429 * 2 - every second scan will be full scan(and so on). 430 */ 431struct iwl_scan_channel_opt { 432 __le16 flags; 433 __le16 non_ebs_ratio; 434} __packed; 435 436/** 437 * iwl_mvm_lmac_scan_flags 438 * @IWL_MVM_LMAC_SCAN_FLAG_PASS_ALL: pass all beacons and probe responses 439 * without filtering. 440 * @IWL_MVM_LMAC_SCAN_FLAG_PASSIVE: force passive scan on all channels 441 * @IWL_MVM_LMAC_SCAN_FLAG_PRE_CONNECTION: single channel scan 442 * @IWL_MVM_LMAC_SCAN_FLAG_ITER_COMPLETE: send iteration complete notification 443 * @IWL_MVM_LMAC_SCAN_FLAG_MULTIPLE_SSIDS multiple SSID matching 444 * @IWL_MVM_LMAC_SCAN_FLAG_FRAGMENTED: all passive scans will be fragmented 445 * @IWL_MVM_LMAC_SCAN_FLAGS_RRM_ENABLED: insert WFA vendor-specific TPC report 446 * and DS parameter set IEs into probe requests. 447 * @IWL_MVM_LMAC_SCAN_FLAG_MATCH: Send match found notification on matches 448 */ 449enum iwl_mvm_lmac_scan_flags { 450 IWL_MVM_LMAC_SCAN_FLAG_PASS_ALL = BIT(0), 451 IWL_MVM_LMAC_SCAN_FLAG_PASSIVE = BIT(1), 452 IWL_MVM_LMAC_SCAN_FLAG_PRE_CONNECTION = BIT(2), 453 IWL_MVM_LMAC_SCAN_FLAG_ITER_COMPLETE = BIT(3), 454 IWL_MVM_LMAC_SCAN_FLAG_MULTIPLE_SSIDS = BIT(4), 455 IWL_MVM_LMAC_SCAN_FLAG_FRAGMENTED = BIT(5), 456 IWL_MVM_LMAC_SCAN_FLAGS_RRM_ENABLED = BIT(6), 457 IWL_MVM_LMAC_SCAN_FLAG_MATCH = BIT(9), 458}; 459 460enum iwl_scan_priority { 461 IWL_SCAN_PRIORITY_LOW, 462 IWL_SCAN_PRIORITY_MEDIUM, 463 IWL_SCAN_PRIORITY_HIGH, 464}; 465 466/** 467 * iwl_scan_req_unified_lmac - SCAN_REQUEST_CMD_API_S_VER_1 468 * @reserved1: for alignment and future use 469 * @channel_num: num of channels to scan 470 * @active-dwell: dwell time for active channels 471 * @passive-dwell: dwell time for passive channels 472 * @fragmented-dwell: dwell time for fragmented passive scan 473 * @reserved2: for alignment and future use 474 * @rx_chain_selct: PHY_RX_CHAIN_* flags 475 * @scan_flags: &enum iwl_mvm_lmac_scan_flags 476 * @max_out_time: max time (in TU) to be out of associated channel 477 * @suspend_time: pause scan this long (TUs) when returning to service channel 478 * @flags: RXON flags 479 * @filter_flags: RXON filter 480 * @tx_cmd: tx command for active scan; for 2GHz and for 5GHz 481 * @direct_scan: list of SSIDs for directed active scan 482 * @scan_prio: enum iwl_scan_priority 483 * @iter_num: number of scan iterations 484 * @delay: delay in seconds before first iteration 485 * @schedule: two scheduling plans. The first one is finite, the second one can 486 * be infinite. 487 * @channel_opt: channel optimization options, for full and partial scan 488 * @data: channel configuration and probe request packet. 489 */ 490struct iwl_scan_req_unified_lmac { 491 /* SCAN_REQUEST_FIXED_PART_API_S_VER_7 */ 492 __le32 reserved1; 493 u8 n_channels; 494 u8 active_dwell; 495 u8 passive_dwell; 496 u8 fragmented_dwell; 497 __le16 reserved2; 498 __le16 rx_chain_select; 499 __le32 scan_flags; 500 __le32 max_out_time; 501 __le32 suspend_time; 502 /* RX_ON_FLAGS_API_S_VER_1 */ 503 __le32 flags; 504 __le32 filter_flags; 505 struct iwl_scan_req_tx_cmd tx_cmd[2]; 506 struct iwl_ssid_ie direct_scan[PROBE_OPTION_MAX]; 507 __le32 scan_prio; 508 /* SCAN_REQ_PERIODIC_PARAMS_API_S */ 509 __le32 iter_num; 510 __le32 delay; 511 struct iwl_scan_offload_schedule schedule[2]; 512 struct iwl_scan_channel_opt channel_opt[2]; 513 u8 data[]; 514} __packed; 515 516/** 517 * struct iwl_scan_results_notif - scan results for one channel - 518 * SCAN_RESULT_NTF_API_S_VER_3 519 * @channel: which channel the results are from 520 * @band: 0 for 5.2 GHz, 1 for 2.4 GHz 521 * @probe_status: SCAN_PROBE_STATUS_*, indicates success of probe request 522 * @num_probe_not_sent: # of request that weren't sent due to not enough time 523 * @duration: duration spent in channel, in usecs 524 */ 525struct iwl_scan_results_notif { 526 u8 channel; 527 u8 band; 528 u8 probe_status; 529 u8 num_probe_not_sent; 530 __le32 duration; 531} __packed; 532 533/** 534 * struct iwl_lmac_scan_complete_notif - notifies end of scanning (all channels) 535 * SCAN_COMPLETE_NTF_API_S_VER_3 536 * @scanned_channels: number of channels scanned (and number of valid results) 537 * @status: one of SCAN_COMP_STATUS_* 538 * @bt_status: BT on/off status 539 * @last_channel: last channel that was scanned 540 * @tsf_low: TSF timer (lower half) in usecs 541 * @tsf_high: TSF timer (higher half) in usecs 542 * @results: an array of scan results, only "scanned_channels" of them are valid 543 */ 544struct iwl_lmac_scan_complete_notif { 545 u8 scanned_channels; 546 u8 status; 547 u8 bt_status; 548 u8 last_channel; 549 __le32 tsf_low; 550 __le32 tsf_high; 551 struct iwl_scan_results_notif results[]; 552} __packed; 553 554/** 555 * iwl_scan_offload_complete - PERIODIC_SCAN_COMPLETE_NTF_API_S_VER_2 556 * @last_schedule_line: last schedule line executed (fast or regular) 557 * @last_schedule_iteration: last scan iteration executed before scan abort 558 * @status: enum iwl_scan_offload_complete_status 559 * @ebs_status: EBS success status &enum iwl_scan_ebs_status 560 * @time_after_last_iter; time in seconds elapsed after last iteration 561 */ 562struct iwl_periodic_scan_complete { 563 u8 last_schedule_line; 564 u8 last_schedule_iteration; 565 u8 status; 566 u8 ebs_status; 567 __le32 time_after_last_iter; 568 __le32 reserved; 569} __packed; 570 571/* UMAC Scan API */ 572 573/** 574 * struct iwl_mvm_umac_cmd_hdr - Command header for UMAC commands 575 * @size: size of the command (not including header) 576 * @reserved0: for future use and alignment 577 * @ver: API version number 578 */ 579struct iwl_mvm_umac_cmd_hdr { 580 __le16 size; 581 u8 reserved0; 582 u8 ver; 583} __packed; 584 585#define IWL_MVM_MAX_SIMULTANEOUS_SCANS 8 586 587enum scan_config_flags { 588 SCAN_CONFIG_FLAG_ACTIVATE = BIT(0), 589 SCAN_CONFIG_FLAG_DEACTIVATE = BIT(1), 590 SCAN_CONFIG_FLAG_FORBID_CHUB_REQS = BIT(2), 591 SCAN_CONFIG_FLAG_ALLOW_CHUB_REQS = BIT(3), 592 SCAN_CONFIG_FLAG_SET_TX_CHAINS = BIT(8), 593 SCAN_CONFIG_FLAG_SET_RX_CHAINS = BIT(9), 594 SCAN_CONFIG_FLAG_SET_AUX_STA_ID = BIT(10), 595 SCAN_CONFIG_FLAG_SET_ALL_TIMES = BIT(11), 596 SCAN_CONFIG_FLAG_SET_EFFECTIVE_TIMES = BIT(12), 597 SCAN_CONFIG_FLAG_SET_CHANNEL_FLAGS = BIT(13), 598 SCAN_CONFIG_FLAG_SET_LEGACY_RATES = BIT(14), 599 SCAN_CONFIG_FLAG_SET_MAC_ADDR = BIT(15), 600 SCAN_CONFIG_FLAG_SET_FRAGMENTED = BIT(16), 601 SCAN_CONFIG_FLAG_CLEAR_FRAGMENTED = BIT(17), 602 SCAN_CONFIG_FLAG_SET_CAM_MODE = BIT(18), 603 SCAN_CONFIG_FLAG_CLEAR_CAM_MODE = BIT(19), 604 SCAN_CONFIG_FLAG_SET_PROMISC_MODE = BIT(20), 605 SCAN_CONFIG_FLAG_CLEAR_PROMISC_MODE = BIT(21), 606 607 /* Bits 26-31 are for num of channels in channel_array */ 608#define SCAN_CONFIG_N_CHANNELS(n) ((n) << 26) 609}; 610 611enum scan_config_rates { 612 /* OFDM basic rates */ 613 SCAN_CONFIG_RATE_6M = BIT(0), 614 SCAN_CONFIG_RATE_9M = BIT(1), 615 SCAN_CONFIG_RATE_12M = BIT(2), 616 SCAN_CONFIG_RATE_18M = BIT(3), 617 SCAN_CONFIG_RATE_24M = BIT(4), 618 SCAN_CONFIG_RATE_36M = BIT(5), 619 SCAN_CONFIG_RATE_48M = BIT(6), 620 SCAN_CONFIG_RATE_54M = BIT(7), 621 /* CCK basic rates */ 622 SCAN_CONFIG_RATE_1M = BIT(8), 623 SCAN_CONFIG_RATE_2M = BIT(9), 624 SCAN_CONFIG_RATE_5M = BIT(10), 625 SCAN_CONFIG_RATE_11M = BIT(11), 626 627 /* Bits 16-27 are for supported rates */ 628#define SCAN_CONFIG_SUPPORTED_RATE(rate) ((rate) << 16) 629}; 630 631enum iwl_channel_flags { 632 IWL_CHANNEL_FLAG_EBS = BIT(0), 633 IWL_CHANNEL_FLAG_ACCURATE_EBS = BIT(1), 634 IWL_CHANNEL_FLAG_EBS_ADD = BIT(2), 635 IWL_CHANNEL_FLAG_PRE_SCAN_PASSIVE2ACTIVE = BIT(3), 636}; 637 638/** 639 * struct iwl_scan_config 640 * @hdr: umac command header 641 * @flags: enum scan_config_flags 642 * @tx_chains: valid_tx antenna - ANT_* definitions 643 * @rx_chains: valid_rx antenna - ANT_* definitions 644 * @legacy_rates: default legacy rates - enum scan_config_rates 645 * @out_of_channel_time: default max out of serving channel time 646 * @suspend_time: default max suspend time 647 * @dwell_active: default dwell time for active scan 648 * @dwell_passive: default dwell time for passive scan 649 * @dwell_fragmented: default dwell time for fragmented scan 650 * @reserved: for future use and alignment 651 * @mac_addr: default mac address to be used in probes 652 * @bcast_sta_id: the index of the station in the fw 653 * @channel_flags: default channel flags - enum iwl_channel_flags 654 * scan_config_channel_flag 655 * @channel_array: default supported channels 656 */ 657struct iwl_scan_config { 658 struct iwl_mvm_umac_cmd_hdr hdr; 659 __le32 flags; 660 __le32 tx_chains; 661 __le32 rx_chains; 662 __le32 legacy_rates; 663 __le32 out_of_channel_time; 664 __le32 suspend_time; 665 u8 dwell_active; 666 u8 dwell_passive; 667 u8 dwell_fragmented; 668 u8 reserved; 669 u8 mac_addr[ETH_ALEN]; 670 u8 bcast_sta_id; 671 u8 channel_flags; 672 u8 channel_array[]; 673} __packed; /* SCAN_CONFIG_DB_CMD_API_S */ 674 675/** 676 * iwl_umac_scan_flags 677 *@IWL_UMAC_SCAN_FLAG_PREEMPTIVE: scan process triggered by this scan request 678 * can be preempted by other scan requests with higher priority. 679 * The low priority scan is aborted. 680 *@IWL_UMAC_SCAN_FLAG_START_NOTIF: notification will be sent to the driver 681 * when scan starts. 682 */ 683enum iwl_umac_scan_flags { 684 IWL_UMAC_SCAN_FLAG_PREEMPTIVE = BIT(0), 685 IWL_UMAC_SCAN_FLAG_START_NOTIF = BIT(1), 686}; 687 688enum iwl_umac_scan_uid_offsets { 689 IWL_UMAC_SCAN_UID_TYPE_OFFSET = 0, 690 IWL_UMAC_SCAN_UID_SEQ_OFFSET = 8, 691}; 692 693enum iwl_umac_scan_general_flags { 694 IWL_UMAC_SCAN_GEN_FLAGS_PERIODIC = BIT(0), 695 IWL_UMAC_SCAN_GEN_FLAGS_OVER_BT = BIT(1), 696 IWL_UMAC_SCAN_GEN_FLAGS_PASS_ALL = BIT(2), 697 IWL_UMAC_SCAN_GEN_FLAGS_PASSIVE = BIT(3), 698 IWL_UMAC_SCAN_GEN_FLAGS_PRE_CONNECT = BIT(4), 699 IWL_UMAC_SCAN_GEN_FLAGS_ITER_COMPLETE = BIT(5), 700 IWL_UMAC_SCAN_GEN_FLAGS_MULTIPLE_SSID = BIT(6), 701 IWL_UMAC_SCAN_GEN_FLAGS_FRAGMENTED = BIT(7), 702 IWL_UMAC_SCAN_GEN_FLAGS_RRM_ENABLED = BIT(8), 703 IWL_UMAC_SCAN_GEN_FLAGS_MATCH = BIT(9) 704}; 705 706/** 707 * struct iwl_scan_channel_cfg_umac 708 * @flags: bitmap - 0-19: directed scan to i'th ssid. 709 * @channel_num: channel number 1-13 etc. 710 * @iter_count: repetition count for the channel. 711 * @iter_interval: interval between two scan iterations on one channel. 712 */ 713struct iwl_scan_channel_cfg_umac { 714 __le32 flags; 715 u8 channel_num; 716 u8 iter_count; 717 __le16 iter_interval; 718} __packed; /* SCAN_CHANNEL_CFG_S_VER2 */ 719 720/** 721 * struct iwl_scan_umac_schedule 722 * @interval: interval in seconds between scan iterations 723 * @iter_count: num of scan iterations for schedule plan, 0xff for infinite loop 724 * @reserved: for alignment and future use 725 */ 726struct iwl_scan_umac_schedule { 727 __le16 interval; 728 u8 iter_count; 729 u8 reserved; 730} __packed; /* SCAN_SCHED_PARAM_API_S_VER_1 */ 731 732/** 733 * struct iwl_scan_req_umac_tail - the rest of the UMAC scan request command 734 * parameters following channels configuration array. 735 * @schedule: two scheduling plans. 736 * @delay: delay in TUs before starting the first scan iteration 737 * @reserved: for future use and alignment 738 * @preq: probe request with IEs blocks 739 * @direct_scan: list of SSIDs for directed active scan 740 */ 741struct iwl_scan_req_umac_tail { 742 /* SCAN_PERIODIC_PARAMS_API_S_VER_1 */ 743 struct iwl_scan_umac_schedule schedule[2]; 744 __le16 delay; 745 __le16 reserved; 746 /* SCAN_PROBE_PARAMS_API_S_VER_1 */ 747 struct iwl_scan_probe_req preq; 748 struct iwl_ssid_ie direct_scan[PROBE_OPTION_MAX]; 749} __packed; 750 751/** 752 * struct iwl_scan_req_umac 753 * @hdr: umac command header 754 * @flags: &enum iwl_umac_scan_flags 755 * @uid: scan id, &enum iwl_umac_scan_uid_offsets 756 * @ooc_priority: out of channel priority - &enum iwl_scan_priority 757 * @general_flags: &enum iwl_umac_scan_general_flags 758 * @reserved1: for future use and alignment 759 * @active_dwell: dwell time for active scan 760 * @passive_dwell: dwell time for passive scan 761 * @fragmented_dwell: dwell time for fragmented passive scan 762 * @max_out_time: max out of serving channel time 763 * @suspend_time: max suspend time 764 * @scan_priority: scan internal prioritization &enum iwl_scan_priority 765 * @channel_flags: &enum iwl_scan_channel_flags 766 * @n_channels: num of channels in scan request 767 * @reserved2: for future use and alignment 768 * @data: &struct iwl_scan_channel_cfg_umac and 769 * &struct iwl_scan_req_umac_tail 770 */ 771struct iwl_scan_req_umac { 772 struct iwl_mvm_umac_cmd_hdr hdr; 773 __le32 flags; 774 __le32 uid; 775 __le32 ooc_priority; 776 /* SCAN_GENERAL_PARAMS_API_S_VER_1 */ 777 __le32 general_flags; 778 u8 reserved1; 779 u8 active_dwell; 780 u8 passive_dwell; 781 u8 fragmented_dwell; 782 __le32 max_out_time; 783 __le32 suspend_time; 784 __le32 scan_priority; 785 /* SCAN_CHANNEL_PARAMS_API_S_VER_1 */ 786 u8 channel_flags; 787 u8 n_channels; 788 __le16 reserved2; 789 u8 data[]; 790} __packed; /* SCAN_REQUEST_CMD_UMAC_API_S_VER_1 */ 791 792/** 793 * struct iwl_umac_scan_abort 794 * @hdr: umac command header 795 * @uid: scan id, &enum iwl_umac_scan_uid_offsets 796 * @flags: reserved 797 */ 798struct iwl_umac_scan_abort { 799 struct iwl_mvm_umac_cmd_hdr hdr; 800 __le32 uid; 801 __le32 flags; 802} __packed; /* SCAN_ABORT_CMD_UMAC_API_S_VER_1 */ 803 804/** 805 * struct iwl_umac_scan_complete 806 * @uid: scan id, &enum iwl_umac_scan_uid_offsets 807 * @last_schedule: last scheduling line 808 * @last_iter: last scan iteration number 809 * @scan status: &enum iwl_scan_offload_complete_status 810 * @ebs_status: &enum iwl_scan_ebs_status 811 * @time_from_last_iter: time elapsed from last iteration 812 * @reserved: for future use 813 */ 814struct iwl_umac_scan_complete { 815 __le32 uid; 816 u8 last_schedule; 817 u8 last_iter; 818 u8 status; 819 u8 ebs_status; 820 __le32 time_from_last_iter; 821 __le32 reserved; 822} __packed; /* SCAN_COMPLETE_NTF_UMAC_API_S_VER_1 */ 823 824#define SCAN_OFFLOAD_MATCHING_CHANNELS_LEN 5 825/** 826 * struct iwl_scan_offload_profile_match - match information 827 * @bssid: matched bssid 828 * @channel: channel where the match occurred 829 * @energy: 830 * @matching_feature: 831 * @matching_channels: bitmap of channels that matched, referencing 832 * the channels passed in tue scan offload request 833 */ 834struct iwl_scan_offload_profile_match { 835 u8 bssid[ETH_ALEN]; 836 __le16 reserved; 837 u8 channel; 838 u8 energy; 839 u8 matching_feature; 840 u8 matching_channels[SCAN_OFFLOAD_MATCHING_CHANNELS_LEN]; 841} __packed; /* SCAN_OFFLOAD_PROFILE_MATCH_RESULTS_S_VER_1 */ 842 843/** 844 * struct iwl_scan_offload_profiles_query - match results query response 845 * @matched_profiles: bitmap of matched profiles, referencing the 846 * matches passed in the scan offload request 847 * @last_scan_age: age of the last offloaded scan 848 * @n_scans_done: number of offloaded scans done 849 * @gp2_d0u: GP2 when D0U occurred 850 * @gp2_invoked: GP2 when scan offload was invoked 851 * @resume_while_scanning: not used 852 * @self_recovery: obsolete 853 * @reserved: reserved 854 * @matches: array of match information, one for each match 855 */ 856struct iwl_scan_offload_profiles_query { 857 __le32 matched_profiles; 858 __le32 last_scan_age; 859 __le32 n_scans_done; 860 __le32 gp2_d0u; 861 __le32 gp2_invoked; 862 u8 resume_while_scanning; 863 u8 self_recovery; 864 __le16 reserved; 865 struct iwl_scan_offload_profile_match matches[IWL_SCAN_MAX_PROFILES]; 866} __packed; /* SCAN_OFFLOAD_PROFILES_QUERY_RSP_S_VER_2 */ 867 868#endif 869