957 lines · c
1/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */2/*3 * Copyright (C) 2012-2014, 2018-2024 Intel Corporation4 * Copyright (C) 2013-2014 Intel Mobile Communications GmbH5 * Copyright (C) 2015-2017 Intel Deutschland GmbH6 */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 flags13 * @IWL_D0I3_RESET_REQUIRE: FW require reset upon resume14 */15enum iwl_d0i3_flags {16 IWL_D0I3_RESET_REQUIRE = BIT(0),17};18 19/**20 * enum iwl_d3_wakeup_flags - D3 manager wakeup flags21 * @IWL_WAKEUP_D3_CONFIG_FW_ERROR: wake up on firmware sysassert22 */23enum iwl_d3_wakeup_flags {24 IWL_WAKEUP_D3_CONFIG_FW_ERROR = BIT(0),25}; /* D3_MANAGER_WAKEUP_CONFIG_API_E_VER_3 */26 27/**28 * struct iwl_d3_manager_config - D3 manager configuration command29 * @min_sleep_time: minimum sleep time (in usec)30 * @wakeup_flags: wakeup flags, see &enum iwl_d3_wakeup_flags31 * @wakeup_host_timer: force wakeup after this many seconds32 *33 * The structure is used for the D3_CONFIG_CMD command.34 */35struct iwl_d3_manager_config {36 __le32 min_sleep_time;37 __le32 wakeup_flags;38 __le32 wakeup_host_timer;39} __packed; /* D3_MANAGER_CONFIG_CMD_S_VER_4 */40 41 42/* TODO: OFFLOADS_QUERY_API_S_VER_1 */43 44/**45 * enum iwl_proto_offloads - enabled protocol offloads46 * @IWL_D3_PROTO_OFFLOAD_ARP: ARP data is enabled47 * @IWL_D3_PROTO_OFFLOAD_NS: NS (Neighbor Solicitation) is enabled48 * @IWL_D3_PROTO_IPV4_VALID: IPv4 data is valid49 * @IWL_D3_PROTO_IPV6_VALID: IPv6 data is valid50 * @IWL_D3_PROTO_OFFLOAD_BTM: BTM offload is enabled51 */52enum iwl_proto_offloads {53 IWL_D3_PROTO_OFFLOAD_ARP = BIT(0),54 IWL_D3_PROTO_OFFLOAD_NS = BIT(1),55 IWL_D3_PROTO_IPV4_VALID = BIT(2),56 IWL_D3_PROTO_IPV6_VALID = BIT(3),57 IWL_D3_PROTO_OFFLOAD_BTM = BIT(4),58};59 60#define IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V1 261#define IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V2 662#define IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V3L 1263#define IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V3S 464#define IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_MAX 1265 66#define IWL_PROTO_OFFLOAD_NUM_NS_CONFIG_V3L 467#define IWL_PROTO_OFFLOAD_NUM_NS_CONFIG_V3S 268 69/**70 * struct iwl_proto_offload_cmd_common - ARP/NS offload common part71 * @enabled: enable flags72 * @remote_ipv4_addr: remote address to answer to (or zero if all)73 * @host_ipv4_addr: our IPv4 address to respond to queries for74 * @arp_mac_addr: our MAC address for ARP responses75 * @reserved: unused76 */77struct iwl_proto_offload_cmd_common {78 __le32 enabled;79 __be32 remote_ipv4_addr;80 __be32 host_ipv4_addr;81 u8 arp_mac_addr[ETH_ALEN];82 __le16 reserved;83} __packed;84 85/**86 * struct iwl_proto_offload_cmd_v1 - ARP/NS offload configuration87 * @common: common/IPv4 configuration88 * @remote_ipv6_addr: remote address to answer to (or zero if all)89 * @solicited_node_ipv6_addr: broken -- solicited node address exists90 * for each target address91 * @target_ipv6_addr: our target addresses92 * @ndp_mac_addr: neighbor solicitation response MAC address93 * @reserved2: reserved94 */95struct iwl_proto_offload_cmd_v1 {96 struct iwl_proto_offload_cmd_common common;97 u8 remote_ipv6_addr[16];98 u8 solicited_node_ipv6_addr[16];99 u8 target_ipv6_addr[IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V1][16];100 u8 ndp_mac_addr[ETH_ALEN];101 __le16 reserved2;102} __packed; /* PROT_OFFLOAD_CONFIG_CMD_DB_S_VER_1 */103 104/**105 * struct iwl_proto_offload_cmd_v2 - ARP/NS offload configuration106 * @common: common/IPv4 configuration107 * @remote_ipv6_addr: remote address to answer to (or zero if all)108 * @solicited_node_ipv6_addr: broken -- solicited node address exists109 * for each target address110 * @target_ipv6_addr: our target addresses111 * @ndp_mac_addr: neighbor solicitation response MAC address112 * @num_valid_ipv6_addrs: number of valid IPv6 addresses113 * @reserved2: reserved114 */115struct iwl_proto_offload_cmd_v2 {116 struct iwl_proto_offload_cmd_common common;117 u8 remote_ipv6_addr[16];118 u8 solicited_node_ipv6_addr[16];119 u8 target_ipv6_addr[IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V2][16];120 u8 ndp_mac_addr[ETH_ALEN];121 u8 num_valid_ipv6_addrs;122 u8 reserved2[3];123} __packed; /* PROT_OFFLOAD_CONFIG_CMD_DB_S_VER_2 */124 125struct iwl_ns_config {126 struct in6_addr source_ipv6_addr;127 struct in6_addr dest_ipv6_addr;128 u8 target_mac_addr[ETH_ALEN];129 __le16 reserved;130} __packed; /* NS_OFFLOAD_CONFIG */131 132struct iwl_targ_addr {133 struct in6_addr addr;134 __le32 config_num;135} __packed; /* TARGET_IPV6_ADDRESS */136 137/**138 * struct iwl_proto_offload_cmd_v3_small - ARP/NS offload configuration139 * @common: common/IPv4 configuration140 * @num_valid_ipv6_addrs: number of valid IPv6 addresses141 * @targ_addrs: target IPv6 addresses142 * @ns_config: NS offload configurations143 */144struct iwl_proto_offload_cmd_v3_small {145 struct iwl_proto_offload_cmd_common common;146 __le32 num_valid_ipv6_addrs;147 struct iwl_targ_addr targ_addrs[IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V3S];148 struct iwl_ns_config ns_config[IWL_PROTO_OFFLOAD_NUM_NS_CONFIG_V3S];149} __packed; /* PROT_OFFLOAD_CONFIG_CMD_DB_S_VER_3 */150 151/**152 * struct iwl_proto_offload_cmd_v3_large - ARP/NS offload configuration153 * @common: common/IPv4 configuration154 * @num_valid_ipv6_addrs: number of valid IPv6 addresses155 * @targ_addrs: target IPv6 addresses156 * @ns_config: NS offload configurations157 */158struct iwl_proto_offload_cmd_v3_large {159 struct iwl_proto_offload_cmd_common common;160 __le32 num_valid_ipv6_addrs;161 struct iwl_targ_addr targ_addrs[IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V3L];162 struct iwl_ns_config ns_config[IWL_PROTO_OFFLOAD_NUM_NS_CONFIG_V3L];163} __packed; /* PROT_OFFLOAD_CONFIG_CMD_DB_S_VER_3 */164 165/**166 * struct iwl_proto_offload_cmd_v4 - ARP/NS offload configuration167 * @sta_id: station id168 * @common: common/IPv4 configuration169 * @num_valid_ipv6_addrs: number of valid IPv6 addresses170 * @targ_addrs: target IPv6 addresses171 * @ns_config: NS offload configurations172 */173struct iwl_proto_offload_cmd_v4 {174 __le32 sta_id;175 struct iwl_proto_offload_cmd_common common;176 __le32 num_valid_ipv6_addrs;177 struct iwl_targ_addr targ_addrs[IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V3L];178 struct iwl_ns_config ns_config[IWL_PROTO_OFFLOAD_NUM_NS_CONFIG_V3L];179} __packed; /* PROT_OFFLOAD_CONFIG_CMD_DB_S_VER_4 */180 181/*182 * WOWLAN_PATTERNS183 */184#define IWL_WOWLAN_MIN_PATTERN_LEN 16185#define IWL_WOWLAN_MAX_PATTERN_LEN 128186 187struct iwl_wowlan_pattern_v1 {188 u8 mask[IWL_WOWLAN_MAX_PATTERN_LEN / 8];189 u8 pattern[IWL_WOWLAN_MAX_PATTERN_LEN];190 u8 mask_size;191 u8 pattern_size;192 __le16 reserved;193} __packed; /* WOWLAN_PATTERN_API_S_VER_1 */194 195#define IWL_WOWLAN_MAX_PATTERNS 20196 197/**198 * struct iwl_wowlan_patterns_cmd_v1 - WoWLAN wakeup patterns199 */200struct iwl_wowlan_patterns_cmd_v1 {201 /**202 * @n_patterns: number of patterns203 */204 __le32 n_patterns;205 206 /**207 * @patterns: the patterns, array length in @n_patterns208 */209 struct iwl_wowlan_pattern_v1 patterns[];210} __packed; /* WOWLAN_PATTERN_ARRAY_API_S_VER_1 */211 212#define IPV4_ADDR_SIZE 4213#define IPV6_ADDR_SIZE 16214 215enum iwl_wowlan_pattern_type {216 WOWLAN_PATTERN_TYPE_BITMASK,217 WOWLAN_PATTERN_TYPE_IPV4_TCP_SYN,218 WOWLAN_PATTERN_TYPE_IPV6_TCP_SYN,219 WOWLAN_PATTERN_TYPE_IPV4_TCP_SYN_WILDCARD,220 WOWLAN_PATTERN_TYPE_IPV6_TCP_SYN_WILDCARD,221}; /* WOWLAN_PATTERN_TYPE_API_E_VER_1 */222 223/**224 * struct iwl_wowlan_ipv4_tcp_syn - WoWLAN IPv4 TCP SYN pattern data225 */226struct iwl_wowlan_ipv4_tcp_syn {227 /**228 * @src_addr: source IP address to match229 */230 u8 src_addr[IPV4_ADDR_SIZE];231 232 /**233 * @dst_addr: destination IP address to match234 */235 u8 dst_addr[IPV4_ADDR_SIZE];236 237 /**238 * @src_port: source TCP port to match239 */240 __le16 src_port;241 242 /**243 * @dst_port: destination TCP port to match244 */245 __le16 dst_port;246} __packed; /* WOWLAN_IPV4_TCP_SYN_API_S_VER_1 */247 248/**249 * struct iwl_wowlan_ipv6_tcp_syn - WoWLAN Ipv6 TCP SYN pattern data250 */251struct iwl_wowlan_ipv6_tcp_syn {252 /**253 * @src_addr: source IP address to match254 */255 u8 src_addr[IPV6_ADDR_SIZE];256 257 /**258 * @dst_addr: destination IP address to match259 */260 u8 dst_addr[IPV6_ADDR_SIZE];261 262 /**263 * @src_port: source TCP port to match264 */265 __le16 src_port;266 267 /**268 * @dst_port: destination TCP port to match269 */270 __le16 dst_port;271} __packed; /* WOWLAN_IPV6_TCP_SYN_API_S_VER_1 */272 273/**274 * union iwl_wowlan_pattern_data - Data for the different pattern types275 *276 * If wildcard addresses/ports are to be used, the union can be left277 * undefined.278 */279union iwl_wowlan_pattern_data {280 /**281 * @bitmask: bitmask pattern data282 */283 struct iwl_wowlan_pattern_v1 bitmask;284 285 /**286 * @ipv4_tcp_syn: IPv4 TCP SYN pattern data287 */288 struct iwl_wowlan_ipv4_tcp_syn ipv4_tcp_syn;289 290 /**291 * @ipv6_tcp_syn: IPv6 TCP SYN pattern data292 */293 struct iwl_wowlan_ipv6_tcp_syn ipv6_tcp_syn;294}; /* WOWLAN_PATTERN_API_U_VER_1 */295 296/**297 * struct iwl_wowlan_pattern_v2 - Pattern entry for the WoWLAN wakeup patterns298 */299struct iwl_wowlan_pattern_v2 {300 /**301 * @pattern_type: defines the struct type to be used in the union302 */303 u8 pattern_type;304 305 /**306 * @reserved: reserved for alignment307 */308 u8 reserved[3];309 310 /**311 * @u: the union containing the match data, or undefined for312 * wildcard matches313 */314 union iwl_wowlan_pattern_data u;315} __packed; /* WOWLAN_PATTERN_API_S_VER_2 */316 317/**318 * struct iwl_wowlan_patterns_cmd - WoWLAN wakeup patterns command319 */320struct iwl_wowlan_patterns_cmd {321 /**322 * @n_patterns: number of patterns323 */324 u8 n_patterns;325 326 /**327 * @sta_id: sta_id328 */329 u8 sta_id;330 331 /**332 * @reserved: reserved for alignment333 */334 __le16 reserved;335 336 /**337 * @patterns: the patterns, array length in @n_patterns338 */339 struct iwl_wowlan_pattern_v2 patterns[];340} __packed; /* WOWLAN_PATTERN_ARRAY_API_S_VER_3 */341 342enum iwl_wowlan_wakeup_filters {343 IWL_WOWLAN_WAKEUP_MAGIC_PACKET = BIT(0),344 IWL_WOWLAN_WAKEUP_PATTERN_MATCH = BIT(1),345 IWL_WOWLAN_WAKEUP_BEACON_MISS = BIT(2),346 IWL_WOWLAN_WAKEUP_LINK_CHANGE = BIT(3),347 IWL_WOWLAN_WAKEUP_GTK_REKEY_FAIL = BIT(4),348 IWL_WOWLAN_WAKEUP_EAP_IDENT_REQ = BIT(5),349 IWL_WOWLAN_WAKEUP_4WAY_HANDSHAKE = BIT(6),350 IWL_WOWLAN_WAKEUP_ENABLE_NET_DETECT = BIT(7),351 IWL_WOWLAN_WAKEUP_RF_KILL_DEASSERT = BIT(8),352 IWL_WOWLAN_WAKEUP_REMOTE_LINK_LOSS = BIT(9),353 IWL_WOWLAN_WAKEUP_REMOTE_SIGNATURE_TABLE = BIT(10),354 IWL_WOWLAN_WAKEUP_REMOTE_TCP_EXTERNAL = BIT(11),355 IWL_WOWLAN_WAKEUP_REMOTE_WAKEUP_PACKET = BIT(12),356 IWL_WOWLAN_WAKEUP_IOAC_MAGIC_PACKET = BIT(13),357 IWL_WOWLAN_WAKEUP_HOST_TIMER = BIT(14),358 IWL_WOWLAN_WAKEUP_RX_FRAME = BIT(15),359 IWL_WOWLAN_WAKEUP_BCN_FILTERING = BIT(16),360}; /* WOWLAN_WAKEUP_FILTER_API_E_VER_4 */361 362enum iwl_wowlan_flags {363 IS_11W_ASSOC = BIT(0),364 ENABLE_L3_FILTERING = BIT(1),365 ENABLE_NBNS_FILTERING = BIT(2),366 ENABLE_DHCP_FILTERING = BIT(3),367 ENABLE_STORE_BEACON = BIT(4),368};369 370/**371 * struct iwl_wowlan_config_cmd - WoWLAN configuration (versions 5 and 6)372 * @wakeup_filter: filter from &enum iwl_wowlan_wakeup_filters373 * @non_qos_seq: non-QoS sequence counter to use next.374 * Reserved if the struct has version >= 6.375 * @qos_seq: QoS sequence counters to use next376 * @wowlan_ba_teardown_tids: bitmap of BA sessions to tear down377 * @is_11n_connection: indicates HT connection378 * @offloading_tid: TID reserved for firmware use379 * @flags: extra flags, see &enum iwl_wowlan_flags380 * @sta_id: station ID for wowlan.381 * @reserved: reserved382 */383struct iwl_wowlan_config_cmd {384 __le32 wakeup_filter;385 __le16 non_qos_seq;386 __le16 qos_seq[8];387 u8 wowlan_ba_teardown_tids;388 u8 is_11n_connection;389 u8 offloading_tid;390 u8 flags;391 u8 sta_id;392 u8 reserved;393} __packed; /* WOWLAN_CONFIG_API_S_VER_5 */394 395#define IWL_NUM_RSC 16396#define WOWLAN_KEY_MAX_SIZE 32397#define WOWLAN_GTK_KEYS_NUM 2398#define WOWLAN_IGTK_KEYS_NUM 2399#define WOWLAN_IGTK_MIN_INDEX 4400#define WOWLAN_BIGTK_KEYS_NUM 2401#define WOWLAN_BIGTK_MIN_INDEX 6402 403/*404 * WOWLAN_TSC_RSC_PARAMS405 */406struct tkip_sc {407 __le16 iv16;408 __le16 pad;409 __le32 iv32;410} __packed; /* TKIP_SC_API_U_VER_1 */411 412struct iwl_tkip_rsc_tsc {413 struct tkip_sc unicast_rsc[IWL_NUM_RSC];414 struct tkip_sc multicast_rsc[IWL_NUM_RSC];415 struct tkip_sc tsc;416} __packed; /* TKIP_TSC_RSC_API_S_VER_1 */417 418struct aes_sc {419 __le64 pn;420} __packed; /* TKIP_AES_SC_API_U_VER_1 */421 422struct iwl_aes_rsc_tsc {423 struct aes_sc unicast_rsc[IWL_NUM_RSC];424 struct aes_sc multicast_rsc[IWL_NUM_RSC];425 struct aes_sc tsc;426} __packed; /* AES_TSC_RSC_API_S_VER_1 */427 428union iwl_all_tsc_rsc {429 struct iwl_tkip_rsc_tsc tkip;430 struct iwl_aes_rsc_tsc aes;431}; /* ALL_TSC_RSC_API_S_VER_2 */432 433struct iwl_wowlan_rsc_tsc_params_cmd_ver_2 {434 union iwl_all_tsc_rsc all_tsc_rsc;435} __packed; /* ALL_TSC_RSC_API_S_VER_2 */436 437struct iwl_wowlan_rsc_tsc_params_cmd_v4 {438 struct iwl_wowlan_rsc_tsc_params_cmd_ver_2 params;439 __le32 sta_id;440} __packed; /* ALL_TSC_RSC_API_S_VER_4 */441 442struct iwl_wowlan_rsc_tsc_params_cmd {443 __le64 ucast_rsc[IWL_MAX_TID_COUNT];444 __le64 mcast_rsc[WOWLAN_GTK_KEYS_NUM][IWL_MAX_TID_COUNT];445 __le32 sta_id;446#define IWL_MCAST_KEY_MAP_INVALID 0xff447 u8 mcast_key_id_map[4];448} __packed; /* ALL_TSC_RSC_API_S_VER_5 */449 450#define IWL_MIC_KEY_SIZE 8451struct iwl_mic_keys {452 u8 tx[IWL_MIC_KEY_SIZE];453 u8 rx_unicast[IWL_MIC_KEY_SIZE];454 u8 rx_mcast[IWL_MIC_KEY_SIZE];455} __packed; /* MIC_KEYS_API_S_VER_1 */456 457#define IWL_P1K_SIZE 5458struct iwl_p1k_cache {459 __le16 p1k[IWL_P1K_SIZE];460} __packed;461 462#define IWL_NUM_RX_P1K_CACHE 2463 464struct iwl_wowlan_tkip_params_cmd_ver_1 {465 struct iwl_mic_keys mic_keys;466 struct iwl_p1k_cache tx;467 struct iwl_p1k_cache rx_uni[IWL_NUM_RX_P1K_CACHE];468 struct iwl_p1k_cache rx_multi[IWL_NUM_RX_P1K_CACHE];469} __packed; /* WOWLAN_TKIP_SETTING_API_S_VER_1 */470 471struct iwl_wowlan_tkip_params_cmd {472 struct iwl_mic_keys mic_keys;473 struct iwl_p1k_cache tx;474 struct iwl_p1k_cache rx_uni[IWL_NUM_RX_P1K_CACHE];475 struct iwl_p1k_cache rx_multi[IWL_NUM_RX_P1K_CACHE];476 u8 reversed[2];477 __le32 sta_id;478} __packed; /* WOWLAN_TKIP_SETTING_API_S_VER_2 */479 480#define IWL_KCK_MAX_SIZE 32481#define IWL_KEK_MAX_SIZE 32482 483struct iwl_wowlan_kek_kck_material_cmd_v2 {484 u8 kck[IWL_KCK_MAX_SIZE];485 u8 kek[IWL_KEK_MAX_SIZE];486 __le16 kck_len;487 __le16 kek_len;488 __le64 replay_ctr;489} __packed; /* KEK_KCK_MATERIAL_API_S_VER_2 */490 491struct iwl_wowlan_kek_kck_material_cmd_v3 {492 u8 kck[IWL_KCK_MAX_SIZE];493 u8 kek[IWL_KEK_MAX_SIZE];494 __le16 kck_len;495 __le16 kek_len;496 __le64 replay_ctr;497 __le32 akm;498 __le32 gtk_cipher;499 __le32 igtk_cipher;500 __le32 bigtk_cipher;501} __packed; /* KEK_KCK_MATERIAL_API_S_VER_3 */502 503struct iwl_wowlan_kek_kck_material_cmd_v4 {504 __le32 sta_id;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_4 */515 516struct iwl_wowlan_get_status_cmd {517 __le32 sta_id;518} __packed; /* WOWLAN_GET_STATUSES_CMD_API_S_VER_1 */519 520#define RF_KILL_INDICATOR_FOR_WOWLAN 0x87521 522enum iwl_wowlan_rekey_status {523 IWL_WOWLAN_REKEY_POST_REKEY = 0,524 IWL_WOWLAN_REKEY_WHILE_REKEY = 1,525}; /* WOWLAN_REKEY_STATUS_API_E_VER_1 */526 527enum iwl_wowlan_wakeup_reason {528 IWL_WOWLAN_WAKEUP_BY_NON_WIRELESS = 0,529 IWL_WOWLAN_WAKEUP_BY_MAGIC_PACKET = BIT(0),530 IWL_WOWLAN_WAKEUP_BY_PATTERN = BIT(1),531 IWL_WOWLAN_WAKEUP_BY_DISCONNECTION_ON_MISSED_BEACON = BIT(2),532 IWL_WOWLAN_WAKEUP_BY_DISCONNECTION_ON_DEAUTH = BIT(3),533 IWL_WOWLAN_WAKEUP_BY_GTK_REKEY_FAILURE = BIT(4),534 IWL_WOWLAN_WAKEUP_BY_RFKILL_DEASSERTED = BIT(5),535 IWL_WOWLAN_WAKEUP_BY_UCODE_ERROR = BIT(6),536 IWL_WOWLAN_WAKEUP_BY_EAPOL_REQUEST = BIT(7),537 IWL_WOWLAN_WAKEUP_BY_FOUR_WAY_HANDSHAKE = BIT(8),538 IWL_WOWLAN_WAKEUP_BY_REM_WAKE_LINK_LOSS = BIT(9),539 IWL_WOWLAN_WAKEUP_BY_REM_WAKE_SIGNATURE_TABLE = BIT(10),540 IWL_WOWLAN_WAKEUP_BY_REM_WAKE_TCP_EXTERNAL = BIT(11),541 IWL_WOWLAN_WAKEUP_BY_REM_WAKE_WAKEUP_PACKET = BIT(12),542 IWL_WOWLAN_WAKEUP_BY_IOAC_MAGIC_PACKET = BIT(13),543 IWL_WOWLAN_WAKEUP_BY_D3_WAKEUP_HOST_TIMER = BIT(14),544 IWL_WOWLAN_WAKEUP_BY_RXFRAME_FILTERED_IN = BIT(15),545 IWL_WOWLAN_WAKEUP_BY_BEACON_FILTERED_IN = BIT(16),546 IWL_WAKEUP_BY_11W_UNPROTECTED_DEAUTH_OR_DISASSOC = BIT(17),547 IWL_WAKEUP_BY_PATTERN_IPV4_TCP_SYN = BIT(18),548 IWL_WAKEUP_BY_PATTERN_IPV4_TCP_SYN_WILDCARD = BIT(19),549 IWL_WAKEUP_BY_PATTERN_IPV6_TCP_SYN = BIT(20),550 IWL_WAKEUP_BY_PATTERN_IPV6_TCP_SYN_WILDCARD = BIT(21),551}; /* WOWLAN_WAKE_UP_REASON_API_E_VER_2 */552 553struct iwl_wowlan_gtk_status_v1 {554 u8 key_index;555 u8 reserved[3];556 u8 decrypt_key[16];557 u8 tkip_mic_key[8];558 struct iwl_wowlan_rsc_tsc_params_cmd_ver_2 rsc;559} __packed; /* WOWLAN_GTK_MATERIAL_VER_1 */560 561/**562 * struct iwl_wowlan_gtk_status_v2 - GTK status563 * @key: GTK material564 * @key_len: GTK legth, if set to 0, the key is not available565 * @key_flags: information about the key:566 * bits[0:1]: key index assigned by the AP567 * bits[2:6]: GTK index of the key in the internal DB568 * bit[7]: Set iff this is the currently used GTK569 * @reserved: padding570 * @tkip_mic_key: TKIP RX MIC key571 * @rsc: TSC RSC counters572 */573struct iwl_wowlan_gtk_status_v2 {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/**583 * struct iwl_wowlan_all_rsc_tsc_v5 - key counters584 * @ucast_rsc: unicast RSC values585 * @mcast_rsc: multicast RSC values (per key map value)586 * @sta_id: station ID587 * @mcast_key_id_map: map of key id to @mcast_rsc entry588 */589struct iwl_wowlan_all_rsc_tsc_v5 {590 __le64 ucast_rsc[IWL_MAX_TID_COUNT];591 __le64 mcast_rsc[2][IWL_MAX_TID_COUNT];592 __le32 sta_id;593 u8 mcast_key_id_map[4];594} __packed; /* ALL_TSC_RSC_API_S_VER_5 */595 596/**597 * struct iwl_wowlan_gtk_status_v3 - GTK status598 * @key: GTK material599 * @key_len: GTK length, if set to 0, the key is not available600 * @key_flags: information about the key:601 * bits[0:1]: key index assigned by the AP602 * bits[2:6]: GTK index of the key in the internal DB603 * bit[7]: Set iff this is the currently used GTK604 * @reserved: padding605 * @tkip_mic_key: TKIP RX MIC key606 * @sc: RSC/TSC counters607 */608struct iwl_wowlan_gtk_status_v3 {609 u8 key[WOWLAN_KEY_MAX_SIZE];610 u8 key_len;611 u8 key_flags;612 u8 reserved[2];613 u8 tkip_mic_key[IWL_MIC_KEY_SIZE];614 struct iwl_wowlan_all_rsc_tsc_v5 sc;615} __packed; /* WOWLAN_GTK_MATERIAL_VER_3 */616 617#define IWL_WOWLAN_GTK_IDX_MASK (BIT(0) | BIT(1))618#define IWL_WOWLAN_IGTK_BIGTK_IDX_MASK (BIT(0))619 620/**621 * struct iwl_wowlan_igtk_status - IGTK status622 * @key: IGTK material623 * @ipn: the IGTK packet number (replay counter)624 * @key_len: IGTK length, if set to 0, the key is not available625 * @key_flags: information about the key:626 * bits[0]: key index assigned by the AP (0: index 4, 1: index 5)627 * (0: index 6, 1: index 7 with bigtk)628 * bits[1:5]: IGTK index of the key in the internal DB629 * bit[6]: Set iff this is the currently used IGTK630 */631struct iwl_wowlan_igtk_status {632 u8 key[WOWLAN_KEY_MAX_SIZE];633 u8 ipn[6];634 u8 key_len;635 u8 key_flags;636} __packed; /* WOWLAN_IGTK_MATERIAL_VER_1 */637 638/**639 * struct iwl_wowlan_status_v6 - WoWLAN status640 * @gtk: GTK data641 * @replay_ctr: GTK rekey replay counter642 * @pattern_number: number of the matched pattern643 * @non_qos_seq_ctr: non-QoS sequence counter to use next644 * @qos_seq_ctr: QoS sequence counters to use next645 * @wakeup_reasons: wakeup reasons, see &enum iwl_wowlan_wakeup_reason646 * @num_of_gtk_rekeys: number of GTK rekeys647 * @transmitted_ndps: number of transmitted neighbor discovery packets648 * @received_beacons: number of received beacons649 * @wake_packet_length: wakeup packet length650 * @wake_packet_bufsize: wakeup packet buffer size651 * @wake_packet: wakeup packet652 */653struct iwl_wowlan_status_v6 {654 struct iwl_wowlan_gtk_status_v1 gtk;655 __le64 replay_ctr;656 __le16 pattern_number;657 __le16 non_qos_seq_ctr;658 __le16 qos_seq_ctr[8];659 __le32 wakeup_reasons;660 __le32 num_of_gtk_rekeys;661 __le32 transmitted_ndps;662 __le32 received_beacons;663 __le32 wake_packet_length;664 __le32 wake_packet_bufsize;665 u8 wake_packet[]; /* can be truncated from _length to _bufsize */666} __packed; /* WOWLAN_STATUSES_API_S_VER_6 */667 668/**669 * struct iwl_wowlan_status_v7 - WoWLAN status670 * @gtk: GTK data671 * @igtk: IGTK data672 * @replay_ctr: GTK rekey replay counter673 * @pattern_number: number of the matched pattern674 * @non_qos_seq_ctr: non-QoS sequence counter to use next675 * @qos_seq_ctr: QoS sequence counters to use next676 * @wakeup_reasons: wakeup reasons, see &enum iwl_wowlan_wakeup_reason677 * @num_of_gtk_rekeys: number of GTK rekeys678 * @transmitted_ndps: number of transmitted neighbor discovery packets679 * @received_beacons: number of received beacons680 * @wake_packet_length: wakeup packet length681 * @wake_packet_bufsize: wakeup packet buffer size682 * @wake_packet: wakeup packet683 */684struct iwl_wowlan_status_v7 {685 struct iwl_wowlan_gtk_status_v2 gtk[WOWLAN_GTK_KEYS_NUM];686 struct iwl_wowlan_igtk_status igtk[WOWLAN_IGTK_KEYS_NUM];687 __le64 replay_ctr;688 __le16 pattern_number;689 __le16 non_qos_seq_ctr;690 __le16 qos_seq_ctr[8];691 __le32 wakeup_reasons;692 __le32 num_of_gtk_rekeys;693 __le32 transmitted_ndps;694 __le32 received_beacons;695 __le32 wake_packet_length;696 __le32 wake_packet_bufsize;697 u8 wake_packet[]; /* can be truncated from _length to _bufsize */698} __packed; /* WOWLAN_STATUSES_API_S_VER_7 */699 700/**701 * struct iwl_wowlan_status_v9 - WoWLAN status (versions 9 and 10)702 * @gtk: GTK data703 * @igtk: IGTK data704 * @replay_ctr: GTK rekey replay counter705 * @pattern_number: number of the matched pattern706 * @non_qos_seq_ctr: non-QoS sequence counter to use next.707 * Reserved if the struct has version >= 10.708 * @qos_seq_ctr: QoS sequence counters to use next709 * @wakeup_reasons: wakeup reasons, see &enum iwl_wowlan_wakeup_reason710 * @num_of_gtk_rekeys: number of GTK rekeys711 * @transmitted_ndps: number of transmitted neighbor discovery packets712 * @received_beacons: number of received beacons713 * @wake_packet_length: wakeup packet length714 * @wake_packet_bufsize: wakeup packet buffer size715 * @tid_tear_down: bit mask of tids whose BA sessions were closed716 * in suspend state717 * @reserved: unused718 * @wake_packet: wakeup packet719 */720struct iwl_wowlan_status_v9 {721 struct iwl_wowlan_gtk_status_v2 gtk[WOWLAN_GTK_KEYS_NUM];722 struct iwl_wowlan_igtk_status igtk[WOWLAN_IGTK_KEYS_NUM];723 __le64 replay_ctr;724 __le16 pattern_number;725 __le16 non_qos_seq_ctr;726 __le16 qos_seq_ctr[8];727 __le32 wakeup_reasons;728 __le32 num_of_gtk_rekeys;729 __le32 transmitted_ndps;730 __le32 received_beacons;731 __le32 wake_packet_length;732 __le32 wake_packet_bufsize;733 u8 tid_tear_down;734 u8 reserved[3];735 u8 wake_packet[]; /* can be truncated from _length to _bufsize */736} __packed; /* WOWLAN_STATUSES_RSP_API_S_VER_9 */737 738/**739 * struct iwl_wowlan_status_v12 - WoWLAN status740 * @gtk: GTK data741 * @igtk: IGTK data742 * @replay_ctr: GTK rekey replay counter743 * @pattern_number: number of the matched pattern744 * @non_qos_seq_ctr: non-QoS sequence counter to use next.745 * Reserved if the struct has version >= 10.746 * @qos_seq_ctr: QoS sequence counters to use next747 * @wakeup_reasons: wakeup reasons, see &enum iwl_wowlan_wakeup_reason748 * @num_of_gtk_rekeys: number of GTK rekeys749 * @transmitted_ndps: number of transmitted neighbor discovery packets750 * @received_beacons: number of received beacons751 * @wake_packet_length: wakeup packet length752 * @wake_packet_bufsize: wakeup packet buffer size753 * @tid_tear_down: bit mask of tids whose BA sessions were closed754 * in suspend state755 * @reserved: unused756 * @wake_packet: wakeup packet757 */758struct iwl_wowlan_status_v12 {759 struct iwl_wowlan_gtk_status_v3 gtk[WOWLAN_GTK_KEYS_NUM];760 struct iwl_wowlan_igtk_status igtk[WOWLAN_IGTK_KEYS_NUM];761 __le64 replay_ctr;762 __le16 pattern_number;763 __le16 non_qos_seq_ctr;764 __le16 qos_seq_ctr[8];765 __le32 wakeup_reasons;766 __le32 num_of_gtk_rekeys;767 __le32 transmitted_ndps;768 __le32 received_beacons;769 __le32 wake_packet_length;770 __le32 wake_packet_bufsize;771 u8 tid_tear_down;772 u8 reserved[3];773 u8 wake_packet[]; /* can be truncated from _length to _bufsize */774} __packed; /* WOWLAN_STATUSES_RSP_API_S_VER_12 */775 776/**777 * struct iwl_wowlan_info_notif_v1 - WoWLAN information notification778 * @gtk: GTK data779 * @igtk: IGTK data780 * @replay_ctr: GTK rekey replay counter781 * @pattern_number: number of the matched patterns782 * @reserved1: reserved783 * @qos_seq_ctr: QoS sequence counters to use next784 * @wakeup_reasons: wakeup reasons, see &enum iwl_wowlan_wakeup_reason785 * @num_of_gtk_rekeys: number of GTK rekeys786 * @transmitted_ndps: number of transmitted neighbor discovery packets787 * @received_beacons: number of received beacons788 * @wake_packet_length: wakeup packet length789 * @wake_packet_bufsize: wakeup packet buffer size790 * @tid_tear_down: bit mask of tids whose BA sessions were closed791 * in suspend state792 * @station_id: station id793 * @reserved2: reserved794 */795struct iwl_wowlan_info_notif_v1 {796 struct iwl_wowlan_gtk_status_v3 gtk[WOWLAN_GTK_KEYS_NUM];797 struct iwl_wowlan_igtk_status igtk[WOWLAN_IGTK_KEYS_NUM];798 __le64 replay_ctr;799 __le16 pattern_number;800 __le16 reserved1;801 __le16 qos_seq_ctr[8];802 __le32 wakeup_reasons;803 __le32 num_of_gtk_rekeys;804 __le32 transmitted_ndps;805 __le32 received_beacons;806 __le32 wake_packet_length;807 __le32 wake_packet_bufsize;808 u8 tid_tear_down;809 u8 station_id;810 u8 reserved2[2];811} __packed; /* WOWLAN_INFO_NTFY_API_S_VER_1 */812 813/**814 * struct iwl_wowlan_info_notif_v2 - WoWLAN information notification815 * @gtk: GTK data816 * @igtk: IGTK data817 * @replay_ctr: GTK rekey replay counter818 * @pattern_number: number of the matched patterns819 * @reserved1: reserved820 * @qos_seq_ctr: QoS sequence counters to use next821 * @wakeup_reasons: wakeup reasons, see &enum iwl_wowlan_wakeup_reason822 * @num_of_gtk_rekeys: number of GTK rekeys823 * @transmitted_ndps: number of transmitted neighbor discovery packets824 * @received_beacons: number of received beacons825 * @tid_tear_down: bit mask of tids whose BA sessions were closed826 * in suspend state827 * @station_id: station id828 * @reserved2: reserved829 */830struct iwl_wowlan_info_notif_v2 {831 struct iwl_wowlan_gtk_status_v3 gtk[WOWLAN_GTK_KEYS_NUM];832 struct iwl_wowlan_igtk_status igtk[WOWLAN_IGTK_KEYS_NUM];833 __le64 replay_ctr;834 __le16 pattern_number;835 __le16 reserved1;836 __le16 qos_seq_ctr[8];837 __le32 wakeup_reasons;838 __le32 num_of_gtk_rekeys;839 __le32 transmitted_ndps;840 __le32 received_beacons;841 u8 tid_tear_down;842 u8 station_id;843 u8 reserved2[2];844} __packed; /* WOWLAN_INFO_NTFY_API_S_VER_2 */845 846/* MAX MLO keys of non-active links that can arrive in the notification */847#define WOWLAN_MAX_MLO_KEYS 18848 849/**850 * enum iwl_wowlan_mlo_gtk_type - GTK types851 * @WOWLAN_MLO_GTK_KEY_TYPE_GTK: GTK852 * @WOWLAN_MLO_GTK_KEY_TYPE_IGTK: IGTK853 * @WOWLAN_MLO_GTK_KEY_TYPE_BIGTK: BIGTK854 * @WOWLAN_MLO_GTK_KEY_NUM_TYPES: number of key types855 */856enum iwl_wowlan_mlo_gtk_type {857 WOWLAN_MLO_GTK_KEY_TYPE_GTK,858 WOWLAN_MLO_GTK_KEY_TYPE_IGTK,859 WOWLAN_MLO_GTK_KEY_TYPE_BIGTK,860 WOWLAN_MLO_GTK_KEY_NUM_TYPES861}; /* WOWLAN_MLO_GTK_KEY_TYPE_API_E_VER_1 */862 863/**864 * enum iwl_wowlan_mlo_gtk_flag - MLO GTK flags865 * @WOWLAN_MLO_GTK_FLAG_KEY_LEN_MSK: 0 for len 16, 1 for len 32866 * @WOWLAN_MLO_GTK_FLAG_KEY_ID_MSK: key id (ranges from 0 to 7)867 * @WOWLAN_MLO_GTK_FLAG_LINK_ID_MSK: spec link id of the key868 * @WOWLAN_MLO_GTK_FLAG_KEY_TYPE_MSK: &enum iwl_wowlan_mlo_gtk_type869 * @WOWLAN_MLO_GTK_FLAG_LAST_KEY_MSK: is this the last given key per870 * key-type / link-id - the currently used key871 */872enum iwl_wowlan_mlo_gtk_flag {873 WOWLAN_MLO_GTK_FLAG_KEY_LEN_MSK = 0x0001,874 WOWLAN_MLO_GTK_FLAG_KEY_ID_MSK = 0x000E,875 WOWLAN_MLO_GTK_FLAG_LINK_ID_MSK = 0x00F0,876 WOWLAN_MLO_GTK_FLAG_KEY_TYPE_MSK = 0x0300,877 WOWLAN_MLO_GTK_FLAG_LAST_KEY_MSK = 0x0400878}; /* WOWLAN_MLO_GTK_FLAG_API_E_VER_1 */879 880/**881 * struct iwl_wowlan_mlo_gtk - MLO GTK info882 * @key: key material883 * @flags: &enum iwl_wowlan_mlo_gtk_flag884 * @pn: packet number885 */886struct iwl_wowlan_mlo_gtk {887 u8 key[WOWLAN_KEY_MAX_SIZE];888 __le16 flags;889 u8 pn[6];890} __packed; /* WOWLAN_MLO_GTK_KEY_API_S_VER_1 */891 892/**893 * struct iwl_wowlan_info_notif - WoWLAN information notification894 * @gtk: GTK data895 * @igtk: IGTK data896 * @bigtk: BIGTK data897 * @replay_ctr: GTK rekey replay counter898 * @pattern_number: number of the matched patterns899 * @reserved1: reserved900 * @qos_seq_ctr: QoS sequence counters to use next901 * @wakeup_reasons: wakeup reasons, see &enum iwl_wowlan_wakeup_reason902 * @num_of_gtk_rekeys: number of GTK rekeys903 * @transmitted_ndps: number of transmitted neighbor discovery packets904 * @received_beacons: number of received beacons905 * @tid_tear_down: bit mask of tids whose BA sessions were closed906 * in suspend state907 * @station_id: station id908 * @num_mlo_link_keys: number of &struct iwl_wowlan_mlo_gtk structs909 * following this notif, or reserved in version < 4910 * @reserved2: reserved911 * @mlo_gtks: array of GTKs of size num_mlo_link_keys for version >= 4912 */913struct iwl_wowlan_info_notif {914 struct iwl_wowlan_gtk_status_v3 gtk[WOWLAN_GTK_KEYS_NUM];915 struct iwl_wowlan_igtk_status igtk[WOWLAN_IGTK_KEYS_NUM];916 struct iwl_wowlan_igtk_status bigtk[WOWLAN_BIGTK_KEYS_NUM];917 __le64 replay_ctr;918 __le16 pattern_number;919 __le16 reserved1;920 __le16 qos_seq_ctr[8];921 __le32 wakeup_reasons;922 __le32 num_of_gtk_rekeys;923 __le32 transmitted_ndps;924 __le32 received_beacons;925 u8 tid_tear_down;926 u8 station_id;927 u8 num_mlo_link_keys;928 u8 reserved2;929 struct iwl_wowlan_mlo_gtk mlo_gtks[];930} __packed; /* WOWLAN_INFO_NTFY_API_S_VER_3, _VER_4 */931 932/**933 * struct iwl_wowlan_wake_pkt_notif - WoWLAN wake packet notification934 * @wake_packet_length: wakeup packet length935 * @station_id: station id936 * @reserved: unused937 * @wake_packet: wakeup packet938 */939struct iwl_wowlan_wake_pkt_notif {940 __le32 wake_packet_length;941 u8 station_id;942 u8 reserved[3];943 u8 wake_packet[1];944} __packed; /* WOWLAN_WAKE_PKT_NTFY_API_S_VER_1 */945 946/**947 * struct iwl_mvm_d3_end_notif - d3 end notification948 * @flags: See &enum iwl_d0i3_flags949 */950struct iwl_mvm_d3_end_notif {951 __le32 flags;952} __packed;953 954/* TODO: NetDetect API */955 956#endif /* __iwl_fw_api_d3_h__ */957