~ubuntu-branches/ubuntu/maverick/linux-backports-modules-2.6.32/maverick

« back to all changes in this revision

Viewing changes to updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt2x00.h

  • Committer: Bazaar Package Importer
  • Author(s): Andy Whitcroft, Andy Whitcroft
  • Date: 2010-02-04 23:15:51 UTC
  • Revision ID: james.westby@ubuntu.com-20100204231551-vjz5pkvxclukjxm1
Tags: 2.6.32-12.1
[ Andy Whitcroft ]

* initial LBM for lucid
* drop generated files
* printchanges -- rebase tree does not have stable tags use changelog
* printenv -- add revisions to printenv output
* formally rename compat-wireless to linux-backports-modules-wireless
* Update to compat-wireless-2.6.33-rc5
* update nouveau to mainline 2.6.33-rc4
* add new LBM package for nouveau
* nouveau -- fix major numbers and proc entry names
* fix up firmware installs for -wireless
* clean up UPDATE-NOVEAU
* update Nouveau to v2.6.33-rc6

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
        Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com>
 
3
        Copyright (C) 2004 - 2009 Gertjan van Wingerde <gwingerde@gmail.com>
 
4
        <http://rt2x00.serialmonkey.com>
 
5
 
 
6
        This program is free software; you can redistribute it and/or modify
 
7
        it under the terms of the GNU General Public License as published by
 
8
        the Free Software Foundation; either version 2 of the License, or
 
9
        (at your option) any later version.
 
10
 
 
11
        This program is distributed in the hope that it will be useful,
 
12
        but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 
14
        GNU General Public License for more details.
 
15
 
 
16
        You should have received a copy of the GNU General Public License
 
17
        along with this program; if not, write to the
 
18
        Free Software Foundation, Inc.,
 
19
        59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
20
 */
 
21
 
 
22
/*
 
23
        Module: rt2x00
 
24
        Abstract: rt2x00 global information.
 
25
 */
 
26
 
 
27
#ifndef RT2X00_H
 
28
#define RT2X00_H
 
29
 
 
30
#include <linux/bitops.h>
 
31
#include <linux/skbuff.h>
 
32
#include <linux/workqueue.h>
 
33
#include <linux/firmware.h>
 
34
#include <linux/leds.h>
 
35
#include <linux/mutex.h>
 
36
#include <linux/etherdevice.h>
 
37
#include <linux/input-polldev.h>
 
38
 
 
39
#include <net/mac80211.h>
 
40
 
 
41
#include "rt2x00debug.h"
 
42
#include "rt2x00leds.h"
 
43
#include "rt2x00reg.h"
 
44
#include "rt2x00queue.h"
 
45
 
 
46
/*
 
47
 * Module information.
 
48
 */
 
49
#define DRV_VERSION     "2.3.0"
 
50
#define DRV_PROJECT     "http://rt2x00.serialmonkey.com"
 
51
 
 
52
/*
 
53
 * Debug definitions.
 
54
 * Debug output has to be enabled during compile time.
 
55
 */
 
56
#define DEBUG_PRINTK_MSG(__dev, __kernlvl, __lvl, __msg, __args...)     \
 
