brintos

brintos / linux-shallow public Read only

0
0
Text · 28.8 KiB · ffee792 Raw
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