linux/drivers/net/wireless/iwlwifi/iwl-config.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) 2007 - 2013 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 COPYING.
  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 - 2013 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_CONFIG_H__
  64#define __IWL_CONFIG_H__
  65
  66#include <linux/types.h>
  67#include <net/mac80211.h>
  68
  69
  70enum iwl_device_family {
  71        IWL_DEVICE_FAMILY_UNDEFINED,
  72        IWL_DEVICE_FAMILY_1000,
  73        IWL_DEVICE_FAMILY_100,
  74        IWL_DEVICE_FAMILY_2000,
  75        IWL_DEVICE_FAMILY_2030,
  76        IWL_DEVICE_FAMILY_105,
  77        IWL_DEVICE_FAMILY_135,
  78        IWL_DEVICE_FAMILY_5000,
  79        IWL_DEVICE_FAMILY_5150,
  80        IWL_DEVICE_FAMILY_6000,
  81        IWL_DEVICE_FAMILY_6000i,
  82        IWL_DEVICE_FAMILY_6005,
  83        IWL_DEVICE_FAMILY_6030,
  84        IWL_DEVICE_FAMILY_6050,
  85        IWL_DEVICE_FAMILY_6150,
  86        IWL_DEVICE_FAMILY_7000,
  87};
  88
  89/*
  90 * LED mode
  91 *    IWL_LED_DEFAULT:  use device default
  92 *    IWL_LED_RF_STATE: turn LED on/off based on RF state
  93 *                      LED ON  = RF ON
  94 *                      LED OFF = RF OFF
  95 *    IWL_LED_BLINK:    adjust led blink rate based on blink table
  96 *    IWL_LED_DISABLE:  led disabled
  97 */
  98enum iwl_led_mode {
  99        IWL_LED_DEFAULT,
 100        IWL_LED_RF_STATE,
 101        IWL_LED_BLINK,
 102        IWL_LED_DISABLE,
 103};
 104
 105/*
 106 * This is the threshold value of plcp error rate per 100mSecs.  It is
 107 * used to set and check for the validity of plcp_delta.
 108 */
 109#define IWL_MAX_PLCP_ERR_THRESHOLD_MIN          1
 110#define IWL_MAX_PLCP_ERR_THRESHOLD_DEF          50
 111#define IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF     100
 112#define IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF 200
 113#define IWL_MAX_PLCP_ERR_THRESHOLD_MAX          255
 114#define IWL_MAX_PLCP_ERR_THRESHOLD_DISABLE      0
 115
 116/* TX queue watchdog timeouts in mSecs */
 117#define IWL_WATCHDOG_DISABLED   0
 118#define IWL_DEF_WD_TIMEOUT      2000
 119#define IWL_LONG_WD_TIMEOUT     10000
 120#define IWL_MAX_WD_TIMEOUT      120000
 121
 122/* Antenna presence definitions */
 123#define ANT_NONE        0x0
 124#define ANT_A           BIT(0)
 125#define ANT_B           BIT(1)
 126#define ANT_C           BIT(2)
 127#define ANT_AB          (ANT_A | ANT_B)
 128#define ANT_AC          (ANT_A | ANT_C)
 129#define ANT_BC          (ANT_B | ANT_C)
 130#define ANT_ABC         (ANT_A | ANT_B | ANT_C)
 131
 132
 133/*
 134 * @max_ll_items: max number of OTP blocks
 135 * @shadow_ram_support: shadow support for OTP memory
 136 * @led_compensation: compensate on the led on/off time per HW according
 137 *      to the deviation to achieve the desired led frequency.
 138 *      The detail algorithm is described in iwl-led.c
 139 * @wd_timeout: TX queues watchdog timeout
 140 * @max_event_log_size: size of event log buffer size for ucode event logging
 141 * @shadow_reg_enable: HW shadow register support
 142 */
 143struct iwl_base_params {
 144        int eeprom_size;
 145        int num_of_queues;      /* def: HW dependent */
 146        /* for iwl_pcie_apm_init() */
 147        u32 pll_cfg_val;
 148
 149        const u16 max_ll_items;
 150        const bool shadow_ram_support;
 151        u16 led_compensation;
 152        unsigned int wd_timeout;
 153        u32 max_event_log_size;
 154        const bool shadow_reg_enable;
 155        const bool pcie_l1_allowed;
 156};
 157
 158/*
 159 * @use_rts_for_aggregation: use rts/cts protection for HT traffic
 160 * @ht40_bands: bitmap of bands (using %IEEE80211_BAND_*) that support HT40
 161 */
 162struct iwl_ht_params {
 163        enum ieee80211_smps_mode smps_mode;
 164        const bool ht_greenfield_support; /* if used set to true */
 165        bool use_rts_for_aggregation;
 166        u8 ht40_bands;
 167};
 168
 169/*
 170 * information on how to parse the EEPROM
 171 */
 172#define EEPROM_REG_BAND_1_CHANNELS              0x08
 173#define EEPROM_REG_BAND_2_CHANNELS              0x26
 174#define EEPROM_REG_BAND_3_CHANNELS              0x42
 175#define EEPROM_REG_BAND_4_CHANNELS              0x5C
 176#define EEPROM_REG_BAND_5_CHANNELS              0x74
 177#define EEPROM_REG_BAND_24_HT40_CHANNELS        0x82
 178#define EEPROM_REG_BAND_52_HT40_CHANNELS        0x92
 179#define EEPROM_6000_REG_BAND_24_HT40_CHANNELS   0x80
 180#define EEPROM_REGULATORY_BAND_NO_HT40          0
 181
 182struct iwl_eeprom_params {
 183        const u8 regulatory_bands[7];
 184        bool enhanced_txpower;
 185};
 186
 187/**
 188 * struct iwl_cfg
 189 * @name: Offical name of the device
 190 * @fw_name_pre: Firmware filename prefix. The api version and extension
 191 *      (.ucode) will be added to filename before loading from disk. The
 192 *      filename is constructed as fw_name_pre<api>.ucode.
 193 * @ucode_api_max: Highest version of uCode API supported by driver.
 194 * @ucode_api_ok: oldest version of the uCode API that is OK to load
 195 *      without a warning, for use in transitions
 196 * @ucode_api_min: Lowest version of uCode API supported by driver.
 197 * @max_inst_size: The maximal length of the fw inst section
 198 * @max_data_size: The maximal length of the fw data section
 199 * @valid_tx_ant: valid transmit antenna
 200 * @valid_rx_ant: valid receive antenna
 201 * @nvm_ver: NVM version
 202 * @nvm_calib_ver: NVM calibration version
 203 * @lib: pointer to the lib ops
 204 * @base_params: pointer to basic parameters
 205 * @ht_params: point to ht parameters
 206 * @led_mode: 0=blinking, 1=On(RF On)/Off(RF Off)
 207 * @rx_with_siso_diversity: 1x1 device with rx antenna diversity
 208 * @internal_wimax_coex: internal wifi/wimax combo device
 209 * @high_temp: Is this NIC is designated to be in high temperature.
 210 * @host_interrupt_operation_mode: device needs host interrupt operation
 211 *      mode set
 212 *
 213 * We enable the driver to be backward compatible wrt. hardware features.
 214 * API differences in uCode shouldn't be handled here but through TLVs
 215 * and/or the uCode API version instead.
 216 */
 217struct iwl_cfg {
 218        /* params specific to an individual device within a device family */
 219        const char *name;
 220        const char *fw_name_pre;
 221        const unsigned int ucode_api_max;
 222        const unsigned int ucode_api_ok;
 223        const unsigned int ucode_api_min;
 224        const enum iwl_device_family device_family;
 225        const u32 max_data_size;
 226        const u32 max_inst_size;
 227        u8   valid_tx_ant;
 228        u8   valid_rx_ant;
 229        bool bt_shared_single_ant;
 230        u16  nvm_ver;
 231        u16  nvm_calib_ver;
 232        /* params not likely to change within a device family */
 233        const struct iwl_base_params *base_params;
 234        /* params likely to change within a device family */
 235        const struct iwl_ht_params *ht_params;
 236        const struct iwl_eeprom_params *eeprom_params;
 237        enum iwl_led_mode led_mode;
 238        const bool rx_with_siso_diversity;
 239        const bool internal_wimax_coex;
 240        const bool host_interrupt_operation_mode;
 241        bool high_temp;
 242};
 243
 244/*
 245 * This list declares the config structures for all devices.
 246 */
 247#if IS_ENABLED(CONFIG_IWLDVM)
 248extern const struct iwl_cfg iwl5300_agn_cfg;
 249extern const struct iwl_cfg iwl5100_agn_cfg;
 250extern const struct iwl_cfg iwl5350_agn_cfg;
 251extern const struct iwl_cfg iwl5100_bgn_cfg;
 252extern const struct iwl_cfg iwl5100_abg_cfg;
 253extern const struct iwl_cfg iwl5150_agn_cfg;
 254extern const struct iwl_cfg iwl5150_abg_cfg;
 255extern const struct iwl_cfg iwl6005_2agn_cfg;
 256extern const struct iwl_cfg iwl6005_2abg_cfg;
 257extern const struct iwl_cfg iwl6005_2bg_cfg;
 258extern const struct iwl_cfg iwl6005_2agn_sff_cfg;
 259extern const struct iwl_cfg iwl6005_2agn_d_cfg;
 260extern const struct iwl_cfg iwl6005_2agn_mow1_cfg;
 261extern const struct iwl_cfg iwl6005_2agn_mow2_cfg;
 262extern const struct iwl_cfg iwl1030_bgn_cfg;
 263extern const struct iwl_cfg iwl1030_bg_cfg;
 264extern const struct iwl_cfg iwl6030_2agn_cfg;
 265extern const struct iwl_cfg iwl6030_2abg_cfg;
 266extern const struct iwl_cfg iwl6030_2bgn_cfg;
 267extern const struct iwl_cfg iwl6030_2bg_cfg;
 268extern const struct iwl_cfg iwl6000i_2agn_cfg;
 269extern const struct iwl_cfg iwl6000i_2abg_cfg;
 270extern const struct iwl_cfg iwl6000i_2bg_cfg;
 271extern const struct iwl_cfg iwl6000_3agn_cfg;
 272extern const struct iwl_cfg iwl6050_2agn_cfg;
 273extern const struct iwl_cfg iwl6050_2abg_cfg;
 274extern const struct iwl_cfg iwl6150_bgn_cfg;
 275extern const struct iwl_cfg iwl6150_bg_cfg;
 276extern const struct iwl_cfg iwl1000_bgn_cfg;
 277extern const struct iwl_cfg iwl1000_bg_cfg;
 278extern const struct iwl_cfg iwl100_bgn_cfg;
 279extern const struct iwl_cfg iwl100_bg_cfg;
 280extern const struct iwl_cfg iwl130_bgn_cfg;
 281extern const struct iwl_cfg iwl130_bg_cfg;
 282extern const struct iwl_cfg iwl2000_2bgn_cfg;
 283extern const struct iwl_cfg iwl2000_2bgn_d_cfg;
 284extern const struct iwl_cfg iwl2030_2bgn_cfg;
 285extern const struct iwl_cfg iwl6035_2agn_cfg;
 286extern const struct iwl_cfg iwl6035_2agn_sff_cfg;
 287extern const struct iwl_cfg iwl105_bgn_cfg;
 288extern const struct iwl_cfg iwl105_bgn_d_cfg;
 289extern const struct iwl_cfg iwl135_bgn_cfg;
 290#endif /* CONFIG_IWLDVM */
 291#if IS_ENABLED(CONFIG_IWLMVM)
 292extern const struct iwl_cfg iwl7260_2ac_cfg;
 293extern const struct iwl_cfg iwl7260_2ac_cfg_high_temp;
 294extern const struct iwl_cfg iwl7260_2n_cfg;
 295extern const struct iwl_cfg iwl7260_n_cfg;
 296extern const struct iwl_cfg iwl3160_2ac_cfg;
 297extern const struct iwl_cfg iwl3160_2n_cfg;
 298extern const struct iwl_cfg iwl3160_n_cfg;
 299extern const struct iwl_cfg iwl7265_2ac_cfg;
 300extern const struct iwl_cfg iwl7265_2n_cfg;
 301extern const struct iwl_cfg iwl7265_n_cfg;
 302#endif /* CONFIG_IWLMVM */
 303
 304#endif /* __IWL_CONFIG_H__ */
 305