Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 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 | * |
Emmanuel Grumbach | 51368bf | 2013-12-30 13:15:54 +0200 | [diff] [blame] | 8 | * Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 9 | * |
| 10 | * This program is free software; you can redistribute it and/or modify |
| 11 | * it under the terms of version 2 of the GNU General Public License as |
| 12 | * published by the Free Software Foundation. |
| 13 | * |
| 14 | * This program is distributed in the hope that it will be useful, but |
| 15 | * WITHOUT ANY WARRANTY; without even the implied warranty of |
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 17 | * General Public License for more details. |
| 18 | * |
| 19 | * You should have received a copy of the GNU General Public License |
| 20 | * along with this program; if not, write to the Free Software |
| 21 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, |
| 22 | * USA |
| 23 | * |
| 24 | * The full GNU General Public License is included in this distribution |
Emmanuel Grumbach | 410dc5a | 2013-02-18 09:22:28 +0200 | [diff] [blame] | 25 | * in the file called COPYING. |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 26 | * |
| 27 | * Contact Information: |
| 28 | * Intel Linux Wireless <ilw@linux.intel.com> |
| 29 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 30 | * |
| 31 | * BSD LICENSE |
| 32 | * |
Emmanuel Grumbach | 51368bf | 2013-12-30 13:15:54 +0200 | [diff] [blame] | 33 | * Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 34 | * All rights reserved. |
| 35 | * |
| 36 | * Redistribution and use in source and binary forms, with or without |
| 37 | * modification, are permitted provided that the following conditions |
| 38 | * are met: |
| 39 | * |
| 40 | * * Redistributions of source code must retain the above copyright |
| 41 | * notice, this list of conditions and the following disclaimer. |
| 42 | * * Redistributions in binary form must reproduce the above copyright |
| 43 | * notice, this list of conditions and the following disclaimer in |
| 44 | * the documentation and/or other materials provided with the |
| 45 | * distribution. |
| 46 | * * Neither the name Intel Corporation nor the names of its |
| 47 | * contributors may be used to endorse or promote products derived |
| 48 | * from this software without specific prior written permission. |
| 49 | * |
| 50 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| 51 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| 52 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| 53 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| 54 | * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| 55 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| 56 | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 57 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 58 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 59 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 60 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 61 | *****************************************************************************/ |
| 62 | |
| 63 | #ifndef __iwl_fw_h__ |
| 64 | #define __iwl_fw_h__ |
| 65 | #include <linux/types.h> |
Wey-Yi Guy | bb982e3 | 2012-04-03 16:23:37 -0700 | [diff] [blame] | 66 | #include <net/mac80211.h> |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 67 | |
| 68 | /** |
| 69 | * enum iwl_ucode_tlv_flag - ucode API flags |
| 70 | * @IWL_UCODE_TLV_FLAGS_PAN: This is PAN capable microcode; this previously |
| 71 | * was a separate TLV but moved here to save space. |
| 72 | * @IWL_UCODE_TLV_FLAGS_NEWSCAN: new uCode scan behaviour on hidden SSID, |
| 73 | * treats good CRC threshold as a boolean |
| 74 | * @IWL_UCODE_TLV_FLAGS_MFP: This uCode image supports MFP (802.11w). |
| 75 | * @IWL_UCODE_TLV_FLAGS_P2P: This uCode image supports P2P. |
Emmanuel Grumbach | 25b9ea5 | 2013-03-06 11:53:38 +0200 | [diff] [blame] | 76 | * @IWL_UCODE_TLV_FLAGS_DW_BC_TABLE: The SCD byte count table is in DWORDS |
Matt Chen | 1504f48 | 2014-04-24 18:43:18 +0800 | [diff] [blame] | 77 | * @IWL_UCODE_TLV_FLAGS_UAPSD_SUPPORT: This uCode image supports uAPSD |
David Spinadel | 35a000b | 2013-08-28 09:29:43 +0300 | [diff] [blame] | 78 | * @IWL_UCODE_TLV_FLAGS_SHORT_BL: 16 entries of black list instead of 64 in scan |
| 79 | * offload profile config command. |
Johannes Berg | 5369d6c | 2013-07-08 11:17:06 +0200 | [diff] [blame] | 80 | * @IWL_UCODE_TLV_FLAGS_D3_6_IPV6_ADDRS: D3 image supports up to six |
| 81 | * (rather than two) IPv6 addresses |
David Spinadel | 20f1a5d | 2013-08-21 09:14:27 +0300 | [diff] [blame] | 82 | * @IWL_UCODE_TLV_FLAGS_NO_BASIC_SSID: not sending a probe with the SSID element |
| 83 | * from the probe request template. |
Johannes Berg | f7fc598 | 2013-08-20 13:04:10 +0200 | [diff] [blame] | 84 | * @IWL_UCODE_TLV_FLAGS_NEW_NSOFFL_SMALL: new NS offload (small version) |
| 85 | * @IWL_UCODE_TLV_FLAGS_NEW_NSOFFL_LARGE: new NS offload (large version) |
Avri Altman | 1988902 | 2014-03-19 07:25:06 +0200 | [diff] [blame] | 86 | * @IWL_UCODE_TLV_FLAGS_P2P_PM: P2P client supports PM as a stand alone MAC |
Alexander Bondar | 7303dd7f | 2014-02-03 21:57:28 +0200 | [diff] [blame] | 87 | * @IWL_UCODE_TLV_FLAGS_P2P_BSS_PS_DCM: support power save on BSS station and |
| 88 | * P2P client interfaces simultaneously if they are in different bindings. |
Avri Altman | 1988902 | 2014-03-19 07:25:06 +0200 | [diff] [blame] | 89 | * @IWL_UCODE_TLV_FLAGS_P2P_BSS_PS_SCM: support power save on BSS station and |
| 90 | * P2P client interfaces simultaneously if they are in same bindings. |
Alexander Bondar | 7520967 | 2013-11-12 14:47:59 +0200 | [diff] [blame] | 91 | * @IWL_UCODE_TLV_FLAGS_P2P_PS_UAPSD: P2P client supports uAPSD power save |
Eliad Peller | c87163b | 2014-01-08 10:11:11 +0200 | [diff] [blame] | 92 | * @IWL_UCODE_TLV_FLAGS_BCAST_FILTERING: uCode supports broadcast filtering. |
Johannes Berg | 3e56ead | 2013-02-15 22:23:18 +0100 | [diff] [blame] | 93 | * @IWL_UCODE_TLV_FLAGS_GO_UAPSD: AP/GO interfaces support uAPSD clients |
Haim Dreyfuss | e820c2d | 2014-04-06 11:19:09 +0300 | [diff] [blame] | 94 | * @IWL_UCODE_TLV_FLAGS_EBS_SUPPORT: this uCode image supports EBS. |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 95 | */ |
| 96 | enum iwl_ucode_tlv_flag { |
Avri Altman | a2d7b87 | 2013-07-09 01:42:17 +0300 | [diff] [blame] | 97 | IWL_UCODE_TLV_FLAGS_PAN = BIT(0), |
| 98 | IWL_UCODE_TLV_FLAGS_NEWSCAN = BIT(1), |
| 99 | IWL_UCODE_TLV_FLAGS_MFP = BIT(2), |
| 100 | IWL_UCODE_TLV_FLAGS_P2P = BIT(3), |
| 101 | IWL_UCODE_TLV_FLAGS_DW_BC_TABLE = BIT(4), |
David Spinadel | 35a000b | 2013-08-28 09:29:43 +0300 | [diff] [blame] | 102 | IWL_UCODE_TLV_FLAGS_SHORT_BL = BIT(7), |
Johannes Berg | 5369d6c | 2013-07-08 11:17:06 +0200 | [diff] [blame] | 103 | IWL_UCODE_TLV_FLAGS_D3_6_IPV6_ADDRS = BIT(10), |
David Spinadel | 20f1a5d | 2013-08-21 09:14:27 +0300 | [diff] [blame] | 104 | IWL_UCODE_TLV_FLAGS_NO_BASIC_SSID = BIT(12), |
Johannes Berg | f7fc598 | 2013-08-20 13:04:10 +0200 | [diff] [blame] | 105 | IWL_UCODE_TLV_FLAGS_NEW_NSOFFL_SMALL = BIT(15), |
| 106 | IWL_UCODE_TLV_FLAGS_NEW_NSOFFL_LARGE = BIT(16), |
Avri Altman | 1988902 | 2014-03-19 07:25:06 +0200 | [diff] [blame] | 107 | IWL_UCODE_TLV_FLAGS_P2P_PM = BIT(21), |
Alexander Bondar | 7303dd7f | 2014-02-03 21:57:28 +0200 | [diff] [blame] | 108 | IWL_UCODE_TLV_FLAGS_BSS_P2P_PS_DCM = BIT(22), |
Avri Altman | 1988902 | 2014-03-19 07:25:06 +0200 | [diff] [blame] | 109 | IWL_UCODE_TLV_FLAGS_BSS_P2P_PS_SCM = BIT(23), |
Matt Chen | 1504f48 | 2014-04-24 18:43:18 +0800 | [diff] [blame] | 110 | IWL_UCODE_TLV_FLAGS_UAPSD_SUPPORT = BIT(24), |
Haim Dreyfuss | e820c2d | 2014-04-06 11:19:09 +0300 | [diff] [blame] | 111 | IWL_UCODE_TLV_FLAGS_EBS_SUPPORT = BIT(25), |
Alexander Bondar | 7520967 | 2013-11-12 14:47:59 +0200 | [diff] [blame] | 112 | IWL_UCODE_TLV_FLAGS_P2P_PS_UAPSD = BIT(26), |
Eliad Peller | c87163b | 2014-01-08 10:11:11 +0200 | [diff] [blame] | 113 | IWL_UCODE_TLV_FLAGS_BCAST_FILTERING = BIT(29), |
Johannes Berg | 3e56ead | 2013-02-15 22:23:18 +0100 | [diff] [blame] | 114 | IWL_UCODE_TLV_FLAGS_GO_UAPSD = BIT(30), |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 115 | }; |
| 116 | |
Eliad Peller | 7bb426e | 2014-02-24 12:54:37 +0200 | [diff] [blame] | 117 | /** |
Eliad Peller | 1a95c8d | 2013-11-21 19:19:52 +0200 | [diff] [blame] | 118 | * enum iwl_ucode_tlv_api - ucode api |
| 119 | * @IWL_UCODE_TLV_API_WOWLAN_CONFIG_TID: wowlan config includes tid field. |
Andrei Otcheretianski | bd3398e | 2013-10-22 05:01:12 +0200 | [diff] [blame] | 120 | * @IWL_UCODE_TLV_API_CSA_FLOW: ucode can do unbind-bind flow for CSA. |
Eliad Peller | 1a95c8d | 2013-11-21 19:19:52 +0200 | [diff] [blame] | 121 | */ |
| 122 | enum iwl_ucode_tlv_api { |
| 123 | IWL_UCODE_TLV_API_WOWLAN_CONFIG_TID = BIT(0), |
Andrei Otcheretianski | bd3398e | 2013-10-22 05:01:12 +0200 | [diff] [blame] | 124 | IWL_UCODE_TLV_API_CSA_FLOW = BIT(4), |
Eliad Peller | 1a95c8d | 2013-11-21 19:19:52 +0200 | [diff] [blame] | 125 | }; |
| 126 | |
| 127 | /** |
Eliad Peller | 7bb426e | 2014-02-24 12:54:37 +0200 | [diff] [blame] | 128 | * enum iwl_ucode_tlv_capa - ucode capabilities |
| 129 | * @IWL_UCODE_TLV_CAPA_D0I3_SUPPORT: supports D0i3 |
| 130 | */ |
| 131 | enum iwl_ucode_tlv_capa { |
| 132 | IWL_UCODE_TLV_CAPA_D0I3_SUPPORT = BIT(0), |
| 133 | }; |
| 134 | |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 135 | /* The default calibrate table size if not specified by firmware file */ |
| 136 | #define IWL_DEFAULT_STANDARD_PHY_CALIBRATE_TBL_SIZE 18 |
| 137 | #define IWL_MAX_STANDARD_PHY_CALIBRATE_TBL_SIZE 19 |
| 138 | #define IWL_MAX_PHY_CALIBRATE_TBL_SIZE 253 |
| 139 | |
Luciano Coelho | 66140ad | 2013-08-12 19:30:21 +0300 | [diff] [blame] | 140 | /* The default max probe length if not specified by the firmware file */ |
| 141 | #define IWL_DEFAULT_MAX_PROBE_LENGTH 200 |
| 142 | |
David Spinadel | ed8c836 | 2012-03-10 13:00:13 -0800 | [diff] [blame] | 143 | /** |
| 144 | * enum iwl_ucode_type |
| 145 | * |
| 146 | * The type of ucode. |
| 147 | * |
| 148 | * @IWL_UCODE_REGULAR: Normal runtime ucode |
| 149 | * @IWL_UCODE_INIT: Initial ucode |
| 150 | * @IWL_UCODE_WOWLAN: Wake on Wireless enabled ucode |
| 151 | */ |
| 152 | enum iwl_ucode_type { |
| 153 | IWL_UCODE_REGULAR, |
| 154 | IWL_UCODE_INIT, |
| 155 | IWL_UCODE_WOWLAN, |
| 156 | IWL_UCODE_TYPE_MAX, |
| 157 | }; |
| 158 | |
David Spinadel | 6dfa8d0 | 2012-03-10 13:00:14 -0800 | [diff] [blame] | 159 | /* |
| 160 | * enumeration of ucode section. |
Johannes Berg | 0db53d0 | 2013-05-15 13:05:25 +0200 | [diff] [blame] | 161 | * This enumeration is used directly for older firmware (before 16.0). |
| 162 | * For new firmware, there can be up to 4 sections (see below) but the |
| 163 | * first one packaged into the firmware file is the DATA section and |
| 164 | * some debugging code accesses that. |
David Spinadel | 6dfa8d0 | 2012-03-10 13:00:14 -0800 | [diff] [blame] | 165 | */ |
| 166 | enum iwl_ucode_sec { |
David Spinadel | 6dfa8d0 | 2012-03-10 13:00:14 -0800 | [diff] [blame] | 167 | IWL_UCODE_SECTION_DATA, |
Johannes Berg | 0db53d0 | 2013-05-15 13:05:25 +0200 | [diff] [blame] | 168 | IWL_UCODE_SECTION_INST, |
David Spinadel | 6dfa8d0 | 2012-03-10 13:00:14 -0800 | [diff] [blame] | 169 | }; |
| 170 | /* |
| 171 | * For 16.0 uCode and above, there is no differentiation between sections, |
| 172 | * just an offset to the HW address. |
| 173 | */ |
Eran Harary | 034846c | 2014-01-29 08:10:17 +0200 | [diff] [blame] | 174 | #define IWL_UCODE_SECTION_MAX 12 |
Eran Harary | a2978b1 | 2014-02-20 11:00:01 +0200 | [diff] [blame] | 175 | #define IWL_API_ARRAY_SIZE 1 |
| 176 | #define IWL_CAPABILITIES_ARRAY_SIZE 1 |
Eran Harary | 69e9213 | 2014-03-25 08:45:24 +0200 | [diff] [blame] | 177 | #define CPU1_CPU2_SEPARATOR_SECTION 0xFFFFCCCC |
David Spinadel | 6dfa8d0 | 2012-03-10 13:00:14 -0800 | [diff] [blame] | 178 | |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 179 | struct iwl_ucode_capabilities { |
| 180 | u32 max_probe_length; |
David Spinadel | 762533b | 2014-06-05 11:20:43 +0300 | [diff] [blame^] | 181 | u32 n_scan_channels; |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 182 | u32 standard_phy_calibration_size; |
| 183 | u32 flags; |
Eran Harary | a2978b1 | 2014-02-20 11:00:01 +0200 | [diff] [blame] | 184 | u32 api[IWL_API_ARRAY_SIZE]; |
| 185 | u32 capa[IWL_CAPABILITIES_ARRAY_SIZE]; |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 186 | }; |
| 187 | |
David Spinadel | 0cedacc | 2012-03-10 13:00:12 -0800 | [diff] [blame] | 188 | /* one for each uCode image (inst/data, init/runtime/wowlan) */ |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 189 | struct fw_desc { |
Johannes Berg | 83f84d7 | 2012-09-10 11:50:18 +0200 | [diff] [blame] | 190 | const void *data; /* vmalloc'ed data */ |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 191 | u32 len; /* size in bytes */ |
David Spinadel | 0cedacc | 2012-03-10 13:00:12 -0800 | [diff] [blame] | 192 | u32 offset; /* offset in the device */ |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 193 | }; |
| 194 | |
| 195 | struct fw_img { |
David Spinadel | 6dfa8d0 | 2012-03-10 13:00:14 -0800 | [diff] [blame] | 196 | struct fw_desc sec[IWL_UCODE_SECTION_MAX]; |
Eran Harary | e2d6f4e | 2013-10-02 13:53:40 +0300 | [diff] [blame] | 197 | bool is_secure; |
| 198 | bool is_dual_cpus; |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 199 | }; |
| 200 | |
Eran Harary | 91479b6 | 2014-05-11 08:11:34 +0300 | [diff] [blame] | 201 | struct iwl_sf_region { |
| 202 | u32 addr; |
| 203 | u32 size; |
| 204 | }; |
| 205 | |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 206 | /* uCode version contains 4 values: Major/Minor/API/Serial */ |
| 207 | #define IWL_UCODE_MAJOR(ver) (((ver) & 0xFF000000) >> 24) |
| 208 | #define IWL_UCODE_MINOR(ver) (((ver) & 0x00FF0000) >> 16) |
| 209 | #define IWL_UCODE_API(ver) (((ver) & 0x0000FF00) >> 8) |
| 210 | #define IWL_UCODE_SERIAL(ver) ((ver) & 0x000000FF) |
| 211 | |
Johannes Berg | aa2b177 | 2013-01-24 14:12:07 +0100 | [diff] [blame] | 212 | /* |
| 213 | * Calibration control struct. |
| 214 | * Sent as part of the phy configuration command. |
| 215 | * @flow_trigger: bitmap for which calibrations to perform according to |
| 216 | * flow triggers. |
| 217 | * @event_trigger: bitmap for which calibrations to perform according to |
| 218 | * event triggers. |
| 219 | */ |
| 220 | struct iwl_tlv_calib_ctrl { |
| 221 | __le32 flow_trigger; |
| 222 | __le32 event_trigger; |
| 223 | } __packed; |
| 224 | |
Emmanuel Grumbach | d110cb5 | 2013-03-07 17:27:40 +0200 | [diff] [blame] | 225 | enum iwl_fw_phy_cfg { |
| 226 | FW_PHY_CFG_RADIO_TYPE_POS = 0, |
| 227 | FW_PHY_CFG_RADIO_TYPE = 0x3 << FW_PHY_CFG_RADIO_TYPE_POS, |
| 228 | FW_PHY_CFG_RADIO_STEP_POS = 2, |
| 229 | FW_PHY_CFG_RADIO_STEP = 0x3 << FW_PHY_CFG_RADIO_STEP_POS, |
| 230 | FW_PHY_CFG_RADIO_DASH_POS = 4, |
| 231 | FW_PHY_CFG_RADIO_DASH = 0x3 << FW_PHY_CFG_RADIO_DASH_POS, |
| 232 | FW_PHY_CFG_TX_CHAIN_POS = 16, |
| 233 | FW_PHY_CFG_TX_CHAIN = 0xf << FW_PHY_CFG_TX_CHAIN_POS, |
| 234 | FW_PHY_CFG_RX_CHAIN_POS = 20, |
| 235 | FW_PHY_CFG_RX_CHAIN = 0xf << FW_PHY_CFG_RX_CHAIN_POS, |
| 236 | }; |
| 237 | |
Max Stepanov | e36e543 | 2013-08-27 19:56:13 +0300 | [diff] [blame] | 238 | #define IWL_UCODE_MAX_CS 1 |
| 239 | |
| 240 | /** |
| 241 | * struct iwl_fw_cipher_scheme - a cipher scheme supported by FW. |
| 242 | * @cipher: a cipher suite selector |
| 243 | * @flags: cipher scheme flags (currently reserved for a future use) |
| 244 | * @hdr_len: a size of MPDU security header |
| 245 | * @pn_len: a size of PN |
| 246 | * @pn_off: an offset of pn from the beginning of the security header |
| 247 | * @key_idx_off: an offset of key index byte in the security header |
| 248 | * @key_idx_mask: a bit mask of key_idx bits |
| 249 | * @key_idx_shift: bit shift needed to get key_idx |
| 250 | * @mic_len: mic length in bytes |
| 251 | * @hw_cipher: a HW cipher index used in host commands |
| 252 | */ |
| 253 | struct iwl_fw_cipher_scheme { |
| 254 | __le32 cipher; |
| 255 | u8 flags; |
| 256 | u8 hdr_len; |
| 257 | u8 pn_len; |
| 258 | u8 pn_off; |
| 259 | u8 key_idx_off; |
| 260 | u8 key_idx_mask; |
| 261 | u8 key_idx_shift; |
| 262 | u8 mic_len; |
| 263 | u8 hw_cipher; |
| 264 | } __packed; |
| 265 | |
| 266 | /** |
| 267 | * struct iwl_fw_cscheme_list - a cipher scheme list |
| 268 | * @size: a number of entries |
| 269 | * @cs: cipher scheme entries |
| 270 | */ |
| 271 | struct iwl_fw_cscheme_list { |
| 272 | u8 size; |
| 273 | struct iwl_fw_cipher_scheme cs[]; |
| 274 | } __packed; |
| 275 | |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 276 | /** |
| 277 | * struct iwl_fw - variables associated with the firmware |
| 278 | * |
| 279 | * @ucode_ver: ucode version from the ucode file |
| 280 | * @fw_version: firmware version string |
David Spinadel | 6dfa8d0 | 2012-03-10 13:00:14 -0800 | [diff] [blame] | 281 | * @img: ucode image like ucode_rt, ucode_init, ucode_wowlan. |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 282 | * @ucode_capa: capabilities parsed from the ucode file. |
| 283 | * @enhance_sensitivity_table: device can do enhanced sensitivity. |
| 284 | * @init_evtlog_ptr: event log offset for init ucode. |
| 285 | * @init_evtlog_size: event log size for init ucode. |
| 286 | * @init_errlog_ptr: error log offfset for init ucode. |
| 287 | * @inst_evtlog_ptr: event log offset for runtime ucode. |
| 288 | * @inst_evtlog_size: event log size for runtime ucode. |
| 289 | * @inst_errlog_ptr: error log offfset for runtime ucode. |
Johannes Berg | 8ca151b | 2013-01-24 14:25:36 +0100 | [diff] [blame] | 290 | * @mvm_fw: indicates this is MVM firmware |
Max Stepanov | e36e543 | 2013-08-27 19:56:13 +0300 | [diff] [blame] | 291 | * @cipher_scheme: optional external cipher scheme. |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 292 | */ |
| 293 | struct iwl_fw { |
| 294 | u32 ucode_ver; |
| 295 | |
Jiri Pirko | 8113554 | 2013-01-06 02:12:51 +0000 | [diff] [blame] | 296 | char fw_version[ETHTOOL_FWVERS_LEN]; |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 297 | |
| 298 | /* ucode images */ |
David Spinadel | 6dfa8d0 | 2012-03-10 13:00:14 -0800 | [diff] [blame] | 299 | struct fw_img img[IWL_UCODE_TYPE_MAX]; |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 300 | |
| 301 | struct iwl_ucode_capabilities ucode_capa; |
| 302 | bool enhance_sensitivity_table; |
| 303 | |
| 304 | u32 init_evtlog_ptr, init_evtlog_size, init_errlog_ptr; |
| 305 | u32 inst_evtlog_ptr, inst_evtlog_size, inst_errlog_ptr; |
David Spinadel | ed8c836 | 2012-03-10 13:00:13 -0800 | [diff] [blame] | 306 | |
Johannes Berg | aa2b177 | 2013-01-24 14:12:07 +0100 | [diff] [blame] | 307 | struct iwl_tlv_calib_ctrl default_calib[IWL_UCODE_TYPE_MAX]; |
David Spinadel | ed8c836 | 2012-03-10 13:00:13 -0800 | [diff] [blame] | 308 | u32 phy_config; |
Eran Harary | 77db0a3 | 2014-02-04 14:21:38 +0200 | [diff] [blame] | 309 | u8 valid_tx_ant; |
| 310 | u8 valid_rx_ant; |
David Spinadel | 4db2c9a | 2012-03-10 13:00:15 -0800 | [diff] [blame] | 311 | |
| 312 | bool mvm_fw; |
Max Stepanov | e36e543 | 2013-08-27 19:56:13 +0300 | [diff] [blame] | 313 | |
| 314 | struct ieee80211_cipher_scheme cs[IWL_UCODE_MAX_CS]; |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 315 | }; |
| 316 | |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 317 | #endif /* __iwl_fw_h__ */ |