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 |
Alexander Bondar | e811ada | 2013-03-10 15:29:44 +0200 | [diff] [blame] | 77 | * @IWL_UCODE_TLV_FLAGS_UAPSD: 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. |
Avri Altman | a2d7b87 | 2013-07-09 01:42:17 +0300 | [diff] [blame] | 80 | * @IWL_UCODE_TLV_FLAGS_RX_ENERGY_API: supports rx signal strength api |
Eytan Lifshitz | f8f03c3 | 2013-08-07 19:36:42 +0300 | [diff] [blame] | 81 | * @IWL_UCODE_TLV_FLAGS_TIME_EVENT_API_V2: using the new time event API. |
Johannes Berg | 5369d6c | 2013-07-08 11:17:06 +0200 | [diff] [blame] | 82 | * @IWL_UCODE_TLV_FLAGS_D3_6_IPV6_ADDRS: D3 image supports up to six |
| 83 | * (rather than two) IPv6 addresses |
Hila Gonen | 5dca7c2 | 2013-07-16 11:15:35 +0300 | [diff] [blame] | 84 | * @IWL_UCODE_TLV_FLAGS_BF_UPDATED: new beacon filtering API |
David Spinadel | 20f1a5d | 2013-08-21 09:14:27 +0300 | [diff] [blame] | 85 | * @IWL_UCODE_TLV_FLAGS_NO_BASIC_SSID: not sending a probe with the SSID element |
| 86 | * from the probe request template. |
Johannes Berg | 6d9d32b | 2013-08-06 18:58:56 +0200 | [diff] [blame] | 87 | * @IWL_UCODE_TLV_FLAGS_D3_CONTINUITY_API: modified D3 API to allow keeping |
| 88 | * connection when going back to D0 |
Johannes Berg | f7fc598 | 2013-08-20 13:04:10 +0200 | [diff] [blame] | 89 | * @IWL_UCODE_TLV_FLAGS_NEW_NSOFFL_SMALL: new NS offload (small version) |
| 90 | * @IWL_UCODE_TLV_FLAGS_NEW_NSOFFL_LARGE: new NS offload (large version) |
David Spinadel | 35a000b | 2013-08-28 09:29:43 +0300 | [diff] [blame] | 91 | * @IWL_UCODE_TLV_FLAGS_SCHED_SCAN: this uCode image supports scheduled scan. |
Max Stepanov | 5a258aa | 2013-04-07 09:11:21 +0300 | [diff] [blame] | 92 | * @IWL_UCODE_TLV_FLAGS_STA_KEY_CMD: new ADD_STA and ADD_STA_KEY command API |
Alexander Bondar | 64b928c | 2013-09-03 14:18:03 +0300 | [diff] [blame] | 93 | * @IWL_UCODE_TLV_FLAGS_DEVICE_PS_CMD: support device wide power command |
| 94 | * containing CAM (Continuous Active Mode) indication. |
Alexander Bondar | 7303dd7f | 2014-02-03 21:57:28 +0200 | [diff] [blame] | 95 | * @IWL_UCODE_TLV_FLAGS_P2P_BSS_PS_DCM: support power save on BSS station and |
| 96 | * P2P client interfaces simultaneously if they are in different bindings. |
Alexander Bondar | 7520967 | 2013-11-12 14:47:59 +0200 | [diff] [blame] | 97 | * @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] | 98 | * @IWL_UCODE_TLV_FLAGS_BCAST_FILTERING: uCode supports broadcast filtering. |
Johannes Berg | 3e56ead | 2013-02-15 22:23:18 +0100 | [diff] [blame] | 99 | * @IWL_UCODE_TLV_FLAGS_GO_UAPSD: AP/GO interfaces support uAPSD clients |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 100 | */ |
| 101 | enum iwl_ucode_tlv_flag { |
Avri Altman | a2d7b87 | 2013-07-09 01:42:17 +0300 | [diff] [blame] | 102 | IWL_UCODE_TLV_FLAGS_PAN = BIT(0), |
| 103 | IWL_UCODE_TLV_FLAGS_NEWSCAN = BIT(1), |
| 104 | IWL_UCODE_TLV_FLAGS_MFP = BIT(2), |
| 105 | IWL_UCODE_TLV_FLAGS_P2P = BIT(3), |
| 106 | IWL_UCODE_TLV_FLAGS_DW_BC_TABLE = BIT(4), |
Emmanuel Grumbach | dac94da | 2013-06-18 07:35:27 +0300 | [diff] [blame] | 107 | IWL_UCODE_TLV_FLAGS_NEWBT_COEX = BIT(5), |
Alexander Bondar | e8e626a | 2013-10-16 00:21:34 +0200 | [diff] [blame] | 108 | IWL_UCODE_TLV_FLAGS_PM_CMD_SUPPORT = BIT(6), |
David Spinadel | 35a000b | 2013-08-28 09:29:43 +0300 | [diff] [blame] | 109 | IWL_UCODE_TLV_FLAGS_SHORT_BL = BIT(7), |
Avri Altman | a2d7b87 | 2013-07-09 01:42:17 +0300 | [diff] [blame] | 110 | IWL_UCODE_TLV_FLAGS_RX_ENERGY_API = BIT(8), |
Eytan Lifshitz | f8f03c3 | 2013-08-07 19:36:42 +0300 | [diff] [blame] | 111 | IWL_UCODE_TLV_FLAGS_TIME_EVENT_API_V2 = BIT(9), |
Johannes Berg | 5369d6c | 2013-07-08 11:17:06 +0200 | [diff] [blame] | 112 | IWL_UCODE_TLV_FLAGS_D3_6_IPV6_ADDRS = BIT(10), |
Hila Gonen | 5dca7c2 | 2013-07-16 11:15:35 +0300 | [diff] [blame] | 113 | IWL_UCODE_TLV_FLAGS_BF_UPDATED = BIT(11), |
David Spinadel | 20f1a5d | 2013-08-21 09:14:27 +0300 | [diff] [blame] | 114 | IWL_UCODE_TLV_FLAGS_NO_BASIC_SSID = BIT(12), |
Johannes Berg | 6d9d32b | 2013-08-06 18:58:56 +0200 | [diff] [blame] | 115 | IWL_UCODE_TLV_FLAGS_D3_CONTINUITY_API = BIT(14), |
Johannes Berg | f7fc598 | 2013-08-20 13:04:10 +0200 | [diff] [blame] | 116 | IWL_UCODE_TLV_FLAGS_NEW_NSOFFL_SMALL = BIT(15), |
| 117 | IWL_UCODE_TLV_FLAGS_NEW_NSOFFL_LARGE = BIT(16), |
David Spinadel | 35a000b | 2013-08-28 09:29:43 +0300 | [diff] [blame] | 118 | IWL_UCODE_TLV_FLAGS_SCHED_SCAN = BIT(17), |
Max Stepanov | 5a258aa | 2013-04-07 09:11:21 +0300 | [diff] [blame] | 119 | IWL_UCODE_TLV_FLAGS_STA_KEY_CMD = BIT(19), |
Alexander Bondar | 64b928c | 2013-09-03 14:18:03 +0300 | [diff] [blame] | 120 | IWL_UCODE_TLV_FLAGS_DEVICE_PS_CMD = BIT(20), |
Alexander Bondar | 7303dd7f | 2014-02-03 21:57:28 +0200 | [diff] [blame] | 121 | IWL_UCODE_TLV_FLAGS_BSS_P2P_PS_DCM = BIT(22), |
Alexander Bondar | e8e626a | 2013-10-16 00:21:34 +0200 | [diff] [blame] | 122 | IWL_UCODE_TLV_FLAGS_UAPSD_SUPPORT = BIT(24), |
Alexander Bondar | 7520967 | 2013-11-12 14:47:59 +0200 | [diff] [blame] | 123 | IWL_UCODE_TLV_FLAGS_P2P_PS_UAPSD = BIT(26), |
Eliad Peller | c87163b | 2014-01-08 10:11:11 +0200 | [diff] [blame] | 124 | IWL_UCODE_TLV_FLAGS_BCAST_FILTERING = BIT(29), |
Johannes Berg | 3e56ead | 2013-02-15 22:23:18 +0100 | [diff] [blame] | 125 | IWL_UCODE_TLV_FLAGS_GO_UAPSD = BIT(30), |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 126 | }; |
| 127 | |
Eliad Peller | 7bb426e | 2014-02-24 12:54:37 +0200 | [diff] [blame] | 128 | /** |
Eliad Peller | 1a95c8d | 2013-11-21 19:19:52 +0200 | [diff] [blame] | 129 | * enum iwl_ucode_tlv_api - ucode api |
| 130 | * @IWL_UCODE_TLV_API_WOWLAN_CONFIG_TID: wowlan config includes tid field. |
| 131 | */ |
| 132 | enum iwl_ucode_tlv_api { |
| 133 | IWL_UCODE_TLV_API_WOWLAN_CONFIG_TID = BIT(0), |
| 134 | }; |
| 135 | |
| 136 | /** |
Eliad Peller | 7bb426e | 2014-02-24 12:54:37 +0200 | [diff] [blame] | 137 | * enum iwl_ucode_tlv_capa - ucode capabilities |
| 138 | * @IWL_UCODE_TLV_CAPA_D0I3_SUPPORT: supports D0i3 |
| 139 | */ |
| 140 | enum iwl_ucode_tlv_capa { |
| 141 | IWL_UCODE_TLV_CAPA_D0I3_SUPPORT = BIT(0), |
| 142 | }; |
| 143 | |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 144 | /* The default calibrate table size if not specified by firmware file */ |
| 145 | #define IWL_DEFAULT_STANDARD_PHY_CALIBRATE_TBL_SIZE 18 |
| 146 | #define IWL_MAX_STANDARD_PHY_CALIBRATE_TBL_SIZE 19 |
| 147 | #define IWL_MAX_PHY_CALIBRATE_TBL_SIZE 253 |
| 148 | |
Luciano Coelho | 66140ad | 2013-08-12 19:30:21 +0300 | [diff] [blame] | 149 | /* The default max probe length if not specified by the firmware file */ |
| 150 | #define IWL_DEFAULT_MAX_PROBE_LENGTH 200 |
| 151 | |
David Spinadel | ed8c836 | 2012-03-10 13:00:13 -0800 | [diff] [blame] | 152 | /** |
| 153 | * enum iwl_ucode_type |
| 154 | * |
| 155 | * The type of ucode. |
| 156 | * |
| 157 | * @IWL_UCODE_REGULAR: Normal runtime ucode |
| 158 | * @IWL_UCODE_INIT: Initial ucode |
| 159 | * @IWL_UCODE_WOWLAN: Wake on Wireless enabled ucode |
| 160 | */ |
| 161 | enum iwl_ucode_type { |
| 162 | IWL_UCODE_REGULAR, |
| 163 | IWL_UCODE_INIT, |
| 164 | IWL_UCODE_WOWLAN, |
| 165 | IWL_UCODE_TYPE_MAX, |
| 166 | }; |
| 167 | |
David Spinadel | 6dfa8d0 | 2012-03-10 13:00:14 -0800 | [diff] [blame] | 168 | /* |
| 169 | * enumeration of ucode section. |
Johannes Berg | 0db53d0 | 2013-05-15 13:05:25 +0200 | [diff] [blame] | 170 | * This enumeration is used directly for older firmware (before 16.0). |
| 171 | * For new firmware, there can be up to 4 sections (see below) but the |
| 172 | * first one packaged into the firmware file is the DATA section and |
| 173 | * some debugging code accesses that. |
David Spinadel | 6dfa8d0 | 2012-03-10 13:00:14 -0800 | [diff] [blame] | 174 | */ |
| 175 | enum iwl_ucode_sec { |
David Spinadel | 6dfa8d0 | 2012-03-10 13:00:14 -0800 | [diff] [blame] | 176 | IWL_UCODE_SECTION_DATA, |
Johannes Berg | 0db53d0 | 2013-05-15 13:05:25 +0200 | [diff] [blame] | 177 | IWL_UCODE_SECTION_INST, |
David Spinadel | 6dfa8d0 | 2012-03-10 13:00:14 -0800 | [diff] [blame] | 178 | }; |
| 179 | /* |
| 180 | * For 16.0 uCode and above, there is no differentiation between sections, |
| 181 | * just an offset to the HW address. |
| 182 | */ |
Eran Harary | 034846c | 2014-01-29 08:10:17 +0200 | [diff] [blame] | 183 | #define IWL_UCODE_SECTION_MAX 12 |
Eran Harary | a2978b1 | 2014-02-20 11:00:01 +0200 | [diff] [blame] | 184 | #define IWL_API_ARRAY_SIZE 1 |
| 185 | #define IWL_CAPABILITIES_ARRAY_SIZE 1 |
David Spinadel | 6dfa8d0 | 2012-03-10 13:00:14 -0800 | [diff] [blame] | 186 | |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 187 | struct iwl_ucode_capabilities { |
| 188 | u32 max_probe_length; |
| 189 | u32 standard_phy_calibration_size; |
| 190 | u32 flags; |
Eran Harary | a2978b1 | 2014-02-20 11:00:01 +0200 | [diff] [blame] | 191 | u32 api[IWL_API_ARRAY_SIZE]; |
| 192 | u32 capa[IWL_CAPABILITIES_ARRAY_SIZE]; |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 193 | }; |
| 194 | |
David Spinadel | 0cedacc | 2012-03-10 13:00:12 -0800 | [diff] [blame] | 195 | /* one for each uCode image (inst/data, init/runtime/wowlan) */ |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 196 | struct fw_desc { |
Johannes Berg | 83f84d7 | 2012-09-10 11:50:18 +0200 | [diff] [blame] | 197 | const void *data; /* vmalloc'ed data */ |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 198 | u32 len; /* size in bytes */ |
David Spinadel | 0cedacc | 2012-03-10 13:00:12 -0800 | [diff] [blame] | 199 | u32 offset; /* offset in the device */ |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 200 | }; |
| 201 | |
| 202 | struct fw_img { |
David Spinadel | 6dfa8d0 | 2012-03-10 13:00:14 -0800 | [diff] [blame] | 203 | struct fw_desc sec[IWL_UCODE_SECTION_MAX]; |
Eran Harary | e2d6f4e | 2013-10-02 13:53:40 +0300 | [diff] [blame] | 204 | bool is_secure; |
| 205 | bool is_dual_cpus; |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 206 | }; |
| 207 | |
| 208 | /* uCode version contains 4 values: Major/Minor/API/Serial */ |
| 209 | #define IWL_UCODE_MAJOR(ver) (((ver) & 0xFF000000) >> 24) |
| 210 | #define IWL_UCODE_MINOR(ver) (((ver) & 0x00FF0000) >> 16) |
| 211 | #define IWL_UCODE_API(ver) (((ver) & 0x0000FF00) >> 8) |
| 212 | #define IWL_UCODE_SERIAL(ver) ((ver) & 0x000000FF) |
| 213 | |
Johannes Berg | aa2b177 | 2013-01-24 14:12:07 +0100 | [diff] [blame] | 214 | /* |
| 215 | * Calibration control struct. |
| 216 | * Sent as part of the phy configuration command. |
| 217 | * @flow_trigger: bitmap for which calibrations to perform according to |
| 218 | * flow triggers. |
| 219 | * @event_trigger: bitmap for which calibrations to perform according to |
| 220 | * event triggers. |
| 221 | */ |
| 222 | struct iwl_tlv_calib_ctrl { |
| 223 | __le32 flow_trigger; |
| 224 | __le32 event_trigger; |
| 225 | } __packed; |
| 226 | |
Emmanuel Grumbach | d110cb5 | 2013-03-07 17:27:40 +0200 | [diff] [blame] | 227 | enum iwl_fw_phy_cfg { |
| 228 | FW_PHY_CFG_RADIO_TYPE_POS = 0, |
| 229 | FW_PHY_CFG_RADIO_TYPE = 0x3 << FW_PHY_CFG_RADIO_TYPE_POS, |
| 230 | FW_PHY_CFG_RADIO_STEP_POS = 2, |
| 231 | FW_PHY_CFG_RADIO_STEP = 0x3 << FW_PHY_CFG_RADIO_STEP_POS, |
| 232 | FW_PHY_CFG_RADIO_DASH_POS = 4, |
| 233 | FW_PHY_CFG_RADIO_DASH = 0x3 << FW_PHY_CFG_RADIO_DASH_POS, |
| 234 | FW_PHY_CFG_TX_CHAIN_POS = 16, |
| 235 | FW_PHY_CFG_TX_CHAIN = 0xf << FW_PHY_CFG_TX_CHAIN_POS, |
| 236 | FW_PHY_CFG_RX_CHAIN_POS = 20, |
| 237 | FW_PHY_CFG_RX_CHAIN = 0xf << FW_PHY_CFG_RX_CHAIN_POS, |
| 238 | }; |
| 239 | |
Max Stepanov | e36e543 | 2013-08-27 19:56:13 +0300 | [diff] [blame] | 240 | #define IWL_UCODE_MAX_CS 1 |
| 241 | |
| 242 | /** |
| 243 | * struct iwl_fw_cipher_scheme - a cipher scheme supported by FW. |
| 244 | * @cipher: a cipher suite selector |
| 245 | * @flags: cipher scheme flags (currently reserved for a future use) |
| 246 | * @hdr_len: a size of MPDU security header |
| 247 | * @pn_len: a size of PN |
| 248 | * @pn_off: an offset of pn from the beginning of the security header |
| 249 | * @key_idx_off: an offset of key index byte in the security header |
| 250 | * @key_idx_mask: a bit mask of key_idx bits |
| 251 | * @key_idx_shift: bit shift needed to get key_idx |
| 252 | * @mic_len: mic length in bytes |
| 253 | * @hw_cipher: a HW cipher index used in host commands |
| 254 | */ |
| 255 | struct iwl_fw_cipher_scheme { |
| 256 | __le32 cipher; |
| 257 | u8 flags; |
| 258 | u8 hdr_len; |
| 259 | u8 pn_len; |
| 260 | u8 pn_off; |
| 261 | u8 key_idx_off; |
| 262 | u8 key_idx_mask; |
| 263 | u8 key_idx_shift; |
| 264 | u8 mic_len; |
| 265 | u8 hw_cipher; |
| 266 | } __packed; |
| 267 | |
| 268 | /** |
| 269 | * struct iwl_fw_cscheme_list - a cipher scheme list |
| 270 | * @size: a number of entries |
| 271 | * @cs: cipher scheme entries |
| 272 | */ |
| 273 | struct iwl_fw_cscheme_list { |
| 274 | u8 size; |
| 275 | struct iwl_fw_cipher_scheme cs[]; |
| 276 | } __packed; |
| 277 | |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 278 | /** |
| 279 | * struct iwl_fw - variables associated with the firmware |
| 280 | * |
| 281 | * @ucode_ver: ucode version from the ucode file |
| 282 | * @fw_version: firmware version string |
David Spinadel | 6dfa8d0 | 2012-03-10 13:00:14 -0800 | [diff] [blame] | 283 | * @img: ucode image like ucode_rt, ucode_init, ucode_wowlan. |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 284 | * @ucode_capa: capabilities parsed from the ucode file. |
| 285 | * @enhance_sensitivity_table: device can do enhanced sensitivity. |
| 286 | * @init_evtlog_ptr: event log offset for init ucode. |
| 287 | * @init_evtlog_size: event log size for init ucode. |
| 288 | * @init_errlog_ptr: error log offfset for init ucode. |
| 289 | * @inst_evtlog_ptr: event log offset for runtime ucode. |
| 290 | * @inst_evtlog_size: event log size for runtime ucode. |
| 291 | * @inst_errlog_ptr: error log offfset for runtime ucode. |
Johannes Berg | 8ca151b | 2013-01-24 14:25:36 +0100 | [diff] [blame] | 292 | * @mvm_fw: indicates this is MVM firmware |
Max Stepanov | e36e543 | 2013-08-27 19:56:13 +0300 | [diff] [blame] | 293 | * @cipher_scheme: optional external cipher scheme. |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 294 | */ |
| 295 | struct iwl_fw { |
| 296 | u32 ucode_ver; |
| 297 | |
Jiri Pirko | 8113554 | 2013-01-06 02:12:51 +0000 | [diff] [blame] | 298 | char fw_version[ETHTOOL_FWVERS_LEN]; |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 299 | |
| 300 | /* ucode images */ |
David Spinadel | 6dfa8d0 | 2012-03-10 13:00:14 -0800 | [diff] [blame] | 301 | struct fw_img img[IWL_UCODE_TYPE_MAX]; |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 302 | |
| 303 | struct iwl_ucode_capabilities ucode_capa; |
| 304 | bool enhance_sensitivity_table; |
| 305 | |
| 306 | u32 init_evtlog_ptr, init_evtlog_size, init_errlog_ptr; |
| 307 | u32 inst_evtlog_ptr, inst_evtlog_size, inst_errlog_ptr; |
David Spinadel | ed8c836 | 2012-03-10 13:00:13 -0800 | [diff] [blame] | 308 | |
Johannes Berg | aa2b177 | 2013-01-24 14:12:07 +0100 | [diff] [blame] | 309 | struct iwl_tlv_calib_ctrl default_calib[IWL_UCODE_TYPE_MAX]; |
David Spinadel | ed8c836 | 2012-03-10 13:00:13 -0800 | [diff] [blame] | 310 | u32 phy_config; |
Eran Harary | 77db0a3 | 2014-02-04 14:21:38 +0200 | [diff] [blame] | 311 | u8 valid_tx_ant; |
| 312 | u8 valid_rx_ant; |
David Spinadel | 4db2c9a | 2012-03-10 13:00:15 -0800 | [diff] [blame] | 313 | |
| 314 | bool mvm_fw; |
Max Stepanov | e36e543 | 2013-08-27 19:56:13 +0300 | [diff] [blame] | 315 | |
| 316 | struct ieee80211_cipher_scheme cs[IWL_UCODE_MAX_CS]; |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 317 | }; |
| 318 | |
Johannes Berg | 0692fe4 | 2012-03-06 13:30:37 -0800 | [diff] [blame] | 319 | #endif /* __iwl_fw_h__ */ |