.. | .. |
---|
8 | 8 | * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. |
---|
9 | 9 | * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH |
---|
10 | 10 | * Copyright(c) 2015 - 2017 Intel Deutschland GmbH |
---|
| 11 | + * Copyright(c) 2018 - 2020 Intel Corporation |
---|
11 | 12 | * |
---|
12 | 13 | * This program is free software; you can redistribute it and/or modify |
---|
13 | 14 | * it under the terms of version 2 of the GNU General Public License as |
---|
.. | .. |
---|
30 | 31 | * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. |
---|
31 | 32 | * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH |
---|
32 | 33 | * Copyright(c) 2015 - 2017 Intel Deutschland GmbH |
---|
| 34 | + * Copyright(c) 2018 - 2020 Intel Corporation |
---|
33 | 35 | * All rights reserved. |
---|
34 | 36 | * |
---|
35 | 37 | * Redistribution and use in source and binary forms, with or without |
---|
.. | .. |
---|
61 | 63 | |
---|
62 | 64 | #ifndef __iwl_fw_api_d3_h__ |
---|
63 | 65 | #define __iwl_fw_api_d3_h__ |
---|
| 66 | + |
---|
| 67 | +/** |
---|
| 68 | + * enum iwl_d0i3_flags - d0i3 flags |
---|
| 69 | + * @IWL_D0I3_RESET_REQUIRE: FW require reset upon resume |
---|
| 70 | + */ |
---|
| 71 | +enum iwl_d0i3_flags { |
---|
| 72 | + IWL_D0I3_RESET_REQUIRE = BIT(0), |
---|
| 73 | +}; |
---|
64 | 74 | |
---|
65 | 75 | /** |
---|
66 | 76 | * enum iwl_d3_wakeup_flags - D3 manager wakeup flags |
---|
.. | .. |
---|
212 | 222 | #define IWL_WOWLAN_MIN_PATTERN_LEN 16 |
---|
213 | 223 | #define IWL_WOWLAN_MAX_PATTERN_LEN 128 |
---|
214 | 224 | |
---|
215 | | -struct iwl_wowlan_pattern { |
---|
| 225 | +struct iwl_wowlan_pattern_v1 { |
---|
216 | 226 | u8 mask[IWL_WOWLAN_MAX_PATTERN_LEN / 8]; |
---|
217 | 227 | u8 pattern[IWL_WOWLAN_MAX_PATTERN_LEN]; |
---|
218 | 228 | u8 mask_size; |
---|
.. | .. |
---|
222 | 232 | |
---|
223 | 233 | #define IWL_WOWLAN_MAX_PATTERNS 20 |
---|
224 | 234 | |
---|
225 | | -struct iwl_wowlan_patterns_cmd { |
---|
| 235 | +/** |
---|
| 236 | + * struct iwl_wowlan_patterns_cmd - WoWLAN wakeup patterns |
---|
| 237 | + */ |
---|
| 238 | +struct iwl_wowlan_patterns_cmd_v1 { |
---|
| 239 | + /** |
---|
| 240 | + * @n_patterns: number of patterns |
---|
| 241 | + */ |
---|
226 | 242 | __le32 n_patterns; |
---|
227 | | - struct iwl_wowlan_pattern patterns[]; |
---|
| 243 | + |
---|
| 244 | + /** |
---|
| 245 | + * @patterns: the patterns, array length in @n_patterns |
---|
| 246 | + */ |
---|
| 247 | + struct iwl_wowlan_pattern_v1 patterns[]; |
---|
228 | 248 | } __packed; /* WOWLAN_PATTERN_ARRAY_API_S_VER_1 */ |
---|
| 249 | + |
---|
| 250 | +#define IPV4_ADDR_SIZE 4 |
---|
| 251 | +#define IPV6_ADDR_SIZE 16 |
---|
| 252 | + |
---|
| 253 | +enum iwl_wowlan_pattern_type { |
---|
| 254 | + WOWLAN_PATTERN_TYPE_BITMASK, |
---|
| 255 | + WOWLAN_PATTERN_TYPE_IPV4_TCP_SYN, |
---|
| 256 | + WOWLAN_PATTERN_TYPE_IPV6_TCP_SYN, |
---|
| 257 | + WOWLAN_PATTERN_TYPE_IPV4_TCP_SYN_WILDCARD, |
---|
| 258 | + WOWLAN_PATTERN_TYPE_IPV6_TCP_SYN_WILDCARD, |
---|
| 259 | +}; /* WOWLAN_PATTERN_TYPE_API_E_VER_1 */ |
---|
| 260 | + |
---|
| 261 | +/** |
---|
| 262 | + * struct iwl_wowlan_ipv4_tcp_syn - WoWLAN IPv4 TCP SYN pattern data |
---|
| 263 | + */ |
---|
| 264 | +struct iwl_wowlan_ipv4_tcp_syn { |
---|
| 265 | + /** |
---|
| 266 | + * @src_addr: source IP address to match |
---|
| 267 | + */ |
---|
| 268 | + u8 src_addr[IPV4_ADDR_SIZE]; |
---|
| 269 | + |
---|
| 270 | + /** |
---|
| 271 | + * @dst_addr: destination IP address to match |
---|
| 272 | + */ |
---|
| 273 | + u8 dst_addr[IPV4_ADDR_SIZE]; |
---|
| 274 | + |
---|
| 275 | + /** |
---|
| 276 | + * @src_port: source TCP port to match |
---|
| 277 | + */ |
---|
| 278 | + __le16 src_port; |
---|
| 279 | + |
---|
| 280 | + /** |
---|
| 281 | + * @dst_port: destination TCP port to match |
---|
| 282 | + */ |
---|
| 283 | + __le16 dst_port; |
---|
| 284 | +} __packed; /* WOWLAN_IPV4_TCP_SYN_API_S_VER_1 */ |
---|
| 285 | + |
---|
| 286 | +/** |
---|
| 287 | + * struct iwl_wowlan_ipv6_tcp_syn - WoWLAN Ipv6 TCP SYN pattern data |
---|
| 288 | + */ |
---|
| 289 | +struct iwl_wowlan_ipv6_tcp_syn { |
---|
| 290 | + /** |
---|
| 291 | + * @src_addr: source IP address to match |
---|
| 292 | + */ |
---|
| 293 | + u8 src_addr[IPV6_ADDR_SIZE]; |
---|
| 294 | + |
---|
| 295 | + /** |
---|
| 296 | + * @dst_addr: destination IP address to match |
---|
| 297 | + */ |
---|
| 298 | + u8 dst_addr[IPV6_ADDR_SIZE]; |
---|
| 299 | + |
---|
| 300 | + /** |
---|
| 301 | + * @src_port: source TCP port to match |
---|
| 302 | + */ |
---|
| 303 | + __le16 src_port; |
---|
| 304 | + |
---|
| 305 | + /** |
---|
| 306 | + * @dst_port: destination TCP port to match |
---|
| 307 | + */ |
---|
| 308 | + __le16 dst_port; |
---|
| 309 | +} __packed; /* WOWLAN_IPV6_TCP_SYN_API_S_VER_1 */ |
---|
| 310 | + |
---|
| 311 | +/** |
---|
| 312 | + * union iwl_wowlan_pattern_data - Data for the different pattern types |
---|
| 313 | + * |
---|
| 314 | + * If wildcard addresses/ports are to be used, the union can be left |
---|
| 315 | + * undefined. |
---|
| 316 | + */ |
---|
| 317 | +union iwl_wowlan_pattern_data { |
---|
| 318 | + /** |
---|
| 319 | + * @bitmask: bitmask pattern data |
---|
| 320 | + */ |
---|
| 321 | + struct iwl_wowlan_pattern_v1 bitmask; |
---|
| 322 | + |
---|
| 323 | + /** |
---|
| 324 | + * @ipv4_tcp_syn: IPv4 TCP SYN pattern data |
---|
| 325 | + */ |
---|
| 326 | + struct iwl_wowlan_ipv4_tcp_syn ipv4_tcp_syn; |
---|
| 327 | + |
---|
| 328 | + /** |
---|
| 329 | + * @ipv6_tcp_syn: IPv6 TCP SYN pattern data |
---|
| 330 | + */ |
---|
| 331 | + struct iwl_wowlan_ipv6_tcp_syn ipv6_tcp_syn; |
---|
| 332 | +}; /* WOWLAN_PATTERN_API_U_VER_1 */ |
---|
| 333 | + |
---|
| 334 | +/** |
---|
| 335 | + * struct iwl_wowlan_pattern_v2 - Pattern entry for the WoWLAN wakeup patterns |
---|
| 336 | + */ |
---|
| 337 | +struct iwl_wowlan_pattern_v2 { |
---|
| 338 | + /** |
---|
| 339 | + * @pattern_type: defines the struct type to be used in the union |
---|
| 340 | + */ |
---|
| 341 | + u8 pattern_type; |
---|
| 342 | + |
---|
| 343 | + /** |
---|
| 344 | + * @reserved: reserved for alignment |
---|
| 345 | + */ |
---|
| 346 | + u8 reserved[3]; |
---|
| 347 | + |
---|
| 348 | + /** |
---|
| 349 | + * @u: the union containing the match data, or undefined for |
---|
| 350 | + * wildcard matches |
---|
| 351 | + */ |
---|
| 352 | + union iwl_wowlan_pattern_data u; |
---|
| 353 | +} __packed; /* WOWLAN_PATTERN_API_S_VER_2 */ |
---|
| 354 | + |
---|
| 355 | +/** |
---|
| 356 | + * struct iwl_wowlan_patterns_cmd - WoWLAN wakeup patterns command |
---|
| 357 | + */ |
---|
| 358 | +struct iwl_wowlan_patterns_cmd { |
---|
| 359 | + /** |
---|
| 360 | + * @n_patterns: number of patterns |
---|
| 361 | + */ |
---|
| 362 | + __le32 n_patterns; |
---|
| 363 | + |
---|
| 364 | + /** |
---|
| 365 | + * @patterns: the patterns, array length in @n_patterns |
---|
| 366 | + */ |
---|
| 367 | + struct iwl_wowlan_pattern_v2 patterns[]; |
---|
| 368 | +} __packed; /* WOWLAN_PATTERN_ARRAY_API_S_VER_2 */ |
---|
229 | 369 | |
---|
230 | 370 | enum iwl_wowlan_wakeup_filters { |
---|
231 | 371 | IWL_WOWLAN_WAKEUP_MAGIC_PACKET = BIT(0), |
---|
.. | .. |
---|
264 | 404 | * @is_11n_connection: indicates HT connection |
---|
265 | 405 | * @offloading_tid: TID reserved for firmware use |
---|
266 | 406 | * @flags: extra flags, see &enum iwl_wowlan_flags |
---|
| 407 | + * @sta_id: station ID for wowlan. |
---|
267 | 408 | * @reserved: reserved |
---|
268 | 409 | */ |
---|
269 | 410 | struct iwl_wowlan_config_cmd { |
---|
.. | .. |
---|
274 | 415 | u8 is_11n_connection; |
---|
275 | 416 | u8 offloading_tid; |
---|
276 | 417 | u8 flags; |
---|
277 | | - u8 reserved[2]; |
---|
278 | | -} __packed; /* WOWLAN_CONFIG_API_S_VER_4 */ |
---|
| 418 | + u8 sta_id; |
---|
| 419 | + u8 reserved; |
---|
| 420 | +} __packed; /* WOWLAN_CONFIG_API_S_VER_5 */ |
---|
279 | 421 | |
---|
280 | 422 | /* |
---|
281 | 423 | * WOWLAN_TSC_RSC_PARAMS |
---|
.. | .. |
---|
309 | 451 | struct iwl_aes_rsc_tsc aes; |
---|
310 | 452 | }; /* ALL_TSC_RSC_API_S_VER_2 */ |
---|
311 | 453 | |
---|
312 | | -struct iwl_wowlan_rsc_tsc_params_cmd { |
---|
| 454 | +struct iwl_wowlan_rsc_tsc_params_cmd_ver_2 { |
---|
313 | 455 | union iwl_all_tsc_rsc all_tsc_rsc; |
---|
314 | 456 | } __packed; /* ALL_TSC_RSC_API_S_VER_2 */ |
---|
| 457 | + |
---|
| 458 | +struct iwl_wowlan_rsc_tsc_params_cmd { |
---|
| 459 | + struct iwl_wowlan_rsc_tsc_params_cmd_ver_2 params; |
---|
| 460 | + __le32 sta_id; |
---|
| 461 | +} __packed; /* ALL_TSC_RSC_API_S_VER_4 */ |
---|
315 | 462 | |
---|
316 | 463 | #define IWL_MIC_KEY_SIZE 8 |
---|
317 | 464 | struct iwl_mic_keys { |
---|
.. | .. |
---|
327 | 474 | |
---|
328 | 475 | #define IWL_NUM_RX_P1K_CACHE 2 |
---|
329 | 476 | |
---|
330 | | -struct iwl_wowlan_tkip_params_cmd { |
---|
| 477 | +struct iwl_wowlan_tkip_params_cmd_ver_1 { |
---|
331 | 478 | struct iwl_mic_keys mic_keys; |
---|
332 | 479 | struct iwl_p1k_cache tx; |
---|
333 | 480 | struct iwl_p1k_cache rx_uni[IWL_NUM_RX_P1K_CACHE]; |
---|
334 | 481 | struct iwl_p1k_cache rx_multi[IWL_NUM_RX_P1K_CACHE]; |
---|
335 | 482 | } __packed; /* WOWLAN_TKIP_SETTING_API_S_VER_1 */ |
---|
336 | 483 | |
---|
| 484 | +struct iwl_wowlan_tkip_params_cmd { |
---|
| 485 | + struct iwl_mic_keys mic_keys; |
---|
| 486 | + struct iwl_p1k_cache tx; |
---|
| 487 | + struct iwl_p1k_cache rx_uni[IWL_NUM_RX_P1K_CACHE]; |
---|
| 488 | + struct iwl_p1k_cache rx_multi[IWL_NUM_RX_P1K_CACHE]; |
---|
| 489 | + u8 reversed[2]; |
---|
| 490 | + __le32 sta_id; |
---|
| 491 | +} __packed; /* WOWLAN_TKIP_SETTING_API_S_VER_2 */ |
---|
| 492 | + |
---|
337 | 493 | #define IWL_KCK_MAX_SIZE 32 |
---|
338 | 494 | #define IWL_KEK_MAX_SIZE 32 |
---|
339 | 495 | |
---|
340 | | -struct iwl_wowlan_kek_kck_material_cmd { |
---|
| 496 | +struct iwl_wowlan_kek_kck_material_cmd_v2 { |
---|
341 | 497 | u8 kck[IWL_KCK_MAX_SIZE]; |
---|
342 | 498 | u8 kek[IWL_KEK_MAX_SIZE]; |
---|
343 | 499 | __le16 kck_len; |
---|
344 | 500 | __le16 kek_len; |
---|
345 | 501 | __le64 replay_ctr; |
---|
346 | 502 | } __packed; /* KEK_KCK_MATERIAL_API_S_VER_2 */ |
---|
| 503 | + |
---|
| 504 | +struct iwl_wowlan_kek_kck_material_cmd_v3 { |
---|
| 505 | + u8 kck[IWL_KCK_MAX_SIZE]; |
---|
| 506 | + u8 kek[IWL_KEK_MAX_SIZE]; |
---|
| 507 | + __le16 kck_len; |
---|
| 508 | + __le16 kek_len; |
---|
| 509 | + __le64 replay_ctr; |
---|
| 510 | + __le32 akm; |
---|
| 511 | + __le32 gtk_cipher; |
---|
| 512 | + __le32 igtk_cipher; |
---|
| 513 | + __le32 bigtk_cipher; |
---|
| 514 | +} __packed; /* KEK_KCK_MATERIAL_API_S_VER_3 */ |
---|
347 | 515 | |
---|
348 | 516 | #define RF_KILL_INDICATOR_FOR_WOWLAN 0x87 |
---|
349 | 517 | |
---|
.. | .. |
---|
371 | 539 | IWL_WOWLAN_WAKEUP_BY_D3_WAKEUP_HOST_TIMER = BIT(14), |
---|
372 | 540 | IWL_WOWLAN_WAKEUP_BY_RXFRAME_FILTERED_IN = BIT(15), |
---|
373 | 541 | IWL_WOWLAN_WAKEUP_BY_BEACON_FILTERED_IN = BIT(16), |
---|
374 | | - |
---|
| 542 | + IWL_WAKEUP_BY_11W_UNPROTECTED_DEAUTH_OR_DISASSOC = BIT(17), |
---|
| 543 | + IWL_WAKEUP_BY_PATTERN_IPV4_TCP_SYN = BIT(18), |
---|
| 544 | + IWL_WAKEUP_BY_PATTERN_IPV4_TCP_SYN_WILDCARD = BIT(19), |
---|
| 545 | + IWL_WAKEUP_BY_PATTERN_IPV6_TCP_SYN = BIT(20), |
---|
| 546 | + IWL_WAKEUP_BY_PATTERN_IPV6_TCP_SYN_WILDCARD = BIT(21), |
---|
375 | 547 | }; /* WOWLAN_WAKE_UP_REASON_API_E_VER_2 */ |
---|
376 | 548 | |
---|
377 | | -struct iwl_wowlan_gtk_status { |
---|
| 549 | +struct iwl_wowlan_gtk_status_v1 { |
---|
378 | 550 | u8 key_index; |
---|
379 | 551 | u8 reserved[3]; |
---|
380 | 552 | u8 decrypt_key[16]; |
---|
381 | 553 | u8 tkip_mic_key[8]; |
---|
382 | | - struct iwl_wowlan_rsc_tsc_params_cmd rsc; |
---|
| 554 | + struct iwl_wowlan_rsc_tsc_params_cmd_ver_2 rsc; |
---|
383 | 555 | } __packed; /* WOWLAN_GTK_MATERIAL_VER_1 */ |
---|
384 | 556 | |
---|
| 557 | +#define WOWLAN_KEY_MAX_SIZE 32 |
---|
| 558 | +#define WOWLAN_GTK_KEYS_NUM 2 |
---|
| 559 | +#define WOWLAN_IGTK_KEYS_NUM 2 |
---|
| 560 | + |
---|
385 | 561 | /** |
---|
386 | | - * struct iwl_wowlan_status - WoWLAN status |
---|
| 562 | + * struct iwl_wowlan_gtk_status - GTK status |
---|
| 563 | + * @key: GTK material |
---|
| 564 | + * @key_len: GTK legth, if set to 0, the key is not available |
---|
| 565 | + * @key_flags: information about the key: |
---|
| 566 | + * bits[0:1]: key index assigned by the AP |
---|
| 567 | + * bits[2:6]: GTK index of the key in the internal DB |
---|
| 568 | + * bit[7]: Set iff this is the currently used GTK |
---|
| 569 | + * @reserved: padding |
---|
| 570 | + * @tkip_mic_key: TKIP RX MIC key |
---|
| 571 | + * @rsc: TSC RSC counters |
---|
| 572 | + */ |
---|
| 573 | +struct iwl_wowlan_gtk_status { |
---|
| 574 | + u8 key[WOWLAN_KEY_MAX_SIZE]; |
---|
| 575 | + u8 key_len; |
---|
| 576 | + u8 key_flags; |
---|
| 577 | + u8 reserved[2]; |
---|
| 578 | + u8 tkip_mic_key[8]; |
---|
| 579 | + struct iwl_wowlan_rsc_tsc_params_cmd_ver_2 rsc; |
---|
| 580 | +} __packed; /* WOWLAN_GTK_MATERIAL_VER_2 */ |
---|
| 581 | + |
---|
| 582 | +#define IWL_WOWLAN_GTK_IDX_MASK (BIT(0) | BIT(1)) |
---|
| 583 | + |
---|
| 584 | +/** |
---|
| 585 | + * struct iwl_wowlan_igtk_status - IGTK status |
---|
| 586 | + * @key: IGTK material |
---|
| 587 | + * @ipn: the IGTK packet number (replay counter) |
---|
| 588 | + * @key_len: IGTK length, if set to 0, the key is not available |
---|
| 589 | + * @key_flags: information about the key: |
---|
| 590 | + * bits[0]: key index assigned by the AP (0: index 4, 1: index 5) |
---|
| 591 | + * bits[1:5]: IGTK index of the key in the internal DB |
---|
| 592 | + * bit[6]: Set iff this is the currently used IGTK |
---|
| 593 | + */ |
---|
| 594 | +struct iwl_wowlan_igtk_status { |
---|
| 595 | + u8 key[WOWLAN_KEY_MAX_SIZE]; |
---|
| 596 | + u8 ipn[6]; |
---|
| 597 | + u8 key_len; |
---|
| 598 | + u8 key_flags; |
---|
| 599 | +} __packed; /* WOWLAN_IGTK_MATERIAL_VER_1 */ |
---|
| 600 | + |
---|
| 601 | +/** |
---|
| 602 | + * struct iwl_wowlan_status_v6 - WoWLAN status |
---|
387 | 603 | * @gtk: GTK data |
---|
388 | 604 | * @replay_ctr: GTK rekey replay counter |
---|
389 | 605 | * @pattern_number: number of the matched pattern |
---|
.. | .. |
---|
397 | 613 | * @wake_packet_bufsize: wakeup packet buffer size |
---|
398 | 614 | * @wake_packet: wakeup packet |
---|
399 | 615 | */ |
---|
400 | | -struct iwl_wowlan_status { |
---|
401 | | - struct iwl_wowlan_gtk_status gtk; |
---|
| 616 | +struct iwl_wowlan_status_v6 { |
---|
| 617 | + struct iwl_wowlan_gtk_status_v1 gtk; |
---|
402 | 618 | __le64 replay_ctr; |
---|
403 | 619 | __le16 pattern_number; |
---|
404 | 620 | __le16 non_qos_seq_ctr; |
---|
.. | .. |
---|
412 | 628 | u8 wake_packet[]; /* can be truncated from _length to _bufsize */ |
---|
413 | 629 | } __packed; /* WOWLAN_STATUSES_API_S_VER_6 */ |
---|
414 | 630 | |
---|
| 631 | +/** |
---|
| 632 | + * struct iwl_wowlan_status - WoWLAN status |
---|
| 633 | + * @gtk: GTK data |
---|
| 634 | + * @igtk: IGTK data |
---|
| 635 | + * @replay_ctr: GTK rekey replay counter |
---|
| 636 | + * @pattern_number: number of the matched pattern |
---|
| 637 | + * @non_qos_seq_ctr: non-QoS sequence counter to use next |
---|
| 638 | + * @qos_seq_ctr: QoS sequence counters to use next |
---|
| 639 | + * @wakeup_reasons: wakeup reasons, see &enum iwl_wowlan_wakeup_reason |
---|
| 640 | + * @num_of_gtk_rekeys: number of GTK rekeys |
---|
| 641 | + * @transmitted_ndps: number of transmitted neighbor discovery packets |
---|
| 642 | + * @received_beacons: number of received beacons |
---|
| 643 | + * @wake_packet_length: wakeup packet length |
---|
| 644 | + * @wake_packet_bufsize: wakeup packet buffer size |
---|
| 645 | + * @wake_packet: wakeup packet |
---|
| 646 | + */ |
---|
| 647 | +struct iwl_wowlan_status_v7 { |
---|
| 648 | + struct iwl_wowlan_gtk_status gtk[WOWLAN_GTK_KEYS_NUM]; |
---|
| 649 | + struct iwl_wowlan_igtk_status igtk[WOWLAN_IGTK_KEYS_NUM]; |
---|
| 650 | + __le64 replay_ctr; |
---|
| 651 | + __le16 pattern_number; |
---|
| 652 | + __le16 non_qos_seq_ctr; |
---|
| 653 | + __le16 qos_seq_ctr[8]; |
---|
| 654 | + __le32 wakeup_reasons; |
---|
| 655 | + __le32 num_of_gtk_rekeys; |
---|
| 656 | + __le32 transmitted_ndps; |
---|
| 657 | + __le32 received_beacons; |
---|
| 658 | + __le32 wake_packet_length; |
---|
| 659 | + __le32 wake_packet_bufsize; |
---|
| 660 | + u8 wake_packet[]; /* can be truncated from _length to _bufsize */ |
---|
| 661 | +} __packed; /* WOWLAN_STATUSES_API_S_VER_7 */ |
---|
| 662 | + |
---|
| 663 | +/** |
---|
| 664 | + * struct iwl_wowlan_status_v9 - WoWLAN status (version 9) |
---|
| 665 | + * @gtk: GTK data |
---|
| 666 | + * @igtk: IGTK data |
---|
| 667 | + * @replay_ctr: GTK rekey replay counter |
---|
| 668 | + * @pattern_number: number of the matched pattern |
---|
| 669 | + * @non_qos_seq_ctr: non-QoS sequence counter to use next |
---|
| 670 | + * @qos_seq_ctr: QoS sequence counters to use next |
---|
| 671 | + * @wakeup_reasons: wakeup reasons, see &enum iwl_wowlan_wakeup_reason |
---|
| 672 | + * @num_of_gtk_rekeys: number of GTK rekeys |
---|
| 673 | + * @transmitted_ndps: number of transmitted neighbor discovery packets |
---|
| 674 | + * @received_beacons: number of received beacons |
---|
| 675 | + * @wake_packet_length: wakeup packet length |
---|
| 676 | + * @wake_packet_bufsize: wakeup packet buffer size |
---|
| 677 | + * @tid_tear_down: bit mask of tids whose BA sessions were closed |
---|
| 678 | + * in suspend state |
---|
| 679 | + * @reserved: unused |
---|
| 680 | + * @wake_packet: wakeup packet |
---|
| 681 | + */ |
---|
| 682 | +struct iwl_wowlan_status_v9 { |
---|
| 683 | + struct iwl_wowlan_gtk_status gtk[WOWLAN_GTK_KEYS_NUM]; |
---|
| 684 | + struct iwl_wowlan_igtk_status igtk[WOWLAN_IGTK_KEYS_NUM]; |
---|
| 685 | + __le64 replay_ctr; |
---|
| 686 | + __le16 pattern_number; |
---|
| 687 | + __le16 non_qos_seq_ctr; |
---|
| 688 | + __le16 qos_seq_ctr[8]; |
---|
| 689 | + __le32 wakeup_reasons; |
---|
| 690 | + __le32 num_of_gtk_rekeys; |
---|
| 691 | + __le32 transmitted_ndps; |
---|
| 692 | + __le32 received_beacons; |
---|
| 693 | + __le32 wake_packet_length; |
---|
| 694 | + __le32 wake_packet_bufsize; |
---|
| 695 | + u8 tid_tear_down; |
---|
| 696 | + u8 reserved[3]; |
---|
| 697 | + u8 wake_packet[]; /* can be truncated from _length to _bufsize */ |
---|
| 698 | +} __packed; /* WOWLAN_STATUSES_API_S_VER_9 */ |
---|
| 699 | + |
---|
| 700 | +/** |
---|
| 701 | + * struct iwl_wowlan_status - WoWLAN status |
---|
| 702 | + * @gtk: GTK data |
---|
| 703 | + * @igtk: IGTK data |
---|
| 704 | + * @bigtk: BIGTK data |
---|
| 705 | + * @replay_ctr: GTK rekey replay counter |
---|
| 706 | + * @pattern_number: number of the matched pattern |
---|
| 707 | + * @non_qos_seq_ctr: non-QoS sequence counter to use next |
---|
| 708 | + * @qos_seq_ctr: QoS sequence counters to use next |
---|
| 709 | + * @wakeup_reasons: wakeup reasons, see &enum iwl_wowlan_wakeup_reason |
---|
| 710 | + * @num_of_gtk_rekeys: number of GTK rekeys |
---|
| 711 | + * @tid_tear_down: bitmap of TIDs torn down |
---|
| 712 | + * @reserved: reserved |
---|
| 713 | + * @received_beacons: number of received beacons |
---|
| 714 | + * @wake_packet_length: wakeup packet length |
---|
| 715 | + * @wake_packet_bufsize: wakeup packet buffer size |
---|
| 716 | + * @tid_tear_down: bit mask of tids whose BA sessions were closed |
---|
| 717 | + * in suspend state |
---|
| 718 | + * @wake_packet: wakeup packet |
---|
| 719 | + */ |
---|
| 720 | +struct iwl_wowlan_status { |
---|
| 721 | + struct iwl_wowlan_gtk_status gtk[1]; |
---|
| 722 | + struct iwl_wowlan_igtk_status igtk[1]; |
---|
| 723 | + struct iwl_wowlan_igtk_status bigtk[WOWLAN_IGTK_KEYS_NUM]; |
---|
| 724 | + __le64 replay_ctr; |
---|
| 725 | + __le16 pattern_number; |
---|
| 726 | + __le16 non_qos_seq_ctr; |
---|
| 727 | + __le16 qos_seq_ctr[8]; |
---|
| 728 | + __le32 wakeup_reasons; |
---|
| 729 | + __le32 num_of_gtk_rekeys; |
---|
| 730 | + u8 tid_tear_down; |
---|
| 731 | + u8 reserved[3]; |
---|
| 732 | + __le32 received_beacons; |
---|
| 733 | + __le32 wake_packet_length; |
---|
| 734 | + __le32 wake_packet_bufsize; |
---|
| 735 | + u8 wake_packet[]; /* can be truncated from _length to _bufsize */ |
---|
| 736 | +} __packed; /* WOWLAN_STATUSES_API_S_VER_11 */ |
---|
| 737 | + |
---|
| 738 | +static inline u8 iwlmvm_wowlan_gtk_idx(struct iwl_wowlan_gtk_status *gtk) |
---|
| 739 | +{ |
---|
| 740 | + return gtk->key_flags & IWL_WOWLAN_GTK_IDX_MASK; |
---|
| 741 | +} |
---|
| 742 | + |
---|
415 | 743 | #define IWL_WOWLAN_TCP_MAX_PACKET_LEN 64 |
---|
416 | 744 | #define IWL_WOWLAN_REMOTE_WAKE_MAX_PACKET_LEN 128 |
---|
417 | 745 | #define IWL_WOWLAN_REMOTE_WAKE_MAX_TOKENS 2048 |
---|