]>
Commit | Line | Data |
---|---|---|
8ca151b5 JB |
1 | /****************************************************************************** |
2 | * | |
3 | * This file is provided under a dual BSD/GPLv2 license. When using or | |
4 | * redistributing this file, you may do so under either license. | |
5 | * | |
6 | * GPL LICENSE SUMMARY | |
7 | * | |
51368bf7 | 8 | * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. |
8b4139dc | 9 | * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH |
816dc0bc | 10 | * Copyright(c) 2015 - 2017 Intel Deutschland GmbH |
0c546fb6 | 11 | * Copyright(c) 2018 - 2019 Intel Corporation |
8ca151b5 JB |
12 | * |
13 | * This program is free software; you can redistribute it and/or modify | |
14 | * it under the terms of version 2 of the GNU General Public License as | |
15 | * published by the Free Software Foundation. | |
16 | * | |
17 | * This program is distributed in the hope that it will be useful, but | |
18 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
20 | * General Public License for more details. | |
21 | * | |
8ca151b5 | 22 | * The full GNU General Public License is included in this distribution |
410dc5aa | 23 | * in the file called COPYING. |
8ca151b5 JB |
24 | * |
25 | * Contact Information: | |
d01c5366 | 26 | * Intel Linux Wireless <linuxwifi@intel.com> |
8ca151b5 JB |
27 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
28 | * | |
29 | * BSD LICENSE | |
30 | * | |
51368bf7 | 31 | * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. |
8b4139dc | 32 | * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH |
816dc0bc | 33 | * Copyright(c) 2015 - 2017 Intel Deutschland GmbH |
0c546fb6 | 34 | * Copyright(c) 2018 - 2019 Intel Corporation |
8ca151b5 JB |
35 | * All rights reserved. |
36 | * | |
37 | * Redistribution and use in source and binary forms, with or without | |
38 | * modification, are permitted provided that the following conditions | |
39 | * are met: | |
40 | * | |
41 | * * Redistributions of source code must retain the above copyright | |
42 | * notice, this list of conditions and the following disclaimer. | |
43 | * * Redistributions in binary form must reproduce the above copyright | |
44 | * notice, this list of conditions and the following disclaimer in | |
45 | * the documentation and/or other materials provided with the | |
46 | * distribution. | |
47 | * * Neither the name Intel Corporation nor the names of its | |
48 | * contributors may be used to endorse or promote products derived | |
49 | * from this software without specific prior written permission. | |
50 | * | |
51 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
52 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
53 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
54 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
55 | * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
56 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
57 | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
58 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
59 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
60 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
61 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
62 | *****************************************************************************/ | |
63 | ||
d172a5ef JB |
64 | #ifndef __iwl_fw_api_d3_h__ |
65 | #define __iwl_fw_api_d3_h__ | |
8ca151b5 | 66 | |
d3b4dc01 HD |
67 | /** |
68 | * enum iwl_d0i3_flags - d0i3 flags | |
69 | * @IWL_D0I3_RESET_REQUIRE: FW require reset upon resume | |
70 | */ | |
71 | enum iwl_d0i3_flags { | |
72 | IWL_D0I3_RESET_REQUIRE = BIT(0), | |
73 | }; | |
74 | ||
8ca151b5 JB |
75 | /** |
76 | * enum iwl_d3_wakeup_flags - D3 manager wakeup flags | |
77 | * @IWL_WAKEUP_D3_CONFIG_FW_ERROR: wake up on firmware sysassert | |
78 | */ | |
79 | enum iwl_d3_wakeup_flags { | |
80 | IWL_WAKEUP_D3_CONFIG_FW_ERROR = BIT(0), | |
81 | }; /* D3_MANAGER_WAKEUP_CONFIG_API_E_VER_3 */ | |
82 | ||
83 | /** | |
84 | * struct iwl_d3_manager_config - D3 manager configuration command | |
85 | * @min_sleep_time: minimum sleep time (in usec) | |
86 | * @wakeup_flags: wakeup flags, see &enum iwl_d3_wakeup_flags | |
dfcb4c3a | 87 | * @wakeup_host_timer: force wakeup after this many seconds |
8ca151b5 JB |
88 | * |
89 | * The structure is used for the D3_CONFIG_CMD command. | |
90 | */ | |
91 | struct iwl_d3_manager_config { | |
92 | __le32 min_sleep_time; | |
93 | __le32 wakeup_flags; | |
dfcb4c3a JB |
94 | __le32 wakeup_host_timer; |
95 | } __packed; /* D3_MANAGER_CONFIG_CMD_S_VER_4 */ | |
8ca151b5 JB |
96 | |
97 | ||
98 | /* TODO: OFFLOADS_QUERY_API_S_VER_1 */ | |
99 | ||
100 | /** | |
101 | * enum iwl_d3_proto_offloads - enabled protocol offloads | |
102 | * @IWL_D3_PROTO_OFFLOAD_ARP: ARP data is enabled | |
103 | * @IWL_D3_PROTO_OFFLOAD_NS: NS (Neighbor Solicitation) is enabled | |
c97dab40 SS |
104 | * @IWL_D3_PROTO_IPV4_VALID: IPv4 data is valid |
105 | * @IWL_D3_PROTO_IPV6_VALID: IPv6 data is valid | |
8ca151b5 JB |
106 | */ |
107 | enum iwl_proto_offloads { | |
108 | IWL_D3_PROTO_OFFLOAD_ARP = BIT(0), | |
109 | IWL_D3_PROTO_OFFLOAD_NS = BIT(1), | |
c97dab40 SS |
110 | IWL_D3_PROTO_IPV4_VALID = BIT(2), |
111 | IWL_D3_PROTO_IPV6_VALID = BIT(3), | |
8ca151b5 JB |
112 | }; |
113 | ||
5369d6c1 JB |
114 | #define IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V1 2 |
115 | #define IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V2 6 | |
f7fc5989 JB |
116 | #define IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V3L 12 |
117 | #define IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V3S 4 | |
118 | #define IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_MAX 12 | |
119 | ||
120 | #define IWL_PROTO_OFFLOAD_NUM_NS_CONFIG_V3L 4 | |
121 | #define IWL_PROTO_OFFLOAD_NUM_NS_CONFIG_V3S 2 | |
8ca151b5 JB |
122 | |
123 | /** | |
5369d6c1 | 124 | * struct iwl_proto_offload_cmd_common - ARP/NS offload common part |
8ca151b5 JB |
125 | * @enabled: enable flags |
126 | * @remote_ipv4_addr: remote address to answer to (or zero if all) | |
127 | * @host_ipv4_addr: our IPv4 address to respond to queries for | |
128 | * @arp_mac_addr: our MAC address for ARP responses | |
5369d6c1 | 129 | * @reserved: unused |
8ca151b5 | 130 | */ |
5369d6c1 | 131 | struct iwl_proto_offload_cmd_common { |
8ca151b5 JB |
132 | __le32 enabled; |
133 | __be32 remote_ipv4_addr; | |
134 | __be32 host_ipv4_addr; | |
135 | u8 arp_mac_addr[ETH_ALEN]; | |
5369d6c1 JB |
136 | __le16 reserved; |
137 | } __packed; | |
8ca151b5 | 138 | |
5369d6c1 JB |
139 | /** |
140 | * struct iwl_proto_offload_cmd_v1 - ARP/NS offload configuration | |
141 | * @common: common/IPv4 configuration | |
142 | * @remote_ipv6_addr: remote address to answer to (or zero if all) | |
143 | * @solicited_node_ipv6_addr: broken -- solicited node address exists | |
144 | * for each target address | |
145 | * @target_ipv6_addr: our target addresses | |
0d365ae5 | 146 | * @ndp_mac_addr: neighbor solicitation response MAC address |
acf91dda | 147 | * @reserved2: reserved |
5369d6c1 JB |
148 | */ |
149 | struct iwl_proto_offload_cmd_v1 { | |
150 | struct iwl_proto_offload_cmd_common common; | |
8ca151b5 JB |
151 | u8 remote_ipv6_addr[16]; |
152 | u8 solicited_node_ipv6_addr[16]; | |
5369d6c1 | 153 | u8 target_ipv6_addr[IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V1][16]; |
8ca151b5 JB |
154 | u8 ndp_mac_addr[ETH_ALEN]; |
155 | __le16 reserved2; | |
156 | } __packed; /* PROT_OFFLOAD_CONFIG_CMD_DB_S_VER_1 */ | |
157 | ||
5369d6c1 JB |
158 | /** |
159 | * struct iwl_proto_offload_cmd_v2 - ARP/NS offload configuration | |
160 | * @common: common/IPv4 configuration | |
161 | * @remote_ipv6_addr: remote address to answer to (or zero if all) | |
162 | * @solicited_node_ipv6_addr: broken -- solicited node address exists | |
163 | * for each target address | |
164 | * @target_ipv6_addr: our target addresses | |
0d365ae5 | 165 | * @ndp_mac_addr: neighbor solicitation response MAC address |
acf91dda JB |
166 | * @num_valid_ipv6_addrs: number of valid IPv6 addresses |
167 | * @reserved2: reserved | |
5369d6c1 JB |
168 | */ |
169 | struct iwl_proto_offload_cmd_v2 { | |
170 | struct iwl_proto_offload_cmd_common common; | |
171 | u8 remote_ipv6_addr[16]; | |
172 | u8 solicited_node_ipv6_addr[16]; | |
173 | u8 target_ipv6_addr[IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V2][16]; | |
174 | u8 ndp_mac_addr[ETH_ALEN]; | |
1644be91 | 175 | u8 num_valid_ipv6_addrs; |
5369d6c1 JB |
176 | u8 reserved2[3]; |
177 | } __packed; /* PROT_OFFLOAD_CONFIG_CMD_DB_S_VER_2 */ | |
178 | ||
f7fc5989 JB |
179 | struct iwl_ns_config { |
180 | struct in6_addr source_ipv6_addr; | |
181 | struct in6_addr dest_ipv6_addr; | |
182 | u8 target_mac_addr[ETH_ALEN]; | |
183 | __le16 reserved; | |
184 | } __packed; /* NS_OFFLOAD_CONFIG */ | |
185 | ||
186 | struct iwl_targ_addr { | |
187 | struct in6_addr addr; | |
188 | __le32 config_num; | |
189 | } __packed; /* TARGET_IPV6_ADDRESS */ | |
190 | ||
191 | /** | |
192 | * struct iwl_proto_offload_cmd_v3_small - ARP/NS offload configuration | |
193 | * @common: common/IPv4 configuration | |
acf91dda | 194 | * @num_valid_ipv6_addrs: number of valid IPv6 addresses |
83b0319a | 195 | * @targ_addrs: target IPv6 addresses |
f7fc5989 JB |
196 | * @ns_config: NS offload configurations |
197 | */ | |
198 | struct iwl_proto_offload_cmd_v3_small { | |
199 | struct iwl_proto_offload_cmd_common common; | |
200 | __le32 num_valid_ipv6_addrs; | |
201 | struct iwl_targ_addr targ_addrs[IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V3S]; | |
202 | struct iwl_ns_config ns_config[IWL_PROTO_OFFLOAD_NUM_NS_CONFIG_V3S]; | |
203 | } __packed; /* PROT_OFFLOAD_CONFIG_CMD_DB_S_VER_3 */ | |
204 | ||
205 | /** | |
206 | * struct iwl_proto_offload_cmd_v3_large - ARP/NS offload configuration | |
207 | * @common: common/IPv4 configuration | |
acf91dda | 208 | * @num_valid_ipv6_addrs: number of valid IPv6 addresses |
83b0319a | 209 | * @targ_addrs: target IPv6 addresses |
f7fc5989 JB |
210 | * @ns_config: NS offload configurations |
211 | */ | |
212 | struct iwl_proto_offload_cmd_v3_large { | |
213 | struct iwl_proto_offload_cmd_common common; | |
214 | __le32 num_valid_ipv6_addrs; | |
215 | struct iwl_targ_addr targ_addrs[IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V3L]; | |
216 | struct iwl_ns_config ns_config[IWL_PROTO_OFFLOAD_NUM_NS_CONFIG_V3L]; | |
217 | } __packed; /* PROT_OFFLOAD_CONFIG_CMD_DB_S_VER_3 */ | |
8ca151b5 JB |
218 | |
219 | /* | |
220 | * WOWLAN_PATTERNS | |
221 | */ | |
222 | #define IWL_WOWLAN_MIN_PATTERN_LEN 16 | |
223 | #define IWL_WOWLAN_MAX_PATTERN_LEN 128 | |
224 | ||
0c546fb6 | 225 | struct iwl_wowlan_pattern_v1 { |
8ca151b5 JB |
226 | u8 mask[IWL_WOWLAN_MAX_PATTERN_LEN / 8]; |
227 | u8 pattern[IWL_WOWLAN_MAX_PATTERN_LEN]; | |
228 | u8 mask_size; | |
229 | u8 pattern_size; | |
230 | __le16 reserved; | |
231 | } __packed; /* WOWLAN_PATTERN_API_S_VER_1 */ | |
232 | ||
233 | #define IWL_WOWLAN_MAX_PATTERNS 20 | |
234 | ||
ec95b270 JB |
235 | /** |
236 | * struct iwl_wowlan_patterns_cmd - WoWLAN wakeup patterns | |
237 | */ | |
0c546fb6 | 238 | struct iwl_wowlan_patterns_cmd_v1 { |
ec95b270 JB |
239 | /** |
240 | * @n_patterns: number of patterns | |
241 | */ | |
8ca151b5 | 242 | __le32 n_patterns; |
ec95b270 JB |
243 | |
244 | /** | |
245 | * @patterns: the patterns, array length in @n_patterns | |
246 | */ | |
0c546fb6 | 247 | struct iwl_wowlan_pattern_v1 patterns[]; |
8ca151b5 JB |
248 | } __packed; /* WOWLAN_PATTERN_ARRAY_API_S_VER_1 */ |
249 | ||
0c546fb6 LC |
250 | #define IPV4_ADDR_SIZE 4 |
251 | #define IPV6_ADDR_SIZE 16 | |
252 | ||
253 | enum iwl_wowlan_pattern_type { | |
254 | WOWLAN_PATTERN_TYPE_BITMASK, | |
255 | WOWLAN_PATTERN_TYPE_IPV4_TCP_SYN, | |
256 | WOWLAN_PATTERN_TYPE_IPV6_TCP_SYN, | |
257 | WOWLAN_PATTERN_TYPE_IPV4_TCP_SYN_WILDCARD, | |
258 | WOWLAN_PATTERN_TYPE_IPV6_TCP_SYN_WILDCARD, | |
259 | }; /* WOWLAN_PATTERN_TYPE_API_E_VER_1 */ | |
260 | ||
261 | /** | |
262 | * struct iwl_wowlan_ipv4_tcp_syn - WoWLAN IPv4 TCP SYN pattern data | |
263 | */ | |
264 | struct iwl_wowlan_ipv4_tcp_syn { | |
265 | /** | |
266 | * @src_addr: source IP address to match | |
267 | */ | |
268 | u8 src_addr[IPV4_ADDR_SIZE]; | |
269 | ||
270 | /** | |
271 | * @dst_addr: destination IP address to match | |
272 | */ | |
273 | u8 dst_addr[IPV4_ADDR_SIZE]; | |
274 | ||
275 | /** | |
276 | * @src_port: source TCP port to match | |
277 | */ | |
278 | __le16 src_port; | |
279 | ||
280 | /** | |
281 | * @dst_port: destination TCP port to match | |
282 | */ | |
283 | __le16 dst_port; | |
284 | } __packed; /* WOWLAN_IPV4_TCP_SYN_API_S_VER_1 */ | |
285 | ||
286 | /** | |
287 | * struct iwl_wowlan_ipv6_tcp_syn - WoWLAN Ipv6 TCP SYN pattern data | |
288 | */ | |
289 | struct iwl_wowlan_ipv6_tcp_syn { | |
290 | /** | |
291 | * @src_addr: source IP address to match | |
292 | */ | |
293 | u8 src_addr[IPV6_ADDR_SIZE]; | |
294 | ||
295 | /** | |
296 | * @dst_addr: destination IP address to match | |
297 | */ | |
298 | u8 dst_addr[IPV6_ADDR_SIZE]; | |
299 | ||
300 | /** | |
301 | * @src_port: source TCP port to match | |
302 | */ | |
303 | __le16 src_port; | |
304 | ||
305 | /** | |
306 | * @dst_port: destination TCP port to match | |
307 | */ | |
308 | __le16 dst_port; | |
309 | } __packed; /* WOWLAN_IPV6_TCP_SYN_API_S_VER_1 */ | |
310 | ||
311 | /** | |
312 | * union iwl_wowlan_pattern_data - Data for the different pattern types | |
313 | * | |
314 | * If wildcard addresses/ports are to be used, the union can be left | |
315 | * undefined. | |
316 | */ | |
317 | union iwl_wowlan_pattern_data { | |
318 | /** | |
319 | * @bitmask: bitmask pattern data | |
320 | */ | |
321 | struct iwl_wowlan_pattern_v1 bitmask; | |
322 | ||
323 | /** | |
324 | * @ipv4_tcp_syn: IPv4 TCP SYN pattern data | |
325 | */ | |
326 | struct iwl_wowlan_ipv4_tcp_syn ipv4_tcp_syn; | |
327 | ||
328 | /** | |
329 | * @ipv6_tcp_syn: IPv6 TCP SYN pattern data | |
330 | */ | |
331 | struct iwl_wowlan_ipv6_tcp_syn ipv6_tcp_syn; | |
332 | }; /* WOWLAN_PATTERN_API_U_VER_1 */ | |
333 | ||
334 | /** | |
335 | * struct iwl_wowlan_pattern_v2 - Pattern entry for the WoWLAN wakeup patterns | |
336 | */ | |
337 | struct iwl_wowlan_pattern_v2 { | |
338 | /** | |
339 | * @pattern_type: defines the struct type to be used in the union | |
340 | */ | |
341 | u8 pattern_type; | |
342 | ||
343 | /** | |
344 | * @reserved: reserved for alignment | |
345 | */ | |
346 | u8 reserved[3]; | |
347 | ||
348 | /** | |
349 | * @u: the union containing the match data, or undefined for | |
350 | * wildcard matches | |
351 | */ | |
352 | union iwl_wowlan_pattern_data u; | |
353 | } __packed; /* WOWLAN_PATTERN_API_S_VER_2 */ | |
354 | ||
355 | /** | |
356 | * struct iwl_wowlan_patterns_cmd - WoWLAN wakeup patterns command | |
357 | */ | |
358 | struct iwl_wowlan_patterns_cmd { | |
359 | /** | |
360 | * @n_patterns: number of patterns | |
361 | */ | |
362 | __le32 n_patterns; | |
363 | ||
364 | /** | |
365 | * @patterns: the patterns, array length in @n_patterns | |
366 | */ | |
367 | struct iwl_wowlan_pattern_v2 patterns[]; | |
368 | } __packed; /* WOWLAN_PATTERN_ARRAY_API_S_VER_2 */ | |
369 | ||
8ca151b5 JB |
370 | enum iwl_wowlan_wakeup_filters { |
371 | IWL_WOWLAN_WAKEUP_MAGIC_PACKET = BIT(0), | |
372 | IWL_WOWLAN_WAKEUP_PATTERN_MATCH = BIT(1), | |
373 | IWL_WOWLAN_WAKEUP_BEACON_MISS = BIT(2), | |
374 | IWL_WOWLAN_WAKEUP_LINK_CHANGE = BIT(3), | |
375 | IWL_WOWLAN_WAKEUP_GTK_REKEY_FAIL = BIT(4), | |
376 | IWL_WOWLAN_WAKEUP_EAP_IDENT_REQ = BIT(5), | |
377 | IWL_WOWLAN_WAKEUP_4WAY_HANDSHAKE = BIT(6), | |
378 | IWL_WOWLAN_WAKEUP_ENABLE_NET_DETECT = BIT(7), | |
379 | IWL_WOWLAN_WAKEUP_RF_KILL_DEASSERT = BIT(8), | |
380 | IWL_WOWLAN_WAKEUP_REMOTE_LINK_LOSS = BIT(9), | |
381 | IWL_WOWLAN_WAKEUP_REMOTE_SIGNATURE_TABLE = BIT(10), | |
b77f06d9 | 382 | IWL_WOWLAN_WAKEUP_REMOTE_TCP_EXTERNAL = BIT(11), |
8ca151b5 | 383 | IWL_WOWLAN_WAKEUP_REMOTE_WAKEUP_PACKET = BIT(12), |
b77f06d9 EP |
384 | IWL_WOWLAN_WAKEUP_IOAC_MAGIC_PACKET = BIT(13), |
385 | IWL_WOWLAN_WAKEUP_HOST_TIMER = BIT(14), | |
386 | IWL_WOWLAN_WAKEUP_RX_FRAME = BIT(15), | |
387 | IWL_WOWLAN_WAKEUP_BCN_FILTERING = BIT(16), | |
8ca151b5 JB |
388 | }; /* WOWLAN_WAKEUP_FILTER_API_E_VER_4 */ |
389 | ||
70b4c536 SS |
390 | enum iwl_wowlan_flags { |
391 | IS_11W_ASSOC = BIT(0), | |
392 | ENABLE_L3_FILTERING = BIT(1), | |
393 | ENABLE_NBNS_FILTERING = BIT(2), | |
394 | ENABLE_DHCP_FILTERING = BIT(3), | |
0db056d3 | 395 | ENABLE_STORE_BEACON = BIT(4), |
70b4c536 SS |
396 | }; |
397 | ||
816dc0bc JB |
398 | /** |
399 | * struct iwl_wowlan_config_cmd - WoWLAN configuration | |
400 | * @wakeup_filter: filter from &enum iwl_wowlan_wakeup_filters | |
401 | * @non_qos_seq: non-QoS sequence counter to use next | |
402 | * @qos_seq: QoS sequence counters to use next | |
403 | * @wowlan_ba_teardown_tids: bitmap of BA sessions to tear down | |
404 | * @is_11n_connection: indicates HT connection | |
405 | * @offloading_tid: TID reserved for firmware use | |
406 | * @flags: extra flags, see &enum iwl_wowlan_flags | |
f005fd88 | 407 | * @sta_id: station ID for wowlan. |
816dc0bc JB |
408 | * @reserved: reserved |
409 | */ | |
c8b06a99 | 410 | struct iwl_wowlan_config_cmd { |
8ca151b5 JB |
411 | __le32 wakeup_filter; |
412 | __le16 non_qos_seq; | |
413 | __le16 qos_seq[8]; | |
414 | u8 wowlan_ba_teardown_tids; | |
415 | u8 is_11n_connection; | |
1a95c8df | 416 | u8 offloading_tid; |
70b4c536 | 417 | u8 flags; |
f005fd88 HD |
418 | u8 sta_id; |
419 | u8 reserved; | |
420 | } __packed; /* WOWLAN_CONFIG_API_S_VER_5 */ | |
8ca151b5 JB |
421 | |
422 | /* | |
423 | * WOWLAN_TSC_RSC_PARAMS | |
424 | */ | |
425 | #define IWL_NUM_RSC 16 | |
426 | ||
427 | struct tkip_sc { | |
428 | __le16 iv16; | |
429 | __le16 pad; | |
430 | __le32 iv32; | |
431 | } __packed; /* TKIP_SC_API_U_VER_1 */ | |
432 | ||
433 | struct iwl_tkip_rsc_tsc { | |
434 | struct tkip_sc unicast_rsc[IWL_NUM_RSC]; | |
435 | struct tkip_sc multicast_rsc[IWL_NUM_RSC]; | |
436 | struct tkip_sc tsc; | |
437 | } __packed; /* TKIP_TSC_RSC_API_S_VER_1 */ | |
438 | ||
439 | struct aes_sc { | |
440 | __le64 pn; | |
441 | } __packed; /* TKIP_AES_SC_API_U_VER_1 */ | |
442 | ||
443 | struct iwl_aes_rsc_tsc { | |
444 | struct aes_sc unicast_rsc[IWL_NUM_RSC]; | |
445 | struct aes_sc multicast_rsc[IWL_NUM_RSC]; | |
446 | struct aes_sc tsc; | |
447 | } __packed; /* AES_TSC_RSC_API_S_VER_1 */ | |
448 | ||
449 | union iwl_all_tsc_rsc { | |
450 | struct iwl_tkip_rsc_tsc tkip; | |
451 | struct iwl_aes_rsc_tsc aes; | |
452 | }; /* ALL_TSC_RSC_API_S_VER_2 */ | |
453 | ||
454 | struct iwl_wowlan_rsc_tsc_params_cmd { | |
455 | union iwl_all_tsc_rsc all_tsc_rsc; | |
456 | } __packed; /* ALL_TSC_RSC_API_S_VER_2 */ | |
457 | ||
458 | #define IWL_MIC_KEY_SIZE 8 | |
459 | struct iwl_mic_keys { | |
460 | u8 tx[IWL_MIC_KEY_SIZE]; | |
461 | u8 rx_unicast[IWL_MIC_KEY_SIZE]; | |
462 | u8 rx_mcast[IWL_MIC_KEY_SIZE]; | |
463 | } __packed; /* MIC_KEYS_API_S_VER_1 */ | |
464 | ||
465 | #define IWL_P1K_SIZE 5 | |
466 | struct iwl_p1k_cache { | |
467 | __le16 p1k[IWL_P1K_SIZE]; | |
468 | } __packed; | |
469 | ||
470 | #define IWL_NUM_RX_P1K_CACHE 2 | |
471 | ||
472 | struct iwl_wowlan_tkip_params_cmd { | |
473 | struct iwl_mic_keys mic_keys; | |
474 | struct iwl_p1k_cache tx; | |
475 | struct iwl_p1k_cache rx_uni[IWL_NUM_RX_P1K_CACHE]; | |
476 | struct iwl_p1k_cache rx_multi[IWL_NUM_RX_P1K_CACHE]; | |
477 | } __packed; /* WOWLAN_TKIP_SETTING_API_S_VER_1 */ | |
478 | ||
479 | #define IWL_KCK_MAX_SIZE 32 | |
480 | #define IWL_KEK_MAX_SIZE 32 | |
481 | ||
482 | struct iwl_wowlan_kek_kck_material_cmd { | |
483 | u8 kck[IWL_KCK_MAX_SIZE]; | |
484 | u8 kek[IWL_KEK_MAX_SIZE]; | |
485 | __le16 kck_len; | |
486 | __le16 kek_len; | |
487 | __le64 replay_ctr; | |
488 | } __packed; /* KEK_KCK_MATERIAL_API_S_VER_2 */ | |
489 | ||
490 | #define RF_KILL_INDICATOR_FOR_WOWLAN 0x87 | |
491 | ||
492 | enum iwl_wowlan_rekey_status { | |
493 | IWL_WOWLAN_REKEY_POST_REKEY = 0, | |
494 | IWL_WOWLAN_REKEY_WHILE_REKEY = 1, | |
495 | }; /* WOWLAN_REKEY_STATUS_API_E_VER_1 */ | |
496 | ||
497 | enum iwl_wowlan_wakeup_reason { | |
498 | IWL_WOWLAN_WAKEUP_BY_NON_WIRELESS = 0, | |
499 | IWL_WOWLAN_WAKEUP_BY_MAGIC_PACKET = BIT(0), | |
500 | IWL_WOWLAN_WAKEUP_BY_PATTERN = BIT(1), | |
501 | IWL_WOWLAN_WAKEUP_BY_DISCONNECTION_ON_MISSED_BEACON = BIT(2), | |
502 | IWL_WOWLAN_WAKEUP_BY_DISCONNECTION_ON_DEAUTH = BIT(3), | |
503 | IWL_WOWLAN_WAKEUP_BY_GTK_REKEY_FAILURE = BIT(4), | |
504 | IWL_WOWLAN_WAKEUP_BY_RFKILL_DEASSERTED = BIT(5), | |
505 | IWL_WOWLAN_WAKEUP_BY_UCODE_ERROR = BIT(6), | |
506 | IWL_WOWLAN_WAKEUP_BY_EAPOL_REQUEST = BIT(7), | |
507 | IWL_WOWLAN_WAKEUP_BY_FOUR_WAY_HANDSHAKE = BIT(8), | |
508 | IWL_WOWLAN_WAKEUP_BY_REM_WAKE_LINK_LOSS = BIT(9), | |
509 | IWL_WOWLAN_WAKEUP_BY_REM_WAKE_SIGNATURE_TABLE = BIT(10), | |
ba537f98 | 510 | IWL_WOWLAN_WAKEUP_BY_REM_WAKE_TCP_EXTERNAL = BIT(11), |
8ca151b5 | 511 | IWL_WOWLAN_WAKEUP_BY_REM_WAKE_WAKEUP_PACKET = BIT(12), |
ba537f98 SS |
512 | IWL_WOWLAN_WAKEUP_BY_IOAC_MAGIC_PACKET = BIT(13), |
513 | IWL_WOWLAN_WAKEUP_BY_D3_WAKEUP_HOST_TIMER = BIT(14), | |
514 | IWL_WOWLAN_WAKEUP_BY_RXFRAME_FILTERED_IN = BIT(15), | |
515 | IWL_WOWLAN_WAKEUP_BY_BEACON_FILTERED_IN = BIT(16), | |
0c546fb6 LC |
516 | IWL_WAKEUP_BY_11W_UNPROTECTED_DEAUTH_OR_DISASSOC = BIT(17), |
517 | IWL_WAKEUP_BY_PATTERN_IPV4_TCP_SYN = BIT(18), | |
518 | IWL_WAKEUP_BY_PATTERN_IPV4_TCP_SYN_WILDCARD = BIT(19), | |
519 | IWL_WAKEUP_BY_PATTERN_IPV6_TCP_SYN = BIT(20), | |
520 | IWL_WAKEUP_BY_PATTERN_IPV6_TCP_SYN_WILDCARD = BIT(21), | |
8ca151b5 JB |
521 | }; /* WOWLAN_WAKE_UP_REASON_API_E_VER_2 */ |
522 | ||
2afa6a73 | 523 | struct iwl_wowlan_gtk_status_v1 { |
6d9d32b8 JB |
524 | u8 key_index; |
525 | u8 reserved[3]; | |
526 | u8 decrypt_key[16]; | |
527 | u8 tkip_mic_key[8]; | |
528 | struct iwl_wowlan_rsc_tsc_params_cmd rsc; | |
2dd49343 | 529 | } __packed; /* WOWLAN_GTK_MATERIAL_VER_1 */ |
6d9d32b8 | 530 | |
2afa6a73 LC |
531 | #define WOWLAN_KEY_MAX_SIZE 32 |
532 | #define WOWLAN_GTK_KEYS_NUM 2 | |
533 | #define WOWLAN_IGTK_KEYS_NUM 2 | |
534 | ||
535 | /** | |
536 | * struct iwl_wowlan_gtk_status - GTK status | |
537 | * @key: GTK material | |
538 | * @key_len: GTK legth, if set to 0, the key is not available | |
539 | * @key_flags: information about the key: | |
540 | * bits[0:1]: key index assigned by the AP | |
541 | * bits[2:6]: GTK index of the key in the internal DB | |
542 | * bit[7]: Set iff this is the currently used GTK | |
543 | * @reserved: padding | |
544 | * @tkip_mic_key: TKIP RX MIC key | |
545 | * @rsc: TSC RSC counters | |
546 | */ | |
547 | struct iwl_wowlan_gtk_status { | |
548 | u8 key[WOWLAN_KEY_MAX_SIZE]; | |
549 | u8 key_len; | |
550 | u8 key_flags; | |
551 | u8 reserved[2]; | |
552 | u8 tkip_mic_key[8]; | |
553 | struct iwl_wowlan_rsc_tsc_params_cmd rsc; | |
554 | } __packed; /* WOWLAN_GTK_MATERIAL_VER_2 */ | |
555 | ||
556 | #define IWL_WOWLAN_GTK_IDX_MASK (BIT(0) | BIT(1)) | |
557 | ||
558 | /** | |
559 | * struct iwl_wowlan_igtk_status - IGTK status | |
560 | * @key: IGTK material | |
561 | * @ipn: the IGTK packet number (replay counter) | |
562 | * @key_len: IGTK length, if set to 0, the key is not available | |
563 | * @key_flags: information about the key: | |
564 | * bits[0]: key index assigned by the AP (0: index 4, 1: index 5) | |
565 | * bits[1:5]: IGTK index of the key in the internal DB | |
566 | * bit[6]: Set iff this is the currently used IGTK | |
567 | */ | |
568 | struct iwl_wowlan_igtk_status { | |
569 | u8 key[WOWLAN_KEY_MAX_SIZE]; | |
570 | u8 ipn[6]; | |
571 | u8 key_len; | |
572 | u8 key_flags; | |
573 | } __packed; /* WOWLAN_IGTK_MATERIAL_VER_1 */ | |
574 | ||
575 | /** | |
576 | * struct iwl_wowlan_status_v6 - WoWLAN status | |
577 | * @gtk: GTK data | |
578 | * @replay_ctr: GTK rekey replay counter | |
579 | * @pattern_number: number of the matched pattern | |
580 | * @non_qos_seq_ctr: non-QoS sequence counter to use next | |
581 | * @qos_seq_ctr: QoS sequence counters to use next | |
582 | * @wakeup_reasons: wakeup reasons, see &enum iwl_wowlan_wakeup_reason | |
583 | * @num_of_gtk_rekeys: number of GTK rekeys | |
584 | * @transmitted_ndps: number of transmitted neighbor discovery packets | |
585 | * @received_beacons: number of received beacons | |
586 | * @wake_packet_length: wakeup packet length | |
587 | * @wake_packet_bufsize: wakeup packet buffer size | |
588 | * @wake_packet: wakeup packet | |
589 | */ | |
590 | struct iwl_wowlan_status_v6 { | |
591 | struct iwl_wowlan_gtk_status_v1 gtk; | |
592 | __le64 replay_ctr; | |
593 | __le16 pattern_number; | |
594 | __le16 non_qos_seq_ctr; | |
595 | __le16 qos_seq_ctr[8]; | |
596 | __le32 wakeup_reasons; | |
597 | __le32 num_of_gtk_rekeys; | |
598 | __le32 transmitted_ndps; | |
599 | __le32 received_beacons; | |
600 | __le32 wake_packet_length; | |
601 | __le32 wake_packet_bufsize; | |
602 | u8 wake_packet[]; /* can be truncated from _length to _bufsize */ | |
603 | } __packed; /* WOWLAN_STATUSES_API_S_VER_6 */ | |
604 | ||
816dc0bc JB |
605 | /** |
606 | * struct iwl_wowlan_status - WoWLAN status | |
607 | * @gtk: GTK data | |
2afa6a73 | 608 | * @igtk: IGTK data |
816dc0bc JB |
609 | * @replay_ctr: GTK rekey replay counter |
610 | * @pattern_number: number of the matched pattern | |
611 | * @non_qos_seq_ctr: non-QoS sequence counter to use next | |
612 | * @qos_seq_ctr: QoS sequence counters to use next | |
613 | * @wakeup_reasons: wakeup reasons, see &enum iwl_wowlan_wakeup_reason | |
614 | * @num_of_gtk_rekeys: number of GTK rekeys | |
615 | * @transmitted_ndps: number of transmitted neighbor discovery packets | |
616 | * @received_beacons: number of received beacons | |
617 | * @wake_packet_length: wakeup packet length | |
618 | * @wake_packet_bufsize: wakeup packet buffer size | |
619 | * @wake_packet: wakeup packet | |
620 | */ | |
3afec639 | 621 | struct iwl_wowlan_status { |
2afa6a73 LC |
622 | struct iwl_wowlan_gtk_status gtk[WOWLAN_GTK_KEYS_NUM]; |
623 | struct iwl_wowlan_igtk_status igtk[WOWLAN_IGTK_KEYS_NUM]; | |
6d9d32b8 JB |
624 | __le64 replay_ctr; |
625 | __le16 pattern_number; | |
626 | __le16 non_qos_seq_ctr; | |
627 | __le16 qos_seq_ctr[8]; | |
628 | __le32 wakeup_reasons; | |
629 | __le32 num_of_gtk_rekeys; | |
630 | __le32 transmitted_ndps; | |
631 | __le32 received_beacons; | |
632 | __le32 wake_packet_length; | |
633 | __le32 wake_packet_bufsize; | |
634 | u8 wake_packet[]; /* can be truncated from _length to _bufsize */ | |
2afa6a73 LC |
635 | } __packed; /* WOWLAN_STATUSES_API_S_VER_7 */ |
636 | ||
637 | static inline u8 iwlmvm_wowlan_gtk_idx(struct iwl_wowlan_gtk_status *gtk) | |
638 | { | |
639 | return gtk->key_flags & IWL_WOWLAN_GTK_IDX_MASK; | |
640 | } | |
6d9d32b8 | 641 | |
f0c2646a JB |
642 | #define IWL_WOWLAN_TCP_MAX_PACKET_LEN 64 |
643 | #define IWL_WOWLAN_REMOTE_WAKE_MAX_PACKET_LEN 128 | |
644 | #define IWL_WOWLAN_REMOTE_WAKE_MAX_TOKENS 2048 | |
645 | ||
646 | struct iwl_tcp_packet_info { | |
647 | __le16 tcp_pseudo_header_checksum; | |
648 | __le16 tcp_payload_length; | |
649 | } __packed; /* TCP_PACKET_INFO_API_S_VER_2 */ | |
650 | ||
651 | struct iwl_tcp_packet { | |
652 | struct iwl_tcp_packet_info info; | |
653 | u8 rx_mask[IWL_WOWLAN_MAX_PATTERN_LEN / 8]; | |
654 | u8 data[IWL_WOWLAN_TCP_MAX_PACKET_LEN]; | |
655 | } __packed; /* TCP_PROTOCOL_PACKET_API_S_VER_1 */ | |
656 | ||
657 | struct iwl_remote_wake_packet { | |
658 | struct iwl_tcp_packet_info info; | |
659 | u8 rx_mask[IWL_WOWLAN_MAX_PATTERN_LEN / 8]; | |
660 | u8 data[IWL_WOWLAN_REMOTE_WAKE_MAX_PACKET_LEN]; | |
661 | } __packed; /* TCP_PROTOCOL_PACKET_API_S_VER_1 */ | |
662 | ||
663 | struct iwl_wowlan_remote_wake_config { | |
664 | __le32 connection_max_time; /* unused */ | |
665 | /* TCP_PROTOCOL_CONFIG_API_S_VER_1 */ | |
666 | u8 max_syn_retries; | |
667 | u8 max_data_retries; | |
668 | u8 tcp_syn_ack_timeout; | |
669 | u8 tcp_ack_timeout; | |
670 | ||
671 | struct iwl_tcp_packet syn_tx; | |
672 | struct iwl_tcp_packet synack_rx; | |
673 | struct iwl_tcp_packet keepalive_ack_rx; | |
674 | struct iwl_tcp_packet fin_tx; | |
675 | ||
676 | struct iwl_remote_wake_packet keepalive_tx; | |
677 | struct iwl_remote_wake_packet wake_rx; | |
678 | ||
679 | /* REMOTE_WAKE_OFFSET_INFO_API_S_VER_1 */ | |
680 | u8 sequence_number_offset; | |
681 | u8 sequence_number_length; | |
682 | u8 token_offset; | |
683 | u8 token_length; | |
684 | /* REMOTE_WAKE_PROTOCOL_PARAMS_API_S_VER_1 */ | |
685 | __le32 initial_sequence_number; | |
686 | __le16 keepalive_interval; | |
687 | __le16 num_tokens; | |
688 | u8 tokens[IWL_WOWLAN_REMOTE_WAKE_MAX_TOKENS]; | |
689 | } __packed; /* REMOTE_WAKE_CONFIG_API_S_VER_2 */ | |
690 | ||
8ca151b5 JB |
691 | /* TODO: NetDetect API */ |
692 | ||
d172a5ef | 693 | #endif /* __iwl_fw_api_d3_h__ */ |