iwl3945: use iwl_rx_queue in iwl3945
[pandora-kernel.git] / drivers / net / wireless / iwlwifi / iwl-3945.h
1 /******************************************************************************
2  *
3  * Copyright(c) 2003 - 2008 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-3945.h) for driver implementation definitions.
28  * Please use iwl-3945-commands.h for uCode API definitions.
29  * Please use iwl-3945-hw.h for hardware-related definitions.
30  */
31
32 #ifndef __iwl_3945_h__
33 #define __iwl_3945_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 /*used for rfkill*/
40 #include <linux/rfkill.h>
41 #include <linux/input.h>
42
43 /* Hardware specific file defines the PCI IDs table for that hardware module */
44 extern struct pci_device_id iwl3945_hw_card_ids[];
45
46 #include "iwl-csr.h"
47 #include "iwl-prph.h"
48 #include "iwl-3945-hw.h"
49 #include "iwl-debug.h"
50 #include "iwl-power.h"
51 #include "iwl-dev.h"
52 #include "iwl-3945-led.h"
53
54 /* Highest firmware API version supported */
55 #define IWL3945_UCODE_API_MAX 2
56
57 /* Lowest firmware API version supported */
58 #define IWL3945_UCODE_API_MIN 1
59
60 #define IWL3945_FW_PRE  "iwlwifi-3945-"
61 #define _IWL3945_MODULE_FIRMWARE(api) IWL3945_FW_PRE #api ".ucode"
62 #define IWL3945_MODULE_FIRMWARE(api) _IWL3945_MODULE_FIRMWARE(api)
63
64 /* Default noise level to report when noise measurement is not available.
65  *   This may be because we're:
66  *   1)  Not associated (4965, no beacon statistics being sent to driver)
67  *   2)  Scanning (noise measurement does not apply to associated channel)
68  *   3)  Receiving CCK (3945 delivers noise info only for OFDM frames)
69  * Use default noise value of -127 ... this is below the range of measurable
70  *   Rx dBm for either 3945 or 4965, so it can indicate "unmeasurable" to user.
71  *   Also, -127 works better than 0 when averaging frames with/without
72  *   noise info (e.g. averaging might be done in app); measured dBm values are
73  *   always negative ... using a negative value as the default keeps all
74  *   averages within an s8's (used in some apps) range of negative values. */
75 #define IWL_NOISE_MEAS_NOT_AVAILABLE (-127)
76
77 /* Module parameters accessible from iwl-*.c */
78 extern int iwl3945_param_hwcrypto;
79 extern int iwl3945_param_queues_num;
80
81 struct iwl3945_sta_priv {
82         struct iwl3945_rs_sta *rs_sta;
83 };
84
85 enum iwl3945_antenna {
86         IWL_ANTENNA_DIVERSITY,
87         IWL_ANTENNA_MAIN,
88         IWL_ANTENNA_AUX
89 };
90
91 /*
92  * RTS threshold here is total size [2347] minus 4 FCS bytes
93  * Per spec:
94  *   a value of 0 means RTS on all data/management packets
95  *   a value > max MSDU size means no RTS
96  * else RTS for data/management frames where MPDU is larger
97  *   than RTS value.
98  */
99 #define IWL_RX_BUF_SIZE           3000U
100 #define DEFAULT_RTS_THRESHOLD     2347U
101 #define MIN_RTS_THRESHOLD         0U
102 #define MAX_RTS_THRESHOLD         2347U
103 #define MAX_MSDU_SIZE             2304U
104 #define MAX_MPDU_SIZE             2346U
105 #define DEFAULT_BEACON_INTERVAL   100U
106 #define DEFAULT_SHORT_RETRY_LIMIT 7U
107 #define DEFAULT_LONG_RETRY_LIMIT  4U
108
109 int iwl3945_x2_queue_used(const struct iwl_queue *q, int i);
110
111 #define MAX_NUM_OF_TBS          (20)
112
113 /* One for each TFD */
114 struct iwl3945_tx_info {
115         struct sk_buff *skb[MAX_NUM_OF_TBS];
116 };
117
118 #include "iwl-agn-rs.h"
119
120 #define IWL_TX_FIFO_AC0 0
121 #define IWL_TX_FIFO_AC1 1
122 #define IWL_TX_FIFO_AC2 2
123 #define IWL_TX_FIFO_AC3 3
124 #define IWL_TX_FIFO_HCCA_1      5
125 #define IWL_TX_FIFO_HCCA_2      6
126 #define IWL_TX_FIFO_NONE        7
127
128 /* Minimum number of queues. MAX_NUM is defined in hw specific files */
129 #define IWL_MIN_NUM_QUEUES      4
130
131 #define IEEE80211_DATA_LEN              2304
132 #define IEEE80211_4ADDR_LEN             30
133 #define IEEE80211_HLEN                  (IEEE80211_4ADDR_LEN)
134 #define IEEE80211_FRAME_LEN             (IEEE80211_DATA_LEN + IEEE80211_HLEN)
135
136 struct iwl3945_frame {
137         union {
138                 struct ieee80211_hdr frame;
139                 struct iwl3945_tx_beacon_cmd beacon;
140                 u8 raw[IEEE80211_FRAME_LEN];
141                 u8 cmd[360];
142         } u;
143         struct list_head list;
144 };
145
146 #define SEQ_TO_SN(seq) (((seq) & IEEE80211_SCTL_SEQ) >> 4)
147 #define SN_TO_SEQ(ssn) (((ssn) << 4) & IEEE80211_SCTL_SEQ)
148 #define MAX_SN ((IEEE80211_SCTL_SEQ) >> 4)
149
150 struct iwl3945_cmd;
151 struct iwl3945_priv;
152
153 struct iwl3945_cmd_meta {
154         struct iwl3945_cmd_meta *source;
155         union {
156                 struct sk_buff *skb;
157                 int (*callback)(struct iwl3945_priv *priv,
158                                 struct iwl3945_cmd *cmd, struct sk_buff *skb);
159         } __attribute__ ((packed)) u;
160
161         /* The CMD_SIZE_HUGE flag bit indicates that the command
162          * structure is stored at the end of the shared queue memory. */
163         u32 flags;
164
165 } __attribute__ ((packed));
166
167 /**
168  * struct iwl3945_cmd
169  *
170  * For allocation of the command and tx queues, this establishes the overall
171  * size of the largest command we send to uCode, except for a scan command
172  * (which is relatively huge; space is allocated separately).
173  */
174 struct iwl3945_cmd {
175         struct iwl3945_cmd_meta meta;
176         struct iwl_cmd_header hdr;
177         union {
178                 struct iwl3945_addsta_cmd addsta;
179                 struct iwl_led_cmd led;
180                 u32 flags;
181                 u8 val8;
182                 u16 val16;
183                 u32 val32;
184                 struct iwl_bt_cmd bt;
185                 struct iwl_rxon_time_cmd rxon_time;
186                 struct iwl_powertable_cmd powertable;
187                 struct iwl_qosparam_cmd qosparam;
188                 struct iwl3945_tx_cmd tx;
189                 struct iwl3945_tx_beacon_cmd tx_beacon;
190                 struct iwl3945_rxon_assoc_cmd rxon_assoc;
191                 u8 *indirect;
192                 u8 payload[360];
193         } __attribute__ ((packed)) cmd;
194 } __attribute__ ((packed));
195
196 struct iwl3945_host_cmd {
197         u8 id;
198         u16 len;
199         struct iwl3945_cmd_meta meta;
200         const void *data;
201 };
202
203 #define TFD39_MAX_PAYLOAD_SIZE (sizeof(struct iwl3945_cmd) - \
204                               sizeof(struct iwl3945_cmd_meta))
205
206 /*
207  * RX related structures and functions
208  */
209 #define RX_FREE_BUFFERS 64
210 #define RX_LOW_WATERMARK 8
211
212 #define SUP_RATE_11A_MAX_NUM_CHANNELS  8
213 #define SUP_RATE_11B_MAX_NUM_CHANNELS  4
214 #define SUP_RATE_11G_MAX_NUM_CHANNELS  12
215
216 #define IWL_SUPPORTED_RATES_IE_LEN         8
217
218 #define SCAN_INTERVAL 100
219
220 #define STATUS_HCMD_ACTIVE      0       /* host command in progress */
221 #define STATUS_HCMD_SYNC_ACTIVE 1       /* sync host command in progress */
222 #define STATUS_INT_ENABLED      2
223 #define STATUS_RF_KILL_HW       3
224 #define STATUS_RF_KILL_SW       4
225 #define STATUS_INIT             5
226 #define STATUS_ALIVE            6
227 #define STATUS_READY            7
228 #define STATUS_TEMPERATURE      8
229 #define STATUS_GEO_CONFIGURED   9
230 #define STATUS_EXIT_PENDING     10
231 #define STATUS_IN_SUSPEND       11
232 #define STATUS_STATISTICS       12
233 #define STATUS_SCANNING         13
234 #define STATUS_SCAN_ABORTING    14
235 #define STATUS_SCAN_HW          15
236 #define STATUS_POWER_PMI        16
237 #define STATUS_FW_ERROR         17
238 #define STATUS_CONF_PENDING     18
239
240 #define MAX_TID_COUNT        9
241
242 #define IWL_INVALID_RATE     0xFF
243 #define IWL_INVALID_VALUE    -1
244
245 #define STA_PS_STATUS_WAKE             0
246 #define STA_PS_STATUS_SLEEP            1
247
248 struct iwl3945_ibss_seq {
249         u8 mac[ETH_ALEN];
250         u16 seq_num;
251         u16 frag_num;
252         unsigned long packet_time;
253         struct list_head list;
254 };
255
256 /**
257  * struct iwl3945_driver_hw_info
258  * @max_txq_num: Max # Tx queues supported
259  * @tx_cmd_len: Size of Tx command (but not including frame itself)
260  * @tx_ant_num: Number of TX antennas
261  * @max_rxq_size: Max # Rx frames in Rx queue (must be power-of-2)
262  * @rx_buf_size:
263  * @max_pkt_size:
264  * @max_rxq_log: Log-base-2 of max_rxq_size
265  * @max_stations:
266  * @bcast_sta_id:
267  * @shared_virt: Pointer to driver/uCode shared Tx Byte Counts and Rx status
268  * @shared_phys: Physical Pointer to Tx Byte Counts and Rx status
269  */
270 struct iwl3945_driver_hw_info {
271         u16 max_txq_num;
272         u16 tx_cmd_len;
273         u16 tx_ant_num;
274         u16 max_rxq_size;
275         u32 rx_buf_size;
276         u32 max_pkt_size;
277         u16 max_rxq_log;
278         u8  max_stations;
279         u8  bcast_sta_id;
280         void *shared_virt;
281         dma_addr_t shared_phys;
282 };
283
284 #define IWL_RX_HDR(x) ((struct iwl3945_rx_frame_hdr *)(\
285                        x->u.rx_frame.stats.payload + \
286                        x->u.rx_frame.stats.phy_count))
287 #define IWL_RX_END(x) ((struct iwl3945_rx_frame_end *)(\
288                        IWL_RX_HDR(x)->payload + \
289                        le16_to_cpu(IWL_RX_HDR(x)->len)))
290 #define IWL_RX_STATS(x) (&x->u.rx_frame.stats)
291 #define IWL_RX_DATA(x) (IWL_RX_HDR(x)->payload)
292
293
294 /******************************************************************************
295  *
296  * Functions implemented in iwl-base.c which are forward declared here
297  * for use by iwl-*.c
298  *
299  *****************************************************************************/
300 struct iwl3945_addsta_cmd;
301 extern int iwl3945_send_add_station(struct iwl3945_priv *priv,
302                                 struct iwl3945_addsta_cmd *sta, u8 flags);
303 extern u8 iwl3945_add_station(struct iwl3945_priv *priv, const u8 *bssid,
304                           int is_ap, u8 flags);
305 extern int iwl3945_power_init_handle(struct iwl3945_priv *priv);
306 extern int iwl3945_eeprom_init(struct iwl3945_priv *priv);
307 extern int iwl3945_rx_queue_alloc(struct iwl3945_priv *priv);
308 extern void iwl3945_rx_queue_reset(struct iwl3945_priv *priv,
309                                struct iwl_rx_queue *rxq);
310 extern int iwl3945_calc_db_from_ratio(int sig_ratio);
311 extern int iwl3945_calc_sig_qual(int rssi_dbm, int noise_dbm);
312 extern int iwl3945_tx_queue_init(struct iwl3945_priv *priv,
313                              struct iwl3945_tx_queue *txq, int count, u32 id);
314 extern void iwl3945_rx_replenish(void *data);
315 extern void iwl3945_tx_queue_free(struct iwl3945_priv *priv, struct iwl3945_tx_queue *txq);
316 extern int iwl3945_send_cmd_pdu(struct iwl3945_priv *priv, u8 id, u16 len,
317                             const void *data);
318 extern int __must_check iwl3945_send_cmd(struct iwl3945_priv *priv,
319                 struct iwl3945_host_cmd *cmd);
320 extern unsigned int iwl3945_fill_beacon_frame(struct iwl3945_priv *priv,
321                                         struct ieee80211_hdr *hdr,int left);
322 extern int iwl3945_rx_queue_update_write_ptr(struct iwl3945_priv *priv,
323                                          struct iwl_rx_queue *q);
324 extern int iwl3945_send_statistics_request(struct iwl3945_priv *priv);
325 extern void iwl3945_set_decrypted_flag(struct iwl3945_priv *priv, struct sk_buff *skb,
326                                    u32 decrypt_res,
327                                    struct ieee80211_rx_status *stats);
328
329 /*
330  * Currently used by iwl-3945-rs... look at restructuring so that it doesn't
331  * call this... todo... fix that.
332 */
333 extern u8 iwl3945_sync_station(struct iwl3945_priv *priv, int sta_id,
334                            u16 tx_rate, u8 flags);
335
336 /******************************************************************************
337  *
338  * Functions implemented in iwl-[34]*.c which are forward declared here
339  * for use by iwl-base.c
340  *
341  * NOTE:  The implementation of these functions are hardware specific
342  * which is why they are in the hardware specific files (vs. iwl-base.c)
343  *
344  * Naming convention --
345  * iwl3945_         <-- Its part of iwlwifi (should be changed to iwl3945_)
346  * iwl3945_hw_      <-- Hardware specific (implemented in iwl-XXXX.c by all HW)
347  * iwlXXXX_     <-- Hardware specific (implemented in iwl-XXXX.c for XXXX)
348  * iwl3945_bg_      <-- Called from work queue context
349  * iwl3945_mac_     <-- mac80211 callback
350  *
351  ****************************************************************************/
352 extern void iwl3945_hw_rx_handler_setup(struct iwl3945_priv *priv);
353 extern void iwl3945_hw_setup_deferred_work(struct iwl3945_priv *priv);
354 extern void iwl3945_hw_cancel_deferred_work(struct iwl3945_priv *priv);
355 extern int iwl3945_hw_rxq_stop(struct iwl3945_priv *priv);
356 extern int iwl3945_hw_set_hw_setting(struct iwl3945_priv *priv);
357 extern int iwl3945_hw_nic_init(struct iwl3945_priv *priv);
358 extern int iwl3945_hw_nic_stop_master(struct iwl3945_priv *priv);
359 extern void iwl3945_hw_txq_ctx_free(struct iwl3945_priv *priv);
360 extern void iwl3945_hw_txq_ctx_stop(struct iwl3945_priv *priv);
361 extern int iwl3945_hw_nic_reset(struct iwl3945_priv *priv);
362 extern int iwl3945_hw_txq_attach_buf_to_tfd(struct iwl3945_priv *priv, void *tfd,
363                                         dma_addr_t addr, u16 len);
364 extern int iwl3945_hw_txq_free_tfd(struct iwl3945_priv *priv, struct iwl3945_tx_queue *txq);
365 extern int iwl3945_hw_get_temperature(struct iwl3945_priv *priv);
366 extern int iwl3945_hw_tx_queue_init(struct iwl3945_priv *priv,
367                                 struct iwl3945_tx_queue *txq);
368 extern unsigned int iwl3945_hw_get_beacon_cmd(struct iwl3945_priv *priv,
369                                  struct iwl3945_frame *frame, u8 rate);
370 extern int iwl3945_hw_get_rx_read(struct iwl3945_priv *priv);
371 extern void iwl3945_hw_build_tx_cmd_rate(struct iwl3945_priv *priv,
372                                      struct iwl3945_cmd *cmd,
373                                      struct ieee80211_tx_info *info,
374                                      struct ieee80211_hdr *hdr,
375                                      int sta_id, int tx_id);
376 extern int iwl3945_hw_reg_send_txpower(struct iwl3945_priv *priv);
377 extern int iwl3945_hw_reg_set_txpower(struct iwl3945_priv *priv, s8 power);
378 extern void iwl3945_hw_rx_statistics(struct iwl3945_priv *priv,
379                                  struct iwl_rx_mem_buffer *rxb);
380 extern void iwl3945_disable_events(struct iwl3945_priv *priv);
381 extern int iwl4965_get_temperature(const struct iwl3945_priv *priv);
382
383 /**
384  * iwl3945_hw_find_station - Find station id for a given BSSID
385  * @bssid: MAC address of station ID to find
386  *
387  * NOTE:  This should not be hardware specific but the code has
388  * not yet been merged into a single common layer for managing the
389  * station tables.
390  */
391 extern u8 iwl3945_hw_find_station(struct iwl3945_priv *priv, const u8 *bssid);
392
393 extern int iwl3945_hw_channel_switch(struct iwl3945_priv *priv, u16 channel);
394
395 /*
396  * Forward declare iwl-3945.c functions for iwl-base.c
397  */
398 extern __le32 iwl3945_get_antenna_flags(const struct iwl3945_priv *priv);
399 extern int iwl3945_init_hw_rate_table(struct iwl3945_priv *priv);
400 extern void iwl3945_reg_txpower_periodic(struct iwl3945_priv *priv);
401 extern int iwl3945_txpower_set_from_eeprom(struct iwl3945_priv *priv);
402 extern u8 iwl3945_sync_sta(struct iwl3945_priv *priv, int sta_id,
403                  u16 tx_rate, u8 flags);
404
405 #ifdef CONFIG_IWL3945_RFKILL
406 struct iwl3945_priv;
407
408 void iwl3945_rfkill_set_hw_state(struct iwl3945_priv *priv);
409 void iwl3945_rfkill_unregister(struct iwl3945_priv *priv);
410 int iwl3945_rfkill_init(struct iwl3945_priv *priv);
411 #else
412 static inline void iwl3945_rfkill_set_hw_state(struct iwl3945_priv *priv) {}
413 static inline void iwl3945_rfkill_unregister(struct iwl3945_priv *priv) {}
414 static inline int iwl3945_rfkill_init(struct iwl3945_priv *priv) { return 0; }
415 #endif
416
417
418 struct iwl3945_priv {
419
420         /* ieee device used by generic ieee processing code */
421         struct ieee80211_hw *hw;
422         struct ieee80211_channel *ieee_channels;
423         struct ieee80211_rate *ieee_rates;
424         struct iwl_cfg *cfg; /* device configuration */
425
426         /* temporary frame storage list */
427         struct list_head free_frames;
428         int frames_count;
429
430         enum ieee80211_band band;
431         int alloc_rxb_skb;
432
433         void (*rx_handlers[REPLY_MAX])(struct iwl3945_priv *priv,
434                                        struct iwl_rx_mem_buffer *rxb);
435
436         struct ieee80211_supported_band bands[IEEE80211_NUM_BANDS];
437
438 #ifdef CONFIG_IWL3945_SPECTRUM_MEASUREMENT
439         /* spectrum measurement report caching */
440         struct iwl_spectrum_notification measure_report;
441         u8 measurement_status;
442 #endif
443         /* ucode beacon time */
444         u32 ucode_beacon_time;
445
446         /* we allocate array of iwl3945_channel_info for NIC's valid channels.
447          *    Access via channel # using indirect index array */
448         struct iwl_channel_info *channel_info;  /* channel info array */
449         u8 channel_count;       /* # of channels */
450
451         /* each calibration channel group in the EEPROM has a derived
452          * clip setting for each rate. */
453         const struct iwl3945_clip_group clip_groups[5];
454
455         /* thermal calibration */
456         s32 temperature;        /* degrees Kelvin */
457         s32 last_temperature;
458
459         /* Scan related variables */
460         unsigned long last_scan_jiffies;
461         unsigned long next_scan_jiffies;
462         unsigned long scan_start;
463         unsigned long scan_pass_start;
464         unsigned long scan_start_tsf;
465         int scan_bands;
466         int one_direct_scan;
467         u8 direct_ssid_len;
468         u8 direct_ssid[IW_ESSID_MAX_SIZE];
469         struct iwl3945_scan_cmd *scan;
470
471         /* spinlock */
472         spinlock_t lock;        /* protect general shared data */
473         spinlock_t hcmd_lock;   /* protect hcmd */
474         struct mutex mutex;
475
476         /* basic pci-network driver stuff */
477         struct pci_dev *pci_dev;
478
479         /* pci hardware address support */
480         void __iomem *hw_base;
481
482         /* uCode images, save to reload in case of failure */
483         u32 ucode_ver;                  /* ucode version, copy of
484                                            iwl_ucode.ver */
485         struct fw_desc ucode_code;      /* runtime inst */
486         struct fw_desc ucode_data;      /* runtime data original */
487         struct fw_desc ucode_data_backup;       /* runtime data save/restore */
488         struct fw_desc ucode_init;      /* initialization inst */
489         struct fw_desc ucode_init_data; /* initialization data */
490         struct fw_desc ucode_boot;      /* bootstrap inst */
491
492
493         struct iwl_rxon_time_cmd rxon_timing;
494
495         /* We declare this const so it can only be
496          * changed via explicit cast within the
497          * routines that actually update the physical
498          * hardware */
499         const struct iwl3945_rxon_cmd active_rxon;
500         struct iwl3945_rxon_cmd staging_rxon;
501
502         int error_recovering;
503         struct iwl3945_rxon_cmd recovery_rxon;
504
505         /* 1st responses from initialize and runtime uCode images.
506          * 4965's initialize alive response contains some calibration data. */
507         /* FIXME: 4965 uses bigger structure for init */
508         struct iwl_alive_resp card_alive_init;
509         struct iwl_alive_resp card_alive;
510
511 #ifdef CONFIG_IWL3945_RFKILL
512         struct rfkill *rfkill;
513 #endif
514
515 #ifdef CONFIG_IWL3945_LEDS
516         struct iwl3945_led led[IWL_LED_TRG_MAX];
517         unsigned long last_blink_time;
518         u8 last_blink_rate;
519         u8 allow_blinking;
520         unsigned int rxtxpackets;
521         u64 led_tpt;
522 #endif
523
524
525         u16 active_rate;
526         u16 active_rate_basic;
527
528         u32 sta_supp_rates;
529
530         u8 call_post_assoc_from_beacon;
531         /* Rate scaling data */
532         s8 data_retry_limit;
533         u8 retry_rate;
534
535         wait_queue_head_t wait_command_queue;
536
537         int activity_timer_active;
538
539         /* Rx and Tx DMA processing queues */
540         struct iwl_rx_queue rxq;
541         struct iwl3945_tx_queue txq[IWL39_MAX_NUM_QUEUES];
542
543         unsigned long status;
544
545         int last_rx_rssi;       /* From Rx packet statisitics */
546         int last_rx_noise;      /* From beacon statistics */
547
548         struct iwl3945_power_mgr power_data;
549
550         struct iwl3945_notif_statistics statistics;
551         unsigned long last_statistics_time;
552
553         /* context information */
554         u16 rates_mask;
555
556         u32 power_mode;
557         u32 antenna;
558         u8 bssid[ETH_ALEN];
559         u16 rts_threshold;
560         u8 mac_addr[ETH_ALEN];
561
562         /*station table variables */
563         spinlock_t sta_lock;
564         int num_stations;
565         struct iwl3945_station_entry stations[IWL_STATION_COUNT];
566
567         /* Indication if ieee80211_ops->open has been called */
568         u8 is_open;
569
570         u8 mac80211_registered;
571
572         /* Rx'd packet timing information */
573         u32 last_beacon_time;
574         u64 last_tsf;
575
576         /* eeprom */
577         struct iwl3945_eeprom eeprom;
578
579         enum nl80211_iftype iw_mode;
580
581         struct sk_buff *ibss_beacon;
582
583         /* Last Rx'd beacon timestamp */
584         u64 timestamp;
585         u16 beacon_int;
586         struct iwl3945_driver_hw_info hw_setting;
587         struct ieee80211_vif *vif;
588
589         /* Current association information needed to configure the
590          * hardware */
591         u16 assoc_id;
592         u16 assoc_capability;
593         u8 ps_mode;
594
595         struct iwl_qos_info qos_data;
596
597         struct workqueue_struct *workqueue;
598
599         struct work_struct up;
600         struct work_struct restart;
601         struct work_struct calibrated_work;
602         struct work_struct scan_completed;
603         struct work_struct rx_replenish;
604         struct work_struct rf_kill;
605         struct work_struct abort_scan;
606         struct work_struct update_link_led;
607         struct work_struct auth_work;
608         struct work_struct report_work;
609         struct work_struct request_scan;
610         struct work_struct beacon_update;
611
612         struct tasklet_struct irq_tasklet;
613
614         struct delayed_work init_alive_start;
615         struct delayed_work alive_start;
616         struct delayed_work activity_timer;
617         struct delayed_work thermal_periodic;
618         struct delayed_work gather_stats;
619         struct delayed_work scan_check;
620
621 #define IWL_DEFAULT_TX_POWER 0x0F
622         s8 user_txpower_limit;
623         s8 max_channel_txpower_limit;
624
625
626 #ifdef CONFIG_IWL3945_DEBUG
627         /* debugging info */
628         u32 debug_level;
629         u32 framecnt_to_us;
630         atomic_t restrict_refcnt;
631 #endif
632 };                              /*iwl3945_priv */
633
634 static inline int iwl3945_is_associated(struct iwl3945_priv *priv)
635 {
636         return (priv->active_rxon.filter_flags & RXON_FILTER_ASSOC_MSK) ? 1 : 0;
637 }
638
639 extern const struct iwl_channel_info *iwl3945_get_channel_info(
640         const struct iwl3945_priv *priv, enum ieee80211_band band, u16 channel);
641
642 extern int iwl3945_rs_next_rate(struct iwl3945_priv *priv, int rate);
643
644 /* Requires full declaration of iwl3945_priv before including */
645 #include "iwl-3945-io.h"
646
647 #endif