iwlagn: upper layer stores iwl_rxon_context in skb's CB
[pandora-kernel.git] / drivers / net / wireless / iwlwifi / iwl-dev.h
1 /******************************************************************************
2  *
3  * Copyright(c) 2003 - 2011 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  */
30
31 #ifndef __iwl_dev_h__
32 #define __iwl_dev_h__
33
34 #include <linux/interrupt.h>
35 #include <linux/pci.h> /* for struct pci_device_id */
36 #include <linux/kernel.h>
37 #include <linux/wait.h>
38 #include <linux/leds.h>
39 #include <net/ieee80211_radiotap.h>
40
41 #include "iwl-eeprom.h"
42 #include "iwl-csr.h"
43 #include "iwl-prph.h"
44 #include "iwl-debug.h"
45 #include "iwl-agn-hw.h"
46 #include "iwl-led.h"
47 #include "iwl-power.h"
48 #include "iwl-agn-rs.h"
49 #include "iwl-agn-tt.h"
50 #include "iwl-bus.h"
51 #include "iwl-trans.h"
52 #include "iwl-shared.h"
53
54 struct iwl_tx_queue;
55
56 /* CT-KILL constants */
57 #define CT_KILL_THRESHOLD_LEGACY   110 /* in Celsius */
58 #define CT_KILL_THRESHOLD          114 /* in Celsius */
59 #define CT_KILL_EXIT_THRESHOLD     95  /* in Celsius */
60
61 /* Default noise level to report when noise measurement is not available.
62  *   This may be because we're:
63  *   1)  Not associated (4965, no beacon statistics being sent to driver)
64  *   2)  Scanning (noise measurement does not apply to associated channel)
65  *   3)  Receiving CCK (3945 delivers noise info only for OFDM frames)
66  * Use default noise value of -127 ... this is below the range of measurable
67  *   Rx dBm for either 3945 or 4965, so it can indicate "unmeasurable" to user.
68  *   Also, -127 works better than 0 when averaging frames with/without
69  *   noise info (e.g. averaging might be done in app); measured dBm values are
70  *   always negative ... using a negative value as the default keeps all
71  *   averages within an s8's (used in some apps) range of negative values. */
72 #define IWL_NOISE_MEAS_NOT_AVAILABLE (-127)
73
74 /*
75  * RTS threshold here is total size [2347] minus 4 FCS bytes
76  * Per spec:
77  *   a value of 0 means RTS on all data/management packets
78  *   a value > max MSDU size means no RTS
79  * else RTS for data/management frames where MPDU is larger
80  *   than RTS value.
81  */
82 #define DEFAULT_RTS_THRESHOLD     2347U
83 #define MIN_RTS_THRESHOLD         0U
84 #define MAX_RTS_THRESHOLD         2347U
85 #define MAX_MSDU_SIZE             2304U
86 #define MAX_MPDU_SIZE             2346U
87 #define DEFAULT_BEACON_INTERVAL   200U
88 #define DEFAULT_SHORT_RETRY_LIMIT 7U
89 #define DEFAULT_LONG_RETRY_LIMIT  4U
90
91 /* defined below */
92 struct iwl_device_cmd;
93
94 struct iwl_cmd_meta {
95         /* only for SYNC commands, iff the reply skb is wanted */
96         struct iwl_host_cmd *source;
97         /*
98          * only for ASYNC commands
99          * (which is somewhat stupid -- look at iwl-sta.c for instance
100          * which duplicates a bunch of code because the callback isn't
101          * invoked for SYNC commands, if it were and its result passed
102          * through it would be simpler...)
103          */
104         void (*callback)(struct iwl_priv *priv,
105                          struct iwl_device_cmd *cmd,
106                          struct iwl_rx_packet *pkt);
107
108         u32 flags;
109
110         DEFINE_DMA_UNMAP_ADDR(mapping);
111         DEFINE_DMA_UNMAP_LEN(len);
112 };
113
114 /*
115  * Generic queue structure
116  *
117  * Contains common data for Rx and Tx queues.
118  *
119  * Note the difference between n_bd and n_window: the hardware
120  * always assumes 256 descriptors, so n_bd is always 256 (unless
121  * there might be HW changes in the future). For the normal TX
122  * queues, n_window, which is the size of the software queue data
123  * is also 256; however, for the command queue, n_window is only
124  * 32 since we don't need so many commands pending. Since the HW
125  * still uses 256 BDs for DMA though, n_bd stays 256. As a result,
126  * the software buffers (in the variables @meta, @txb in struct
127  * iwl_tx_queue) only have 32 entries, while the HW buffers (@tfds
128  * in the same struct) have 256.
129  * This means that we end up with the following:
130  *  HW entries: | 0 | ... | N * 32 | ... | N * 32 + 31 | ... | 255 |
131  *  SW entries:           | 0      | ... | 31          |
132  * where N is a number between 0 and 7. This means that the SW
133  * data is a window overlayed over the HW queue.
134  */
135 struct iwl_queue {
136         int n_bd;              /* number of BDs in this queue */
137         int write_ptr;       /* 1-st empty entry (index) host_w*/
138         int read_ptr;         /* last used entry (index) host_r*/
139         /* use for monitoring and recovering the stuck queue */
140         dma_addr_t dma_addr;   /* physical addr for BD's */
141         int n_window;          /* safe queue window */
142         u32 id;
143         int low_mark;          /* low watermark, resume queue if free
144                                 * space more than this */
145         int high_mark;         /* high watermark, stop queue if free
146                                 * space less than this */
147 };
148
149 /**
150  * struct iwl_tx_queue - Tx Queue for DMA
151  * @q: generic Rx/Tx queue descriptor
152  * @bd: base of circular buffer of TFDs
153  * @cmd: array of command/TX buffer pointers
154  * @meta: array of meta data for each command/tx buffer
155  * @dma_addr_cmd: physical address of cmd/tx buffer array
156  * @txb: array of per-TFD driver data
157  * @time_stamp: time (in jiffies) of last read_ptr change
158  * @need_update: indicates need to update read/write index
159  * @sched_retry: indicates queue is high-throughput aggregation (HT AGG) enabled
160  * @sta_id: valid if sched_retry is set
161  * @tid: valid if sched_retry is set
162  *
163  * A Tx queue consists of circular buffer of BDs (a.k.a. TFDs, transmit frame
164  * descriptors) and required locking structures.
165  */
166 #define TFD_TX_CMD_SLOTS 256
167 #define TFD_CMD_SLOTS 32
168
169 struct iwl_tx_queue {
170         struct iwl_queue q;
171         struct iwl_tfd *tfds;
172         struct iwl_device_cmd **cmd;
173         struct iwl_cmd_meta *meta;
174         struct sk_buff **skbs;
175         unsigned long time_stamp;
176         u8 need_update;
177         u8 sched_retry;
178         u8 active;
179         u8 swq_id;
180
181         u16 sta_id;
182         u16 tid;
183 };
184
185 #define IWL_NUM_SCAN_RATES         (2)
186
187 /*
188  * One for each channel, holds all channel setup data
189  * Some of the fields (e.g. eeprom and flags/max_power_avg) are redundant
190  *     with one another!
191  */
192 struct iwl_channel_info {
193         struct iwl_eeprom_channel eeprom;       /* EEPROM regulatory limit */
194         struct iwl_eeprom_channel ht40_eeprom;  /* EEPROM regulatory limit for
195                                                  * HT40 channel */
196
197         u8 channel;       /* channel number */
198         u8 flags;         /* flags copied from EEPROM */
199         s8 max_power_avg; /* (dBm) regul. eeprom, normal Tx, any rate */
200         s8 curr_txpow;    /* (dBm) regulatory/spectrum/user (not h/w) limit */
201         s8 min_power;     /* always 0 */
202         s8 scan_power;    /* (dBm) regul. eeprom, direct scans, any rate */
203
204         u8 group_index;   /* 0-4, maps channel to group1/2/3/4/5 */
205         u8 band_index;    /* 0-4, maps channel to band1/2/3/4/5 */
206         enum ieee80211_band band;
207
208         /* HT40 channel info */
209         s8 ht40_max_power_avg;  /* (dBm) regul. eeprom, normal Tx, any rate */
210         u8 ht40_flags;          /* flags copied from EEPROM */
211         u8 ht40_extension_channel; /* HT_IE_EXT_CHANNEL_* */
212 };
213
214 #define IWL_TX_FIFO_BK          0       /* shared */
215 #define IWL_TX_FIFO_BE          1
216 #define IWL_TX_FIFO_VI          2       /* shared */
217 #define IWL_TX_FIFO_VO          3
218 #define IWL_TX_FIFO_BK_IPAN     IWL_TX_FIFO_BK
219 #define IWL_TX_FIFO_BE_IPAN     4
220 #define IWL_TX_FIFO_VI_IPAN     IWL_TX_FIFO_VI
221 #define IWL_TX_FIFO_VO_IPAN     5
222 /* re-uses the VO FIFO, uCode will properly flush/schedule */
223 #define IWL_TX_FIFO_AUX         5
224 #define IWL_TX_FIFO_UNUSED      -1
225
226 /* AUX (TX during scan dwell) queue */
227 #define IWL_AUX_QUEUE           10
228
229 /*
230  * Minimum number of queues. MAX_NUM is defined in hw specific files.
231  * Set the minimum to accommodate
232  *  - 4 standard TX queues
233  *  - the command queue
234  *  - 4 PAN TX queues
235  *  - the PAN multicast queue, and
236  *  - the AUX (TX during scan dwell) queue.
237  */
238 #define IWL_MIN_NUM_QUEUES      11
239
240 /*
241  * Command queue depends on iPAN support.
242  */
243 #define IWL_DEFAULT_CMD_QUEUE_NUM       4
244 #define IWL_IPAN_CMD_QUEUE_NUM          9
245
246 /*
247  * This queue number is required for proper operation
248  * because the ucode will stop/start the scheduler as
249  * required.
250  */
251 #define IWL_IPAN_MCAST_QUEUE            8
252
253 #define IEEE80211_DATA_LEN              2304
254 #define IEEE80211_4ADDR_LEN             30
255 #define IEEE80211_HLEN                  (IEEE80211_4ADDR_LEN)
256 #define IEEE80211_FRAME_LEN             (IEEE80211_DATA_LEN + IEEE80211_HLEN)
257
258
259 #define SEQ_TO_SN(seq) (((seq) & IEEE80211_SCTL_SEQ) >> 4)
260 #define SN_TO_SEQ(ssn) (((ssn) << 4) & IEEE80211_SCTL_SEQ)
261 #define MAX_SN ((IEEE80211_SCTL_SEQ) >> 4)
262
263 enum {
264         CMD_SYNC = 0,
265         CMD_ASYNC = BIT(0),
266         CMD_WANT_SKB = BIT(1),
267         CMD_ON_DEMAND = BIT(2),
268 };
269
270 #define DEF_CMD_PAYLOAD_SIZE 320
271
272 /**
273  * struct iwl_device_cmd
274  *
275  * For allocation of the command and tx queues, this establishes the overall
276  * size of the largest command we send to uCode, except for commands that
277  * aren't fully copied and use other TFD space.
278  */
279 struct iwl_device_cmd {
280         struct iwl_cmd_header hdr;      /* uCode API */
281         union {
282                 u32 flags;
283                 u8 val8;
284                 u16 val16;
285                 u32 val32;
286                 struct iwl_tx_cmd tx;
287                 struct iwl6000_channel_switch_cmd chswitch;
288                 u8 payload[DEF_CMD_PAYLOAD_SIZE];
289         } __packed cmd;
290 } __packed;
291
292 #define TFD_MAX_PAYLOAD_SIZE (sizeof(struct iwl_device_cmd))
293
294 #define IWL_MAX_CMD_TFDS        2
295
296 enum iwl_hcmd_dataflag {
297         IWL_HCMD_DFL_NOCOPY     = BIT(0),
298 };
299
300 /**
301  * struct iwl_host_cmd - Host command to the uCode
302  * @data: array of chunks that composes the data of the host command
303  * @reply_page: pointer to the page that holds the response to the host command
304  * @callback:
305  * @flags: can be CMD_* note CMD_WANT_SKB is incompatible withe CMD_ASYNC
306  * @len: array of the lenths of the chunks in data
307  * @dataflags:
308  * @id: id of the host command
309  */
310 struct iwl_host_cmd {
311         const void *data[IWL_MAX_CMD_TFDS];
312         unsigned long reply_page;
313         void (*callback)(struct iwl_priv *priv,
314                          struct iwl_device_cmd *cmd,
315                          struct iwl_rx_packet *pkt);
316         u32 flags;
317         u16 len[IWL_MAX_CMD_TFDS];
318         u8 dataflags[IWL_MAX_CMD_TFDS];
319         u8 id;
320 };
321
322 #define SUP_RATE_11A_MAX_NUM_CHANNELS  8
323 #define SUP_RATE_11B_MAX_NUM_CHANNELS  4
324 #define SUP_RATE_11G_MAX_NUM_CHANNELS  12
325
326 #define IWL_SUPPORTED_RATES_IE_LEN         8
327
328 #define IWL_INVALID_RATE     0xFF
329 #define IWL_INVALID_VALUE    -1
330
331 union iwl_ht_rate_supp {
332         u16 rates;
333         struct {
334                 u8 siso_rate;
335                 u8 mimo_rate;
336         };
337 };
338
339 #define CFG_HT_RX_AMPDU_FACTOR_8K   (0x0)
340 #define CFG_HT_RX_AMPDU_FACTOR_16K  (0x1)
341 #define CFG_HT_RX_AMPDU_FACTOR_32K  (0x2)
342 #define CFG_HT_RX_AMPDU_FACTOR_64K  (0x3)
343 #define CFG_HT_RX_AMPDU_FACTOR_DEF  CFG_HT_RX_AMPDU_FACTOR_64K
344 #define CFG_HT_RX_AMPDU_FACTOR_MAX  CFG_HT_RX_AMPDU_FACTOR_64K
345 #define CFG_HT_RX_AMPDU_FACTOR_MIN  CFG_HT_RX_AMPDU_FACTOR_8K
346
347 /*
348  * Maximal MPDU density for TX aggregation
349  * 4 - 2us density
350  * 5 - 4us density
351  * 6 - 8us density
352  * 7 - 16us density
353  */
354 #define CFG_HT_MPDU_DENSITY_2USEC   (0x4)
355 #define CFG_HT_MPDU_DENSITY_4USEC   (0x5)
356 #define CFG_HT_MPDU_DENSITY_8USEC   (0x6)
357 #define CFG_HT_MPDU_DENSITY_16USEC  (0x7)
358 #define CFG_HT_MPDU_DENSITY_DEF CFG_HT_MPDU_DENSITY_4USEC
359 #define CFG_HT_MPDU_DENSITY_MAX CFG_HT_MPDU_DENSITY_16USEC
360 #define CFG_HT_MPDU_DENSITY_MIN     (0x1)
361
362 struct iwl_ht_config {
363         bool single_chain_sufficient;
364         enum ieee80211_smps_mode smps; /* current smps mode */
365 };
366
367 /* QoS structures */
368 struct iwl_qos_info {
369         int qos_active;
370         struct iwl_qosparam_cmd def_qos_parm;
371 };
372
373 /*
374  * Structure should be accessed with sta_lock held. When station addition
375  * is in progress (IWL_STA_UCODE_INPROGRESS) it is possible to access only
376  * the commands (iwl_addsta_cmd and iwl_link_quality_cmd) without sta_lock
377  * held.
378  */
379 struct iwl_station_entry {
380         struct iwl_addsta_cmd sta;
381         u8 used, ctxid;
382         struct iwl_link_quality_cmd *lq;
383 };
384
385 struct iwl_station_priv_common {
386         struct iwl_rxon_context *ctx;
387         u8 sta_id;
388 };
389
390 /*
391  * iwl_station_priv: Driver's private station information
392  *
393  * When mac80211 creates a station it reserves some space (hw->sta_data_size)
394  * in the structure for use by driver. This structure is places in that
395  * space.
396  */
397 struct iwl_station_priv {
398         struct iwl_station_priv_common common;
399         struct iwl_lq_sta lq_sta;
400         atomic_t pending_frames;
401         bool client;
402         bool asleep;
403         u8 max_agg_bufsize;
404 };
405
406 /**
407  * struct iwl_vif_priv - driver's private per-interface information
408  *
409  * When mac80211 allocates a virtual interface, it can allocate
410  * space for us to put data into.
411  */
412 struct iwl_vif_priv {
413         struct iwl_rxon_context *ctx;
414         u8 ibss_bssid_sta_id;
415 };
416
417 /* one for each uCode image (inst/data, boot/init/runtime) */
418 struct fw_desc {
419         void *v_addr;           /* access by driver */
420         dma_addr_t p_addr;      /* access by card's busmaster DMA */
421         u32 len;                /* bytes */
422 };
423
424 struct fw_img {
425         struct fw_desc code, data;
426 };
427
428 /* v1/v2 uCode file layout */
429 struct iwl_ucode_header {
430         __le32 ver;     /* major/minor/API/serial */
431         union {
432                 struct {
433                         __le32 inst_size;       /* bytes of runtime code */
434                         __le32 data_size;       /* bytes of runtime data */
435                         __le32 init_size;       /* bytes of init code */
436                         __le32 init_data_size;  /* bytes of init data */
437                         __le32 boot_size;       /* bytes of bootstrap code */
438                         u8 data[0];             /* in same order as sizes */
439                 } v1;
440                 struct {
441                         __le32 build;           /* build number */
442                         __le32 inst_size;       /* bytes of runtime code */
443                         __le32 data_size;       /* bytes of runtime data */
444                         __le32 init_size;       /* bytes of init code */
445                         __le32 init_data_size;  /* bytes of init data */
446                         __le32 boot_size;       /* bytes of bootstrap code */
447                         u8 data[0];             /* in same order as sizes */
448                 } v2;
449         } u;
450 };
451
452 /*
453  * new TLV uCode file layout
454  *
455  * The new TLV file format contains TLVs, that each specify
456  * some piece of data. To facilitate "groups", for example
457  * different instruction image with different capabilities,
458  * bundled with the same init image, an alternative mechanism
459  * is provided:
460  * When the alternative field is 0, that means that the item
461  * is always valid. When it is non-zero, then it is only
462  * valid in conjunction with items of the same alternative,
463  * in which case the driver (user) selects one alternative
464  * to use.
465  */
466
467 enum iwl_ucode_tlv_type {
468         IWL_UCODE_TLV_INVALID           = 0, /* unused */
469         IWL_UCODE_TLV_INST              = 1,
470         IWL_UCODE_TLV_DATA              = 2,
471         IWL_UCODE_TLV_INIT              = 3,
472         IWL_UCODE_TLV_INIT_DATA         = 4,
473         IWL_UCODE_TLV_BOOT              = 5,
474         IWL_UCODE_TLV_PROBE_MAX_LEN     = 6, /* a u32 value */
475         IWL_UCODE_TLV_PAN               = 7,
476         IWL_UCODE_TLV_RUNT_EVTLOG_PTR   = 8,
477         IWL_UCODE_TLV_RUNT_EVTLOG_SIZE  = 9,
478         IWL_UCODE_TLV_RUNT_ERRLOG_PTR   = 10,
479         IWL_UCODE_TLV_INIT_EVTLOG_PTR   = 11,
480         IWL_UCODE_TLV_INIT_EVTLOG_SIZE  = 12,
481         IWL_UCODE_TLV_INIT_ERRLOG_PTR   = 13,
482         IWL_UCODE_TLV_ENHANCE_SENS_TBL  = 14,
483         IWL_UCODE_TLV_PHY_CALIBRATION_SIZE = 15,
484         IWL_UCODE_TLV_WOWLAN_INST       = 16,
485         IWL_UCODE_TLV_WOWLAN_DATA       = 17,
486         IWL_UCODE_TLV_FLAGS             = 18,
487 };
488
489 /**
490  * enum iwl_ucode_tlv_flag - ucode API flags
491  * @IWL_UCODE_TLV_FLAGS_PAN: This is PAN capable microcode; this previously
492  *      was a separate TLV but moved here to save space.
493  * @IWL_UCODE_TLV_FLAGS_NEWSCAN: new uCode scan behaviour on hidden SSID,
494  *      treats good CRC threshold as a boolean
495  * @IWL_UCODE_TLV_FLAGS_MFP: This uCode image supports MFP (802.11w).
496  * @IWL_UCODE_TLV_FLAGS_P2P: This uCode image supports P2P.
497  */
498 enum iwl_ucode_tlv_flag {
499         IWL_UCODE_TLV_FLAGS_PAN         = BIT(0),
500         IWL_UCODE_TLV_FLAGS_NEWSCAN     = BIT(1),
501         IWL_UCODE_TLV_FLAGS_MFP         = BIT(2),
502         IWL_UCODE_TLV_FLAGS_P2P         = BIT(3),
503 };
504
505 struct iwl_ucode_tlv {
506         __le16 type;            /* see above */
507         __le16 alternative;     /* see comment */
508         __le32 length;          /* not including type/length fields */
509         u8 data[0];
510 } __packed;
511
512 #define IWL_TLV_UCODE_MAGIC     0x0a4c5749
513
514 struct iwl_tlv_ucode_header {
515         /*
516          * The TLV style ucode header is distinguished from
517          * the v1/v2 style header by first four bytes being
518          * zero, as such is an invalid combination of
519          * major/minor/API/serial versions.
520          */
521         __le32 zero;
522         __le32 magic;
523         u8 human_readable[64];
524         __le32 ver;             /* major/minor/API/serial */
525         __le32 build;
526         __le64 alternatives;    /* bitmask of valid alternatives */
527         /*
528          * The data contained herein has a TLV layout,
529          * see above for the TLV header and types.
530          * Note that each TLV is padded to a length
531          * that is a multiple of 4 for alignment.
532          */
533         u8 data[0];
534 };
535
536 struct iwl_sensitivity_ranges {
537         u16 min_nrg_cck;
538         u16 max_nrg_cck;
539
540         u16 nrg_th_cck;
541         u16 nrg_th_ofdm;
542
543         u16 auto_corr_min_ofdm;
544         u16 auto_corr_min_ofdm_mrc;
545         u16 auto_corr_min_ofdm_x1;
546         u16 auto_corr_min_ofdm_mrc_x1;
547
548         u16 auto_corr_max_ofdm;
549         u16 auto_corr_max_ofdm_mrc;
550         u16 auto_corr_max_ofdm_x1;
551         u16 auto_corr_max_ofdm_mrc_x1;
552
553         u16 auto_corr_max_cck;
554         u16 auto_corr_max_cck_mrc;
555         u16 auto_corr_min_cck;
556         u16 auto_corr_min_cck_mrc;
557
558         u16 barker_corr_th_min;
559         u16 barker_corr_th_min_mrc;
560         u16 nrg_th_cca;
561 };
562
563
564 #define KELVIN_TO_CELSIUS(x) ((x)-273)
565 #define CELSIUS_TO_KELVIN(x) ((x)+273)
566
567
568 /******************************************************************************
569  *
570  * Functions implemented in core module which are forward declared here
571  * for use by iwl-[4-5].c
572  *
573  * NOTE:  The implementation of these functions are not hardware specific
574  * which is why they are in the core module files.
575  *
576  * Naming convention --
577  * iwl_         <-- Is part of iwlwifi
578  * iwlXXXX_     <-- Hardware specific (implemented in iwl-XXXX.c for XXXX)
579  *
580  ****************************************************************************/
581 extern void iwl_update_chain_flags(struct iwl_priv *priv);
582 extern const u8 iwl_bcast_addr[ETH_ALEN];
583 extern int iwl_queue_space(const struct iwl_queue *q);
584 static inline int iwl_queue_used(const struct iwl_queue *q, int i)
585 {
586         return q->write_ptr >= q->read_ptr ?
587                 (i >= q->read_ptr && i < q->write_ptr) :
588                 !(i < q->read_ptr && i >= q->write_ptr);
589 }
590
591
592 static inline u8 get_cmd_index(struct iwl_queue *q, u32 index)
593 {
594         return index & (q->n_window - 1);
595 }
596
597 #define IWL_OPERATION_MODE_AUTO     0
598 #define IWL_OPERATION_MODE_HT_ONLY  1
599 #define IWL_OPERATION_MODE_MIXED    2
600 #define IWL_OPERATION_MODE_20MHZ    3
601
602 #define IWL_TX_CRC_SIZE 4
603 #define IWL_TX_DELIMITER_SIZE 4
604
605 #define TX_POWER_IWL_ILLEGAL_VOLTAGE -10000
606
607 /* Sensitivity and chain noise calibration */
608 #define INITIALIZATION_VALUE            0xFFFF
609 #define IWL_CAL_NUM_BEACONS             16
610 #define MAXIMUM_ALLOWED_PATHLOSS        15
611
612 #define CHAIN_NOISE_MAX_DELTA_GAIN_CODE 3
613
614 #define MAX_FA_OFDM  50
615 #define MIN_FA_OFDM  5
616 #define MAX_FA_CCK   50
617 #define MIN_FA_CCK   5
618
619 #define AUTO_CORR_STEP_OFDM       1
620
621 #define AUTO_CORR_STEP_CCK     3
622 #define AUTO_CORR_MAX_TH_CCK   160
623
624 #define NRG_DIFF               2
625 #define NRG_STEP_CCK           2
626 #define NRG_MARGIN             8
627 #define MAX_NUMBER_CCK_NO_FA 100
628
629 #define AUTO_CORR_CCK_MIN_VAL_DEF    (125)
630
631 #define CHAIN_A             0
632 #define CHAIN_B             1
633 #define CHAIN_C             2
634 #define CHAIN_NOISE_DELTA_GAIN_INIT_VAL 4
635 #define ALL_BAND_FILTER                 0xFF00
636 #define IN_BAND_FILTER                  0xFF
637 #define MIN_AVERAGE_NOISE_MAX_VALUE     0xFFFFFFFF
638
639 #define NRG_NUM_PREV_STAT_L     20
640 #define NUM_RX_CHAINS           3
641
642 enum iwlagn_false_alarm_state {
643         IWL_FA_TOO_MANY = 0,
644         IWL_FA_TOO_FEW = 1,
645         IWL_FA_GOOD_RANGE = 2,
646 };
647
648 enum iwlagn_chain_noise_state {
649         IWL_CHAIN_NOISE_ALIVE = 0,  /* must be 0 */
650         IWL_CHAIN_NOISE_ACCUMULATE,
651         IWL_CHAIN_NOISE_CALIBRATED,
652         IWL_CHAIN_NOISE_DONE,
653 };
654
655
656 /*
657  * enum iwl_calib
658  * defines the order in which results of initial calibrations
659  * should be sent to the runtime uCode
660  */
661 enum iwl_calib {
662         IWL_CALIB_XTAL,
663         IWL_CALIB_DC,
664         IWL_CALIB_LO,
665         IWL_CALIB_TX_IQ,
666         IWL_CALIB_TX_IQ_PERD,
667         IWL_CALIB_BASE_BAND,
668         IWL_CALIB_TEMP_OFFSET,
669         IWL_CALIB_MAX
670 };
671
672 /* Opaque calibration results */
673 struct iwl_calib_result {
674         void *buf;
675         size_t buf_len;
676 };
677
678 /* Sensitivity calib data */
679 struct iwl_sensitivity_data {
680         u32 auto_corr_ofdm;
681         u32 auto_corr_ofdm_mrc;
682         u32 auto_corr_ofdm_x1;
683         u32 auto_corr_ofdm_mrc_x1;
684         u32 auto_corr_cck;
685         u32 auto_corr_cck_mrc;
686
687         u32 last_bad_plcp_cnt_ofdm;
688         u32 last_fa_cnt_ofdm;
689         u32 last_bad_plcp_cnt_cck;
690         u32 last_fa_cnt_cck;
691
692         u32 nrg_curr_state;
693         u32 nrg_prev_state;
694         u32 nrg_value[10];
695         u8  nrg_silence_rssi[NRG_NUM_PREV_STAT_L];
696         u32 nrg_silence_ref;
697         u32 nrg_energy_idx;
698         u32 nrg_silence_idx;
699         u32 nrg_th_cck;
700         s32 nrg_auto_corr_silence_diff;
701         u32 num_in_cck_no_fa;
702         u32 nrg_th_ofdm;
703
704         u16 barker_corr_th_min;
705         u16 barker_corr_th_min_mrc;
706         u16 nrg_th_cca;
707 };
708
709 /* Chain noise (differential Rx gain) calib data */
710 struct iwl_chain_noise_data {
711         u32 active_chains;
712         u32 chain_noise_a;
713         u32 chain_noise_b;
714         u32 chain_noise_c;
715         u32 chain_signal_a;
716         u32 chain_signal_b;
717         u32 chain_signal_c;
718         u16 beacon_count;
719         u8 disconn_array[NUM_RX_CHAINS];
720         u8 delta_gain_code[NUM_RX_CHAINS];
721         u8 radio_write;
722         u8 state;
723 };
724
725 #define EEPROM_SEM_TIMEOUT 10           /* milliseconds */
726 #define EEPROM_SEM_RETRY_LIMIT 1000     /* number of attempts (not time) */
727
728 #define IWL_TRAFFIC_ENTRIES     (256)
729 #define IWL_TRAFFIC_ENTRY_SIZE  (64)
730
731 enum {
732         MEASUREMENT_READY = (1 << 0),
733         MEASUREMENT_ACTIVE = (1 << 1),
734 };
735
736 enum iwl_nvm_type {
737         NVM_DEVICE_TYPE_EEPROM = 0,
738         NVM_DEVICE_TYPE_OTP,
739 };
740
741 /*
742  * Two types of OTP memory access modes
743  *   IWL_OTP_ACCESS_ABSOLUTE - absolute address mode,
744  *                              based on physical memory addressing
745  *   IWL_OTP_ACCESS_RELATIVE - relative address mode,
746  *                             based on logical memory addressing
747  */
748 enum iwl_access_mode {
749         IWL_OTP_ACCESS_ABSOLUTE,
750         IWL_OTP_ACCESS_RELATIVE,
751 };
752
753 /**
754  * enum iwl_pa_type - Power Amplifier type
755  * @IWL_PA_SYSTEM:  based on uCode configuration
756  * @IWL_PA_INTERNAL: use Internal only
757  */
758 enum iwl_pa_type {
759         IWL_PA_SYSTEM = 0,
760         IWL_PA_INTERNAL = 1,
761 };
762
763 /* reply_tx_statistics (for _agn devices) */
764 struct reply_tx_error_statistics {
765         u32 pp_delay;
766         u32 pp_few_bytes;
767         u32 pp_bt_prio;
768         u32 pp_quiet_period;
769         u32 pp_calc_ttak;
770         u32 int_crossed_retry;
771         u32 short_limit;
772         u32 long_limit;
773         u32 fifo_underrun;
774         u32 drain_flow;
775         u32 rfkill_flush;
776         u32 life_expire;
777         u32 dest_ps;
778         u32 host_abort;
779         u32 bt_retry;
780         u32 sta_invalid;
781         u32 frag_drop;
782         u32 tid_disable;
783         u32 fifo_flush;
784         u32 insuff_cf_poll;
785         u32 fail_hw_drop;
786         u32 sta_color_mismatch;
787         u32 unknown;
788 };
789
790 /* reply_agg_tx_statistics (for _agn devices) */
791 struct reply_agg_tx_error_statistics {
792         u32 underrun;
793         u32 bt_prio;
794         u32 few_bytes;
795         u32 abort;
796         u32 last_sent_ttl;
797         u32 last_sent_try;
798         u32 last_sent_bt_kill;
799         u32 scd_query;
800         u32 bad_crc32;
801         u32 response;
802         u32 dump_tx;
803         u32 delay_tx;
804         u32 unknown;
805 };
806
807 /* management statistics */
808 enum iwl_mgmt_stats {
809         MANAGEMENT_ASSOC_REQ = 0,
810         MANAGEMENT_ASSOC_RESP,
811         MANAGEMENT_REASSOC_REQ,
812         MANAGEMENT_REASSOC_RESP,
813         MANAGEMENT_PROBE_REQ,
814         MANAGEMENT_PROBE_RESP,
815         MANAGEMENT_BEACON,
816         MANAGEMENT_ATIM,
817         MANAGEMENT_DISASSOC,
818         MANAGEMENT_AUTH,
819         MANAGEMENT_DEAUTH,
820         MANAGEMENT_ACTION,
821         MANAGEMENT_MAX,
822 };
823 /* control statistics */
824 enum iwl_ctrl_stats {
825         CONTROL_BACK_REQ =  0,
826         CONTROL_BACK,
827         CONTROL_PSPOLL,
828         CONTROL_RTS,
829         CONTROL_CTS,
830         CONTROL_ACK,
831         CONTROL_CFEND,
832         CONTROL_CFENDACK,
833         CONTROL_MAX,
834 };
835
836 struct traffic_stats {
837 #ifdef CONFIG_IWLWIFI_DEBUGFS
838         u32 mgmt[MANAGEMENT_MAX];
839         u32 ctrl[CONTROL_MAX];
840         u32 data_cnt;
841         u64 data_bytes;
842 #endif
843 };
844
845 /*
846  * schedule the timer to wake up every UCODE_TRACE_PERIOD milliseconds
847  * to perform continuous uCode event logging operation if enabled
848  */
849 #define UCODE_TRACE_PERIOD (100)
850
851 /*
852  * iwl_event_log: current uCode event log position
853  *
854  * @ucode_trace: enable/disable ucode continuous trace timer
855  * @num_wraps: how many times the event buffer wraps
856  * @next_entry:  the entry just before the next one that uCode would fill
857  * @non_wraps_count: counter for no wrap detected when dump ucode events
858  * @wraps_once_count: counter for wrap once detected when dump ucode events
859  * @wraps_more_count: counter for wrap more than once detected
860  *                    when dump ucode events
861  */
862 struct iwl_event_log {
863         bool ucode_trace;
864         u32 num_wraps;
865         u32 next_entry;
866         int non_wraps_count;
867         int wraps_once_count;
868         int wraps_more_count;
869 };
870
871 /*
872  * host interrupt timeout value
873  * used with setting interrupt coalescing timer
874  * the CSR_INT_COALESCING is an 8 bit register in 32-usec unit
875  *
876  * default interrupt coalescing timer is 64 x 32 = 2048 usecs
877  * default interrupt coalescing calibration timer is 16 x 32 = 512 usecs
878  */
879 #define IWL_HOST_INT_TIMEOUT_MAX        (0xFF)
880 #define IWL_HOST_INT_TIMEOUT_DEF        (0x40)
881 #define IWL_HOST_INT_TIMEOUT_MIN        (0x0)
882 #define IWL_HOST_INT_CALIB_TIMEOUT_MAX  (0xFF)
883 #define IWL_HOST_INT_CALIB_TIMEOUT_DEF  (0x10)
884 #define IWL_HOST_INT_CALIB_TIMEOUT_MIN  (0x0)
885
886 /*
887  * This is the threshold value of plcp error rate per 100mSecs.  It is
888  * used to set and check for the validity of plcp_delta.
889  */
890 #define IWL_MAX_PLCP_ERR_THRESHOLD_MIN  (1)
891 #define IWL_MAX_PLCP_ERR_THRESHOLD_DEF  (50)
892 #define IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF     (100)
893 #define IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF (200)
894 #define IWL_MAX_PLCP_ERR_THRESHOLD_MAX  (255)
895 #define IWL_MAX_PLCP_ERR_THRESHOLD_DISABLE      (0)
896
897 #define IWL_DELAY_NEXT_FORCE_RF_RESET  (HZ*3)
898 #define IWL_DELAY_NEXT_FORCE_FW_RELOAD (HZ*5)
899
900 /* TX queue watchdog timeouts in mSecs */
901 #define IWL_DEF_WD_TIMEOUT      (2000)
902 #define IWL_LONG_WD_TIMEOUT     (10000)
903 #define IWL_MAX_WD_TIMEOUT      (120000)
904
905 /* BT Antenna Coupling Threshold (dB) */
906 #define IWL_BT_ANTENNA_COUPLING_THRESHOLD       (35)
907
908 /* Firmware reload counter and Timestamp */
909 #define IWL_MIN_RELOAD_DURATION         1000 /* 1000 ms */
910 #define IWL_MAX_CONTINUE_RELOAD_CNT     4
911
912
913 enum iwl_reset {
914         IWL_RF_RESET = 0,
915         IWL_FW_RESET,
916         IWL_MAX_FORCE_RESET,
917 };
918
919 struct iwl_force_reset {
920         int reset_request_count;
921         int reset_success_count;
922         int reset_reject_count;
923         unsigned long reset_duration;
924         unsigned long last_force_reset_jiffies;
925 };
926
927 /* extend beacon time format bit shifting  */
928 /*
929  * for _agn devices
930  * bits 31:22 - extended
931  * bits 21:0  - interval
932  */
933 #define IWLAGN_EXT_BEACON_TIME_POS      22
934
935 /**
936  * struct iwl_notification_wait - notification wait entry
937  * @list: list head for global list
938  * @fn: function called with the notification
939  * @cmd: command ID
940  *
941  * This structure is not used directly, to wait for a
942  * notification declare it on the stack, and call
943  * iwlagn_init_notification_wait() with appropriate
944  * parameters. Then do whatever will cause the ucode
945  * to notify the driver, and to wait for that then
946  * call iwlagn_wait_notification().
947  *
948  * Each notification is one-shot. If at some point we
949  * need to support multi-shot notifications (which
950  * can't be allocated on the stack) we need to modify
951  * the code for them.
952  */
953 struct iwl_notification_wait {
954         struct list_head list;
955
956         void (*fn)(struct iwl_priv *priv, struct iwl_rx_packet *pkt,
957                    void *data);
958         void *fn_data;
959
960         u8 cmd;
961         bool triggered, aborted;
962 };
963
964 enum iwl_rxon_context_id {
965         IWL_RXON_CTX_BSS,
966         IWL_RXON_CTX_PAN,
967
968         NUM_IWL_RXON_CTX
969 };
970
971 struct iwl_rxon_context {
972         struct ieee80211_vif *vif;
973
974         const u8 *ac_to_fifo;
975         const u8 *ac_to_queue;
976         u8 mcast_queue;
977
978         /*
979          * We could use the vif to indicate active, but we
980          * also need it to be active during disabling when
981          * we already removed the vif for type setting.
982          */
983         bool always_active, is_active;
984
985         bool ht_need_multiple_chains;
986
987         enum iwl_rxon_context_id ctxid;
988
989         u32 interface_modes, exclusive_interface_modes;
990         u8 unused_devtype, ap_devtype, ibss_devtype, station_devtype;
991
992         /*
993          * We declare this const so it can only be
994          * changed via explicit cast within the
995          * routines that actually update the physical
996          * hardware.
997          */
998         const struct iwl_rxon_cmd active;
999         struct iwl_rxon_cmd staging;
1000
1001         struct iwl_rxon_time_cmd timing;
1002
1003         struct iwl_qos_info qos_data;
1004
1005         u8 bcast_sta_id, ap_sta_id;
1006
1007         u8 rxon_cmd, rxon_assoc_cmd, rxon_timing_cmd;
1008         u8 qos_cmd;
1009         u8 wep_key_cmd;
1010
1011         struct iwl_wep_key wep_keys[WEP_KEYS_MAX];
1012         u8 key_mapping_keys;
1013
1014         __le32 station_flags;
1015
1016         int beacon_int;
1017
1018         struct {
1019                 bool non_gf_sta_present;
1020                 u8 protection;
1021                 bool enabled, is_40mhz;
1022                 u8 extension_chan_offset;
1023         } ht;
1024
1025         bool last_tx_rejected;
1026 };
1027
1028 enum iwl_scan_type {
1029         IWL_SCAN_NORMAL,
1030         IWL_SCAN_RADIO_RESET,
1031         IWL_SCAN_ROC,
1032 };
1033
1034 enum iwlagn_ucode_type {
1035         IWL_UCODE_NONE,
1036         IWL_UCODE_REGULAR,
1037         IWL_UCODE_INIT,
1038         IWL_UCODE_WOWLAN,
1039 };
1040
1041 #ifdef CONFIG_IWLWIFI_DEVICE_SVTOOL
1042 struct iwl_testmode_trace {
1043         u32 buff_size;
1044         u32 total_size;
1045         u32 num_chunks;
1046         u8 *cpu_addr;
1047         u8 *trace_addr;
1048         dma_addr_t dma_addr;
1049         bool trace_enabled;
1050 };
1051 #endif
1052
1053 struct iwl_priv {
1054
1055         /*data shared among all the driver's layers */
1056         struct iwl_shared _shrd;
1057         struct iwl_shared *shrd;
1058
1059         /* ieee device used by generic ieee processing code */
1060         struct ieee80211_hw *hw;
1061         struct ieee80211_channel *ieee_channels;
1062         struct ieee80211_rate *ieee_rates;
1063         struct iwl_cfg *cfg;
1064
1065         enum ieee80211_band band;
1066
1067         void (*pre_rx_handler)(struct iwl_priv *priv,
1068                                struct iwl_rx_mem_buffer *rxb);
1069         void (*rx_handlers[REPLY_MAX])(struct iwl_priv *priv,
1070                                        struct iwl_rx_mem_buffer *rxb);
1071
1072         struct ieee80211_supported_band bands[IEEE80211_NUM_BANDS];
1073
1074         /* spectrum measurement report caching */
1075         struct iwl_spectrum_notification measure_report;
1076         u8 measurement_status;
1077
1078         /* ucode beacon time */
1079         u32 ucode_beacon_time;
1080         int missed_beacon_threshold;
1081
1082         /* track IBSS manager (last beacon) status */
1083         u32 ibss_manager;
1084
1085         /* jiffies when last recovery from statistics was performed */
1086         unsigned long rx_statistics_jiffies;
1087
1088         /*counters */
1089         u32 rx_handlers_stats[REPLY_MAX];
1090
1091         /* force reset */
1092         struct iwl_force_reset force_reset[IWL_MAX_FORCE_RESET];
1093
1094         /* firmware reload counter and timestamp */
1095         unsigned long reload_jiffies;
1096         int reload_count;
1097
1098         /* we allocate array of iwl_channel_info for NIC's valid channels.
1099          *    Access via channel # using indirect index array */
1100         struct iwl_channel_info *channel_info;  /* channel info array */
1101         u8 channel_count;       /* # of channels */
1102
1103         /* thermal calibration */
1104         s32 temperature;        /* degrees Kelvin */
1105         s32 last_temperature;
1106
1107         /* init calibration results */
1108         struct iwl_calib_result calib_results[IWL_CALIB_MAX];
1109
1110         /* Scan related variables */
1111         unsigned long scan_start;
1112         unsigned long scan_start_tsf;
1113         void *scan_cmd;
1114         enum ieee80211_band scan_band;
1115         struct cfg80211_scan_request *scan_request;
1116         struct ieee80211_vif *scan_vif;
1117         enum iwl_scan_type scan_type;
1118         u8 scan_tx_ant[IEEE80211_NUM_BANDS];
1119         u8 mgmt_tx_ant;
1120
1121         /*TODO: remove these pointers - use bus(priv) instead */
1122         struct iwl_bus *bus;    /* bus specific data */
1123
1124         /* microcode/device supports multiple contexts */
1125         u8 valid_contexts;
1126
1127         /* max number of station keys */
1128         u8 sta_key_max_num;
1129
1130         bool new_scan_threshold_behaviour;
1131
1132         /* EEPROM MAC addresses */
1133         struct mac_address addresses[2];
1134
1135         /* uCode images, save to reload in case of failure */
1136         int fw_index;                   /* firmware we're trying to load */
1137         u32 ucode_ver;                  /* version of ucode, copy of
1138                                            iwl_ucode.ver */
1139
1140         struct fw_img ucode_rt;
1141         struct fw_img ucode_init;
1142         struct fw_img ucode_wowlan;
1143
1144         enum iwlagn_ucode_type ucode_type;
1145         u8 ucode_write_complete;        /* the image write is complete */
1146         char firmware_name[25];
1147
1148         struct iwl_rxon_context contexts[NUM_IWL_RXON_CTX];
1149
1150         __le16 switch_channel;
1151
1152         struct {
1153                 u32 error_event_table;
1154                 u32 log_event_table;
1155         } device_pointers;
1156
1157         u16 active_rate;
1158
1159         u8 start_calib;
1160         struct iwl_sensitivity_data sensitivity_data;
1161         struct iwl_chain_noise_data chain_noise_data;
1162         bool enhance_sensitivity_table;
1163         __le16 sensitivity_tbl[HD_TABLE_SIZE];
1164         __le16 enhance_sensitivity_tbl[ENHANCE_HD_TABLE_ENTRIES];
1165
1166         struct iwl_ht_config current_ht_config;
1167
1168         /* Rate scaling data */
1169         u8 retry_rate;
1170
1171         wait_queue_head_t wait_command_queue;
1172
1173         int activity_timer_active;
1174
1175         /* Tx DMA processing queues */
1176         struct iwl_tx_queue *txq;
1177         unsigned long txq_ctx_active_msk;
1178
1179         /* counts mgmt, ctl, and data packets */
1180         struct traffic_stats tx_stats;
1181         struct traffic_stats rx_stats;
1182
1183         struct iwl_power_mgr power_data;
1184         struct iwl_tt_mgmt thermal_throttle;
1185
1186         /* station table variables */
1187         int num_stations;
1188         struct iwl_station_entry stations[IWLAGN_STATION_COUNT];
1189         unsigned long ucode_key_table;
1190
1191         /* queue refcounts */
1192 #define IWL_MAX_HW_QUEUES       32
1193         unsigned long queue_stopped[BITS_TO_LONGS(IWL_MAX_HW_QUEUES)];
1194         /* for each AC */
1195         atomic_t queue_stop_count[4];
1196
1197         /* Indication if ieee80211_ops->open has been called */
1198         u8 is_open;
1199
1200         u8 mac80211_registered;
1201
1202         /* eeprom -- this is in the card's little endian byte order */
1203         u8 *eeprom;
1204         int    nvm_device_type;
1205         struct iwl_eeprom_calib_info *calib_info;
1206
1207         enum nl80211_iftype iw_mode;
1208
1209         /* Last Rx'd beacon timestamp */
1210         u64 timestamp;
1211
1212         struct {
1213                 __le32 flag;
1214                 struct statistics_general_common common;
1215                 struct statistics_rx_non_phy rx_non_phy;
1216                 struct statistics_rx_phy rx_ofdm;
1217                 struct statistics_rx_ht_phy rx_ofdm_ht;
1218                 struct statistics_rx_phy rx_cck;
1219                 struct statistics_tx tx;
1220 #ifdef CONFIG_IWLWIFI_DEBUGFS
1221                 struct statistics_bt_activity bt_activity;
1222                 __le32 num_bt_kills, accum_num_bt_kills;
1223 #endif
1224         } statistics;
1225 #ifdef CONFIG_IWLWIFI_DEBUGFS
1226         struct {
1227                 struct statistics_general_common common;
1228                 struct statistics_rx_non_phy rx_non_phy;
1229                 struct statistics_rx_phy rx_ofdm;
1230                 struct statistics_rx_ht_phy rx_ofdm_ht;
1231                 struct statistics_rx_phy rx_cck;
1232                 struct statistics_tx tx;
1233                 struct statistics_bt_activity bt_activity;
1234         } accum_stats, delta_stats, max_delta_stats;
1235 #endif
1236
1237         /*
1238          * reporting the number of tids has AGG on. 0 means
1239          * no AGGREGATION
1240          */
1241         u8 agg_tids_count;
1242
1243         struct iwl_rx_phy_res last_phy_res;
1244         bool last_phy_res_valid;
1245
1246         struct completion firmware_loading_complete;
1247
1248         u32 init_evtlog_ptr, init_evtlog_size, init_errlog_ptr;
1249         u32 inst_evtlog_ptr, inst_evtlog_size, inst_errlog_ptr;
1250
1251         /*
1252          * chain noise reset and gain commands are the
1253          * two extra calibration commands follows the standard
1254          * phy calibration commands
1255          */
1256         u8 phy_calib_chain_noise_reset_cmd;
1257         u8 phy_calib_chain_noise_gain_cmd;
1258
1259         /* counts reply_tx error */
1260         struct reply_tx_error_statistics reply_tx_stats;
1261         struct reply_agg_tx_error_statistics reply_agg_tx_stats;
1262         /* notification wait support */
1263         struct list_head notif_waits;
1264         spinlock_t notif_wait_lock;
1265         wait_queue_head_t notif_waitq;
1266
1267         /* remain-on-channel offload support */
1268         struct ieee80211_channel *hw_roc_channel;
1269         struct delayed_work hw_roc_disable_work;
1270         enum nl80211_channel_type hw_roc_chantype;
1271         int hw_roc_duration;
1272         bool hw_roc_setup;
1273
1274         /* bt coex */
1275         u8 bt_enable_flag;
1276         u8 bt_status;
1277         u8 bt_traffic_load, last_bt_traffic_load;
1278         bool bt_ch_announce;
1279         bool bt_full_concurrent;
1280         bool bt_ant_couple_ok;
1281         __le32 kill_ack_mask;
1282         __le32 kill_cts_mask;
1283         __le16 bt_valid;
1284         u16 bt_on_thresh;
1285         u16 bt_duration;
1286         u16 dynamic_frag_thresh;
1287         u8 bt_ci_compliance;
1288         struct work_struct bt_traffic_change_work;
1289         bool bt_enable_pspoll;
1290         struct iwl_rxon_context *cur_rssi_ctx;
1291         bool bt_is_sco;
1292
1293         struct work_struct restart;
1294         struct work_struct scan_completed;
1295         struct work_struct abort_scan;
1296
1297         struct work_struct beacon_update;
1298         struct iwl_rxon_context *beacon_ctx;
1299         struct sk_buff *beacon_skb;
1300         void *beacon_cmd;
1301
1302         struct work_struct tt_work;
1303         struct work_struct ct_enter;
1304         struct work_struct ct_exit;
1305         struct work_struct start_internal_scan;
1306         struct work_struct tx_flush;
1307         struct work_struct bt_full_concurrency;
1308         struct work_struct bt_runtime_config;
1309
1310         struct delayed_work scan_check;
1311
1312         /* TX Power */
1313         s8 tx_power_user_lmt;
1314         s8 tx_power_device_lmt;
1315         s8 tx_power_lmt_in_half_dbm; /* max tx power in half-dBm format */
1316         s8 tx_power_next;
1317
1318 #ifdef CONFIG_IWLWIFI_DEBUGFS
1319         /* debugfs */
1320         u16 tx_traffic_idx;
1321         u16 rx_traffic_idx;
1322         u8 *tx_traffic;
1323         u8 *rx_traffic;
1324         struct dentry *debugfs_dir;
1325         u32 dbgfs_sram_offset, dbgfs_sram_len;
1326         bool disable_ht40;
1327         void *wowlan_sram;
1328 #endif /* CONFIG_IWLWIFI_DEBUGFS */
1329
1330         struct work_struct txpower_work;
1331         u32 disable_sens_cal;
1332         u32 disable_chain_noise_cal;
1333         struct work_struct run_time_calib_work;
1334         struct timer_list statistics_periodic;
1335         struct timer_list ucode_trace;
1336         struct timer_list watchdog;
1337
1338         struct iwl_event_log event_log;
1339
1340         struct led_classdev led;
1341         unsigned long blink_on, blink_off;
1342         bool led_registered;
1343 #ifdef CONFIG_IWLWIFI_DEVICE_SVTOOL
1344         struct iwl_testmode_trace testmode_trace;
1345         u32 tm_fixed_rate;
1346 #endif
1347
1348         /* WoWLAN GTK rekey data */
1349         u8 kck[NL80211_KCK_LEN], kek[NL80211_KEK_LEN];
1350         __le64 replay_ctr;
1351         __le16 last_seq_ctl;
1352         bool have_rekey_data;
1353 }; /*iwl_priv */
1354
1355 static inline void iwl_txq_ctx_activate(struct iwl_priv *priv, int txq_id)
1356 {
1357         set_bit(txq_id, &priv->txq_ctx_active_msk);
1358 }
1359
1360 static inline void iwl_txq_ctx_deactivate(struct iwl_priv *priv, int txq_id)
1361 {
1362         clear_bit(txq_id, &priv->txq_ctx_active_msk);
1363 }
1364
1365 extern struct iwl_mod_params iwlagn_mod_params;
1366
1367 static inline struct ieee80211_hdr *iwl_tx_queue_get_hdr(struct iwl_priv *priv,
1368                                                          int txq_id, int idx)
1369 {
1370         if (priv->txq[txq_id].skbs[idx])
1371                 return (struct ieee80211_hdr *)priv->txq[txq_id].
1372                                 skbs[idx]->data;
1373         return NULL;
1374 }
1375
1376 static inline struct iwl_rxon_context *
1377 iwl_rxon_ctx_from_vif(struct ieee80211_vif *vif)
1378 {
1379         struct iwl_vif_priv *vif_priv = (void *)vif->drv_priv;
1380
1381         return vif_priv->ctx;
1382 }
1383
1384 #define for_each_context(priv, ctx)                             \
1385         for (ctx = &priv->contexts[IWL_RXON_CTX_BSS];           \
1386              ctx < &priv->contexts[NUM_IWL_RXON_CTX]; ctx++)    \
1387                 if (priv->valid_contexts & BIT(ctx->ctxid))
1388
1389 static inline int iwl_is_associated_ctx(struct iwl_rxon_context *ctx)
1390 {
1391         return (ctx->active.filter_flags & RXON_FILTER_ASSOC_MSK) ? 1 : 0;
1392 }
1393
1394 static inline int iwl_is_associated(struct iwl_priv *priv,
1395                                     enum iwl_rxon_context_id ctxid)
1396 {
1397         return iwl_is_associated_ctx(&priv->contexts[ctxid]);
1398 }
1399
1400 static inline int iwl_is_any_associated(struct iwl_priv *priv)
1401 {
1402         struct iwl_rxon_context *ctx;
1403         for_each_context(priv, ctx)
1404                 if (iwl_is_associated_ctx(ctx))
1405                         return true;
1406         return false;
1407 }
1408
1409 static inline int is_channel_valid(const struct iwl_channel_info *ch_info)
1410 {
1411         if (ch_info == NULL)
1412                 return 0;
1413         return (ch_info->flags & EEPROM_CHANNEL_VALID) ? 1 : 0;
1414 }
1415
1416 static inline int is_channel_radar(const struct iwl_channel_info *ch_info)
1417 {
1418         return (ch_info->flags & EEPROM_CHANNEL_RADAR) ? 1 : 0;
1419 }
1420
1421 static inline u8 is_channel_a_band(const struct iwl_channel_info *ch_info)
1422 {
1423         return ch_info->band == IEEE80211_BAND_5GHZ;
1424 }
1425
1426 static inline u8 is_channel_bg_band(const struct iwl_channel_info *ch_info)
1427 {
1428         return ch_info->band == IEEE80211_BAND_2GHZ;
1429 }
1430
1431 static inline int is_channel_passive(const struct iwl_channel_info *ch)
1432 {
1433         return (!(ch->flags & EEPROM_CHANNEL_ACTIVE)) ? 1 : 0;
1434 }
1435
1436 static inline int is_channel_ibss(const struct iwl_channel_info *ch)
1437 {
1438         return ((ch->flags & EEPROM_CHANNEL_IBSS)) ? 1 : 0;
1439 }
1440
1441 #endif                          /* __iwl_dev_h__ */