linux/drivers/net/wireless/iwlwifi/iwl-fw-file.h
<<
>>
Prefs
   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 *
   8 * Copyright(c) 2008 - 2012 Intel Corporation. All rights reserved.
   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
  25 * in the file called LICENSE.GPL.
  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 *
  33 * Copyright(c) 2005 - 2012 Intel Corporation. All rights reserved.
  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_file_h__
  64#define __iwl_fw_file_h__
  65
  66#include <linux/netdevice.h>
  67
  68/* v1/v2 uCode file layout */
  69struct iwl_ucode_header {
  70        __le32 ver;     /* major/minor/API/serial */
  71        union {
  72                struct {
  73                        __le32 inst_size;       /* bytes of runtime code */
  74                        __le32 data_size;       /* bytes of runtime data */
  75                        __le32 init_size;       /* bytes of init code */
  76                        __le32 init_data_size;  /* bytes of init data */
  77                        __le32 boot_size;       /* bytes of bootstrap code */
  78                        u8 data[0];             /* in same order as sizes */
  79                } v1;
  80                struct {
  81                        __le32 build;           /* build number */
  82                        __le32 inst_size;       /* bytes of runtime code */
  83                        __le32 data_size;       /* bytes of runtime data */
  84                        __le32 init_size;       /* bytes of init code */
  85                        __le32 init_data_size;  /* bytes of init data */
  86                        __le32 boot_size;       /* bytes of bootstrap code */
  87                        u8 data[0];             /* in same order as sizes */
  88                } v2;
  89        } u;
  90};
  91
  92/*
  93 * new TLV uCode file layout
  94 *
  95 * The new TLV file format contains TLVs, that each specify
  96 * some piece of data.
  97 */
  98
  99enum iwl_ucode_tlv_type {
 100        IWL_UCODE_TLV_INVALID           = 0, /* unused */
 101        IWL_UCODE_TLV_INST              = 1,
 102        IWL_UCODE_TLV_DATA              = 2,
 103        IWL_UCODE_TLV_INIT              = 3,
 104        IWL_UCODE_TLV_INIT_DATA         = 4,
 105        IWL_UCODE_TLV_BOOT              = 5,
 106        IWL_UCODE_TLV_PROBE_MAX_LEN     = 6, /* a u32 value */
 107        IWL_UCODE_TLV_PAN               = 7,
 108        IWL_UCODE_TLV_RUNT_EVTLOG_PTR   = 8,
 109        IWL_UCODE_TLV_RUNT_EVTLOG_SIZE  = 9,
 110        IWL_UCODE_TLV_RUNT_ERRLOG_PTR   = 10,
 111        IWL_UCODE_TLV_INIT_EVTLOG_PTR   = 11,
 112        IWL_UCODE_TLV_INIT_EVTLOG_SIZE  = 12,
 113        IWL_UCODE_TLV_INIT_ERRLOG_PTR   = 13,
 114        IWL_UCODE_TLV_ENHANCE_SENS_TBL  = 14,
 115        IWL_UCODE_TLV_PHY_CALIBRATION_SIZE = 15,
 116        IWL_UCODE_TLV_WOWLAN_INST       = 16,
 117        IWL_UCODE_TLV_WOWLAN_DATA       = 17,
 118        IWL_UCODE_TLV_FLAGS             = 18,
 119        IWL_UCODE_TLV_SEC_RT            = 19,
 120        IWL_UCODE_TLV_SEC_INIT          = 20,
 121        IWL_UCODE_TLV_SEC_WOWLAN        = 21,
 122        IWL_UCODE_TLV_DEF_CALIB         = 22,
 123        IWL_UCODE_TLV_PHY_SKU           = 23,
 124};
 125
 126struct iwl_ucode_tlv {
 127        __le32 type;            /* see above */
 128        __le32 length;          /* not including type/length fields */
 129        u8 data[0];
 130};
 131
 132#define IWL_TLV_UCODE_MAGIC     0x0a4c5749
 133
 134struct iwl_tlv_ucode_header {
 135        /*
 136         * The TLV style ucode header is distinguished from
 137         * the v1/v2 style header by first four bytes being
 138         * zero, as such is an invalid combination of
 139         * major/minor/API/serial versions.
 140         */
 141        __le32 zero;
 142        __le32 magic;
 143        u8 human_readable[64];
 144        __le32 ver;             /* major/minor/API/serial */
 145        __le32 build;
 146        __le64 ignore;
 147        /*
 148         * The data contained herein has a TLV layout,
 149         * see above for the TLV header and types.
 150         * Note that each TLV is padded to a length
 151         * that is a multiple of 4 for alignment.
 152         */
 153        u8 data[0];
 154};
 155
 156#endif  /* __iwl_fw_file_h__ */
 157