1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ 2 /* 3 * Copyright (C) 2012-2014, 2018-2025 Intel Corporation 4 * Copyright (C) 2013-2014 Intel Mobile Communications GmbH 5 * Copyright (C) 2015-2017 Intel Deutschland GmbH 6 */ 7 #ifndef __iwl_fw_api_d3_h__ 8 #define __iwl_fw_api_d3_h__ 9 #include <iwl-trans.h> 10 11 /** 12 * enum iwl_d0i3_flags - d0i3 flags 13 * @IWL_D0I3_RESET_REQUIRE: FW require reset upon resume 14 */ 15 enum iwl_d0i3_flags { 16 IWL_D0I3_RESET_REQUIRE = BIT(0), 17 }; 18 19 /** 20 * enum iwl_d3_wakeup_flags - D3 manager wakeup flags 21 * @IWL_WAKEUP_D3_CONFIG_FW_ERROR: wake up on firmware sysassert 22 * @IWL_WAKEUP_D3_HOST_TIMER: wake up on host timer expiry 23 */ 24 enum iwl_d3_wakeup_flags { 25 IWL_WAKEUP_D3_CONFIG_FW_ERROR = BIT(0), 26 IWL_WAKEUP_D3_HOST_TIMER = BIT(1), 27 }; /* D3_MANAGER_WAKEUP_CONFIG_API_E_VER_3 */ 28 29 /** 30 * struct iwl_d3_manager_config - D3 manager configuration command 31 * @min_sleep_time: minimum sleep time (in usec) 32 * @wakeup_flags: wakeup flags, see &enum iwl_d3_wakeup_flags 33 * @wakeup_host_timer: force wakeup after this many seconds 34 * 35 * The structure is used for the D3_CONFIG_CMD command. 36 */ 37 struct iwl_d3_manager_config { 38 __le32 min_sleep_time; 39 __le32 wakeup_flags; 40 __le32 wakeup_host_timer; 41 } __packed; /* D3_MANAGER_CONFIG_CMD_S_VER_4 */ 42 43 44 /* TODO: OFFLOADS_QUERY_API_S_VER_1 */ 45 46 /** 47 * enum iwl_proto_offloads - enabled protocol offloads 48 * @IWL_D3_PROTO_OFFLOAD_ARP: ARP data is enabled 49 * @IWL_D3_PROTO_OFFLOAD_NS: NS (Neighbor Solicitation) is enabled 50 * @IWL_D3_PROTO_IPV4_VALID: IPv4 data is valid 51 * @IWL_D3_PROTO_IPV6_VALID: IPv6 data is valid 52 * @IWL_D3_PROTO_OFFLOAD_BTM: BTM offload is enabled 53 */ 54 enum iwl_proto_offloads { 55 IWL_D3_PROTO_OFFLOAD_ARP = BIT(0), 56 IWL_D3_PROTO_OFFLOAD_NS = BIT(1), 57 IWL_D3_PROTO_IPV4_VALID = BIT(2), 58 IWL_D3_PROTO_IPV6_VALID = BIT(3), 59 IWL_D3_PROTO_OFFLOAD_BTM = BIT(4), 60 }; 61 62 #define IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V1 2 63 #define IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V2 6 64 #define IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V3L 12 65 #define IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V3S 4 66 #define IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_MAX 12 67 68 #define IWL_PROTO_OFFLOAD_NUM_NS_CONFIG_V3L 4 69 #define IWL_PROTO_OFFLOAD_NUM_NS_CONFIG_V3S 2 70 71 /** 72 * struct iwl_proto_offload_cmd_common - ARP/NS offload common part 73 * @enabled: enable flags 74 * @remote_ipv4_addr: remote address to answer to (or zero if all) 75 * @host_ipv4_addr: our IPv4 address to respond to queries for 76 * @arp_mac_addr: our MAC address for ARP responses 77 * @reserved: unused 78 */ 79 struct iwl_proto_offload_cmd_common { 80 __le32 enabled; 81 __be32 remote_ipv4_addr; 82 __be32 host_ipv4_addr; 83 u8 arp_mac_addr[ETH_ALEN]; 84 __le16 reserved; 85 } __packed; 86 87 /** 88 * struct iwl_proto_offload_cmd_v1 - ARP/NS offload configuration 89 * @common: common/IPv4 configuration 90 * @remote_ipv6_addr: remote address to answer to (or zero if all) 91 * @solicited_node_ipv6_addr: broken -- solicited node address exists 92 * for each target address 93 * @target_ipv6_addr: our target addresses 94 * @ndp_mac_addr: neighbor solicitation response MAC address 95 * @reserved2: reserved 96 */ 97 struct iwl_proto_offload_cmd_v1 { 98 struct iwl_proto_offload_cmd_common common; 99 u8 remote_ipv6_addr[16]; 100 u8 solicited_node_ipv6_addr[16]; 101 u8 target_ipv6_addr[IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V1][16]; 102 u8 ndp_mac_addr[ETH_ALEN]; 103 __le16 reserved2; 104 } __packed; /* PROT_OFFLOAD_CONFIG_CMD_DB_S_VER_1 */ 105 106 /** 107 * struct iwl_proto_offload_cmd_v2 - ARP/NS offload configuration 108 * @common: common/IPv4 configuration 109 * @remote_ipv6_addr: remote address to answer to (or zero if all) 110 * @solicited_node_ipv6_addr: broken -- solicited node address exists 111 * for each target address 112 * @target_ipv6_addr: our target addresses 113 * @ndp_mac_addr: neighbor solicitation response MAC address 114 * @num_valid_ipv6_addrs: number of valid IPv6 addresses 115 * @reserved2: reserved 116 */ 117 struct iwl_proto_offload_cmd_v2 { 118 struct iwl_proto_offload_cmd_common common; 119 u8 remote_ipv6_addr[16]; 120 u8 solicited_node_ipv6_addr[16]; 121 u8 target_ipv6_addr[IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V2][16]; 122 u8 ndp_mac_addr[ETH_ALEN]; 123 u8 num_valid_ipv6_addrs; 124 u8 reserved2[3]; 125 } __packed; /* PROT_OFFLOAD_CONFIG_CMD_DB_S_VER_2 */ 126 127 struct iwl_ns_config { 128 struct in6_addr source_ipv6_addr; 129 struct in6_addr dest_ipv6_addr; 130 u8 target_mac_addr[ETH_ALEN]; 131 __le16 reserved; 132 } __packed; /* NS_OFFLOAD_CONFIG */ 133 134 struct iwl_targ_addr { 135 struct in6_addr addr; 136 __le32 config_num; 137 } __packed; /* TARGET_IPV6_ADDRESS */ 138 139 /** 140 * struct iwl_proto_offload_cmd_v3_small - ARP/NS offload configuration 141 * @common: common/IPv4 configuration 142 * @num_valid_ipv6_addrs: number of valid IPv6 addresses 143 * @targ_addrs: target IPv6 addresses 144 * @ns_config: NS offload configurations 145 */ 146 struct iwl_proto_offload_cmd_v3_small { 147 struct iwl_proto_offload_cmd_common common; 148 __le32 num_valid_ipv6_addrs; 149 struct iwl_targ_addr targ_addrs[IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V3S]; 150 struct iwl_ns_config ns_config[IWL_PROTO_OFFLOAD_NUM_NS_CONFIG_V3S]; 151 } __packed; /* PROT_OFFLOAD_CONFIG_CMD_DB_S_VER_3 */ 152 153 /** 154 * struct iwl_proto_offload_cmd_v3_large - ARP/NS offload configuration 155 * @common: common/IPv4 configuration 156 * @num_valid_ipv6_addrs: number of valid IPv6 addresses 157 * @targ_addrs: target IPv6 addresses 158 * @ns_config: NS offload configurations 159 */ 160 struct iwl_proto_offload_cmd_v3_large { 161 struct iwl_proto_offload_cmd_common common; 162 __le32 num_valid_ipv6_addrs; 163 struct iwl_targ_addr targ_addrs[IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V3L]; 164 struct iwl_ns_config ns_config[IWL_PROTO_OFFLOAD_NUM_NS_CONFIG_V3L]; 165 } __packed; /* PROT_OFFLOAD_CONFIG_CMD_DB_S_VER_3 */ 166 167 /** 168 * struct iwl_proto_offload_cmd_v4 - ARP/NS offload configuration 169 * @sta_id: station id 170 * @common: common/IPv4 configuration 171 * @num_valid_ipv6_addrs: number of valid IPv6 addresses 172 * @targ_addrs: target IPv6 addresses 173 * @ns_config: NS offload configurations 174 */ 175 struct iwl_proto_offload_cmd_v4 { 176 __le32 sta_id; 177 struct iwl_proto_offload_cmd_common common; 178 __le32 num_valid_ipv6_addrs; 179 struct iwl_targ_addr targ_addrs[IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V3L]; 180 struct iwl_ns_config ns_config[IWL_PROTO_OFFLOAD_NUM_NS_CONFIG_V3L]; 181 } __packed; /* PROT_OFFLOAD_CONFIG_CMD_DB_S_VER_4 */ 182 183 /* 184 * WOWLAN_PATTERNS 185 */ 186 #define IWL_WOWLAN_MIN_PATTERN_LEN 16 187 #define IWL_WOWLAN_MAX_PATTERN_LEN 128 188 189 struct iwl_wowlan_pattern_v1 { 190 u8 mask[IWL_WOWLAN_MAX_PATTERN_LEN / 8]; 191 u8 pattern[IWL_WOWLAN_MAX_PATTERN_LEN]; 192 u8 mask_size; 193 u8 pattern_size; 194 __le16 reserved; 195 } __packed; /* WOWLAN_PATTERN_API_S_VER_1 */ 196 197 #define IWL_WOWLAN_MAX_PATTERNS 20 198 199 /** 200 * struct iwl_wowlan_patterns_cmd_v1 - WoWLAN wakeup patterns 201 */ 202 struct iwl_wowlan_patterns_cmd_v1 { 203 /** 204 * @n_patterns: number of patterns 205 */ 206 __le32 n_patterns; 207 208 /** 209 * @patterns: the patterns, array length in @n_patterns 210 */ 211 struct iwl_wowlan_pattern_v1 patterns[]; 212 } __packed; /* WOWLAN_PATTERN_ARRAY_API_S_VER_1 */ 213 214 #define IPV4_ADDR_SIZE 4 215 #define IPV6_ADDR_SIZE 16 216 217 enum iwl_wowlan_pattern_type { 218 WOWLAN_PATTERN_TYPE_BITMASK, 219 WOWLAN_PATTERN_TYPE_IPV4_TCP_SYN, 220 WOWLAN_PATTERN_TYPE_IPV6_TCP_SYN, 221 WOWLAN_PATTERN_TYPE_IPV4_TCP_SYN_WILDCARD, 222 WOWLAN_PATTERN_TYPE_IPV6_TCP_SYN_WILDCARD, 223 }; /* WOWLAN_PATTERN_TYPE_API_E_VER_1 */ 224 225 /** 226 * struct iwl_wowlan_ipv4_tcp_syn - WoWLAN IPv4 TCP SYN pattern data 227 */ 228 struct iwl_wowlan_ipv4_tcp_syn { 229 /** 230 * @src_addr: source IP address to match 231 */ 232 u8 src_addr[IPV4_ADDR_SIZE]; 233 234 /** 235 * @dst_addr: destination IP address to match 236 */ 237 u8 dst_addr[IPV4_ADDR_SIZE]; 238 239 /** 240 * @src_port: source TCP port to match 241 */ 242 __le16 src_port; 243 244 /** 245 * @dst_port: destination TCP port to match 246 */ 247 __le16 dst_port; 248 } __packed; /* WOWLAN_IPV4_TCP_SYN_API_S_VER_1 */ 249 250 /** 251 * struct iwl_wowlan_ipv6_tcp_syn - WoWLAN Ipv6 TCP SYN pattern data 252 */ 253 struct iwl_wowlan_ipv6_tcp_syn { 254 /** 255 * @src_addr: source IP address to match 256 */ 257 u8 src_addr[IPV6_ADDR_SIZE]; 258 259 /** 260 * @dst_addr: destination IP address to match 261 */ 262 u8 dst_addr[IPV6_ADDR_SIZE]; 263 264 /** 265 * @src_port: source TCP port to match 266 */ 267 __le16 src_port; 268 269 /** 270 * @dst_port: destination TCP port to match 271 */ 272 __le16 dst_port; 273 } __packed; /* WOWLAN_IPV6_TCP_SYN_API_S_VER_1 */ 274 275 /** 276 * union iwl_wowlan_pattern_data - Data for the different pattern types 277 * 278 * If wildcard addresses/ports are to be used, the union can be left 279 * undefined. 280 */ 281 union iwl_wowlan_pattern_data { 282 /** 283 * @bitmask: bitmask pattern data 284 */ 285 struct iwl_wowlan_pattern_v1 bitmask; 286 287 /** 288 * @ipv4_tcp_syn: IPv4 TCP SYN pattern data 289 */ 290 struct iwl_wowlan_ipv4_tcp_syn ipv4_tcp_syn; 291 292 /** 293 * @ipv6_tcp_syn: IPv6 TCP SYN pattern data 294 */ 295 struct iwl_wowlan_ipv6_tcp_syn ipv6_tcp_syn; 296 }; /* WOWLAN_PATTERN_API_U_VER_1 */ 297 298 /** 299 * struct iwl_wowlan_pattern_v2 - Pattern entry for the WoWLAN wakeup patterns 300 */ 301 struct iwl_wowlan_pattern_v2 { 302 /** 303 * @pattern_type: defines the struct type to be used in the union 304 */ 305 u8 pattern_type; 306 307 /** 308 * @reserved: reserved for alignment 309 */ 310 u8 reserved[3]; 311 312 /** 313 * @u: the union containing the match data, or undefined for 314 * wildcard matches 315 */ 316 union iwl_wowlan_pattern_data u; 317 } __packed; /* WOWLAN_PATTERN_API_S_VER_2 */ 318 319 /** 320 * struct iwl_wowlan_patterns_cmd - WoWLAN wakeup patterns command 321 */ 322 struct iwl_wowlan_patterns_cmd { 323 /** 324 * @n_patterns: number of patterns 325 */ 326 u8 n_patterns; 327 328 /** 329 * @sta_id: sta_id 330 */ 331 u8 sta_id; 332 333 /** 334 * @reserved: reserved for alignment 335 */ 336 __le16 reserved; 337 338 /** 339 * @patterns: the patterns, array length in @n_patterns 340 */ 341 struct iwl_wowlan_pattern_v2 patterns[]; 342 } __packed; /* WOWLAN_PATTERN_ARRAY_API_S_VER_3 */ 343 344 enum iwl_wowlan_wakeup_filters { 345 IWL_WOWLAN_WAKEUP_MAGIC_PACKET = BIT(0), 346 IWL_WOWLAN_WAKEUP_PATTERN_MATCH = BIT(1), 347 IWL_WOWLAN_WAKEUP_BEACON_MISS = BIT(2), 348 IWL_WOWLAN_WAKEUP_LINK_CHANGE = BIT(3), 349 IWL_WOWLAN_WAKEUP_GTK_REKEY_FAIL = BIT(4), 350 IWL_WOWLAN_WAKEUP_EAP_IDENT_REQ = BIT(5), 351 IWL_WOWLAN_WAKEUP_4WAY_HANDSHAKE = BIT(6), 352 IWL_WOWLAN_WAKEUP_ENABLE_NET_DETECT = BIT(7), 353 IWL_WOWLAN_WAKEUP_RF_KILL_DEASSERT = BIT(8), 354 IWL_WOWLAN_WAKEUP_REMOTE_LINK_LOSS = BIT(9), 355 IWL_WOWLAN_WAKEUP_REMOTE_SIGNATURE_TABLE = BIT(10), 356 IWL_WOWLAN_WAKEUP_REMOTE_TCP_EXTERNAL = BIT(11), 357 IWL_WOWLAN_WAKEUP_REMOTE_WAKEUP_PACKET = BIT(12), 358 IWL_WOWLAN_WAKEUP_IOAC_MAGIC_PACKET = BIT(13), 359 IWL_WOWLAN_WAKEUP_HOST_TIMER = BIT(14), 360 IWL_WOWLAN_WAKEUP_RX_FRAME = BIT(15), 361 IWL_WOWLAN_WAKEUP_BCN_FILTERING = BIT(16), 362 }; /* WOWLAN_WAKEUP_FILTER_API_E_VER_4 */ 363 364 enum iwl_wowlan_flags { 365 IS_11W_ASSOC = BIT(0), 366 ENABLE_L3_FILTERING = BIT(1), 367 ENABLE_NBNS_FILTERING = BIT(2), 368 ENABLE_DHCP_FILTERING = BIT(3), 369 ENABLE_STORE_BEACON = BIT(4), 370 }; 371 372 /** 373 * struct iwl_wowlan_config_cmd_v6 - WoWLAN configuration (versions 5 and 6) 374 * @wakeup_filter: filter from &enum iwl_wowlan_wakeup_filters 375 * @non_qos_seq: non-QoS sequence counter to use next. 376 * Reserved if the struct has version >= 6. 377 * @qos_seq: QoS sequence counters to use next 378 * @wowlan_ba_teardown_tids: bitmap of BA sessions to tear down 379 * @is_11n_connection: indicates HT connection 380 * @offloading_tid: TID reserved for firmware use 381 * @flags: extra flags, see &enum iwl_wowlan_flags 382 * @sta_id: station ID for wowlan. 383 * @reserved: reserved 384 */ 385 struct iwl_wowlan_config_cmd_v6 { 386 __le32 wakeup_filter; 387 __le16 non_qos_seq; 388 __le16 qos_seq[8]; 389 u8 wowlan_ba_teardown_tids; 390 u8 is_11n_connection; 391 u8 offloading_tid; 392 u8 flags; 393 u8 sta_id; 394 u8 reserved; 395 } __packed; /* WOWLAN_CONFIG_API_S_VER_6 */ 396 397 /** 398 * struct iwl_wowlan_config_cmd - WoWLAN configuration 399 * @wakeup_filter: filter from &enum iwl_wowlan_wakeup_filters 400 * @wowlan_ba_teardown_tids: bitmap of BA sessions to tear down 401 * @is_11n_connection: indicates HT connection 402 * @offloading_tid: TID reserved for firmware use 403 * @flags: extra flags, see &enum iwl_wowlan_flags 404 * @sta_id: station ID for wowlan. 405 * @reserved: reserved 406 */ 407 struct iwl_wowlan_config_cmd { 408 __le32 wakeup_filter; 409 u8 wowlan_ba_teardown_tids; 410 u8 is_11n_connection; 411 u8 offloading_tid; 412 u8 flags; 413 u8 sta_id; 414 u8 reserved[3]; 415 } __packed; /* WOWLAN_CONFIG_API_S_VER_7 */ 416 417 #define IWL_NUM_RSC 16 418 #define WOWLAN_KEY_MAX_SIZE 32 419 #define WOWLAN_GTK_KEYS_NUM 2 420 #define WOWLAN_IGTK_KEYS_NUM 2 421 #define WOWLAN_IGTK_MIN_INDEX 4 422 #define WOWLAN_BIGTK_KEYS_NUM 2 423 #define WOWLAN_BIGTK_MIN_INDEX 6 424 425 /* 426 * WOWLAN_TSC_RSC_PARAMS 427 */ 428 struct tkip_sc { 429 __le16 iv16; 430 __le16 pad; 431 __le32 iv32; 432 } __packed; /* TKIP_SC_API_U_VER_1 */ 433 434 struct iwl_tkip_rsc_tsc { 435 struct tkip_sc unicast_rsc[IWL_NUM_RSC]; 436 struct tkip_sc multicast_rsc[IWL_NUM_RSC]; 437 struct tkip_sc tsc; 438 } __packed; /* TKIP_TSC_RSC_API_S_VER_1 */ 439 440 struct aes_sc { 441 __le64 pn; 442 } __packed; /* TKIP_AES_SC_API_U_VER_1 */ 443 444 struct iwl_aes_rsc_tsc { 445 struct aes_sc unicast_rsc[IWL_NUM_RSC]; 446 struct aes_sc multicast_rsc[IWL_NUM_RSC]; 447 struct aes_sc tsc; 448 } __packed; /* AES_TSC_RSC_API_S_VER_1 */ 449 450 union iwl_all_tsc_rsc { 451 struct iwl_tkip_rsc_tsc tkip; 452 struct iwl_aes_rsc_tsc aes; 453 }; /* ALL_TSC_RSC_API_S_VER_2 */ 454 455 struct iwl_wowlan_rsc_tsc_params_cmd_ver_2 { 456 union iwl_all_tsc_rsc all_tsc_rsc; 457 } __packed; /* ALL_TSC_RSC_API_S_VER_2 */ 458 459 struct iwl_wowlan_rsc_tsc_params_cmd { 460 __le64 ucast_rsc[IWL_MAX_TID_COUNT]; 461 __le64 mcast_rsc[WOWLAN_GTK_KEYS_NUM][IWL_MAX_TID_COUNT]; 462 __le32 sta_id; 463 #define IWL_MCAST_KEY_MAP_INVALID 0xff 464 u8 mcast_key_id_map[4]; 465 } __packed; /* ALL_TSC_RSC_API_S_VER_5 */ 466 467 #define IWL_MIC_KEY_SIZE 8 468 struct iwl_mic_keys { 469 u8 tx[IWL_MIC_KEY_SIZE]; 470 u8 rx_unicast[IWL_MIC_KEY_SIZE]; 471 u8 rx_mcast[IWL_MIC_KEY_SIZE]; 472 } __packed; /* MIC_KEYS_API_S_VER_1 */ 473 474 #define IWL_P1K_SIZE 5 475 struct iwl_p1k_cache { 476 __le16 p1k[IWL_P1K_SIZE]; 477 } __packed; 478 479 #define IWL_NUM_RX_P1K_CACHE 2 480 481 struct iwl_wowlan_tkip_params_cmd_ver_1 { 482 struct iwl_mic_keys mic_keys; 483 struct iwl_p1k_cache tx; 484 struct iwl_p1k_cache rx_uni[IWL_NUM_RX_P1K_CACHE]; 485 struct iwl_p1k_cache rx_multi[IWL_NUM_RX_P1K_CACHE]; 486 } __packed; /* WOWLAN_TKIP_SETTING_API_S_VER_1 */ 487 488 struct iwl_wowlan_tkip_params_cmd { 489 struct iwl_mic_keys mic_keys; 490 struct iwl_p1k_cache tx; 491 struct iwl_p1k_cache rx_uni[IWL_NUM_RX_P1K_CACHE]; 492 struct iwl_p1k_cache rx_multi[IWL_NUM_RX_P1K_CACHE]; 493 u8 reversed[2]; 494 __le32 sta_id; 495 } __packed; /* WOWLAN_TKIP_SETTING_API_S_VER_2 */ 496 497 #define IWL_KCK_MAX_SIZE 32 498 #define IWL_KEK_MAX_SIZE 32 499 500 struct iwl_wowlan_kek_kck_material_cmd_v2 { 501 u8 kck[IWL_KCK_MAX_SIZE]; 502 u8 kek[IWL_KEK_MAX_SIZE]; 503 __le16 kck_len; 504 __le16 kek_len; 505 __le64 replay_ctr; 506 } __packed; /* KEK_KCK_MATERIAL_API_S_VER_2 */ 507 508 struct iwl_wowlan_kek_kck_material_cmd_v3 { 509 u8 kck[IWL_KCK_MAX_SIZE]; 510 u8 kek[IWL_KEK_MAX_SIZE]; 511 __le16 kck_len; 512 __le16 kek_len; 513 __le64 replay_ctr; 514 __le32 akm; 515 __le32 gtk_cipher; 516 __le32 igtk_cipher; 517 __le32 bigtk_cipher; 518 } __packed; /* KEK_KCK_MATERIAL_API_S_VER_3 */ 519 520 struct iwl_wowlan_kek_kck_material_cmd_v4 { 521 __le32 sta_id; 522 u8 kck[IWL_KCK_MAX_SIZE]; 523 u8 kek[IWL_KEK_MAX_SIZE]; 524 __le16 kck_len; 525 __le16 kek_len; 526 __le64 replay_ctr; 527 __le32 akm; 528 __le32 gtk_cipher; 529 __le32 igtk_cipher; 530 __le32 bigtk_cipher; 531 } __packed; /* KEK_KCK_MATERIAL_API_S_VER_4 */ 532 533 struct iwl_wowlan_get_status_cmd { 534 __le32 sta_id; 535 } __packed; /* WOWLAN_GET_STATUSES_CMD_API_S_VER_1 */ 536 537 #define RF_KILL_INDICATOR_FOR_WOWLAN 0x87 538 539 enum iwl_wowlan_rekey_status { 540 IWL_WOWLAN_REKEY_POST_REKEY = 0, 541 IWL_WOWLAN_REKEY_WHILE_REKEY = 1, 542 }; /* WOWLAN_REKEY_STATUS_API_E_VER_1 */ 543 544 enum iwl_wowlan_wakeup_reason { 545 IWL_WOWLAN_WAKEUP_BY_NON_WIRELESS = 0, 546 IWL_WOWLAN_WAKEUP_BY_MAGIC_PACKET = BIT(0), 547 IWL_WOWLAN_WAKEUP_BY_PATTERN = BIT(1), 548 IWL_WOWLAN_WAKEUP_BY_DISCONNECTION_ON_MISSED_BEACON = BIT(2), 549 IWL_WOWLAN_WAKEUP_BY_DISCONNECTION_ON_DEAUTH = BIT(3), 550 IWL_WOWLAN_WAKEUP_BY_GTK_REKEY_FAILURE = BIT(4), 551 IWL_WOWLAN_WAKEUP_BY_RFKILL_DEASSERTED = BIT(5), 552 IWL_WOWLAN_WAKEUP_BY_UCODE_ERROR = BIT(6), 553 IWL_WOWLAN_WAKEUP_BY_EAPOL_REQUEST = BIT(7), 554 IWL_WOWLAN_WAKEUP_BY_FOUR_WAY_HANDSHAKE = BIT(8), 555 IWL_WOWLAN_WAKEUP_BY_REM_WAKE_LINK_LOSS = BIT(9), 556 IWL_WOWLAN_WAKEUP_BY_REM_WAKE_SIGNATURE_TABLE = BIT(10), 557 IWL_WOWLAN_WAKEUP_BY_REM_WAKE_TCP_EXTERNAL = BIT(11), 558 IWL_WOWLAN_WAKEUP_BY_REM_WAKE_WAKEUP_PACKET = BIT(12), 559 IWL_WOWLAN_WAKEUP_BY_IOAC_MAGIC_PACKET = BIT(13), 560 IWL_WOWLAN_WAKEUP_BY_D3_WAKEUP_HOST_TIMER = BIT(14), 561 IWL_WOWLAN_WAKEUP_BY_RXFRAME_FILTERED_IN = BIT(15), 562 IWL_WOWLAN_WAKEUP_BY_BEACON_FILTERED_IN = BIT(16), 563 IWL_WAKEUP_BY_11W_UNPROTECTED_DEAUTH_OR_DISASSOC = BIT(17), 564 IWL_WAKEUP_BY_PATTERN_IPV4_TCP_SYN = BIT(18), 565 IWL_WAKEUP_BY_PATTERN_IPV4_TCP_SYN_WILDCARD = BIT(19), 566 IWL_WAKEUP_BY_PATTERN_IPV6_TCP_SYN = BIT(20), 567 IWL_WAKEUP_BY_PATTERN_IPV6_TCP_SYN_WILDCARD = BIT(21), 568 }; /* WOWLAN_WAKE_UP_REASON_API_E_VER_2 */ 569 570 struct iwl_wowlan_gtk_status_v1 { 571 u8 key_index; 572 u8 reserved[3]; 573 u8 decrypt_key[16]; 574 u8 tkip_mic_key[8]; 575 struct iwl_wowlan_rsc_tsc_params_cmd_ver_2 rsc; 576 } __packed; /* WOWLAN_GTK_MATERIAL_VER_1 */ 577 578 /** 579 * struct iwl_wowlan_gtk_status_v2 - GTK status 580 * @key: GTK material 581 * @key_len: GTK legth, if set to 0, the key is not available 582 * @key_flags: information about the key: 583 * bits[0:1]: key index assigned by the AP 584 * bits[2:6]: GTK index of the key in the internal DB 585 * bit[7]: Set iff this is the currently used GTK 586 * @reserved: padding 587 * @tkip_mic_key: TKIP RX MIC key 588 * @rsc: TSC RSC counters 589 */ 590 struct iwl_wowlan_gtk_status_v2 { 591 u8 key[WOWLAN_KEY_MAX_SIZE]; 592 u8 key_len; 593 u8 key_flags; 594 u8 reserved[2]; 595 u8 tkip_mic_key[8]; 596 struct iwl_wowlan_rsc_tsc_params_cmd_ver_2 rsc; 597 } __packed; /* WOWLAN_GTK_MATERIAL_VER_2 */ 598 599 /** 600 * struct iwl_wowlan_all_rsc_tsc_v5 - key counters 601 * @ucast_rsc: unicast RSC values 602 * @mcast_rsc: multicast RSC values (per key map value) 603 * @sta_id: station ID 604 * @mcast_key_id_map: map of key id to @mcast_rsc entry 605 */ 606 struct iwl_wowlan_all_rsc_tsc_v5 { 607 __le64 ucast_rsc[IWL_MAX_TID_COUNT]; 608 __le64 mcast_rsc[2][IWL_MAX_TID_COUNT]; 609 __le32 sta_id; 610 u8 mcast_key_id_map[4]; 611 } __packed; /* ALL_TSC_RSC_API_S_VER_5 */ 612 613 /** 614 * struct iwl_wowlan_gtk_status_v3 - GTK status 615 * @key: GTK material 616 * @key_len: GTK length, if set to 0, the key is not available 617 * @key_flags: information about the key: 618 * bits[0:1]: key index assigned by the AP 619 * bits[2:6]: GTK index of the key in the internal DB 620 * bit[7]: Set iff this is the currently used GTK 621 * @reserved: padding 622 * @tkip_mic_key: TKIP RX MIC key 623 * @sc: RSC/TSC counters 624 */ 625 struct iwl_wowlan_gtk_status_v3 { 626 u8 key[WOWLAN_KEY_MAX_SIZE]; 627 u8 key_len; 628 u8 key_flags; 629 u8 reserved[2]; 630 u8 tkip_mic_key[IWL_MIC_KEY_SIZE]; 631 struct iwl_wowlan_all_rsc_tsc_v5 sc; 632 } __packed; /* WOWLAN_GTK_MATERIAL_VER_3 */ 633 634 #define IWL_WOWLAN_GTK_IDX_MASK (BIT(0) | BIT(1)) 635 #define IWL_WOWLAN_IGTK_BIGTK_IDX_MASK (BIT(0)) 636 637 /** 638 * struct iwl_wowlan_igtk_status - IGTK status 639 * @key: IGTK material 640 * @ipn: the IGTK packet number (replay counter) 641 * @key_len: IGTK length, if set to 0, the key is not available 642 * @key_flags: information about the key: 643 * bits[0]: key index assigned by the AP (0: index 4, 1: index 5) 644 * (0: index 6, 1: index 7 with bigtk) 645 * bits[1:5]: IGTK index of the key in the internal DB 646 * bit[6]: Set iff this is the currently used IGTK 647 */ 648 struct iwl_wowlan_igtk_status { 649 u8 key[WOWLAN_KEY_MAX_SIZE]; 650 u8 ipn[6]; 651 u8 key_len; 652 u8 key_flags; 653 } __packed; /* WOWLAN_IGTK_MATERIAL_VER_1 */ 654 655 /** 656 * struct iwl_wowlan_status_v6 - WoWLAN status 657 * @gtk: GTK data 658 * @replay_ctr: GTK rekey replay counter 659 * @pattern_number: number of the matched pattern 660 * @non_qos_seq_ctr: non-QoS sequence counter to use next 661 * @qos_seq_ctr: QoS sequence counters to use next 662 * @wakeup_reasons: wakeup reasons, see &enum iwl_wowlan_wakeup_reason 663 * @num_of_gtk_rekeys: number of GTK rekeys 664 * @transmitted_ndps: number of transmitted neighbor discovery packets 665 * @received_beacons: number of received beacons 666 * @wake_packet_length: wakeup packet length 667 * @wake_packet_bufsize: wakeup packet buffer size 668 * @wake_packet: wakeup packet 669 */ 670 struct iwl_wowlan_status_v6 { 671 struct iwl_wowlan_gtk_status_v1 gtk; 672 __le64 replay_ctr; 673 __le16 pattern_number; 674 __le16 non_qos_seq_ctr; 675 __le16 qos_seq_ctr[8]; 676 __le32 wakeup_reasons; 677 __le32 num_of_gtk_rekeys; 678 __le32 transmitted_ndps; 679 __le32 received_beacons; 680 __le32 wake_packet_length; 681 __le32 wake_packet_bufsize; 682 u8 wake_packet[]; /* can be truncated from _length to _bufsize */ 683 } __packed; /* WOWLAN_STATUSES_API_S_VER_6 */ 684 685 /** 686 * struct iwl_wowlan_status_v7 - WoWLAN status 687 * @gtk: GTK data 688 * @igtk: IGTK data 689 * @replay_ctr: GTK rekey replay counter 690 * @pattern_number: number of the matched pattern 691 * @non_qos_seq_ctr: non-QoS sequence counter to use next 692 * @qos_seq_ctr: QoS sequence counters to use next 693 * @wakeup_reasons: wakeup reasons, see &enum iwl_wowlan_wakeup_reason 694 * @num_of_gtk_rekeys: number of GTK rekeys 695 * @transmitted_ndps: number of transmitted neighbor discovery packets 696 * @received_beacons: number of received beacons 697 * @wake_packet_length: wakeup packet length 698 * @wake_packet_bufsize: wakeup packet buffer size 699 * @wake_packet: wakeup packet 700 */ 701 struct iwl_wowlan_status_v7 { 702 struct iwl_wowlan_gtk_status_v2 gtk[WOWLAN_GTK_KEYS_NUM]; 703 struct iwl_wowlan_igtk_status igtk[WOWLAN_IGTK_KEYS_NUM]; 704 __le64 replay_ctr; 705 __le16 pattern_number; 706 __le16 non_qos_seq_ctr; 707 __le16 qos_seq_ctr[8]; 708 __le32 wakeup_reasons; 709 __le32 num_of_gtk_rekeys; 710 __le32 transmitted_ndps; 711 __le32 received_beacons; 712 __le32 wake_packet_length; 713 __le32 wake_packet_bufsize; 714 u8 wake_packet[]; /* can be truncated from _length to _bufsize */ 715 } __packed; /* WOWLAN_STATUSES_API_S_VER_7 */ 716 717 /** 718 * struct iwl_wowlan_info_notif_v1 - WoWLAN information notification 719 * @gtk: GTK data 720 * @igtk: IGTK data 721 * @replay_ctr: GTK rekey replay counter 722 * @pattern_number: number of the matched patterns 723 * @reserved1: reserved 724 * @qos_seq_ctr: QoS sequence counters to use next 725 * @wakeup_reasons: wakeup reasons, see &enum iwl_wowlan_wakeup_reason 726 * @num_of_gtk_rekeys: number of GTK rekeys 727 * @transmitted_ndps: number of transmitted neighbor discovery packets 728 * @received_beacons: number of received beacons 729 * @wake_packet_length: wakeup packet length 730 * @wake_packet_bufsize: wakeup packet buffer size 731 * @tid_tear_down: bit mask of tids whose BA sessions were closed 732 * in suspend state 733 * @station_id: station id 734 * @reserved2: reserved 735 */ 736 struct iwl_wowlan_info_notif_v1 { 737 struct iwl_wowlan_gtk_status_v3 gtk[WOWLAN_GTK_KEYS_NUM]; 738 struct iwl_wowlan_igtk_status igtk[WOWLAN_IGTK_KEYS_NUM]; 739 __le64 replay_ctr; 740 __le16 pattern_number; 741 __le16 reserved1; 742 __le16 qos_seq_ctr[8]; 743 __le32 wakeup_reasons; 744 __le32 num_of_gtk_rekeys; 745 __le32 transmitted_ndps; 746 __le32 received_beacons; 747 __le32 wake_packet_length; 748 __le32 wake_packet_bufsize; 749 u8 tid_tear_down; 750 u8 station_id; 751 u8 reserved2[2]; 752 } __packed; /* WOWLAN_INFO_NTFY_API_S_VER_1 */ 753 754 /* MAX MLO keys of non-active links that can arrive in the notification */ 755 #define WOWLAN_MAX_MLO_KEYS 18 756 757 /** 758 * enum iwl_wowlan_mlo_gtk_type - GTK types 759 * @WOWLAN_MLO_GTK_KEY_TYPE_GTK: GTK 760 * @WOWLAN_MLO_GTK_KEY_TYPE_IGTK: IGTK 761 * @WOWLAN_MLO_GTK_KEY_TYPE_BIGTK: BIGTK 762 * @WOWLAN_MLO_GTK_KEY_NUM_TYPES: number of key types 763 */ 764 enum iwl_wowlan_mlo_gtk_type { 765 WOWLAN_MLO_GTK_KEY_TYPE_GTK, 766 WOWLAN_MLO_GTK_KEY_TYPE_IGTK, 767 WOWLAN_MLO_GTK_KEY_TYPE_BIGTK, 768 WOWLAN_MLO_GTK_KEY_NUM_TYPES 769 }; /* WOWLAN_MLO_GTK_KEY_TYPE_API_E_VER_1 */ 770 771 /** 772 * enum iwl_wowlan_mlo_gtk_flag - MLO GTK flags 773 * @WOWLAN_MLO_GTK_FLAG_KEY_LEN_MSK: 0 for len 16, 1 for len 32 774 * @WOWLAN_MLO_GTK_FLAG_KEY_ID_MSK: key id (ranges from 0 to 7) 775 * @WOWLAN_MLO_GTK_FLAG_LINK_ID_MSK: spec link id of the key 776 * @WOWLAN_MLO_GTK_FLAG_KEY_TYPE_MSK: &enum iwl_wowlan_mlo_gtk_type 777 * @WOWLAN_MLO_GTK_FLAG_LAST_KEY_MSK: is this the last given key per 778 * key-type / link-id - the currently used key 779 */ 780 enum iwl_wowlan_mlo_gtk_flag { 781 WOWLAN_MLO_GTK_FLAG_KEY_LEN_MSK = 0x0001, 782 WOWLAN_MLO_GTK_FLAG_KEY_ID_MSK = 0x000E, 783 WOWLAN_MLO_GTK_FLAG_LINK_ID_MSK = 0x00F0, 784 WOWLAN_MLO_GTK_FLAG_KEY_TYPE_MSK = 0x0300, 785 WOWLAN_MLO_GTK_FLAG_LAST_KEY_MSK = 0x0400 786 }; /* WOWLAN_MLO_GTK_FLAG_API_E_VER_1 */ 787 788 /** 789 * struct iwl_wowlan_mlo_gtk - MLO GTK info 790 * @key: key material 791 * @flags: &enum iwl_wowlan_mlo_gtk_flag 792 * @pn: packet number 793 */ 794 struct iwl_wowlan_mlo_gtk { 795 u8 key[WOWLAN_KEY_MAX_SIZE]; 796 __le16 flags; 797 u8 pn[6]; 798 } __packed; /* WOWLAN_MLO_GTK_KEY_API_S_VER_1 */ 799 800 /** 801 * struct iwl_wowlan_info_notif_v3 - WoWLAN information notification 802 * @gtk: GTK data 803 * @igtk: IGTK data 804 * @bigtk: BIGTK data 805 * @replay_ctr: GTK rekey replay counter 806 * @pattern_number: number of the matched patterns 807 * @reserved1: reserved 808 * @qos_seq_ctr: QoS sequence counters to use next 809 * @wakeup_reasons: wakeup reasons, see &enum iwl_wowlan_wakeup_reason 810 * @num_of_gtk_rekeys: number of GTK rekeys 811 * @transmitted_ndps: number of transmitted neighbor discovery packets 812 * @received_beacons: number of received beacons 813 * @tid_tear_down: bit mask of tids whose BA sessions were closed 814 * in suspend state 815 * @station_id: station id 816 * @reserved2: reserved 817 */ 818 struct iwl_wowlan_info_notif_v3 { 819 struct iwl_wowlan_gtk_status_v3 gtk[WOWLAN_GTK_KEYS_NUM]; 820 struct iwl_wowlan_igtk_status igtk[WOWLAN_IGTK_KEYS_NUM]; 821 struct iwl_wowlan_igtk_status bigtk[WOWLAN_BIGTK_KEYS_NUM]; 822 __le64 replay_ctr; 823 __le16 pattern_number; 824 __le16 reserved1; 825 __le16 qos_seq_ctr[8]; 826 __le32 wakeup_reasons; 827 __le32 num_of_gtk_rekeys; 828 __le32 transmitted_ndps; 829 __le32 received_beacons; 830 u8 tid_tear_down; 831 u8 station_id; 832 u8 reserved2[2]; 833 } __packed; /* WOWLAN_INFO_NTFY_API_S_VER_3 */ 834 835 /** 836 * struct iwl_wowlan_info_notif - WoWLAN information notification 837 * @gtk: GTK data 838 * @igtk: IGTK data 839 * @bigtk: BIGTK data 840 * @replay_ctr: GTK rekey replay counter 841 * @pattern_number: number of the matched patterns 842 * @qos_seq_ctr: QoS sequence counters to use next 843 * @wakeup_reasons: wakeup reasons, see &enum iwl_wowlan_wakeup_reason 844 * @num_of_gtk_rekeys: number of GTK rekeys 845 * @transmitted_ndps: number of transmitted neighbor discovery packets 846 * @received_beacons: number of received beacons 847 * @tid_tear_down: bit mask of tids whose BA sessions were closed 848 * in suspend state 849 * @station_id: station id 850 * @num_mlo_link_keys: number of &struct iwl_wowlan_mlo_gtk structs 851 * following this notif 852 * @tid_offloaded_tx: tid used by the firmware to transmit data packets 853 * while in wowlan 854 * @mlo_gtks: array of GTKs of size num_mlo_link_keys 855 */ 856 struct iwl_wowlan_info_notif { 857 struct iwl_wowlan_gtk_status_v3 gtk[WOWLAN_GTK_KEYS_NUM]; 858 struct iwl_wowlan_igtk_status igtk[WOWLAN_IGTK_KEYS_NUM]; 859 struct iwl_wowlan_igtk_status bigtk[WOWLAN_BIGTK_KEYS_NUM]; 860 __le64 replay_ctr; 861 __le16 pattern_number; 862 __le16 qos_seq_ctr; 863 __le32 wakeup_reasons; 864 __le32 num_of_gtk_rekeys; 865 __le32 transmitted_ndps; 866 __le32 received_beacons; 867 u8 tid_tear_down; 868 u8 station_id; 869 u8 num_mlo_link_keys; 870 u8 tid_offloaded_tx; 871 struct iwl_wowlan_mlo_gtk mlo_gtks[]; 872 } __packed; /* WOWLAN_INFO_NTFY_API_S_VER_5 */ 873 874 /** 875 * struct iwl_wowlan_wake_pkt_notif - WoWLAN wake packet notification 876 * @wake_packet_length: wakeup packet length 877 * @station_id: station id 878 * @reserved: unused 879 * @wake_packet: wakeup packet 880 */ 881 struct iwl_wowlan_wake_pkt_notif { 882 __le32 wake_packet_length; 883 u8 station_id; 884 u8 reserved[3]; 885 u8 wake_packet[1]; 886 } __packed; /* WOWLAN_WAKE_PKT_NTFY_API_S_VER_1 */ 887 888 /** 889 * struct iwl_mvm_d3_end_notif - d3 end notification 890 * @flags: See &enum iwl_d0i3_flags 891 */ 892 struct iwl_d3_end_notif { 893 __le32 flags; 894 } __packed; 895 896 /* TODO: NetDetect API */ 897 898 #endif /* __iwl_fw_api_d3_h__ */ 899