57
        printk(__kernlvl "%s -> %s: %s - " __msg,                       \
 
58
               wiphy_name((__dev)->hw->wiphy), __func__, __lvl, ##__args)
 
59
 
 
60
#define DEBUG_PRINTK_PROBE(__kernlvl, __lvl, __msg, __args...)  \
 
61
        printk(__kernlvl "%s -> %s: %s - " __msg,               \
 
62
               KBUILD_MODNAME, __func__, __lvl, ##__args)
 
63
 
 
64
#ifdef CONFIG_RT2X00_DEBUG
 
65
#define DEBUG_PRINTK(__dev, __kernlvl, __lvl, __msg, __args...) \
 
66
        DEBUG_PRINTK_MSG(__dev, __kernlvl, __lvl, __msg, ##__args);
 
67
#else
 
68
#define DEBUG_PRINTK(__dev, __kernlvl, __lvl, __msg, __args...) \
 
69
        do { } while (0)
 
70
#endif /* CONFIG_RT2X00_DEBUG */
 
71
 
 
72
/*
 
73
 * Various debug levels.
 
74
 * The debug levels PANIC and ERROR both indicate serious problems,
 
75
 * for this reason they should never be ignored.
 
76
 * The special ERROR_PROBE message is for messages that are generated
 
77
 * when the rt2x00_dev is not yet initialized.
 
78
 */
 
79
#define PANIC(__dev, __msg, __args...) \
 
80
        DEBUG_PRINTK_MSG(__dev, KERN_CRIT, "Panic", __msg, ##__args)
 
81
#define ERROR(__dev, __msg, __args...)  \
 
82
        DEBUG_PRINTK_MSG(__dev, KERN_ERR, "Error", __msg, ##__args)
 
83
#define ERROR_PROBE(__msg, __args...) \
 
84
        DEBUG_PRINTK_PROBE(KERN_ERR, "Error", __msg, ##__args)
 
85
#define WARNING(__dev, __msg, __args...) \
 
86
        DEBUG_PRINTK(__dev, KERN_WARNING, "Warning", __msg, ##__args)
 
87
#define NOTICE(__dev, __msg, __args...) \
 
88
        DEBUG_PRINTK(__dev, KERN_NOTICE, "Notice", __msg, ##__args)
 
89
#define INFO(__dev, __msg, __args...) \
 
90
        DEBUG_PRINTK(__dev, KERN_INFO, "Info", __msg, ##__args)
 
91
#define DEBUG(__dev, __msg, __args...) \
 
92
        DEBUG_PRINTK(__dev, KERN_DEBUG, "Debug", __msg, ##__args)
 
93
#define EEPROM(__dev, __msg, __args...) \
 
94
        DEBUG_PRINTK(__dev, KERN_DEBUG, "EEPROM recovery", __msg, ##__args)
 
95
 
 
96
/*
 
97
 * Duration calculations
 
98
 * The rate variable passed is: 100kbs.
 
99
 * To convert from bytes to bits we multiply size with 8,
 
100
 * then the size is multiplied with 10 to make the
 
101
 * real rate -> rate argument correction.
 
102
 */
 
103
#define GET_DURATION(__size, __rate)    (((__size) * 8 * 10) / (__rate))
 
104
#define GET_DURATION_RES(__size, __rate)(((__size) * 8 * 10) % (__rate))
 
105
 
 
106
/*
 
107
 * Determine the alignment requirement,
 
108
 * to make sure the 802.11 payload is padded to a 4-byte boundrary
 
109
 * we must determine the address of the payload and calculate the
 
110
 * amount of bytes needed to move the data.
 
111
 */
 
112
#define ALIGN_SIZE(__skb, __header) \
 
113
        (  ((unsigned long)((__skb)->data + (__header))) & 3 )
 
114
 
 
115
/*
 
116
 * Constants for extra TX headroom for alignment purposes.
 
117
 */
 
118
#define RT2X00_ALIGN_SIZE       4 /* Only whole frame needs alignment */
 
119
#define RT2X00_L2PAD_SIZE       8 /* Both header & payload need alignment */
 
120
 
 
121
/*
 
122
 * Standard timing and size defines.
 
123
 * These values should follow the ieee80211 specifications.
 
124
 */
 
125
#define ACK_SIZE                14
 
126
#define IEEE80211_HEADER        24
 
127
#define PLCP                    48
 
128
#define BEACON                  100
 
129
#define PREAMBLE                144
 
130
#define SHORT_PREAMBLE          72
 
131
#define SLOT_TIME               20
 
132
#define SHORT_SLOT_TIME         9
 
133
#define SIFS                    10
 
134
#define PIFS                    ( SIFS + SLOT_TIME )
 
135
#define SHORT_PIFS              ( SIFS + SHORT_SLOT_TIME )
 
136
#define DIFS                    ( PIFS + SLOT_TIME )
 
137
#define SHORT_DIFS              ( SHORT_PIFS + SHORT_SLOT_TIME )
 
138
#define EIFS                    ( SIFS + DIFS + \
 
139
                                  GET_DURATION(IEEE80211_HEADER + ACK_SIZE, 10) )
 
140
#define SHORT_EIFS              ( SIFS + SHORT_DIFS + \
 
141
                                  GET_DURATION(IEEE80211_HEADER + ACK_SIZE, 10) )
 
142
 
 
143
/*
 
144
 * Structure for average calculation
 
145
 * The avg field contains the actual average value,
 
146
 * but avg_weight is internally used during calculations
 
147
 * to prevent rounding errors.
 
148
 */
 
149
struct avg_val {
 
150
        int avg;
 
151
        int avg_weight;
 
152
};
 
153
 
 
154
enum rt2x00_chip_intf {
 
155
        RT2X00_CHIP_INTF_PCI,
 
156
        RT2X00_CHIP_INTF_USB,
 
157
};
 
158
 
 
159
/*
 
160
 * Chipset identification
 
161
 * The chipset on the device is composed of a RT and RF chip.
 
162
 * The chipset combination is important for determining device capabilities.
 
163
 */
 
164
struct rt2x00_chip {
 
165
        u16 rt;
 
166
#define RT2460          0x0101
 
167
#define RT2560          0x0201
 
168
#define RT2570          0x1201
 
169
#define RT2561s         0x0301  /* Turbo */
 
170
#define RT2561          0x0302
 
171
#define RT2661          0x0401
 
172
#define RT2571          0x1300
 
173
#define RT2860          0x0601  /* 2.4GHz PCI/CB */
 
174
#define RT2860D         0x0681  /* 2.4GHz, 5GHz PCI/CB */
 
175
#define RT2890          0x0701  /* 2.4GHz PCIe */
 
176
#define RT2890D         0x0781  /* 2.4GHz, 5GHz PCIe */
 
177
#define RT2880          0x2880  /* WSOC */
 
178
#define RT3052          0x3052  /* WSOC */
 
179
#define RT3090          0x3090  /* 2.4GHz PCIe */
 
180
#define RT2870          0x1600
 
181
#define RT3070          0x1800
 
182
 
 
183
        u16 rf;
 
184
        u32 rev;
 
185
 
 
186
        enum rt2x00_chip_intf intf;
 
187
};
 
188
 
 
189
/*
 
190
 * RF register values that belong to a particular channel.
 
191
 */
 
192
struct rf_channel {
 
193
        int channel;
 
194
        u32 rf1;
 
195
        u32 rf2;
 
196
        u32 rf3;
 
197
        u32 rf4;
 
198
};
 
199
 
 
200
/*
 
201
 * Channel information structure
 
202
 */
 
203
struct channel_info {
 
204
        unsigned int flags;
 
205
#define GEOGRAPHY_ALLOWED       0x00000001
 
206
 
 
207
        short tx_power1;
 
208
        short tx_power2;
 
209
};
 
210
 
 
211
/*
 
212
 * Antenna setup values.
 
213
 */
 
214
struct antenna_setup {
 
215
        enum antenna rx;
 
216
        enum antenna tx;
 
217
};
 
218
 
 
219
/*
 
220
 * Quality statistics about the currently active link.
 
221
 */
 
222
struct link_qual {
 
223
        /*
 
224
         * Statistics required for Link tuning by driver
 
225
         * The rssi value is provided by rt2x00lib during the
 
226
         * link_tuner() callback function.
 
227
         * The false_cca field is filled during the link_stats()
 
228
         * callback function and could be used during the
 
229
         * link_tuner() callback function.
 
230
         */
 
231
        int rssi;
 
232
        int false_cca;
 
233
 
 
234
        /*
 
235
         * VGC levels
 
236
         * Hardware driver will tune the VGC level during each call
 
237
         * to the link_tuner() callback function. This vgc_level is
 
238
         * is determined based on the link quality statistics like
 
239
         * average RSSI and the false CCA count.
 
240
         *
 
241
         * In some cases the drivers need to differentiate between
 
242
         * the currently "desired" VGC level and the level configured
 
243
         * in the hardware. The latter is important to reduce the
 
244
         * number of BBP register reads to reduce register access
 
245
         * overhead. For this reason we store both values here.
 
246
         */
 
247
        u8 vgc_level;
 
248
        u8 vgc_level_reg;
 
249
 
 
250
        /*
 
251
         * Statistics required for Signal quality calculation.
 
252
         * These fields might be changed during the link_stats()
 
253
         * callback function.
 
254
         */
 
255
        int rx_success;
 
256
        int rx_failed;
 
257
        int tx_success;
 
258
        int tx_failed;
 
259
};
 
260
 
 
261
/*
 
262
 * Antenna settings about the currently active link.
 
263
 */
 
264
struct link_ant {
 
265
        /*
 
266
         * Antenna flags
 
267
         */
 
268
        unsigned int flags;
 
269
#define ANTENNA_RX_DIVERSITY    0x00000001
 
270
#define ANTENNA_TX_DIVERSITY    0x00000002
 
271
#define ANTENNA_MODE_SAMPLE     0x00000004
 
272
 
 
273
        /*
 
274
         * Currently active TX/RX antenna setup.
 
275
         * When software diversity is used, this will indicate
 
276
         * which antenna is actually used at this time.
 
277
         */
 
278
        struct antenna_setup active;
 
279
 
 
280
        /*
 
281
         * RSSI history information for the antenna.
 
282
         * Used to determine when to switch antenna
 
283
         * when using software diversity.
 
284
         */
 
285
        int rssi_history;
 
286
 
 
287
        /*
 
288
         * Current RSSI average of the currently active antenna.
 
289
         * Similar to the avg_rssi in the link_qual structure
 
290
         * this value is updated by using the walking average.
 
291
         */
 
292
        struct avg_val rssi_ant;
 
293
};
 
294
 
 
295
/*
 
296
 * To optimize the quality of the link we need to store
 
297
 * the quality of received frames and periodically
 
298
 * optimize the link.
 
299
 */
 
300
struct link {
 
301
        /*
 
302
         * Link tuner counter
 
303
         * The number of times the link has been tuned
 
304
         * since the radio has been switched on.
 
305
         */
 
306
        u32 count;
 
307
 
 
308
        /*
 
309
         * Quality measurement values.
 
310
         */
 
311
        struct link_qual qual;
 
312
 
 
313
        /*
 
314
         * TX/RX antenna setup.
 
315
         */
 
316
        struct link_ant ant;
 
317
 
 
318
        /*
 
319
         * Currently active average RSSI value
 
320
         */
 
321
        struct avg_val avg_rssi;
 
322
 
 
323
        /*
 
324
         * Work structure for scheduling periodic link tuning.
 
325
         */
 
326
        struct delayed_work work;
 
327
};
 
328
 
 
329
/*
 
330
 * Interface structure
 
331
 * Per interface configuration details, this structure
 
332
 * is allocated as the private data for ieee80211_vif.
 
333
 */
 
334
struct rt2x00_intf {
 
335
        /*
 
336
         * All fields within the rt2x00_intf structure
 
337
         * must be protected with a spinlock.
 
338
         */
 
339
        spinlock_t lock;
 
340
 
 
341
        /*
 
342
         * MAC of the device.
 
343
         */
 
344
        u8 mac[ETH_ALEN];
 
345
 
 
346
        /*
 
347
         * BBSID of the AP to associate with.
 
348
         */
 
349
        u8 bssid[ETH_ALEN];
 
350
 
 
351
        /*
 
352
         * beacon->skb must be protected with the mutex.
 
353
         */
 
354
        struct mutex beacon_skb_mutex;
 
355
 
 
356
        /*
 
357
         * Entry in the beacon queue which belongs to
 
358
         * this interface. Each interface has its own
 
359
         * dedicated beacon entry.
 
360
         */
 
361
        struct queue_entry *beacon;
 
362
 
 
363
        /*
 
364
         * Actions that needed rescheduling.
 
365
         */
 
366
        unsigned int delayed_flags;
 
367
#define DELAYED_UPDATE_BEACON           0x00000001
 
368
 
 
369
        /*
 
370
         * Software sequence counter, this is only required
 
371
         * for hardware which doesn't support hardware
 
372
         * sequence counting.
 
373
         */
 
374
        spinlock_t seqlock;
 
375
        u16 seqno;
 
376
};
 
377
 
 
378
static inline struct rt2x00_intf* vif_to_intf(struct ieee80211_vif *vif)
 
379
{
 
380
        return (struct rt2x00_intf *)vif->drv_priv;
 
381
}
 
382
 
 
383
/**
 
384
 * struct hw_mode_spec: Hardware specifications structure
 
385
 *
 
386
 * Details about the supported modes, rates and channels
 
387
 * of a particular chipset. This is used by rt2x00lib
 
388
 * to build the ieee80211_hw_mode array for mac80211.
 
389
 *
 
390
 * @supported_bands: Bitmask contained the supported bands (2.4GHz, 5.2GHz).
 
391
 * @supported_rates: Rate types which are supported (CCK, OFDM).
 
392
 * @num_channels: Number of supported channels. This is used as array size
 
393
 *      for @tx_power_a, @tx_power_bg and @channels.
 
394
 * @channels: Device/chipset specific channel values (See &struct rf_channel).
 
395
 * @channels_info: Additional information for channels (See &struct channel_info).
 
396
 * @ht: Driver HT Capabilities (See &ieee80211_sta_ht_cap).
 
397
 */
 
398
struct hw_mode_spec {
 
399
        unsigned int supported_bands;
 
400
#define SUPPORT_BAND_2GHZ       0x00000001
 
401
#define SUPPORT_BAND_5GHZ       0x00000002
 
402
 
 
403
        unsigned int supported_rates;
 
404
#define SUPPORT_RATE_CCK        0x00000001
 
405
#define SUPPORT_RATE_OFDM       0x00000002
 
406
 
 
407
        unsigned int num_channels;
 
408
        const struct rf_channel *channels;
 
409
        const struct channel_info *channels_info;
 
410
 
 
411
        struct ieee80211_sta_ht_cap ht;
 
412
};
 
413
 
 
414
/*
 
415
 * Configuration structure wrapper around the
 
416
 * mac80211 configuration structure.
 
417
 * When mac80211 configures the driver, rt2x00lib
 
418
 * can precalculate values which are equal for all
 
419
 * rt2x00 drivers. Those values can be stored in here.
 
420
 */
 
421
struct rt2x00lib_conf {
 
422
        struct ieee80211_conf *conf;
 
423
 
 
424
        struct rf_channel rf;
 
425
        struct channel_info channel;
 
426
};
 
427
 
 
428
/*
 
429
 * Configuration structure for erp settings.
 
430
 */
 
431
struct rt2x00lib_erp {
 
432
        int short_preamble;
 
433
        int cts_protection;
 
434
 
 
435
        u32 basic_rates;
 
436
 
 
437
        int slot_time;
 
438
 
 
439
        short sifs;
 
440
        short pifs;
 
441
        short difs;
 
442
        short eifs;
 
443
 
 
444
        u16 beacon_int;
 
445
};
 
446
 
 
447
/*
 
448
 * Configuration structure for hardware encryption.
 
449
 */
 
450
struct rt2x00lib_crypto {
 
451
        enum cipher cipher;
 
452
 
 
453
        enum set_key_cmd cmd;
 
454
        const u8 *address;
 
455
 
 
456
        u32 bssidx;
 
457
        u32 aid;
 
458
 
 
459
        u8 key[16];
 
460
        u8 tx_mic[8];
 
461
        u8 rx_mic[8];
 
462
};
 
463
 
 
464
/*
 
465
 * Configuration structure wrapper around the
 
466
 * rt2x00 interface configuration handler.
 
467
 */
 
468
struct rt2x00intf_conf {
 
469
        /*
 
470
         * Interface type
 
471
         */
 
472
        enum nl80211_iftype type;
 
473
 
 
474
        /*
 
475
         * TSF sync value, this is dependant on the operation type.
 
476
         */
 
477
        enum tsf_sync sync;
 
478
 
 
479
        /*
 
480
         * The MAC and BSSID addressess are simple array of bytes,
 
481
         * these arrays are little endian, so when sending the addressess
 
482
         * to the drivers, copy the it into a endian-signed variable.
 
483
         *
 
484
         * Note that all devices (except rt2500usb) have 32 bits
 
485
         * register word sizes. This means that whatever variable we
 
486
         * pass _must_ be a multiple of 32 bits. Otherwise the device
 
487
         * might not accept what we are sending to it.
 
488
         * This will also make it easier for the driver to write
 
489
         * the data to the device.
 
490
         */
 
491
        __le32 mac[2];
 
492
        __le32 bssid[2];
 
493
};
 
494
 
 
495
/*
 
496
 * rt2x00lib callback functions.
 
497
 */
 
498
struct rt2x00lib_ops {
 
499
        /*
 
500
         * Interrupt handlers.
 
501
         */
 
502
        irq_handler_t irq_handler;
 
503
 
 
504
        /*
 
505
         * Device init handlers.
 
506
         */
 
507
        int (*probe_hw) (struct rt2x00_dev *rt2x00dev);
 
508
        char *(*get_firmware_name) (struct rt2x00_dev *rt2x00dev);
 
509
        int (*check_firmware) (struct rt2x00_dev *rt2x00dev,
 
510
                               const u8 *data, const size_t len);
 
511
        int (*load_firmware) (struct rt2x00_dev *rt2x00dev,
 
512
                              const u8 *data, const size_t len);
 
513
 
 
514
        /*
 
515
         * Device initialization/deinitialization handlers.
 
516
         */
 
517
        int (*initialize) (struct rt2x00_dev *rt2x00dev);
 
518
        void (*uninitialize) (struct rt2x00_dev *rt2x00dev);
 
519
 
 
520
        /*
 
521
         * queue initialization handlers
 
522
         */
 
523
        bool (*get_entry_state) (struct queue_entry *entry);
 
524
        void (*clear_entry) (struct queue_entry *entry);
 
525
 
 
526
        /*
 
527
         * Radio control handlers.
 
528
         */
 
529
        int (*set_device_state) (struct rt2x00_dev *rt2x00dev,
 
530
                                 enum dev_state state);
 
531
        int (*rfkill_poll) (struct rt2x00_dev *rt2x00dev);
 
532
        void (*link_stats) (struct rt2x00_dev *rt2x00dev,
 
533
                            struct link_qual *qual);
 
534
        void (*reset_tuner) (struct rt2x00_dev *rt2x00dev,
 
535
                             struct link_qual *qual);
 
536
        void (*link_tuner) (struct rt2x00_dev *rt2x00dev,
 
537
                            struct link_qual *qual, const u32 count);
 
538
 
 
539
        /*
 
540
         * TX control handlers
 
541
         */
 
542
        void (*write_tx_desc) (struct rt2x00_dev *rt2x00dev,
 
543
                               struct sk_buff *skb,
 
544
                               struct txentry_desc *txdesc);
 
545
        int (*write_tx_data) (struct queue_entry *entry);
 
546
        void (*write_beacon) (struct queue_entry *entry);
 
547
        int (*get_tx_data_len) (struct queue_entry *entry);
 
548
        void (*kick_tx_queue) (struct rt2x00_dev *rt2x00dev,
 
549
                               const enum data_queue_qid queue);
 
550
        void (*kill_tx_queue) (struct rt2x00_dev *rt2x00dev,
 
551
                               const enum data_queue_qid queue);
 
552
 
 
553
        /*
 
554
         * RX control handlers
 
555
         */
 
556
        void (*fill_rxdone) (struct queue_entry *entry,
 
557
                             struct rxdone_entry_desc *rxdesc);
 
558
 
 
559
        /*
 
560
         * Configuration handlers.
 
561
         */
 
562
        int (*config_shared_key) (struct rt2x00_dev *rt2x00dev,
 
563
                                  struct rt2x00lib_crypto *crypto,
 
564
                                  struct ieee80211_key_conf *key);
 
565
        int (*config_pairwise_key) (struct rt2x00_dev *rt2x00dev,
 
566
                                    struct rt2x00lib_crypto *crypto,
 
567
                                    struct ieee80211_key_conf *key);
 
568
        void (*config_filter) (struct rt2x00_dev *rt2x00dev,
 
569
                               const unsigned int filter_flags);
 
570
        void (*config_intf) (struct rt2x00_dev *rt2x00dev,
 
571
                             struct rt2x00_intf *intf,
 
572
                             struct rt2x00intf_conf *conf,
 
573
                             const unsigned int flags);
 
574
#define CONFIG_UPDATE_TYPE              ( 1 << 1 )
 
575
#define CONFIG_UPDATE_MAC               ( 1 << 2 )
 
576
#define CONFIG_UPDATE_BSSID             ( 1 << 3 )
 
577
 
 
578
        void (*config_erp) (struct rt2x00_dev *rt2x00dev,
 
579
                            struct rt2x00lib_erp *erp);
 
580
        void (*config_ant) (struct rt2x00_dev *rt2x00dev,
 
581
                            struct antenna_setup *ant);
 
582
        void (*config) (struct rt2x00_dev *rt2x00dev,
 
583
                        struct rt2x00lib_conf *libconf,
 
584
                        const unsigned int changed_flags);
 
585
};
 
586
 
 
587
/*
 
588
 * rt2x00 driver callback operation structure.
 
589
 */
 
590
struct rt2x00_ops {
 
591
        const char *name;
 
592
        const unsigned int max_sta_intf;
 
593
        const unsigned int max_ap_intf;
 
594
        const unsigned int eeprom_size;
 
595
        const unsigned int rf_size;
 
596
        const unsigned int tx_queues;
 
597
        const unsigned int extra_tx_headroom;
 
598
        const struct data_queue_desc *rx;
 
599
        const struct data_queue_desc *tx;
 
600
        const struct data_queue_desc *bcn;
 
601
        const struct data_queue_desc *atim;
 
602
        const struct rt2x00lib_ops *lib;
 
603
        const struct ieee80211_ops *hw;
 
604
#ifdef CONFIG_RT2X00_LIB_DEBUGFS
 
605
        const struct rt2x00debug *debugfs;
 
606
#endif /* CONFIG_RT2X00_LIB_DEBUGFS */
 
607
};
 
608
 
 
609
/*
 
610
 * rt2x00 device flags
 
611
 */
 
612
enum rt2x00_flags {
 
613
        /*
 
614
         * Device state flags
 
615
         */
 
616
        DEVICE_STATE_PRESENT,
 
617
        DEVICE_STATE_REGISTERED_HW,
 
618
        DEVICE_STATE_INITIALIZED,
 
619
        DEVICE_STATE_STARTED,
 
620
        DEVICE_STATE_ENABLED_RADIO,
 
621
 
 
622
        /*
 
623
         * Driver requirements
 
624
         */
 
625
        DRIVER_REQUIRE_FIRMWARE,
 
626
        DRIVER_REQUIRE_BEACON_GUARD,
 
627
        DRIVER_REQUIRE_ATIM_QUEUE,
 
628
        DRIVER_REQUIRE_DMA,
 
629
        DRIVER_REQUIRE_COPY_IV,
 
630
        DRIVER_REQUIRE_L2PAD,
 
631
 
 
632
        /*
 
633
         * Driver features
 
634
         */
 
635
        CONFIG_SUPPORT_HW_BUTTON,
 
636
        CONFIG_SUPPORT_HW_CRYPTO,
 
637
        DRIVER_SUPPORT_CONTROL_FILTERS,
 
638
        DRIVER_SUPPORT_CONTROL_FILTER_PSPOLL,
 
639
 
 
640
        /*
 
641
         * Driver configuration
 
642
         */
 
643
        CONFIG_FRAME_TYPE,
 
644
        CONFIG_RF_SEQUENCE,
 
645
        CONFIG_EXTERNAL_LNA_A,
 
646
        CONFIG_EXTERNAL_LNA_BG,
 
647
        CONFIG_DOUBLE_ANTENNA,
 
648
        CONFIG_DISABLE_LINK_TUNING,
 
649
        CONFIG_CHANNEL_HT40,
 
650
};
 
651
 
 
652
/*
 
653
 * rt2x00 device structure.
 
654
 */
 
655
struct rt2x00_dev {
 
656
        /*
 
657
         * Device structure.
 
658
         * The structure stored in here depends on the
 
659
         * system bus (PCI or USB).
 
660
         * When accessing this variable, the rt2x00dev_{pci,usb}
 
661
         * macros should be used for correct typecasting.
 
662
         */
 
663
        struct device *dev;
 
664
 
 
665
        /*
 
666
         * Callback functions.
 
667
         */
 
668
        const struct rt2x00_ops *ops;
 
669
 
 
670
        /*
 
671
         * IEEE80211 control structure.
 
672
         */
 
673
        struct ieee80211_hw *hw;
 
674
        struct ieee80211_supported_band bands[IEEE80211_NUM_BANDS];
 
675
        enum ieee80211_band curr_band;
 
676
 
 
677
        /*
 
678
         * If enabled, the debugfs interface structures
 
679
         * required for deregistration of debugfs.
 
680
         */
 
681
#ifdef CONFIG_RT2X00_LIB_DEBUGFS
 
682
        struct rt2x00debug_intf *debugfs_intf;
 
683
#endif /* CONFIG_RT2X00_LIB_DEBUGFS */
 
684
 
 
685
        /*
 
686
         * LED structure for changing the LED status
 
687
         * by mac8011 or the kernel.
 
688
         */
 
689
#ifdef CONFIG_RT2X00_LIB_LEDS
 
690
        struct rt2x00_led led_radio;
 
691
        struct rt2x00_led led_assoc;
 
692
        struct rt2x00_led led_qual;
 
693
        u16 led_mcu_reg;
 
694
#endif /* CONFIG_RT2X00_LIB_LEDS */
 
695
 
 
696
        /*
 
697
         * Device flags.
 
698
         * In these flags the current status and some
 
699
         * of the device capabilities are stored.
 
700
         */
 
701
        unsigned long flags;
 
702
 
 
703
        /*
 
704
         * Device information, Bus IRQ and name (PCI, SoC)
 
705
         */
 
706
        int irq;
 
707
        const char *name;
 
708
 
 
709
        /*
 
710
         * Chipset identification.
 
711
         */
 
712
        struct rt2x00_chip chip;
 
713
 
 
714
        /*
 
715
         * hw capability specifications.
 
716
         */
 
717
        struct hw_mode_spec spec;
 
718
 
 
719
        /*
 
720
         * This is the default TX/RX antenna setup as indicated
 
721
         * by the device's EEPROM.
 
722
         */
 
723
        struct antenna_setup default_ant;
 
724
 
 
725
        /*
 
726
         * Register pointers
 
727
         * csr.base: CSR base register address. (PCI)
 
728
         * csr.cache: CSR cache for usb_control_msg. (USB)
 
729
         */
 
730
        union csr {
 
731
                void __iomem *base;
 
732
                void *cache;
 
733
        } csr;
 
734
 
 
735
        /*
 
736
         * Mutex to protect register accesses.
 
737
         * For PCI and USB devices it protects against concurrent indirect
 
738
         * register access (BBP, RF, MCU) since accessing those
 
739
         * registers require multiple calls to the CSR registers.
 
740
         * For USB devices it also protects the csr_cache since that
 
741
         * field is used for normal CSR access and it cannot support
 
742
         * multiple callers simultaneously.
 
743
         */
 
744
        struct mutex csr_mutex;
 
745
 
 
746
        /*
 
747
         * Current packet filter configuration for the device.
 
748
         * This contains all currently active FIF_* flags send
 
749
         * to us by mac80211 during configure_filter().
 
750
         */
 
751
        unsigned int packet_filter;
 
752
 
 
753
        /*
 
754
         * Interface details:
 
755
         *  - Open ap interface count.
 
756
         *  - Open sta interface count.
 
757
         *  - Association count.
 
758
         */
 
759
        unsigned int intf_ap_count;
 
760
        unsigned int intf_sta_count;
 
761
        unsigned int intf_associated;
 
762
 
 
763
        /*
 
764
         * Link quality
 
765
         */
 
766
        struct link link;
 
767
 
 
768
        /*
 
769
         * EEPROM data.
 
770
         */
 
771
        __le16 *eeprom;
 
772
 
 
773
        /*
 
774
         * Active RF register values.
 
775
         * These are stored here so we don't need
 
776
         * to read the rf registers and can directly
 
777
         * use this value instead.
 
778
         * This field should be accessed by using
 
779
         * rt2x00_rf_read() and rt2x00_rf_write().
 
780
         */
 
781
        u32 *rf;
 
782
 
 
783
        /*
 
784
         * LNA gain
 
785
         */
 
786
        short lna_gain;
 
787
 
 
788
        /*
 
789
         * Current TX power value.
 
790
         */
 
791
        u16 tx_power;
 
792
 
 
793
        /*
 
794
         * Current retry values.
 
795
         */
 
796
        u8 short_retry;
 
797
        u8 long_retry;
 
798
 
 
799
        /*
 
800
         * Rssi <-> Dbm offset
 
801
         */
 
802
        u8 rssi_offset;
 
803
 
 
804
        /*
 
805
         * Frequency offset (for rt61pci & rt73usb).
 
806
         */
 
807
        u8 freq_offset;
 
808
 
 
809
        /*
 
810
         * Calibration information (for rt2800usb & rt2800pci).
 
811
         * [0] -> BW20
 
812
         * [1] -> BW40
 
813
         */
 
814
        u8 calibration[2];
 
815
 
 
816
        /*
 
817
         * Beacon interval.
 
818
         */
 
819
        u16 beacon_int;
 
820
 
 
821
        /*
 
822
         * Low level statistics which will have
 
823
         * to be kept up to date while device is running.
 
824
         */
 
825
        struct ieee80211_low_level_stats low_level_stats;
 
826
 
 
827
        /*
 
828
         * RX configuration information.
 
829
         */
 
830
        struct ieee80211_rx_status rx_status;
 
831
 
 
832
        /*
 
833
         * Scheduled work.
 
834
         * NOTE: intf_work will use ieee80211_iterate_active_interfaces()
 
835
         * which means it cannot be placed on the hw->workqueue
 
836
         * due to RTNL locking requirements.
 
837
         */
 
838
        struct work_struct intf_work;
 
839
 
 
840
        /*
 
841
         * Data queue arrays for RX, TX and Beacon.
 
842
         * The Beacon array also contains the Atim queue
 
843
         * if that is supported by the device.
 
844
         */
 
845
        unsigned int data_queues;
 
846
        struct data_queue *rx;
 
847
        struct data_queue *tx;
 
848
        struct data_queue *bcn;
 
849
 
 
850
        /*
 
851
         * Firmware image.
 
852
         */
 
853
        const struct firmware *fw;
 
854
 
 
855
        /*
 
856
         * Driver specific data.
 
857
         */
 
858
        void *priv;
 
859
};
 
860
 
 
861
/*
 
862
 * Register defines.
 
863
 * Some registers require multiple attempts before success,
 
864
 * in those cases REGISTER_BUSY_COUNT attempts should be
 
865
 * taken with a REGISTER_BUSY_DELAY interval.
 
866
 */
 
867
#define REGISTER_BUSY_COUNT     5
 
868
#define REGISTER_BUSY_DELAY     100
 
869
 
 
870
/*
 
871
 * Generic RF access.
 
872
 * The RF is being accessed by word index.
 
873
 */
 
874
static inline void rt2x00_rf_read(struct rt2x00_dev *rt2x00dev,
 
875
                                  const unsigned int word, u32 *data)
 
876
{
 
877
        BUG_ON(word < 1 || word > rt2x00dev->ops->rf_size / sizeof(u32));
 
878
        *data = rt2x00dev->rf[word - 1];
 
879
}
 
880
 
 
881
static inline void rt2x00_rf_write(struct rt2x00_dev *rt2x00dev,
 
882
                                   const unsigned int word, u32 data)
 
883
{
 
884
        BUG_ON(word < 1 || word > rt2x00dev->ops->rf_size / sizeof(u32));
 
885
        rt2x00dev->rf[word - 1] = data;
 
886
}
 
887
 
 
888
/*
 
889
 *  Generic EEPROM access.
 
890
 * The EEPROM is being accessed by word index.
 
891
 */
 
892
static inline void *rt2x00_eeprom_addr(struct rt2x00_dev *rt2x00dev,
 
893
                                       const unsigned int word)
 
894
{
 
895
        return (void *)&rt2x00dev->eeprom[word];
 
896
}
 
897
 
 
898
static inline void rt2x00_eeprom_read(struct rt2x00_dev *rt2x00dev,
 
899
                                      const unsigned int word, u16 *data)
 
900
{
 
901
        *data = le16_to_cpu(rt2x00dev->eeprom[word]);
 
902
}
 
903
 
 
904
static inline void rt2x00_eeprom_write(struct rt2x00_dev *rt2x00dev,
 
905
                                       const unsigned int word, u16 data)
 
906
{
 
907
        rt2x00dev->eeprom[word] = cpu_to_le16(data);
 
908
}
 
909
 
 
910
/*
 
911
 * Chipset handlers
 
912
 */
 
913
static inline void rt2x00_set_chip(struct rt2x00_dev *rt2x00dev,
 
914
                                   const u16 rt, const u16 rf, const u32 rev)
 
915
{
 
916
        rt2x00dev->chip.rt = rt;
 
917
        rt2x00dev->chip.rf = rf;
 
918
        rt2x00dev->chip.rev = rev;
 
919
}
 
920
 
 
921
static inline void rt2x00_set_chip_rt(struct rt2x00_dev *rt2x00dev,
 
922
                                      const u16 rt)
 
923
{
 
924
        rt2x00dev->chip.rt = rt;
 
925
}
 
926
 
 
927
static inline void rt2x00_set_chip_rf(struct rt2x00_dev *rt2x00dev,
 
928
                                      const u16 rf, const u32 rev)
 
929
{
 
930
        rt2x00_set_chip(rt2x00dev, rt2x00dev->chip.rt, rf, rev);
 
931
}
 
932
 
 
933
static inline void rt2x00_print_chip(struct rt2x00_dev *rt2x00dev)
 
934
{
 
935
        INFO(rt2x00dev,
 
936
             "Chipset detected - rt: %04x, rf: %04x, rev: %08x.\n",
 
937
             rt2x00dev->chip.rt, rt2x00dev->chip.rf, rt2x00dev->chip.rev);
 
938
}
 
939
 
 
940
static inline char rt2x00_rt(const struct rt2x00_chip *chipset, const u16 chip)
 
941
{
 
942
        return (chipset->rt == chip);
 
943
}
 
944
 
 
945
static inline char rt2x00_rf(const struct rt2x00_chip *chipset, const u16 chip)
 
946
{
 
947
        return (chipset->rf == chip);
 
948
}
 
949
 
 
950
static inline u32 rt2x00_rev(const struct rt2x00_chip *chipset)
 
951
{
 
952
        return chipset->rev;
 
953
}
 
954
 
 
955
static inline bool rt2x00_check_rev(const struct rt2x00_chip *chipset,
 
956
                                    const u32 mask, const u32 rev)
 
957
{
 
958
        return ((chipset->rev & mask) == rev);
 
959
}
 
960
 
 
961
static inline void rt2x00_set_chip_intf(struct rt2x00_dev *rt2x00dev,
 
962
                                        enum rt2x00_chip_intf intf)
 
963
{
 
964
        rt2x00dev->chip.intf = intf;
 
965
}
 
966
 
 
967
static inline bool rt2x00_intf(const struct rt2x00_chip *chipset,
 
968
                               enum rt2x00_chip_intf intf)
 
969
{
 
970
        return (chipset->intf == intf);
 
971
}
 
972
 
 
973
static inline bool rt2x00_intf_is_pci(struct rt2x00_dev *rt2x00dev)
 
974
{
 
975
        return rt2x00_intf(&rt2x00dev->chip, RT2X00_CHIP_INTF_PCI);
 
976
}
 
977
 
 
978
static inline bool rt2x00_intf_is_usb(struct rt2x00_dev *rt2x00dev)
 
979
{
 
980
        return rt2x00_intf(&rt2x00dev->chip, RT2X00_CHIP_INTF_USB);
 
981
}
 
982
 
 
983
/**
 
984
 * rt2x00queue_map_txskb - Map a skb into DMA for TX purposes.
 
985
 * @rt2x00dev: Pointer to &struct rt2x00_dev.
 
986
 * @skb: The skb to map.
 
987
 */
 
988
void rt2x00queue_map_txskb(struct rt2x00_dev *rt2x00dev, struct sk_buff *skb);
 
989
 
 
990
/**
 
991
 * rt2x00queue_get_queue - Convert queue index to queue pointer
 
992
 * @rt2x00dev: Pointer to &struct rt2x00_dev.
 
993
 * @queue: rt2x00 queue index (see &enum data_queue_qid).
 
994
 */
 
995
struct data_queue *rt2x00queue_get_queue(struct rt2x00_dev *rt2x00dev,
 
996
                                         const enum data_queue_qid queue);
 
997
 
 
998
/**
 
999
 * rt2x00queue_get_entry - Get queue entry where the given index points to.
 
1000
 * @queue: Pointer to &struct data_queue from where we obtain the entry.
 
1001
 * @index: Index identifier for obtaining the correct index.
 
1002
 */
 
1003
struct queue_entry *rt2x00queue_get_entry(struct data_queue *queue,
 
1004
                                          enum queue_index index);
 
1005
 
 
1006
/*
 
1007
 * Interrupt context handlers.
 
1008
 */
 
1009
void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev);
 
1010
void rt2x00lib_txdone(struct queue_entry *entry,
 
1011
                      struct txdone_entry_desc *txdesc);
 
1012
void rt2x00lib_rxdone(struct rt2x00_dev *rt2x00dev,
 
1013
                      struct queue_entry *entry);
 
1014
 
 
1015
/*
 
1016
 * mac80211 handlers.
 
1017
 */
 
1018
int rt2x00mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb);
 
1019
int rt2x00mac_start(struct ieee80211_hw *hw);
 
1020
void rt2x00mac_stop(struct ieee80211_hw *hw);
 
1021
int rt2x00mac_add_interface(struct ieee80211_hw *hw,
 
1022
                            struct ieee80211_if_init_conf *conf);
 
1023
void rt2x00mac_remove_interface(struct ieee80211_hw *hw,
 
1024
                                struct ieee80211_if_init_conf *conf);
 
1025
int rt2x00mac_config(struct ieee80211_hw *hw, u32 changed);
 
1026
void rt2x00mac_configure_filter(struct ieee80211_hw *hw,
 
1027
                                unsigned int changed_flags,
 
1028
                                unsigned int *total_flags,
 
1029
                                u64 multicast);
 
1030
int rt2x00mac_set_tim(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
 
1031
                      bool set);
 
1032
#ifdef CONFIG_RT2X00_LIB_CRYPTO
 
1033
int rt2x00mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
 
1034
                      struct ieee80211_vif *vif, struct ieee80211_sta *sta,
 
1035
                      struct ieee80211_key_conf *key);
 
1036
#else
 
1037
#define rt2x00mac_set_key       NULL
 
1038
#endif /* CONFIG_RT2X00_LIB_CRYPTO */
 
1039
int rt2x00mac_get_stats(struct ieee80211_hw *hw,
 
1040
                        struct ieee80211_low_level_stats *stats);
 
1041
int rt2x00mac_get_tx_stats(struct ieee80211_hw *hw,
 
1042
                           struct ieee80211_tx_queue_stats *stats);
 
1043
void rt2x00mac_bss_info_changed(struct ieee80211_hw *hw,
 
1044
                                struct ieee80211_vif *vif,
 
1045
                                struct ieee80211_bss_conf *bss_conf,
 
1046
                                u32 changes);
 
1047
int rt2x00mac_conf_tx(struct ieee80211_hw *hw, u16 queue,
 
1048
                      const struct ieee80211_tx_queue_params *params);
 
1049
void rt2x00mac_rfkill_poll(struct ieee80211_hw *hw);
 
1050
 
 
1051
/*
 
1052
 * Driver allocation handlers.
 
1053
 */
 
1054
int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev);
 
1055
void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev);
 
1056
#ifdef CONFIG_PM
 
1057
int rt2x00lib_suspend(struct rt2x00_dev *rt2x00dev, pm_message_t state);
 
1058
int rt2x00lib_resume(struct rt2x00_dev *rt2x00dev);
 
1059
#endif /* CONFIG_PM */
 
1060
 
 
1061
#endif /* RT2X00_H */