18ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg/****************************************************************************** 28ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * 38ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * This file is provided under a dual BSD/GPLv2 license. When using or 48ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * redistributing this file, you may do so under either license. 58ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * 68ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * GPL LICENSE SUMMARY 78ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * 851368bf792c79eb917694a4155d62f04359e3734Emmanuel Grumbach * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. 98b4139dc9f2171f313fc703c08269f6f8a6f6fc4Johannes Berg * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH 108ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * 118ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * This program is free software; you can redistribute it and/or modify 128ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * it under the terms of version 2 of the GNU General Public License as 138ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * published by the Free Software Foundation. 148ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * 158ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * This program is distributed in the hope that it will be useful, but 168ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * WITHOUT ANY WARRANTY; without even the implied warranty of 178ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 188ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * General Public License for more details. 198ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * 208ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * You should have received a copy of the GNU General Public License 218ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * along with this program; if not, write to the Free Software 228ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, 238ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * USA 248ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * 258ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * The full GNU General Public License is included in this distribution 26410dc5aa5906ed49e2733b451a5287884e8a16dcEmmanuel Grumbach * in the file called COPYING. 278ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * 288ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * Contact Information: 298ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * Intel Linux Wireless <ilw@linux.intel.com> 308ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 318ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * 328ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * BSD LICENSE 338ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * 3451368bf792c79eb917694a4155d62f04359e3734Emmanuel Grumbach * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. 358b4139dc9f2171f313fc703c08269f6f8a6f6fc4Johannes Berg * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH 368ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * All rights reserved. 378ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * 388ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * Redistribution and use in source and binary forms, with or without 398ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * modification, are permitted provided that the following conditions 408ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * are met: 418ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * 428ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * * Redistributions of source code must retain the above copyright 438ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * notice, this list of conditions and the following disclaimer. 448ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * * Redistributions in binary form must reproduce the above copyright 458ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * notice, this list of conditions and the following disclaimer in 468ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * the documentation and/or other materials provided with the 478ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * distribution. 488ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * * Neither the name Intel Corporation nor the names of its 498ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * contributors may be used to endorse or promote products derived 508ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * from this software without specific prior written permission. 518ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * 528ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 538ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 548ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 558ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 568ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 578ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 588ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 598ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 608ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 618ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 628ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 638ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg *****************************************************************************/ 648ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 658ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg#ifndef __fw_api_d3_h__ 668ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg#define __fw_api_d3_h__ 678ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 688ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg/** 698ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * enum iwl_d3_wakeup_flags - D3 manager wakeup flags 708ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * @IWL_WAKEUP_D3_CONFIG_FW_ERROR: wake up on firmware sysassert 718ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg */ 728ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Bergenum iwl_d3_wakeup_flags { 738ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WAKEUP_D3_CONFIG_FW_ERROR = BIT(0), 748ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg}; /* D3_MANAGER_WAKEUP_CONFIG_API_E_VER_3 */ 758ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 768ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg/** 778ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * struct iwl_d3_manager_config - D3 manager configuration command 788ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * @min_sleep_time: minimum sleep time (in usec) 798ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * @wakeup_flags: wakeup flags, see &enum iwl_d3_wakeup_flags 80dfcb4c3aacedee6838e436fb575b31e138505203Johannes Berg * @wakeup_host_timer: force wakeup after this many seconds 818ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * 828ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * The structure is used for the D3_CONFIG_CMD command. 838ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg */ 848ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Bergstruct iwl_d3_manager_config { 858ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg __le32 min_sleep_time; 868ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg __le32 wakeup_flags; 87dfcb4c3aacedee6838e436fb575b31e138505203Johannes Berg __le32 wakeup_host_timer; 88dfcb4c3aacedee6838e436fb575b31e138505203Johannes Berg} __packed; /* D3_MANAGER_CONFIG_CMD_S_VER_4 */ 898ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 908ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 918ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg/* TODO: OFFLOADS_QUERY_API_S_VER_1 */ 928ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 938ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg/** 948ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * enum iwl_d3_proto_offloads - enabled protocol offloads 958ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * @IWL_D3_PROTO_OFFLOAD_ARP: ARP data is enabled 968ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * @IWL_D3_PROTO_OFFLOAD_NS: NS (Neighbor Solicitation) is enabled 978ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg */ 988ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Bergenum iwl_proto_offloads { 998ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_D3_PROTO_OFFLOAD_ARP = BIT(0), 1008ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_D3_PROTO_OFFLOAD_NS = BIT(1), 1018ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg}; 1028ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 1035369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg#define IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V1 2 1045369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg#define IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V2 6 105f7fc598931766a0609f33de249c17c067737425eJohannes Berg#define IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V3L 12 106f7fc598931766a0609f33de249c17c067737425eJohannes Berg#define IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V3S 4 107f7fc598931766a0609f33de249c17c067737425eJohannes Berg#define IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_MAX 12 108f7fc598931766a0609f33de249c17c067737425eJohannes Berg 109f7fc598931766a0609f33de249c17c067737425eJohannes Berg#define IWL_PROTO_OFFLOAD_NUM_NS_CONFIG_V3L 4 110f7fc598931766a0609f33de249c17c067737425eJohannes Berg#define IWL_PROTO_OFFLOAD_NUM_NS_CONFIG_V3S 2 1118ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 1128ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg/** 1135369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg * struct iwl_proto_offload_cmd_common - ARP/NS offload common part 1148ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * @enabled: enable flags 1158ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * @remote_ipv4_addr: remote address to answer to (or zero if all) 1168ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * @host_ipv4_addr: our IPv4 address to respond to queries for 1178ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * @arp_mac_addr: our MAC address for ARP responses 1185369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg * @reserved: unused 1198ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg */ 1205369d6c167317a99caf2c4c87957f07cd77a1888Johannes Bergstruct iwl_proto_offload_cmd_common { 1218ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg __le32 enabled; 1228ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg __be32 remote_ipv4_addr; 1238ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg __be32 host_ipv4_addr; 1248ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg u8 arp_mac_addr[ETH_ALEN]; 1255369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg __le16 reserved; 1265369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg} __packed; 1278ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 1285369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg/** 1295369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg * struct iwl_proto_offload_cmd_v1 - ARP/NS offload configuration 1305369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg * @common: common/IPv4 configuration 1315369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg * @remote_ipv6_addr: remote address to answer to (or zero if all) 1325369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg * @solicited_node_ipv6_addr: broken -- solicited node address exists 1335369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg * for each target address 1345369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg * @target_ipv6_addr: our target addresses 1355369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg * @ndp_mac_addr: neighbor soliciation response MAC address 1365369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg */ 1375369d6c167317a99caf2c4c87957f07cd77a1888Johannes Bergstruct iwl_proto_offload_cmd_v1 { 1385369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg struct iwl_proto_offload_cmd_common common; 1398ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg u8 remote_ipv6_addr[16]; 1408ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg u8 solicited_node_ipv6_addr[16]; 1415369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg u8 target_ipv6_addr[IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V1][16]; 1428ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg u8 ndp_mac_addr[ETH_ALEN]; 1438ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg __le16 reserved2; 1448ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg} __packed; /* PROT_OFFLOAD_CONFIG_CMD_DB_S_VER_1 */ 1458ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 1465369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg/** 1475369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg * struct iwl_proto_offload_cmd_v2 - ARP/NS offload configuration 1485369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg * @common: common/IPv4 configuration 1495369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg * @remote_ipv6_addr: remote address to answer to (or zero if all) 1505369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg * @solicited_node_ipv6_addr: broken -- solicited node address exists 1515369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg * for each target address 1525369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg * @target_ipv6_addr: our target addresses 1535369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg * @ndp_mac_addr: neighbor soliciation response MAC address 1545369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg */ 1555369d6c167317a99caf2c4c87957f07cd77a1888Johannes Bergstruct iwl_proto_offload_cmd_v2 { 1565369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg struct iwl_proto_offload_cmd_common common; 1575369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg u8 remote_ipv6_addr[16]; 1585369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg u8 solicited_node_ipv6_addr[16]; 1595369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg u8 target_ipv6_addr[IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V2][16]; 1605369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg u8 ndp_mac_addr[ETH_ALEN]; 1615369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg u8 numValidIPv6Addresses; 1625369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg u8 reserved2[3]; 1635369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg} __packed; /* PROT_OFFLOAD_CONFIG_CMD_DB_S_VER_2 */ 1645369d6c167317a99caf2c4c87957f07cd77a1888Johannes Berg 165f7fc598931766a0609f33de249c17c067737425eJohannes Bergstruct iwl_ns_config { 166f7fc598931766a0609f33de249c17c067737425eJohannes Berg struct in6_addr source_ipv6_addr; 167f7fc598931766a0609f33de249c17c067737425eJohannes Berg struct in6_addr dest_ipv6_addr; 168f7fc598931766a0609f33de249c17c067737425eJohannes Berg u8 target_mac_addr[ETH_ALEN]; 169f7fc598931766a0609f33de249c17c067737425eJohannes Berg __le16 reserved; 170f7fc598931766a0609f33de249c17c067737425eJohannes Berg} __packed; /* NS_OFFLOAD_CONFIG */ 171f7fc598931766a0609f33de249c17c067737425eJohannes Berg 172f7fc598931766a0609f33de249c17c067737425eJohannes Bergstruct iwl_targ_addr { 173f7fc598931766a0609f33de249c17c067737425eJohannes Berg struct in6_addr addr; 174f7fc598931766a0609f33de249c17c067737425eJohannes Berg __le32 config_num; 175f7fc598931766a0609f33de249c17c067737425eJohannes Berg} __packed; /* TARGET_IPV6_ADDRESS */ 176f7fc598931766a0609f33de249c17c067737425eJohannes Berg 177f7fc598931766a0609f33de249c17c067737425eJohannes Berg/** 178f7fc598931766a0609f33de249c17c067737425eJohannes Berg * struct iwl_proto_offload_cmd_v3_small - ARP/NS offload configuration 179f7fc598931766a0609f33de249c17c067737425eJohannes Berg * @common: common/IPv4 configuration 180f7fc598931766a0609f33de249c17c067737425eJohannes Berg * @target_ipv6_addr: target IPv6 addresses 181f7fc598931766a0609f33de249c17c067737425eJohannes Berg * @ns_config: NS offload configurations 182f7fc598931766a0609f33de249c17c067737425eJohannes Berg */ 183f7fc598931766a0609f33de249c17c067737425eJohannes Bergstruct iwl_proto_offload_cmd_v3_small { 184f7fc598931766a0609f33de249c17c067737425eJohannes Berg struct iwl_proto_offload_cmd_common common; 185f7fc598931766a0609f33de249c17c067737425eJohannes Berg __le32 num_valid_ipv6_addrs; 186f7fc598931766a0609f33de249c17c067737425eJohannes Berg struct iwl_targ_addr targ_addrs[IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V3S]; 187f7fc598931766a0609f33de249c17c067737425eJohannes Berg struct iwl_ns_config ns_config[IWL_PROTO_OFFLOAD_NUM_NS_CONFIG_V3S]; 188f7fc598931766a0609f33de249c17c067737425eJohannes Berg} __packed; /* PROT_OFFLOAD_CONFIG_CMD_DB_S_VER_3 */ 189f7fc598931766a0609f33de249c17c067737425eJohannes Berg 190f7fc598931766a0609f33de249c17c067737425eJohannes Berg/** 191f7fc598931766a0609f33de249c17c067737425eJohannes Berg * struct iwl_proto_offload_cmd_v3_large - ARP/NS offload configuration 192f7fc598931766a0609f33de249c17c067737425eJohannes Berg * @common: common/IPv4 configuration 193f7fc598931766a0609f33de249c17c067737425eJohannes Berg * @target_ipv6_addr: target IPv6 addresses 194f7fc598931766a0609f33de249c17c067737425eJohannes Berg * @ns_config: NS offload configurations 195f7fc598931766a0609f33de249c17c067737425eJohannes Berg */ 196f7fc598931766a0609f33de249c17c067737425eJohannes Bergstruct iwl_proto_offload_cmd_v3_large { 197f7fc598931766a0609f33de249c17c067737425eJohannes Berg struct iwl_proto_offload_cmd_common common; 198f7fc598931766a0609f33de249c17c067737425eJohannes Berg __le32 num_valid_ipv6_addrs; 199f7fc598931766a0609f33de249c17c067737425eJohannes Berg struct iwl_targ_addr targ_addrs[IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_V3L]; 200f7fc598931766a0609f33de249c17c067737425eJohannes Berg struct iwl_ns_config ns_config[IWL_PROTO_OFFLOAD_NUM_NS_CONFIG_V3L]; 201f7fc598931766a0609f33de249c17c067737425eJohannes Berg} __packed; /* PROT_OFFLOAD_CONFIG_CMD_DB_S_VER_3 */ 2028ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 2038ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg/* 2048ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * WOWLAN_PATTERNS 2058ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg */ 2068ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg#define IWL_WOWLAN_MIN_PATTERN_LEN 16 2078ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg#define IWL_WOWLAN_MAX_PATTERN_LEN 128 2088ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 2098ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Bergstruct iwl_wowlan_pattern { 2108ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg u8 mask[IWL_WOWLAN_MAX_PATTERN_LEN / 8]; 2118ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg u8 pattern[IWL_WOWLAN_MAX_PATTERN_LEN]; 2128ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg u8 mask_size; 2138ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg u8 pattern_size; 2148ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg __le16 reserved; 2158ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg} __packed; /* WOWLAN_PATTERN_API_S_VER_1 */ 2168ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 2178ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg#define IWL_WOWLAN_MAX_PATTERNS 20 2188ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 2198ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Bergstruct iwl_wowlan_patterns_cmd { 2208ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg __le32 n_patterns; 2218ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg struct iwl_wowlan_pattern patterns[]; 2228ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg} __packed; /* WOWLAN_PATTERN_ARRAY_API_S_VER_1 */ 2238ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 2248ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Bergenum iwl_wowlan_wakeup_filters { 2258ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_MAGIC_PACKET = BIT(0), 2268ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_PATTERN_MATCH = BIT(1), 2278ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_BEACON_MISS = BIT(2), 2288ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_LINK_CHANGE = BIT(3), 2298ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_GTK_REKEY_FAIL = BIT(4), 2308ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_EAP_IDENT_REQ = BIT(5), 2318ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_4WAY_HANDSHAKE = BIT(6), 2328ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_ENABLE_NET_DETECT = BIT(7), 2338ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_RF_KILL_DEASSERT = BIT(8), 2348ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_REMOTE_LINK_LOSS = BIT(9), 2358ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_REMOTE_SIGNATURE_TABLE = BIT(10), 236b77f06d9eccb2edb1ef78c30eb6d38632ed4f196Eliad Peller IWL_WOWLAN_WAKEUP_REMOTE_TCP_EXTERNAL = BIT(11), 2378ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_REMOTE_WAKEUP_PACKET = BIT(12), 238b77f06d9eccb2edb1ef78c30eb6d38632ed4f196Eliad Peller IWL_WOWLAN_WAKEUP_IOAC_MAGIC_PACKET = BIT(13), 239b77f06d9eccb2edb1ef78c30eb6d38632ed4f196Eliad Peller IWL_WOWLAN_WAKEUP_HOST_TIMER = BIT(14), 240b77f06d9eccb2edb1ef78c30eb6d38632ed4f196Eliad Peller IWL_WOWLAN_WAKEUP_RX_FRAME = BIT(15), 241b77f06d9eccb2edb1ef78c30eb6d38632ed4f196Eliad Peller IWL_WOWLAN_WAKEUP_BCN_FILTERING = BIT(16), 2428ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg}; /* WOWLAN_WAKEUP_FILTER_API_E_VER_4 */ 2438ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 2441a95c8df7ed1ddf5e1d732a594f5a1b09da9a8c5Eliad Pellerstruct iwl_wowlan_config_cmd_v2 { 2458ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg __le32 wakeup_filter; 2468ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg __le16 non_qos_seq; 2478ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg __le16 qos_seq[8]; 2488ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg u8 wowlan_ba_teardown_tids; 2498ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg u8 is_11n_connection; 2508ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg} __packed; /* WOWLAN_CONFIG_API_S_VER_2 */ 2511a95c8df7ed1ddf5e1d732a594f5a1b09da9a8c5Eliad Peller 2521a95c8df7ed1ddf5e1d732a594f5a1b09da9a8c5Eliad Pellerstruct iwl_wowlan_config_cmd_v3 { 2531a95c8df7ed1ddf5e1d732a594f5a1b09da9a8c5Eliad Peller struct iwl_wowlan_config_cmd_v2 common; 2541a95c8df7ed1ddf5e1d732a594f5a1b09da9a8c5Eliad Peller u8 offloading_tid; 2551a95c8df7ed1ddf5e1d732a594f5a1b09da9a8c5Eliad Peller u8 reserved[3]; 2561a95c8df7ed1ddf5e1d732a594f5a1b09da9a8c5Eliad Peller} __packed; /* WOWLAN_CONFIG_API_S_VER_3 */ 2578ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 2588ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg/* 2598ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg * WOWLAN_TSC_RSC_PARAMS 2608ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg */ 2618ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg#define IWL_NUM_RSC 16 2628ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 2638ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Bergstruct tkip_sc { 2648ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg __le16 iv16; 2658ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg __le16 pad; 2668ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg __le32 iv32; 2678ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg} __packed; /* TKIP_SC_API_U_VER_1 */ 2688ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 2698ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Bergstruct iwl_tkip_rsc_tsc { 2708ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg struct tkip_sc unicast_rsc[IWL_NUM_RSC]; 2718ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg struct tkip_sc multicast_rsc[IWL_NUM_RSC]; 2728ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg struct tkip_sc tsc; 2738ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg} __packed; /* TKIP_TSC_RSC_API_S_VER_1 */ 2748ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 2758ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Bergstruct aes_sc { 2768ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg __le64 pn; 2778ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg} __packed; /* TKIP_AES_SC_API_U_VER_1 */ 2788ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 2798ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Bergstruct iwl_aes_rsc_tsc { 2808ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg struct aes_sc unicast_rsc[IWL_NUM_RSC]; 2818ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg struct aes_sc multicast_rsc[IWL_NUM_RSC]; 2828ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg struct aes_sc tsc; 2838ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg} __packed; /* AES_TSC_RSC_API_S_VER_1 */ 2848ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 2858ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Bergunion iwl_all_tsc_rsc { 2868ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg struct iwl_tkip_rsc_tsc tkip; 2878ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg struct iwl_aes_rsc_tsc aes; 2888ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg}; /* ALL_TSC_RSC_API_S_VER_2 */ 2898ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 2908ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Bergstruct iwl_wowlan_rsc_tsc_params_cmd { 2918ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg union iwl_all_tsc_rsc all_tsc_rsc; 2928ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg} __packed; /* ALL_TSC_RSC_API_S_VER_2 */ 2938ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 2948ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg#define IWL_MIC_KEY_SIZE 8 2958ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Bergstruct iwl_mic_keys { 2968ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg u8 tx[IWL_MIC_KEY_SIZE]; 2978ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg u8 rx_unicast[IWL_MIC_KEY_SIZE]; 2988ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg u8 rx_mcast[IWL_MIC_KEY_SIZE]; 2998ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg} __packed; /* MIC_KEYS_API_S_VER_1 */ 3008ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 3018ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg#define IWL_P1K_SIZE 5 3028ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Bergstruct iwl_p1k_cache { 3038ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg __le16 p1k[IWL_P1K_SIZE]; 3048ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg} __packed; 3058ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 3068ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg#define IWL_NUM_RX_P1K_CACHE 2 3078ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 3088ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Bergstruct iwl_wowlan_tkip_params_cmd { 3098ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg struct iwl_mic_keys mic_keys; 3108ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg struct iwl_p1k_cache tx; 3118ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg struct iwl_p1k_cache rx_uni[IWL_NUM_RX_P1K_CACHE]; 3128ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg struct iwl_p1k_cache rx_multi[IWL_NUM_RX_P1K_CACHE]; 3138ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg} __packed; /* WOWLAN_TKIP_SETTING_API_S_VER_1 */ 3148ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 3158ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg#define IWL_KCK_MAX_SIZE 32 3168ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg#define IWL_KEK_MAX_SIZE 32 3178ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 3188ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Bergstruct iwl_wowlan_kek_kck_material_cmd { 3198ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg u8 kck[IWL_KCK_MAX_SIZE]; 3208ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg u8 kek[IWL_KEK_MAX_SIZE]; 3218ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg __le16 kck_len; 3228ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg __le16 kek_len; 3238ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg __le64 replay_ctr; 3248ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg} __packed; /* KEK_KCK_MATERIAL_API_S_VER_2 */ 3258ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 3268ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg#define RF_KILL_INDICATOR_FOR_WOWLAN 0x87 3278ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 3288ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Bergenum iwl_wowlan_rekey_status { 3298ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_REKEY_POST_REKEY = 0, 3308ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_REKEY_WHILE_REKEY = 1, 3318ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg}; /* WOWLAN_REKEY_STATUS_API_E_VER_1 */ 3328ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 3338ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Bergenum iwl_wowlan_wakeup_reason { 3348ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_BY_NON_WIRELESS = 0, 3358ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_BY_MAGIC_PACKET = BIT(0), 3368ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_BY_PATTERN = BIT(1), 3378ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_BY_DISCONNECTION_ON_MISSED_BEACON = BIT(2), 3388ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_BY_DISCONNECTION_ON_DEAUTH = BIT(3), 3398ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_BY_GTK_REKEY_FAILURE = BIT(4), 3408ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_BY_RFKILL_DEASSERTED = BIT(5), 3418ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_BY_UCODE_ERROR = BIT(6), 3428ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_BY_EAPOL_REQUEST = BIT(7), 3438ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_BY_FOUR_WAY_HANDSHAKE = BIT(8), 3448ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_BY_REM_WAKE_LINK_LOSS = BIT(9), 3458ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_BY_REM_WAKE_SIGNATURE_TABLE = BIT(10), 346f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg /* BIT(11) reserved */ 3478ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg IWL_WOWLAN_WAKEUP_BY_REM_WAKE_WAKEUP_PACKET = BIT(12), 3488ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg}; /* WOWLAN_WAKE_UP_REASON_API_E_VER_2 */ 3498ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 3506d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Bergstruct iwl_wowlan_gtk_status { 3516d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Berg u8 key_index; 3526d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Berg u8 reserved[3]; 3536d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Berg u8 decrypt_key[16]; 3546d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Berg u8 tkip_mic_key[8]; 3556d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Berg struct iwl_wowlan_rsc_tsc_params_cmd rsc; 3566d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Berg} __packed; 3576d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Berg 3583afec63957658d4c0fe5a25636a10b12bde9bad6Emmanuel Grumbachstruct iwl_wowlan_status { 3596d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Berg struct iwl_wowlan_gtk_status gtk; 3606d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Berg __le64 replay_ctr; 3616d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Berg __le16 pattern_number; 3626d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Berg __le16 non_qos_seq_ctr; 3636d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Berg __le16 qos_seq_ctr[8]; 3646d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Berg __le32 wakeup_reasons; 3656d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Berg __le32 num_of_gtk_rekeys; 3666d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Berg __le32 transmitted_ndps; 3676d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Berg __le32 received_beacons; 3686d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Berg __le32 wake_packet_length; 3696d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Berg __le32 wake_packet_bufsize; 3706d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Berg u8 wake_packet[]; /* can be truncated from _length to _bufsize */ 3716d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Berg} __packed; /* WOWLAN_STATUSES_API_S_VER_6 */ 3726d9d32b89ab0f9cbd182f807cc484e66e15c6972Johannes Berg 373f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg#define IWL_WOWLAN_TCP_MAX_PACKET_LEN 64 374f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg#define IWL_WOWLAN_REMOTE_WAKE_MAX_PACKET_LEN 128 375f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg#define IWL_WOWLAN_REMOTE_WAKE_MAX_TOKENS 2048 376f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg 377f0c2646af4f7432f7414e1162377cada06c3c747Johannes Bergstruct iwl_tcp_packet_info { 378f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg __le16 tcp_pseudo_header_checksum; 379f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg __le16 tcp_payload_length; 380f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg} __packed; /* TCP_PACKET_INFO_API_S_VER_2 */ 381f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg 382f0c2646af4f7432f7414e1162377cada06c3c747Johannes Bergstruct iwl_tcp_packet { 383f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg struct iwl_tcp_packet_info info; 384f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg u8 rx_mask[IWL_WOWLAN_MAX_PATTERN_LEN / 8]; 385f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg u8 data[IWL_WOWLAN_TCP_MAX_PACKET_LEN]; 386f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg} __packed; /* TCP_PROTOCOL_PACKET_API_S_VER_1 */ 387f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg 388f0c2646af4f7432f7414e1162377cada06c3c747Johannes Bergstruct iwl_remote_wake_packet { 389f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg struct iwl_tcp_packet_info info; 390f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg u8 rx_mask[IWL_WOWLAN_MAX_PATTERN_LEN / 8]; 391f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg u8 data[IWL_WOWLAN_REMOTE_WAKE_MAX_PACKET_LEN]; 392f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg} __packed; /* TCP_PROTOCOL_PACKET_API_S_VER_1 */ 393f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg 394f0c2646af4f7432f7414e1162377cada06c3c747Johannes Bergstruct iwl_wowlan_remote_wake_config { 395f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg __le32 connection_max_time; /* unused */ 396f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg /* TCP_PROTOCOL_CONFIG_API_S_VER_1 */ 397f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg u8 max_syn_retries; 398f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg u8 max_data_retries; 399f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg u8 tcp_syn_ack_timeout; 400f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg u8 tcp_ack_timeout; 401f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg 402f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg struct iwl_tcp_packet syn_tx; 403f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg struct iwl_tcp_packet synack_rx; 404f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg struct iwl_tcp_packet keepalive_ack_rx; 405f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg struct iwl_tcp_packet fin_tx; 406f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg 407f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg struct iwl_remote_wake_packet keepalive_tx; 408f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg struct iwl_remote_wake_packet wake_rx; 409f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg 410f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg /* REMOTE_WAKE_OFFSET_INFO_API_S_VER_1 */ 411f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg u8 sequence_number_offset; 412f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg u8 sequence_number_length; 413f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg u8 token_offset; 414f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg u8 token_length; 415f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg /* REMOTE_WAKE_PROTOCOL_PARAMS_API_S_VER_1 */ 416f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg __le32 initial_sequence_number; 417f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg __le16 keepalive_interval; 418f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg __le16 num_tokens; 419f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg u8 tokens[IWL_WOWLAN_REMOTE_WAKE_MAX_TOKENS]; 420f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg} __packed; /* REMOTE_WAKE_CONFIG_API_S_VER_2 */ 421f0c2646af4f7432f7414e1162377cada06c3c747Johannes Berg 4228ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg/* TODO: NetDetect API */ 4238ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg 4248ca151b568b67a7b72dcfc6ee6ea7c107ddd795cJohannes Berg#endif /* __fw_api_d3_h__ */ 425