linux/drivers/net/wireless/iwlwifi/iwl-dev.h
<<
>>
Prefs
   1/******************************************************************************
   2 *
   3 * Copyright(c) 2003 - 2010 Intel Corporation. All rights reserved.
   4 *
   5 * This program is free software; you can redistribute it and/or modify it
   6 * under the terms of version 2 of the GNU General Public License as
   7 * published by the Free Software Foundation.
   8 *
   9 * This program is distributed in the hope that it will be useful, but WITHOUT
  10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  12 * more details.
  13 *
  14 * You should have received a copy of the GNU General Public License along with
  15 * this program; if not, write to the Free Software Foundation, Inc.,
  16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
  17 *
  18 * The full GNU General Public License is included in this distribution in the
  19 * file called LICENSE.
  20 *
  21 * Contact Information:
  22 *  Intel Linux Wireless <ilw@linux.intel.com>
  23 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
  24 *
  25 *****************************************************************************/
  26/*
  27 * Please use this file (iwl-dev.h) for driver implementation definitions.
  28 * Please use iwl-commands.h for uCode API definitions.
  29 * Please use iwl-4965-hw.h for hardware-related definitions.
  30 */
  31
  32#ifndef __iwl_dev_h__
  33#define __iwl_dev_h__
  34
  35#include <linux/pci.h> /* for struct pci_device_id */
  36#include <linux/kernel.h>
  37#include <net/ieee80211_radiotap.h>
  38
  39#include "iwl-eeprom.h"
  40#include "iwl-csr.h"
  41#include "iwl-prph.h"
  42#include "iwl-fh.h"
  43#include "iwl-debug.h"
  44#include "iwl-4965-hw.h"
  45#include "iwl-3945-hw.h"
  46#include "iwl-led.h"
  47#include "iwl-power.h"
  48#include "iwl-agn-rs.h"
  49
  50/* configuration for the iwl4965 */
  51extern struct iwl_cfg iwl4965_agn_cfg;
  52extern struct iwl_cfg iwl5300_agn_cfg;
  53extern struct iwl_cfg iwl5100_agn_cfg;
  54extern struct iwl_cfg iwl5350_agn_cfg;
  55extern struct iwl_cfg iwl5100_bgn_cfg;
  56extern struct iwl_cfg iwl5100_abg_cfg;
  57extern struct iwl_cfg iwl5150_agn_cfg;
  58extern struct iwl_cfg iwl5150_abg_cfg;
  59extern struct iwl_cfg iwl6000i_2agn_cfg;
  60extern struct iwl_cfg iwl6000i_2abg_cfg;
  61extern struct iwl_cfg iwl6000i_2bg_cfg;
  62extern struct iwl_cfg iwl6000_3agn_cfg;
  63extern struct iwl_cfg iwl6050_2agn_cfg;
  64extern struct iwl_cfg iwl6050_2abg_cfg;
  65extern struct iwl_cfg iwl1000_bgn_cfg;
  66extern struct iwl_cfg iwl1000_bg_cfg;
  67
  68struct iwl_tx_queue;
  69
  70/* shared structures from iwl-5000.c */
  71extern struct iwl_mod_params iwl50_mod_params;
  72extern struct iwl_ucode_ops iwl5000_ucode;
  73extern struct iwl_lib_ops iwl5000_lib;
  74extern struct iwl_hcmd_ops iwl5000_hcmd;
  75extern struct iwl_hcmd_utils_ops iwl5000_hcmd_utils;
  76
  77/* shared functions from iwl-5000.c */
  78extern u16 iwl5000_get_hcmd_size(u8 cmd_id, u16 len);
  79extern u16 iwl5000_build_addsta_hcmd(const struct iwl_addsta_cmd *cmd,
  80                                     u8 *data);
  81extern void iwl5000_rts_tx_cmd_flag(struct ieee80211_tx_info *info,
  82                                    __le32 *tx_flags);
  83extern int iwl5000_calc_rssi(struct iwl_priv *priv,
  84                             struct iwl_rx_phy_res *rx_resp);
  85extern void iwl5000_nic_config(struct iwl_priv *priv);
  86extern u16 iwl5000_eeprom_calib_version(struct iwl_priv *priv);
  87extern const u8 *iwl5000_eeprom_query_addr(const struct iwl_priv *priv,
  88                                    size_t offset);
  89extern void iwl5000_txq_update_byte_cnt_tbl(struct iwl_priv *priv,
  90                                            struct iwl_tx_queue *txq,
  91                                            u16 byte_cnt);
  92extern void iwl5000_txq_inval_byte_cnt_tbl(struct iwl_priv *priv,
  93                                    struct iwl_tx_queue *txq);
  94extern int iwl5000_load_ucode(struct iwl_priv *priv);
  95extern void iwl5000_init_alive_start(struct iwl_priv *priv);
  96extern int iwl5000_alive_notify(struct iwl_priv *priv);
  97extern int iwl5000_hw_set_hw_params(struct iwl_priv *priv);
  98extern int iwl5000_txq_agg_enable(struct iwl_priv *priv, int txq_id,
  99                           int tx_fifo, int sta_id, int tid, u16 ssn_idx);
 100extern int iwl5000_txq_agg_disable(struct iwl_priv *priv, u16 txq_id,
 101                            u16 ssn_idx, u8 tx_fifo);
 102extern void iwl5000_txq_set_sched(struct iwl_priv *priv, u32 mask);
 103extern void iwl5000_setup_deferred_work(struct iwl_priv *priv);
 104extern void iwl5000_rx_handler_setup(struct iwl_priv *priv);
 105extern int iwl5000_hw_valid_rtc_data_addr(u32 addr);
 106extern int iwl5000_send_tx_power(struct iwl_priv *priv);
 107extern void iwl5000_temperature(struct iwl_priv *priv);
 108
 109/* CT-KILL constants */
 110#define CT_KILL_THRESHOLD_LEGACY   110 /* in Celsius */
 111#define CT_KILL_THRESHOLD          114 /* in Celsius */
 112#define CT_KILL_EXIT_THRESHOLD     95  /* in Celsius */
 113
 114/* Default noise level to report when noise measurement is not available.
 115 *   This may be because we're:
 116 *   1)  Not associated (4965, no beacon statistics being sent to driver)
 117 *   2)  Scanning (noise measurement does not apply to associated channel)
 118 *   3)  Receiving CCK (3945 delivers noise info only for OFDM frames)
 119 * Use default noise value of -127 ... this is below the range of measurable
 120 *   Rx dBm for either 3945 or 4965, so it can indicate "unmeasurable" to user.
 121 *   Also, -127 works better than 0 when averaging frames with/without
 122 *   noise info (e.g. averaging might be done in app); measured dBm values are
 123 *   always negative ... using a negative value as the default keeps all
 124 *   averages within an s8's (used in some apps) range of negative values. */
 125#define IWL_NOISE_MEAS_NOT_AVAILABLE (-127)
 126
 127/*
 128 * RTS threshold here is total size [2347] minus 4 FCS bytes
 129 * Per spec:
 130 *   a value of 0 means RTS on all data/management packets
 131 *   a value > max MSDU size means no RTS
 132 * else RTS for data/management frames where MPDU is larger
 133 *   than RTS value.
 134 */
 135#define DEFAULT_RTS_THRESHOLD     2347U
 136#define MIN_RTS_THRESHOLD         0U
 137#define MAX_RTS_THRESHOLD         2347U
 138#define MAX_MSDU_SIZE             2304U
 139#define MAX_MPDU_SIZE             2346U
 140#define DEFAULT_BEACON_INTERVAL   100U
 141#define DEFAULT_SHORT_RETRY_LIMIT 7U
 142#define DEFAULT_LONG_RETRY_LIMIT  4U
 143
 144struct iwl_rx_mem_buffer {
 145        dma_addr_t page_dma;
 146        struct page *page;
 147        struct list_head list;
 148};
 149
 150#define rxb_addr(r) page_address(r->page)
 151
 152/* defined below */
 153struct iwl_device_cmd;
 154
 155struct iwl_cmd_meta {
 156        /* only for SYNC commands, iff the reply skb is wanted */
 157        struct iwl_host_cmd *source;
 158        /*
 159         * only for ASYNC commands
 160         * (which is somewhat stupid -- look at iwl-sta.c for instance
 161         * which duplicates a bunch of code because the callback isn't
 162         * invoked for SYNC commands, if it were and its result passed
 163         * through it would be simpler...)
 164         */
 165        void (*callback)(struct iwl_priv *priv,
 166                         struct iwl_device_cmd *cmd,
 167                         struct iwl_rx_packet *pkt);
 168
 169        /* The CMD_SIZE_HUGE flag bit indicates that the command
 170         * structure is stored at the end of the shared queue memory. */
 171        u32 flags;
 172
 173        DECLARE_PCI_UNMAP_ADDR(mapping)
 174        DECLARE_PCI_UNMAP_LEN(len)
 175};
 176
 177/*
 178 * Generic queue structure
 179 *
 180 * Contains common data for Rx and Tx queues
 181 */
 182struct iwl_queue {
 183        int n_bd;              /* number of BDs in this queue */
 184        int write_ptr;       /* 1-st empty entry (index) host_w*/
 185        int read_ptr;         /* last used entry (index) host_r*/
 186        dma_addr_t dma_addr;   /* physical addr for BD's */
 187        int n_window;          /* safe queue window */
 188        u32 id;
 189        int low_mark;          /* low watermark, resume queue if free
 190                                * space more than this */
 191        int high_mark;         /* high watermark, stop queue if free
 192                                * space less than this */
 193} __attribute__ ((packed));
 194
 195/* One for each TFD */
 196struct iwl_tx_info {
 197        struct sk_buff *skb[IWL_NUM_OF_TBS - 1];
 198};
 199
 200/**
 201 * struct iwl_tx_queue - Tx Queue for DMA
 202 * @q: generic Rx/Tx queue descriptor
 203 * @bd: base of circular buffer of TFDs
 204 * @cmd: array of command/TX buffer pointers
 205 * @meta: array of meta data for each command/tx buffer
 206 * @dma_addr_cmd: physical address of cmd/tx buffer array
 207 * @txb: array of per-TFD driver data
 208 * @need_update: indicates need to update read/write index
 209 * @sched_retry: indicates queue is high-throughput aggregation (HT AGG) enabled
 210 *
 211 * A Tx queue consists of circular buffer of BDs (a.k.a. TFDs, transmit frame
 212 * descriptors) and required locking structures.
 213 */
 214#define TFD_TX_CMD_SLOTS 256
 215#define TFD_CMD_SLOTS 32
 216
 217struct iwl_tx_queue {
 218        struct iwl_queue q;
 219        void *tfds;
 220        struct iwl_device_cmd **cmd;
 221        struct iwl_cmd_meta *meta;
 222        struct iwl_tx_info *txb;
 223        u8 need_update;
 224        u8 sched_retry;
 225        u8 active;
 226        u8 swq_id;
 227};
 228
 229#define IWL_NUM_SCAN_RATES         (2)
 230
 231struct iwl4965_channel_tgd_info {
 232        u8 type;
 233        s8 max_power;
 234};
 235
 236struct iwl4965_channel_tgh_info {
 237        s64 last_radar_time;
 238};
 239
 240#define IWL4965_MAX_RATE (33)
 241
 242struct iwl3945_clip_group {
 243        /* maximum power level to prevent clipping for each rate, derived by
 244         *   us from this band's saturation power in EEPROM */
 245        const s8 clip_powers[IWL_MAX_RATES];
 246};
 247
 248/* current Tx power values to use, one for each rate for each channel.
 249 * requested power is limited by:
 250 * -- regulatory EEPROM limits for this channel
 251 * -- hardware capabilities (clip-powers)
 252 * -- spectrum management
 253 * -- user preference (e.g. iwconfig)
 254 * when requested power is set, base power index must also be set. */
 255struct iwl3945_channel_power_info {
 256        struct iwl3945_tx_power tpc;    /* actual radio and DSP gain settings */
 257        s8 power_table_index;   /* actual (compenst'd) index into gain table */
 258        s8 base_power_index;    /* gain index for power at factory temp. */
 259        s8 requested_power;     /* power (dBm) requested for this chnl/rate */
 260};
 261
 262/* current scan Tx power values to use, one for each scan rate for each
 263 * channel. */
 264struct iwl3945_scan_power_info {
 265        struct iwl3945_tx_power tpc;    /* actual radio and DSP gain settings */
 266        s8 power_table_index;   /* actual (compenst'd) index into gain table */
 267        s8 requested_power;     /* scan pwr (dBm) requested for chnl/rate */
 268};
 269
 270/*
 271 * One for each channel, holds all channel setup data
 272 * Some of the fields (e.g. eeprom and flags/max_power_avg) are redundant
 273 *     with one another!
 274 */
 275struct iwl_channel_info {
 276        struct iwl4965_channel_tgd_info tgd;
 277        struct iwl4965_channel_tgh_info tgh;
 278        struct iwl_eeprom_channel eeprom;       /* EEPROM regulatory limit */
 279        struct iwl_eeprom_channel ht40_eeprom;  /* EEPROM regulatory limit for
 280                                                 * HT40 channel */
 281
 282        u8 channel;       /* channel number */
 283        u8 flags;         /* flags copied from EEPROM */
 284        s8 max_power_avg; /* (dBm) regul. eeprom, normal Tx, any rate */
 285        s8 curr_txpow;    /* (dBm) regulatory/spectrum/user (not h/w) limit */
 286        s8 min_power;     /* always 0 */
 287        s8 scan_power;    /* (dBm) regul. eeprom, direct scans, any rate */
 288
 289        u8 group_index;   /* 0-4, maps channel to group1/2/3/4/5 */
 290        u8 band_index;    /* 0-4, maps channel to band1/2/3/4/5 */
 291        enum ieee80211_band band;
 292
 293        /* HT40 channel info */
 294        s8 ht40_max_power_avg;  /* (dBm) regul. eeprom, normal Tx, any rate */
 295        u8 ht40_flags;          /* flags copied from EEPROM */
 296        u8 ht40_extension_channel; /* HT_IE_EXT_CHANNEL_* */
 297
 298        /* Radio/DSP gain settings for each "normal" data Tx rate.
 299         * These include, in addition to RF and DSP gain, a few fields for
 300         *   remembering/modifying gain settings (indexes). */
 301        struct iwl3945_channel_power_info power_info[IWL4965_MAX_RATE];
 302
 303        /* Radio/DSP gain settings for each scan rate, for directed scans. */
 304        struct iwl3945_scan_power_info scan_pwr_info[IWL_NUM_SCAN_RATES];
 305};
 306
 307#define IWL_TX_FIFO_AC0 0
 308#define IWL_TX_FIFO_AC1 1
 309#define IWL_TX_FIFO_AC2 2
 310#define IWL_TX_FIFO_AC3 3
 311#define IWL_TX_FIFO_HCCA_1      5
 312#define IWL_TX_FIFO_HCCA_2      6
 313#define IWL_TX_FIFO_NONE        7
 314
 315/* Minimum number of queues. MAX_NUM is defined in hw specific files.
 316 * Set the minimum to accommodate the 4 standard TX queues, 1 command
 317 * queue, 2 (unused) HCCA queues, and 4 HT queues (one for each AC) */
 318#define IWL_MIN_NUM_QUEUES      10
 319
 320/*
 321 * Queue #4 is the command queue for 3945/4965/5x00/1000/6x00,
 322 * the driver maps it into the appropriate device FIFO for the
 323 * uCode.
 324 */
 325#define IWL_CMD_QUEUE_NUM       4
 326
 327/* Power management (not Tx power) structures */
 328
 329enum iwl_pwr_src {
 330        IWL_PWR_SRC_VMAIN,
 331        IWL_PWR_SRC_VAUX,
 332};
 333
 334#define IEEE80211_DATA_LEN              2304
 335#define IEEE80211_4ADDR_LEN             30
 336#define IEEE80211_HLEN                  (IEEE80211_4ADDR_LEN)
 337#define IEEE80211_FRAME_LEN             (IEEE80211_DATA_LEN + IEEE80211_HLEN)
 338
 339struct iwl_frame {
 340        union {
 341                struct ieee80211_hdr frame;
 342                struct iwl_tx_beacon_cmd beacon;
 343                u8 raw[IEEE80211_FRAME_LEN];
 344                u8 cmd[360];
 345        } u;
 346        struct list_head list;
 347};
 348
 349#define SEQ_TO_SN(seq) (((seq) & IEEE80211_SCTL_SEQ) >> 4)
 350#define SN_TO_SEQ(ssn) (((ssn) << 4) & IEEE80211_SCTL_SEQ)
 351#define MAX_SN ((IEEE80211_SCTL_SEQ) >> 4)
 352
 353enum {
 354        CMD_SYNC = 0,
 355        CMD_SIZE_NORMAL = 0,
 356        CMD_NO_SKB = 0,
 357        CMD_SIZE_HUGE = (1 << 0),
 358        CMD_ASYNC = (1 << 1),
 359        CMD_WANT_SKB = (1 << 2),
 360};
 361
 362#define DEF_CMD_PAYLOAD_SIZE 320
 363
 364/*
 365 * IWL_LINK_HDR_MAX should include ieee80211_hdr, radiotap header,
 366 * SNAP header and alignment. It should also be big enough for 802.11
 367 * control frames.
 368 */
 369#define IWL_LINK_HDR_MAX 64
 370
 371/**
 372 * struct iwl_device_cmd
 373 *
 374 * For allocation of the command and tx queues, this establishes the overall
 375 * size of the largest command we send to uCode, except for a scan command
 376 * (which is relatively huge; space is allocated separately).
 377 */
 378struct iwl_device_cmd {
 379        struct iwl_cmd_header hdr;      /* uCode API */
 380        union {
 381                u32 flags;
 382                u8 val8;
 383                u16 val16;
 384                u32 val32;
 385                struct iwl_tx_cmd tx;
 386                struct iwl6000_channel_switch_cmd chswitch;
 387                u8 payload[DEF_CMD_PAYLOAD_SIZE];
 388        } __attribute__ ((packed)) cmd;
 389} __attribute__ ((packed));
 390
 391#define TFD_MAX_PAYLOAD_SIZE (sizeof(struct iwl_device_cmd))
 392
 393
 394struct iwl_host_cmd {
 395        const void *data;
 396        unsigned long reply_page;
 397        void (*callback)(struct iwl_priv *priv,
 398                         struct iwl_device_cmd *cmd,
 399                         struct iwl_rx_packet *pkt);
 400        u32 flags;
 401        u16 len;
 402        u8 id;
 403};
 404
 405#define SUP_RATE_11A_MAX_NUM_CHANNELS  8
 406#define SUP_RATE_11B_MAX_NUM_CHANNELS  4
 407#define SUP_RATE_11G_MAX_NUM_CHANNELS  12
 408
 409/**
 410 * struct iwl_rx_queue - Rx queue
 411 * @bd: driver's pointer to buffer of receive buffer descriptors (rbd)
 412 * @dma_addr: bus address of buffer of receive buffer descriptors (rbd)
 413 * @read: Shared index to newest available Rx buffer
 414 * @write: Shared index to oldest written Rx packet
 415 * @free_count: Number of pre-allocated buffers in rx_free
 416 * @rx_free: list of free SKBs for use
 417 * @rx_used: List of Rx buffers with no SKB
 418 * @need_update: flag to indicate we need to update read/write index
 419 * @rb_stts: driver's pointer to receive buffer status
 420 * @rb_stts_dma: bus address of receive buffer status
 421 *
 422 * NOTE:  rx_free and rx_used are used as a FIFO for iwl_rx_mem_buffers
 423 */
 424struct iwl_rx_queue {
 425        __le32 *bd;
 426        dma_addr_t dma_addr;
 427        struct iwl_rx_mem_buffer pool[RX_QUEUE_SIZE + RX_FREE_BUFFERS];
 428        struct iwl_rx_mem_buffer *queue[RX_QUEUE_SIZE];
 429        u32 read;
 430        u32 write;
 431        u32 free_count;
 432        u32 write_actual;
 433        struct list_head rx_free;
 434        struct list_head rx_used;
 435        int need_update;
 436        struct iwl_rb_status *rb_stts;
 437        dma_addr_t rb_stts_dma;
 438        spinlock_t lock;
 439};
 440
 441#define IWL_SUPPORTED_RATES_IE_LEN         8
 442
 443#define MAX_TID_COUNT        9
 444
 445#define IWL_INVALID_RATE     0xFF
 446#define IWL_INVALID_VALUE    -1
 447
 448/**
 449 * struct iwl_ht_agg -- aggregation status while waiting for block-ack
 450 * @txq_id: Tx queue used for Tx attempt
 451 * @frame_count: # frames attempted by Tx command
 452 * @wait_for_ba: Expect block-ack before next Tx reply
 453 * @start_idx: Index of 1st Transmit Frame Descriptor (TFD) in Tx window
 454 * @bitmap0: Low order bitmap, one bit for each frame pending ACK in Tx window
 455 * @bitmap1: High order, one bit for each frame pending ACK in Tx window
 456 * @rate_n_flags: Rate at which Tx was attempted
 457 *
 458 * If REPLY_TX indicates that aggregation was attempted, driver must wait
 459 * for block ack (REPLY_COMPRESSED_BA).  This struct stores tx reply info
 460 * until block ack arrives.
 461 */
 462struct iwl_ht_agg {
 463        u16 txq_id;
 464        u16 frame_count;
 465        u16 wait_for_ba;
 466        u16 start_idx;
 467        u64 bitmap;
 468        u32 rate_n_flags;
 469#define IWL_AGG_OFF 0
 470#define IWL_AGG_ON 1
 471#define IWL_EMPTYING_HW_QUEUE_ADDBA 2
 472#define IWL_EMPTYING_HW_QUEUE_DELBA 3
 473        u8 state;
 474};
 475
 476
 477struct iwl_tid_data {
 478        u16 seq_number;
 479        u16 tfds_in_queue;
 480        struct iwl_ht_agg agg;
 481};
 482
 483struct iwl_hw_key {
 484        enum ieee80211_key_alg alg;
 485        int keylen;
 486        u8 keyidx;
 487        u8 key[32];
 488};
 489
 490union iwl_ht_rate_supp {
 491        u16 rates;
 492        struct {
 493                u8 siso_rate;
 494                u8 mimo_rate;
 495        };
 496};
 497
 498#define CFG_HT_RX_AMPDU_FACTOR_DEF  (0x3)
 499
 500/*
 501 * Maximal MPDU density for TX aggregation
 502 * 4 - 2us density
 503 * 5 - 4us density
 504 * 6 - 8us density
 505 * 7 - 16us density
 506 */
 507#define CFG_HT_MPDU_DENSITY_4USEC   (0x5)
 508#define CFG_HT_MPDU_DENSITY_DEF CFG_HT_MPDU_DENSITY_4USEC
 509
 510struct iwl_ht_config {
 511        /* self configuration data */
 512        bool is_ht;
 513        bool is_40mhz;
 514        bool single_chain_sufficient;
 515        enum ieee80211_smps_mode smps; /* current smps mode */
 516        /* BSS related data */
 517        u8 extension_chan_offset;
 518        u8 ht_protection;
 519        u8 non_GF_STA_present;
 520};
 521
 522union iwl_qos_capabity {
 523        struct {
 524                u8 edca_count:4;        /* bit 0-3 */
 525                u8 q_ack:1;             /* bit 4 */
 526                u8 queue_request:1;     /* bit 5 */
 527                u8 txop_request:1;      /* bit 6 */
 528                u8 reserved:1;          /* bit 7 */
 529        } q_AP;
 530        struct {
 531                u8 acvo_APSD:1;         /* bit 0 */
 532                u8 acvi_APSD:1;         /* bit 1 */
 533                u8 ac_bk_APSD:1;        /* bit 2 */
 534                u8 ac_be_APSD:1;        /* bit 3 */
 535                u8 q_ack:1;             /* bit 4 */
 536                u8 max_len:2;           /* bit 5-6 */
 537                u8 more_data_ack:1;     /* bit 7 */
 538        } q_STA;
 539        u8 val;
 540};
 541
 542/* QoS structures */
 543struct iwl_qos_info {
 544        int qos_active;
 545        union iwl_qos_capabity qos_cap;
 546        struct iwl_qosparam_cmd def_qos_parm;
 547};
 548
 549struct iwl_station_entry {
 550        struct iwl_addsta_cmd sta;
 551        struct iwl_tid_data tid[MAX_TID_COUNT];
 552        u8 used;
 553        struct iwl_hw_key keyinfo;
 554};
 555
 556/*
 557 * iwl_station_priv: Driver's private station information
 558 *
 559 * When mac80211 creates a station it reserves some space (hw->sta_data_size)
 560 * in the structure for use by driver. This structure is places in that
 561 * space.
 562 */
 563struct iwl_station_priv {
 564        struct iwl_lq_sta lq_sta;
 565        atomic_t pending_frames;
 566        bool client;
 567        bool asleep;
 568};
 569
 570/* one for each uCode image (inst/data, boot/init/runtime) */
 571struct fw_desc {
 572        void *v_addr;           /* access by driver */
 573        dma_addr_t p_addr;      /* access by card's busmaster DMA */
 574        u32 len;                /* bytes */
 575};
 576
 577/* uCode file layout */
 578struct iwl_ucode_header {
 579        __le32 ver;     /* major/minor/API/serial */
 580        union {
 581                struct {
 582                        __le32 inst_size;       /* bytes of runtime code */
 583                        __le32 data_size;       /* bytes of runtime data */
 584                        __le32 init_size;       /* bytes of init code */
 585                        __le32 init_data_size;  /* bytes of init data */
 586                        __le32 boot_size;       /* bytes of bootstrap code */
 587                        u8 data[0];             /* in same order as sizes */
 588                } v1;
 589                struct {
 590                        __le32 build;           /* build number */
 591                        __le32 inst_size;       /* bytes of runtime code */
 592                        __le32 data_size;       /* bytes of runtime data */
 593                        __le32 init_size;       /* bytes of init code */
 594                        __le32 init_data_size;  /* bytes of init data */
 595                        __le32 boot_size;       /* bytes of bootstrap code */
 596                        u8 data[0];             /* in same order as sizes */
 597                } v2;
 598        } u;
 599};
 600#define UCODE_HEADER_SIZE(ver) ((ver) == 1 ? 24 : 28)
 601
 602struct iwl4965_ibss_seq {
 603        u8 mac[ETH_ALEN];
 604        u16 seq_num;
 605        u16 frag_num;
 606        unsigned long packet_time;
 607        struct list_head list;
 608};
 609
 610struct iwl_sensitivity_ranges {
 611        u16 min_nrg_cck;
 612        u16 max_nrg_cck;
 613
 614        u16 nrg_th_cck;
 615        u16 nrg_th_ofdm;
 616
 617        u16 auto_corr_min_ofdm;
 618        u16 auto_corr_min_ofdm_mrc;
 619        u16 auto_corr_min_ofdm_x1;
 620        u16 auto_corr_min_ofdm_mrc_x1;
 621
 622        u16 auto_corr_max_ofdm;
 623        u16 auto_corr_max_ofdm_mrc;
 624        u16 auto_corr_max_ofdm_x1;
 625        u16 auto_corr_max_ofdm_mrc_x1;
 626
 627        u16 auto_corr_max_cck;
 628        u16 auto_corr_max_cck_mrc;
 629        u16 auto_corr_min_cck;
 630        u16 auto_corr_min_cck_mrc;
 631
 632        u16 barker_corr_th_min;
 633        u16 barker_corr_th_min_mrc;
 634        u16 nrg_th_cca;
 635};
 636
 637
 638#define KELVIN_TO_CELSIUS(x) ((x)-273)
 639#define CELSIUS_TO_KELVIN(x) ((x)+273)
 640
 641
 642/**
 643 * struct iwl_hw_params
 644 * @max_txq_num: Max # Tx queues supported
 645 * @dma_chnl_num: Number of Tx DMA/FIFO channels
 646 * @scd_bc_tbls_size: size of scheduler byte count tables
 647 * @tfd_size: TFD size
 648 * @tx/rx_chains_num: Number of TX/RX chains
 649 * @valid_tx/rx_ant: usable antennas
 650 * @max_rxq_size: Max # Rx frames in Rx queue (must be power-of-2)
 651 * @max_rxq_log: Log-base-2 of max_rxq_size
 652 * @rx_page_order: Rx buffer page order
 653 * @rx_wrt_ptr_reg: FH{39}_RSCSR_CHNL0_WPTR
 654 * @max_stations:
 655 * @bcast_sta_id:
 656 * @ht40_channel: is 40MHz width possible in band 2.4
 657 * BIT(IEEE80211_BAND_5GHZ) BIT(IEEE80211_BAND_5GHZ)
 658 * @sw_crypto: 0 for hw, 1 for sw
 659 * @max_xxx_size: for ucode uses
 660 * @ct_kill_threshold: temperature threshold
 661 * @calib_init_cfg: setup initial calibrations for the hw
 662 * @struct iwl_sensitivity_ranges: range of sensitivity values
 663 */
 664struct iwl_hw_params {
 665        u8 max_txq_num;
 666        u8 dma_chnl_num;
 667        u16 scd_bc_tbls_size;
 668        u32 tfd_size;
 669        u8  tx_chains_num;
 670        u8  rx_chains_num;
 671        u8  valid_tx_ant;
 672        u8  valid_rx_ant;
 673        u16 max_rxq_size;
 674        u16 max_rxq_log;
 675        u32 rx_page_order;
 676        u32 rx_wrt_ptr_reg;
 677        u8  max_stations;
 678        u8  bcast_sta_id;
 679        u8  ht40_channel;
 680        u8  max_beacon_itrvl;   /* in 1024 ms */
 681        u32 max_inst_size;
 682        u32 max_data_size;
 683        u32 max_bsm_size;
 684        u32 ct_kill_threshold; /* value in hw-dependent units */
 685        u32 ct_kill_exit_threshold; /* value in hw-dependent units */
 686                                    /* for 1000, 6000 series and up */
 687        u32 calib_init_cfg;
 688        const struct iwl_sensitivity_ranges *sens;
 689};
 690
 691
 692/******************************************************************************
 693 *
 694 * Functions implemented in core module which are forward declared here
 695 * for use by iwl-[4-5].c
 696 *
 697 * NOTE:  The implementation of these functions are not hardware specific
 698 * which is why they are in the core module files.
 699 *
 700 * Naming convention --
 701 * iwl_         <-- Is part of iwlwifi
 702 * iwlXXXX_     <-- Hardware specific (implemented in iwl-XXXX.c for XXXX)
 703 * iwl4965_bg_      <-- Called from work queue context
 704 * iwl4965_mac_     <-- mac80211 callback
 705 *
 706 ****************************************************************************/
 707extern void iwl_update_chain_flags(struct iwl_priv *priv);
 708extern int iwl_set_pwr_src(struct iwl_priv *priv, enum iwl_pwr_src src);
 709extern const u8 iwl_bcast_addr[ETH_ALEN];
 710extern int iwl_rxq_stop(struct iwl_priv *priv);
 711extern void iwl_txq_ctx_stop(struct iwl_priv *priv);
 712extern int iwl_queue_space(const struct iwl_queue *q);
 713static inline int iwl_queue_used(const struct iwl_queue *q, int i)
 714{
 715        return q->write_ptr >= q->read_ptr ?
 716                (i >= q->read_ptr && i < q->write_ptr) :
 717                !(i < q->read_ptr && i >= q->write_ptr);
 718}
 719
 720
 721static inline u8 get_cmd_index(struct iwl_queue *q, u32 index, int is_huge)
 722{
 723        /*
 724         * This is for init calibration result and scan command which
 725         * required buffer > TFD_MAX_PAYLOAD_SIZE,
 726         * the big buffer at end of command array
 727         */
 728        if (is_huge)
 729                return q->n_window;     /* must be power of 2 */
 730
 731        /* Otherwise, use normal size buffers */
 732        return index & (q->n_window - 1);
 733}
 734
 735
 736struct iwl_dma_ptr {
 737        dma_addr_t dma;
 738        void *addr;
 739        size_t size;
 740};
 741
 742#define IWL_OPERATION_MODE_AUTO     0
 743#define IWL_OPERATION_MODE_HT_ONLY  1
 744#define IWL_OPERATION_MODE_MIXED    2
 745#define IWL_OPERATION_MODE_20MHZ    3
 746
 747#define IWL_TX_CRC_SIZE 4
 748#define IWL_TX_DELIMITER_SIZE 4
 749
 750#define TX_POWER_IWL_ILLEGAL_VOLTAGE -10000
 751
 752/* Sensitivity and chain noise calibration */
 753#define INITIALIZATION_VALUE            0xFFFF
 754#define IWL4965_CAL_NUM_BEACONS         20
 755#define IWL_CAL_NUM_BEACONS             16
 756#define MAXIMUM_ALLOWED_PATHLOSS        15
 757
 758#define CHAIN_NOISE_MAX_DELTA_GAIN_CODE 3
 759
 760#define MAX_FA_OFDM  50
 761#define MIN_FA_OFDM  5
 762#define MAX_FA_CCK   50
 763#define MIN_FA_CCK   5
 764
 765#define AUTO_CORR_STEP_OFDM       1
 766
 767#define AUTO_CORR_STEP_CCK     3
 768#define AUTO_CORR_MAX_TH_CCK   160
 769
 770#define NRG_DIFF               2
 771#define NRG_STEP_CCK           2
 772#define NRG_MARGIN             8
 773#define MAX_NUMBER_CCK_NO_FA 100
 774
 775#define AUTO_CORR_CCK_MIN_VAL_DEF    (125)
 776
 777#define CHAIN_A             0
 778#define CHAIN_B             1
 779#define CHAIN_C             2
 780#define CHAIN_NOISE_DELTA_GAIN_INIT_VAL 4
 781#define ALL_BAND_FILTER                 0xFF00
 782#define IN_BAND_FILTER                  0xFF
 783#define MIN_AVERAGE_NOISE_MAX_VALUE     0xFFFFFFFF
 784
 785#define NRG_NUM_PREV_STAT_L     20
 786#define NUM_RX_CHAINS           3
 787
 788enum iwl4965_false_alarm_state {
 789        IWL_FA_TOO_MANY = 0,
 790        IWL_FA_TOO_FEW = 1,
 791        IWL_FA_GOOD_RANGE = 2,
 792};
 793
 794enum iwl4965_chain_noise_state {
 795        IWL_CHAIN_NOISE_ALIVE = 0,  /* must be 0 */
 796        IWL_CHAIN_NOISE_ACCUMULATE,
 797        IWL_CHAIN_NOISE_CALIBRATED,
 798        IWL_CHAIN_NOISE_DONE,
 799};
 800
 801enum iwl4965_calib_enabled_state {
 802        IWL_CALIB_DISABLED = 0,  /* must be 0 */
 803        IWL_CALIB_ENABLED = 1,
 804};
 805
 806
 807/*
 808 * enum iwl_calib
 809 * defines the order in which results of initial calibrations
 810 * should be sent to the runtime uCode
 811 */
 812enum iwl_calib {
 813        IWL_CALIB_XTAL,
 814        IWL_CALIB_DC,
 815        IWL_CALIB_LO,
 816        IWL_CALIB_TX_IQ,
 817        IWL_CALIB_TX_IQ_PERD,
 818        IWL_CALIB_BASE_BAND,
 819        IWL_CALIB_MAX
 820};
 821
 822/* Opaque calibration results */
 823struct iwl_calib_result {
 824        void *buf;
 825        size_t buf_len;
 826};
 827
 828enum ucode_type {
 829        UCODE_NONE = 0,
 830        UCODE_INIT,
 831        UCODE_RT
 832};
 833
 834/* Sensitivity calib data */
 835struct iwl_sensitivity_data {
 836        u32 auto_corr_ofdm;
 837        u32 auto_corr_ofdm_mrc;
 838        u32 auto_corr_ofdm_x1;
 839        u32 auto_corr_ofdm_mrc_x1;
 840        u32 auto_corr_cck;
 841        u32 auto_corr_cck_mrc;
 842
 843        u32 last_bad_plcp_cnt_ofdm;
 844        u32 last_fa_cnt_ofdm;
 845        u32 last_bad_plcp_cnt_cck;
 846        u32 last_fa_cnt_cck;
 847
 848        u32 nrg_curr_state;
 849        u32 nrg_prev_state;
 850        u32 nrg_value[10];
 851        u8  nrg_silence_rssi[NRG_NUM_PREV_STAT_L];
 852        u32 nrg_silence_ref;
 853        u32 nrg_energy_idx;
 854        u32 nrg_silence_idx;
 855        u32 nrg_th_cck;
 856        s32 nrg_auto_corr_silence_diff;
 857        u32 num_in_cck_no_fa;
 858        u32 nrg_th_ofdm;
 859
 860        u16 barker_corr_th_min;
 861        u16 barker_corr_th_min_mrc;
 862        u16 nrg_th_cca;
 863};
 864
 865/* Chain noise (differential Rx gain) calib data */
 866struct iwl_chain_noise_data {
 867        u32 active_chains;
 868        u32 chain_noise_a;
 869        u32 chain_noise_b;
 870        u32 chain_noise_c;
 871        u32 chain_signal_a;
 872        u32 chain_signal_b;
 873        u32 chain_signal_c;
 874        u16 beacon_count;
 875        u8 disconn_array[NUM_RX_CHAINS];
 876        u8 delta_gain_code[NUM_RX_CHAINS];
 877        u8 radio_write;
 878        u8 state;
 879};
 880
 881#define EEPROM_SEM_TIMEOUT 10           /* milliseconds */
 882#define EEPROM_SEM_RETRY_LIMIT 1000     /* number of attempts (not time) */
 883
 884#define IWL_TRAFFIC_ENTRIES     (256)
 885#define IWL_TRAFFIC_ENTRY_SIZE  (64)
 886
 887enum {
 888        MEASUREMENT_READY = (1 << 0),
 889        MEASUREMENT_ACTIVE = (1 << 1),
 890};
 891
 892enum iwl_nvm_type {
 893        NVM_DEVICE_TYPE_EEPROM = 0,
 894        NVM_DEVICE_TYPE_OTP,
 895};
 896
 897/*
 898 * Two types of OTP memory access modes
 899 *   IWL_OTP_ACCESS_ABSOLUTE - absolute address mode,
 900 *                              based on physical memory addressing
 901 *   IWL_OTP_ACCESS_RELATIVE - relative address mode,
 902 *                             based on logical memory addressing
 903 */
 904enum iwl_access_mode {
 905        IWL_OTP_ACCESS_ABSOLUTE,
 906        IWL_OTP_ACCESS_RELATIVE,
 907};
 908
 909/**
 910 * enum iwl_pa_type - Power Amplifier type
 911 * @IWL_PA_SYSTEM:  based on uCode configuration
 912 * @IWL_PA_INTERNAL: use Internal only
 913 */
 914enum iwl_pa_type {
 915        IWL_PA_SYSTEM = 0,
 916        IWL_PA_INTERNAL = 1,
 917};
 918
 919/* interrupt statistics */
 920struct isr_statistics {
 921        u32 hw;
 922        u32 sw;
 923        u32 sw_err;
 924        u32 sch;
 925        u32 alive;
 926        u32 rfkill;
 927        u32 ctkill;
 928        u32 wakeup;
 929        u32 rx;
 930        u32 rx_handlers[REPLY_MAX];
 931        u32 tx;
 932        u32 unhandled;
 933};
 934
 935#ifdef CONFIG_IWLWIFI_DEBUGFS
 936/* management statistics */
 937enum iwl_mgmt_stats {
 938        MANAGEMENT_ASSOC_REQ = 0,
 939        MANAGEMENT_ASSOC_RESP,
 940        MANAGEMENT_REASSOC_REQ,
 941        MANAGEMENT_REASSOC_RESP,
 942        MANAGEMENT_PROBE_REQ,
 943        MANAGEMENT_PROBE_RESP,
 944        MANAGEMENT_BEACON,
 945        MANAGEMENT_ATIM,
 946        MANAGEMENT_DISASSOC,
 947        MANAGEMENT_AUTH,
 948        MANAGEMENT_DEAUTH,
 949        MANAGEMENT_ACTION,
 950        MANAGEMENT_MAX,
 951};
 952/* control statistics */
 953enum iwl_ctrl_stats {
 954        CONTROL_BACK_REQ =  0,
 955        CONTROL_BACK,
 956        CONTROL_PSPOLL,
 957        CONTROL_RTS,
 958        CONTROL_CTS,
 959        CONTROL_ACK,
 960        CONTROL_CFEND,
 961        CONTROL_CFENDACK,
 962        CONTROL_MAX,
 963};
 964
 965struct traffic_stats {
 966        u32 mgmt[MANAGEMENT_MAX];
 967        u32 ctrl[CONTROL_MAX];
 968        u32 data_cnt;
 969        u64 data_bytes;
 970};
 971#else
 972struct traffic_stats {
 973        u64 data_bytes;
 974};
 975#endif
 976
 977/*
 978 * iwl_switch_rxon: "channel switch" structure
 979 *
 980 * @ switch_in_progress: channel switch in progress
 981 * @ channel: new channel
 982 */
 983struct iwl_switch_rxon {
 984        bool switch_in_progress;
 985        __le16 channel;
 986};
 987
 988/*
 989 * schedule the timer to wake up every UCODE_TRACE_PERIOD milliseconds
 990 * to perform continuous uCode event logging operation if enabled
 991 */
 992#define UCODE_TRACE_PERIOD (100)
 993
 994/*
 995 * iwl_event_log: current uCode event log position
 996 *
 997 * @ucode_trace: enable/disable ucode continuous trace timer
 998 * @num_wraps: how many times the event buffer wraps
 999 * @next_entry:  the entry just before the next one that uCode would fill
1000 * @non_wraps_count: counter for no wrap detected when dump ucode events
1001 * @wraps_once_count: counter for wrap once detected when dump ucode events
1002 * @wraps_more_count: counter for wrap more than once detected
1003 *                    when dump ucode events
1004 */
1005struct iwl_event_log {
1006        bool ucode_trace;
1007        u32 num_wraps;
1008        u32 next_entry;
1009        int non_wraps_count;
1010        int wraps_once_count;
1011        int wraps_more_count;
1012};
1013
1014/*
1015 * host interrupt timeout value
1016 * used with setting interrupt coalescing timer
1017 * the CSR_INT_COALESCING is an 8 bit register in 32-usec unit
1018 *
1019 * default interrupt coalescing timer is 64 x 32 = 2048 usecs
1020 * default interrupt coalescing calibration timer is 16 x 32 = 512 usecs
1021 */
1022#define IWL_HOST_INT_TIMEOUT_MAX        (0xFF)
1023#define IWL_HOST_INT_TIMEOUT_DEF        (0x40)
1024#define IWL_HOST_INT_TIMEOUT_MIN        (0x0)
1025#define IWL_HOST_INT_CALIB_TIMEOUT_MAX  (0xFF)
1026#define IWL_HOST_INT_CALIB_TIMEOUT_DEF  (0x10)
1027#define IWL_HOST_INT_CALIB_TIMEOUT_MIN  (0x0)
1028
1029/*
1030 * This is the threshold value of plcp error rate per 100mSecs.  It is
1031 * used to set and check for the validity of plcp_delta.
1032 */
1033#define IWL_MAX_PLCP_ERR_THRESHOLD_MIN  (0)
1034#define IWL_MAX_PLCP_ERR_THRESHOLD_DEF  (50)
1035#define IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF     (100)
1036#define IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF (200)
1037#define IWL_MAX_PLCP_ERR_THRESHOLD_MAX  (255)
1038
1039#define IWL_DELAY_NEXT_FORCE_RF_RESET  (HZ*3)
1040#define IWL_DELAY_NEXT_FORCE_FW_RELOAD (HZ*5)
1041
1042enum iwl_reset {
1043        IWL_RF_RESET = 0,
1044        IWL_FW_RESET,
1045        IWL_MAX_FORCE_RESET,
1046};
1047
1048struct iwl_force_reset {
1049        int reset_request_count;
1050        int reset_success_count;
1051        int reset_reject_count;
1052        unsigned long reset_duration;
1053        unsigned long last_force_reset_jiffies;
1054};
1055
1056struct iwl_priv {
1057
1058        /* ieee device used by generic ieee processing code */
1059        struct ieee80211_hw *hw;
1060        struct ieee80211_channel *ieee_channels;
1061        struct ieee80211_rate *ieee_rates;
1062        struct iwl_cfg *cfg;
1063
1064        /* temporary frame storage list */
1065        struct list_head free_frames;
1066        int frames_count;
1067
1068        enum ieee80211_band band;
1069        int alloc_rxb_page;
1070
1071        void (*rx_handlers[REPLY_MAX])(struct iwl_priv *priv,
1072                                       struct iwl_rx_mem_buffer *rxb);
1073
1074        struct ieee80211_supported_band bands[IEEE80211_NUM_BANDS];
1075
1076        /* spectrum measurement report caching */
1077        struct iwl_spectrum_notification measure_report;
1078        u8 measurement_status;
1079
1080        /* ucode beacon time */
1081        u32 ucode_beacon_time;
1082        int missed_beacon_threshold;
1083
1084        /* storing the jiffies when the plcp error rate is received */
1085        unsigned long plcp_jiffies;
1086
1087        /* force reset */
1088        struct iwl_force_reset force_reset[IWL_MAX_FORCE_RESET];
1089
1090        /* we allocate array of iwl4965_channel_info for NIC's valid channels.
1091         *    Access via channel # using indirect index array */
1092        struct iwl_channel_info *channel_info;  /* channel info array */
1093        u8 channel_count;       /* # of channels */
1094
1095        /* each calibration channel group in the EEPROM has a derived
1096         * clip setting for each rate. 3945 only.*/
1097        const struct iwl3945_clip_group clip39_groups[5];
1098
1099        /* thermal calibration */
1100        s32 temperature;        /* degrees Kelvin */
1101        s32 last_temperature;
1102
1103        /* init calibration results */
1104        struct iwl_calib_result calib_results[IWL_CALIB_MAX];
1105
1106        /* Scan related variables */
1107        unsigned long next_scan_jiffies;
1108        unsigned long scan_start;
1109        unsigned long scan_pass_start;
1110        unsigned long scan_start_tsf;
1111        void *scan;
1112        int scan_bands;
1113        struct cfg80211_scan_request *scan_request;
1114        bool is_internal_short_scan;
1115        u8 scan_tx_ant[IEEE80211_NUM_BANDS];
1116        u8 mgmt_tx_ant;
1117
1118        /* spinlock */
1119        spinlock_t lock;        /* protect general shared data */
1120        spinlock_t hcmd_lock;   /* protect hcmd */
1121        spinlock_t reg_lock;    /* protect hw register access */
1122        struct mutex mutex;
1123        struct mutex sync_cmd_mutex; /* enable serialization of sync commands */
1124
1125        /* basic pci-network driver stuff */
1126        struct pci_dev *pci_dev;
1127
1128        /* pci hardware address support */
1129        void __iomem *hw_base;
1130        u32  hw_rev;
1131        u32  hw_wa_rev;
1132        u8   rev_id;
1133
1134        /* uCode images, save to reload in case of failure */
1135        int fw_index;                   /* firmware we're trying to load */
1136        u32 ucode_ver;                  /* version of ucode, copy of
1137                                           iwl_ucode.ver */
1138        struct fw_desc ucode_code;      /* runtime inst */
1139        struct fw_desc ucode_data;      /* runtime data original */
1140        struct fw_desc ucode_data_backup;       /* runtime data save/restore */
1141        struct fw_desc ucode_init;      /* initialization inst */
1142        struct fw_desc ucode_init_data; /* initialization data */
1143        struct fw_desc ucode_boot;      /* bootstrap inst */
1144        enum ucode_type ucode_type;
1145        u8 ucode_write_complete;        /* the image write is complete */
1146        char firmware_name[25];
1147
1148
1149        struct iwl_rxon_time_cmd rxon_timing;
1150
1151        /* We declare this const so it can only be
1152         * changed via explicit cast within the
1153         * routines that actually update the physical
1154         * hardware */
1155        const struct iwl_rxon_cmd active_rxon;
1156        struct iwl_rxon_cmd staging_rxon;
1157
1158        struct iwl_switch_rxon switch_rxon;
1159
1160        /* 1st responses from initialize and runtime uCode images.
1161         * 4965's initialize alive response contains some calibration data. */
1162        struct iwl_init_alive_resp card_alive_init;
1163        struct iwl_alive_resp card_alive;
1164
1165        unsigned long last_blink_time;
1166        u8 last_blink_rate;
1167        u8 allow_blinking;
1168        u64 led_tpt;
1169
1170        u16 active_rate;
1171        u16 active_rate_basic;
1172
1173        u8 assoc_station_added;
1174        u8 start_calib;
1175        struct iwl_sensitivity_data sensitivity_data;
1176        struct iwl_chain_noise_data chain_noise_data;
1177        __le16 sensitivity_tbl[HD_TABLE_SIZE];
1178
1179        struct iwl_ht_config current_ht_config;
1180        u8 last_phy_res[100];
1181
1182        /* Rate scaling data */
1183        u8 retry_rate;
1184
1185        wait_queue_head_t wait_command_queue;
1186
1187        int activity_timer_active;
1188
1189        /* Rx and Tx DMA processing queues */
1190        struct iwl_rx_queue rxq;
1191        struct iwl_tx_queue *txq;
1192        unsigned long txq_ctx_active_msk;
1193        struct iwl_dma_ptr  kw; /* keep warm address */
1194        struct iwl_dma_ptr  scd_bc_tbls;
1195
1196        u32 scd_base_addr;      /* scheduler sram base address */
1197
1198        unsigned long status;
1199
1200        int last_rx_rssi;       /* From Rx packet statistics */
1201        int last_rx_noise;      /* From beacon statistics */
1202
1203        /* counts mgmt, ctl, and data packets */
1204        struct traffic_stats tx_stats;
1205        struct traffic_stats rx_stats;
1206
1207        /* counts interrupts */
1208        struct isr_statistics isr_stats;
1209
1210        struct iwl_power_mgr power_data;
1211        struct iwl_tt_mgmt thermal_throttle;
1212
1213        struct iwl_notif_statistics statistics;
1214#ifdef CONFIG_IWLWIFI_DEBUG
1215        struct iwl_notif_statistics accum_statistics;
1216        struct iwl_notif_statistics delta_statistics;
1217        struct iwl_notif_statistics max_delta;
1218#endif
1219
1220        /* context information */
1221        u16 rates_mask;
1222
1223        u8 bssid[ETH_ALEN];
1224        u16 rts_threshold;
1225        u8 mac_addr[ETH_ALEN];
1226
1227        /*station table variables */
1228        spinlock_t sta_lock;
1229        int num_stations;
1230        struct iwl_station_entry stations[IWL_STATION_COUNT];
1231        struct iwl_wep_key wep_keys[WEP_KEYS_MAX];
1232        u8 default_wep_key;
1233        u8 key_mapping_key;
1234        unsigned long ucode_key_table;
1235
1236        /* queue refcounts */
1237#define IWL_MAX_HW_QUEUES       32
1238        unsigned long queue_stopped[BITS_TO_LONGS(IWL_MAX_HW_QUEUES)];
1239        /* for each AC */
1240        atomic_t queue_stop_count[4];
1241
1242        /* Indication if ieee80211_ops->open has been called */
1243        u8 is_open;
1244
1245        u8 mac80211_registered;
1246
1247        /* Rx'd packet timing information */
1248        u32 last_beacon_time;
1249        u64 last_tsf;
1250
1251        /* eeprom -- this is in the card's little endian byte order */
1252        u8 *eeprom;
1253        int    nvm_device_type;
1254        struct iwl_eeprom_calib_info *calib_info;
1255
1256        enum nl80211_iftype iw_mode;
1257
1258        struct sk_buff *ibss_beacon;
1259
1260        /* Last Rx'd beacon timestamp */
1261        u64 timestamp;
1262        u16 beacon_int;
1263        struct ieee80211_vif *vif;
1264
1265        /*Added for 3945 */
1266        void *shared_virt;
1267        dma_addr_t shared_phys;
1268        /*End*/
1269        struct iwl_hw_params hw_params;
1270
1271        /* INT ICT Table */
1272        __le32 *ict_tbl;
1273        dma_addr_t ict_tbl_dma;
1274        dma_addr_t aligned_ict_tbl_dma;
1275        int ict_index;
1276        void *ict_tbl_vir;
1277        u32 inta;
1278        bool use_ict;
1279
1280        u32 inta_mask;
1281        /* Current association information needed to configure the
1282         * hardware */
1283        u16 assoc_id;
1284        u16 assoc_capability;
1285
1286        struct iwl_qos_info qos_data;
1287
1288        struct workqueue_struct *workqueue;
1289
1290        struct work_struct restart;
1291        struct work_struct scan_completed;
1292        struct work_struct rx_replenish;
1293        struct work_struct abort_scan;
1294        struct work_struct request_scan;
1295        struct work_struct beacon_update;
1296        struct work_struct tt_work;
1297        struct work_struct ct_enter;
1298        struct work_struct ct_exit;
1299        struct work_struct start_internal_scan;
1300
1301        struct tasklet_struct irq_tasklet;
1302
1303        struct delayed_work init_alive_start;
1304        struct delayed_work alive_start;
1305        struct delayed_work scan_check;
1306
1307        /*For 3945 only*/
1308        struct delayed_work thermal_periodic;
1309        struct delayed_work rfkill_poll;
1310
1311        /* TX Power */
1312        s8 tx_power_user_lmt;
1313        s8 tx_power_device_lmt;
1314        s8 tx_power_lmt_in_half_dbm; /* max tx power in half-dBm format */
1315
1316
1317#ifdef CONFIG_IWLWIFI_DEBUG
1318        /* debugging info */
1319        u32 debug_level; /* per device debugging will override global
1320                            iwl_debug_level if set */
1321        u32 framecnt_to_us;
1322        atomic_t restrict_refcnt;
1323        bool disable_ht40;
1324#ifdef CONFIG_IWLWIFI_DEBUGFS
1325        /* debugfs */
1326        u16 tx_traffic_idx;
1327        u16 rx_traffic_idx;
1328        u8 *tx_traffic;
1329        u8 *rx_traffic;
1330        struct dentry *debugfs_dir;
1331        u32 dbgfs_sram_offset, dbgfs_sram_len;
1332#endif /* CONFIG_IWLWIFI_DEBUGFS */
1333#endif /* CONFIG_IWLWIFI_DEBUG */
1334
1335        struct work_struct txpower_work;
1336        u32 disable_sens_cal;
1337        u32 disable_chain_noise_cal;
1338        u32 disable_tx_power_cal;
1339        struct work_struct run_time_calib_work;
1340        struct timer_list statistics_periodic;
1341        struct timer_list ucode_trace;
1342        bool hw_ready;
1343        /*For 3945*/
1344#define IWL_DEFAULT_TX_POWER 0x0F
1345
1346        struct iwl3945_notif_statistics statistics_39;
1347
1348        u32 sta_supp_rates;
1349
1350        struct iwl_event_log event_log;
1351}; /*iwl_priv */
1352
1353static inline void iwl_txq_ctx_activate(struct iwl_priv *priv, int txq_id)
1354{
1355        set_bit(txq_id, &priv->txq_ctx_active_msk);
1356}
1357
1358static inline void iwl_txq_ctx_deactivate(struct iwl_priv *priv, int txq_id)
1359{
1360        clear_bit(txq_id, &priv->txq_ctx_active_msk);
1361}
1362
1363#ifdef CONFIG_IWLWIFI_DEBUG
1364const char *iwl_get_tx_fail_reason(u32 status);
1365/*
1366 * iwl_get_debug_level: Return active debug level for device
1367 *
1368 * Using sysfs it is possible to set per device debug level. This debug
1369 * level will be used if set, otherwise the global debug level which can be
1370 * set via module parameter is used.
1371 */
1372static inline u32 iwl_get_debug_level(struct iwl_priv *priv)
1373{
1374        if (priv->debug_level)
1375                return priv->debug_level;
1376        else
1377                return iwl_debug_level;
1378}
1379#else
1380static inline const char *iwl_get_tx_fail_reason(u32 status) { return ""; }
1381
1382static inline u32 iwl_get_debug_level(struct iwl_priv *priv)
1383{
1384        return iwl_debug_level;
1385}
1386#endif
1387
1388
1389static inline struct ieee80211_hdr *iwl_tx_queue_get_hdr(struct iwl_priv *priv,
1390                                                         int txq_id, int idx)
1391{
1392        if (priv->txq[txq_id].txb[idx].skb[0])
1393                return (struct ieee80211_hdr *)priv->txq[txq_id].
1394                                txb[idx].skb[0]->data;
1395        return NULL;
1396}
1397
1398
1399static inline int iwl_is_associated(struct iwl_priv *priv)
1400{
1401        return (priv->active_rxon.filter_flags & RXON_FILTER_ASSOC_MSK) ? 1 : 0;
1402}
1403
1404static inline int is_channel_valid(const struct iwl_channel_info *ch_info)
1405{
1406        if (ch_info == NULL)
1407                return 0;
1408        return (ch_info->flags & EEPROM_CHANNEL_VALID) ? 1 : 0;
1409}
1410
1411static inline int is_channel_radar(const struct iwl_channel_info *ch_info)
1412{
1413        return (ch_info->flags & EEPROM_CHANNEL_RADAR) ? 1 : 0;
1414}
1415
1416static inline u8 is_channel_a_band(const struct iwl_channel_info *ch_info)
1417{
1418        return ch_info->band == IEEE80211_BAND_5GHZ;
1419}
1420
1421static inline u8 is_channel_bg_band(const struct iwl_channel_info *ch_info)
1422{
1423        return ch_info->band == IEEE80211_BAND_2GHZ;
1424}
1425
1426static inline int is_channel_passive(const struct iwl_channel_info *ch)
1427{
1428        return (!(ch->flags & EEPROM_CHANNEL_ACTIVE)) ? 1 : 0;
1429}
1430
1431static inline int is_channel_ibss(const struct iwl_channel_info *ch)
1432{
1433        return ((ch->flags & EEPROM_CHANNEL_IBSS)) ? 1 : 0;
1434}
1435
1436static inline void __iwl_free_pages(struct iwl_priv *priv, struct page *page)
1437{
1438        __free_pages(page, priv->hw_params.rx_page_order);
1439        priv->alloc_rxb_page--;
1440}
1441
1442static inline void iwl_free_pages(struct iwl_priv *priv, unsigned long page)
1443{
1444        free_pages(page, priv->hw_params.rx_page_order);
1445        priv->alloc_rxb_page--;
1446}
1447#endif                          /* __iwl_dev_h__ */
1448
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.