Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
net
wireless
rt2x00
rt2x00.h
Go to the documentation of this file.
1
/*
2
Copyright (C) 2010 Willow Garage <http://www.willowgarage.com>
3
Copyright (C) 2004 - 2010 Ivo van Doorn <
[email protected]
>
4
Copyright (C) 2004 - 2009 Gertjan van Wingerde <
[email protected]
>
5
<http://rt2x00.serialmonkey.com>
6
7
This program is free software; you can redistribute it and/or modify
8
it under the terms of the GNU General Public License as published by
9
the Free Software Foundation; either version 2 of the License, or
10
(at your option) any later version.
11
12
This program is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
GNU General Public License for more details.
16
17
You should have received a copy of the GNU General Public License
18
along with this program; if not, write to the
19
Free Software Foundation, Inc.,
20
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21
*/
22
23
/*
24
Module: rt2x00
25
Abstract: rt2x00 global information.
26
*/
27
28
#ifndef RT2X00_H
29
#define RT2X00_H
30
31
#include <linux/bitops.h>
32
#include <
linux/interrupt.h
>
33
#include <
linux/skbuff.h
>
34
#include <
linux/workqueue.h
>
35
#include <
linux/firmware.h
>
36
#include <
linux/leds.h
>
37
#include <
linux/mutex.h
>
38
#include <
linux/etherdevice.h
>
39
#include <
linux/input-polldev.h
>
40
#include <
linux/kfifo.h
>
41
#include <linux/hrtimer.h>
42
43
#include <
net/mac80211.h
>
44
45
#include "
rt2x00debug.h
"
46
#include "
rt2x00dump.h
"
47
#include "
rt2x00leds.h
"
48
#include "
rt2x00reg.h
"
49
#include "
rt2x00queue.h
"
50
51
/*
52
* Module information.
53
*/
54
#define DRV_VERSION "2.3.0"
55
#define DRV_PROJECT "http://rt2x00.serialmonkey.com"
56
57
/*
58
* Debug definitions.
59
* Debug output has to be enabled during compile time.
60
*/
61
#define DEBUG_PRINTK_MSG(__dev, __kernlvl, __lvl, __msg, __args...) \
62
printk(__kernlvl "%s -> %s: %s - " __msg, \
63
wiphy_name((__dev)->hw->wiphy), __func__, __lvl, ##__args)
64
65
#define DEBUG_PRINTK_PROBE(__kernlvl, __lvl, __msg, __args...) \
66
printk(__kernlvl "%s -> %s: %s - " __msg, \
67
KBUILD_MODNAME, __func__, __lvl, ##__args)
68
69
#ifdef CONFIG_RT2X00_DEBUG
70
#define DEBUG_PRINTK(__dev, __kernlvl, __lvl, __msg, __args...) \
71
DEBUG_PRINTK_MSG(__dev, __kernlvl, __lvl, __msg, ##__args)
72
#else
73
#define DEBUG_PRINTK(__dev, __kernlvl, __lvl, __msg, __args...) \
74
do { } while (0)
75
#endif
/* CONFIG_RT2X00_DEBUG */
76
77
/*
78
* Various debug levels.
79
* The debug levels PANIC and ERROR both indicate serious problems,
80
* for this reason they should never be ignored.
81
* The special ERROR_PROBE message is for messages that are generated
82
* when the rt2x00_dev is not yet initialized.
83
*/
84
#define PANIC(__dev, __msg, __args...) \
85
DEBUG_PRINTK_MSG(__dev, KERN_CRIT, "Panic", __msg, ##__args)
86
#define ERROR(__dev, __msg, __args...) \
87
DEBUG_PRINTK_MSG(__dev, KERN_ERR, "Error", __msg, ##__args)
88
#define ERROR_PROBE(__msg, __args...) \
89
DEBUG_PRINTK_PROBE(KERN_ERR, "Error", __msg, ##__args)
90
#define WARNING(__dev, __msg, __args...) \
91
DEBUG_PRINTK(__dev, KERN_WARNING, "Warning", __msg, ##__args)
92
#define NOTICE(__dev, __msg, __args...) \
93
DEBUG_PRINTK(__dev, KERN_NOTICE, "Notice", __msg, ##__args)
94
#define INFO(__dev, __msg, __args...) \
95
DEBUG_PRINTK(__dev, KERN_INFO, "Info", __msg, ##__args)
96
#define DEBUG(__dev, __msg, __args...) \
97
DEBUG_PRINTK(__dev, KERN_DEBUG, "Debug", __msg, ##__args)
98
#define EEPROM(__dev, __msg, __args...) \
99
DEBUG_PRINTK(__dev, KERN_DEBUG, "EEPROM recovery", __msg, ##__args)
100
101
/*
102
* Duration calculations
103
* The rate variable passed is: 100kbs.
104
* To convert from bytes to bits we multiply size with 8,
105
* then the size is multiplied with 10 to make the
106
* real rate -> rate argument correction.
107
*/
108
#define GET_DURATION(__size, __rate) (((__size) * 8 * 10) / (__rate))
109
#define GET_DURATION_RES(__size, __rate)(((__size) * 8 * 10) % (__rate))
110
111
/*
112
* Determine the number of L2 padding bytes required between the header and
113
* the payload.
114
*/
115
#define L2PAD_SIZE(__hdrlen) (-(__hdrlen) & 3)
116
117
/*
118
* Determine the alignment requirement,
119
* to make sure the 802.11 payload is padded to a 4-byte boundrary
120
* we must determine the address of the payload and calculate the
121
* amount of bytes needed to move the data.
122
*/
123
#define ALIGN_SIZE(__skb, __header) \
124
( ((unsigned long)((__skb)->data + (__header))) & 3 )
125
126
/*
127
* Constants for extra TX headroom for alignment purposes.
128
*/
129
#define RT2X00_ALIGN_SIZE 4
/* Only whole frame needs alignment */
130
#define RT2X00_L2PAD_SIZE 8
/* Both header & payload need alignment */
131
132
/*
133
* Standard timing and size defines.
134
* These values should follow the ieee80211 specifications.
135
*/
136
#define ACK_SIZE 14
137
#define IEEE80211_HEADER 24
138
#define PLCP 48
139
#define BEACON 100
140
#define PREAMBLE 144
141
#define SHORT_PREAMBLE 72
142
#define SLOT_TIME 20
143
#define SHORT_SLOT_TIME 9
144
#define SIFS 10
145
#define PIFS ( SIFS + SLOT_TIME )
146
#define SHORT_PIFS ( SIFS + SHORT_SLOT_TIME )
147
#define DIFS ( PIFS + SLOT_TIME )
148
#define SHORT_DIFS ( SHORT_PIFS + SHORT_SLOT_TIME )
149
#define EIFS ( SIFS + DIFS + \
150
GET_DURATION(IEEE80211_HEADER + ACK_SIZE, 10) )
151
#define SHORT_EIFS ( SIFS + SHORT_DIFS + \
152
GET_DURATION(IEEE80211_HEADER + ACK_SIZE, 10) )
153
154
/*
155
* Structure for average calculation
156
* The avg field contains the actual average value,
157
* but avg_weight is internally used during calculations
158
* to prevent rounding errors.
159
*/
160
struct
avg_val
{
161
int
avg
;
162
int
avg_weight
;
163
};
164
165
enum
rt2x00_chip_intf
{
166
RT2X00_CHIP_INTF_PCI
,
167
RT2X00_CHIP_INTF_PCIE
,
168
RT2X00_CHIP_INTF_USB
,
169
RT2X00_CHIP_INTF_SOC
,
170
};
171
172
/*
173
* Chipset identification
174
* The chipset on the device is composed of a RT and RF chip.
175
* The chipset combination is important for determining device capabilities.
176
*/
177
struct
rt2x00_chip
{
178
u16
rt
;
179
#define RT2460 0x2460
180
#define RT2560 0x2560
181
#define RT2570 0x2570
182
#define RT2661 0x2661
183
#define RT2573 0x2573
184
#define RT2860 0x2860
/* 2.4GHz */
185
#define RT2872 0x2872
/* WSOC */
186
#define RT2883 0x2883
/* WSOC */
187
#define RT3070 0x3070
188
#define RT3071 0x3071
189
#define RT3090 0x3090
/* 2.4GHz PCIe */
190
#define RT3290 0x3290
191
#define RT3352 0x3352
/* WSOC */
192
#define RT3390 0x3390
193
#define RT3572 0x3572
194
#define RT3593 0x3593
195
#define RT3883 0x3883
/* WSOC */
196
#define RT5390 0x5390
/* 2.4GHz */
197
#define RT5392 0x5392
/* 2.4GHz */
198
199
u16
rf
;
200
u16
rev
;
201
202
enum
rt2x00_chip_intf
intf
;
203
};
204
205
/*
206
* RF register values that belong to a particular channel.
207
*/
208
struct
rf_channel
{
209
int
channel
;
210
u32
rf1
;
211
u32
rf2
;
212
u32
rf3
;
213
u32
rf4
;
214
};
215
216
/*
217
* Channel information structure
218
*/
219
struct
channel_info
{
220
unsigned
int
flags
;
221
#define GEOGRAPHY_ALLOWED 0x00000001
222
223
short
max_power
;
224
short
default_power1
;
225
short
default_power2
;
226
};
227
228
/*
229
* Antenna setup values.
230
*/
231
struct
antenna_setup
{
232
enum
antenna
rx
;
233
enum
antenna
tx
;
234
u8
rx_chain_num
;
235
u8
tx_chain_num
;
236
};
237
238
/*
239
* Quality statistics about the currently active link.
240
*/
241
struct
link_qual
{
242
/*
243
* Statistics required for Link tuning by driver
244
* The rssi value is provided by rt2x00lib during the
245
* link_tuner() callback function.
246
* The false_cca field is filled during the link_stats()
247
* callback function and could be used during the
248
* link_tuner() callback function.
249
*/
250
int
rssi
;
251
int
false_cca
;
252
253
/*
254
* VGC levels
255
* Hardware driver will tune the VGC level during each call
256
* to the link_tuner() callback function. This vgc_level is
257
* is determined based on the link quality statistics like
258
* average RSSI and the false CCA count.
259
*
260
* In some cases the drivers need to differentiate between
261
* the currently "desired" VGC level and the level configured
262
* in the hardware. The latter is important to reduce the
263
* number of BBP register reads to reduce register access
264
* overhead. For this reason we store both values here.
265
*/
266
u8
vgc_level
;
267
u8
vgc_level_reg
;
268
269
/*
270
* Statistics required for Signal quality calculation.
271
* These fields might be changed during the link_stats()
272
* callback function.
273
*/
274
int
rx_success
;
275
int
rx_failed
;
276
int
tx_success
;
277
int
tx_failed
;
278
};
279
280
/*
281
* Antenna settings about the currently active link.
282
*/
283
struct
link_ant
{
284
/*
285
* Antenna flags
286
*/
287
unsigned
int
flags
;
288
#define ANTENNA_RX_DIVERSITY 0x00000001
289
#define ANTENNA_TX_DIVERSITY 0x00000002
290
#define ANTENNA_MODE_SAMPLE 0x00000004
291
292
/*
293
* Currently active TX/RX antenna setup.
294
* When software diversity is used, this will indicate
295
* which antenna is actually used at this time.
296
*/
297
struct
antenna_setup
active
;
298
299
/*
300
* RSSI history information for the antenna.
301
* Used to determine when to switch antenna
302
* when using software diversity.
303
*/
304
int
rssi_history
;
305
306
/*
307
* Current RSSI average of the currently active antenna.
308
* Similar to the avg_rssi in the link_qual structure
309
* this value is updated by using the walking average.
310
*/
311
struct
avg_val
rssi_ant
;
312
};
313
314
/*
315
* To optimize the quality of the link we need to store
316
* the quality of received frames and periodically
317
* optimize the link.
318
*/
319
struct
link
{
320
/*
321
* Link tuner counter
322
* The number of times the link has been tuned
323
* since the radio has been switched on.
324
*/
325
u32
count
;
326
327
/*
328
* Quality measurement values.
329
*/
330
struct
link_qual
qual
;
331
332
/*
333
* TX/RX antenna setup.
334
*/
335
struct
link_ant
ant
;
336
337
/*
338
* Currently active average RSSI value
339
*/
340
struct
avg_val
avg_rssi
;
341
342
/*
343
* Work structure for scheduling periodic link tuning.
344
*/
345
struct
delayed_work
work
;
346
347
/*
348
* Work structure for scheduling periodic watchdog monitoring.
349
* This work must be scheduled on the kernel workqueue, while
350
* all other work structures must be queued on the mac80211
351
* workqueue. This guarantees that the watchdog can schedule
352
* other work structures and wait for their completion in order
353
* to bring the device/driver back into the desired state.
354
*/
355
struct
delayed_work
watchdog_work
;
356
357
/*
358
* Work structure for scheduling periodic AGC adjustments.
359
*/
360
struct
delayed_work
agc_work
;
361
362
/*
363
* Work structure for scheduling periodic VCO calibration.
364
*/
365
struct
delayed_work
vco_work
;
366
};
367
368
enum
rt2x00_delayed_flags
{
369
DELAYED_UPDATE_BEACON
,
370
};
371
372
/*
373
* Interface structure
374
* Per interface configuration details, this structure
375
* is allocated as the private data for ieee80211_vif.
376
*/
377
struct
rt2x00_intf
{
378
/*
379
* beacon->skb must be protected with the mutex.
380
*/
381
struct
mutex
beacon_skb_mutex
;
382
383
/*
384
* Entry in the beacon queue which belongs to
385
* this interface. Each interface has its own
386
* dedicated beacon entry.
387
*/
388
struct
queue_entry *
beacon
;
389
bool
enable_beacon
;
390
391
/*
392
* Actions that needed rescheduling.
393
*/
394
unsigned
long
delayed_flags
;
395
396
/*
397
* Software sequence counter, this is only required
398
* for hardware which doesn't support hardware
399
* sequence counting.
400
*/
401
atomic_t
seqno
;
402
};
403
404
static
inline
struct
rt2x00_intf
* vif_to_intf(
struct
ieee80211_vif
*vif)
405
{
406
return
(
struct
rt2x00_intf
*)vif->drv_priv;
407
}
408
424
struct
hw_mode_spec
{
425
unsigned
int
supported_bands
;
426
#define SUPPORT_BAND_2GHZ 0x00000001
427
#define SUPPORT_BAND_5GHZ 0x00000002
428
429
unsigned
int
supported_rates
;
430
#define SUPPORT_RATE_CCK 0x00000001
431
#define SUPPORT_RATE_OFDM 0x00000002
432
433
unsigned
int
num_channels
;
434
const
struct
rf_channel
*
channels
;
435
const
struct
channel_info
*
channels_info
;
436
437
struct
ieee80211_sta_ht_cap
ht
;
438
};
439
440
/*
441
* Configuration structure wrapper around the
442
* mac80211 configuration structure.
443
* When mac80211 configures the driver, rt2x00lib
444
* can precalculate values which are equal for all
445
* rt2x00 drivers. Those values can be stored in here.
446
*/
447
struct
rt2x00lib_conf
{
448
struct
ieee80211_conf
*
conf
;
449
450
struct
rf_channel
rf
;
451
struct
channel_info
channel
;
452
};
453
454
/*
455
* Configuration structure for erp settings.
456
*/
457
struct
rt2x00lib_erp
{
458
int
short_preamble
;
459
int
cts_protection
;
460
461
u32
basic_rates
;
462
463
int
slot_time
;
464
465
short
sifs
;
466
short
pifs
;
467
short
difs
;
468
short
eifs
;
469
470
u16
beacon_int
;
471
u16
ht_opmode
;
472
};
473
474
/*
475
* Configuration structure for hardware encryption.
476
*/
477
struct
rt2x00lib_crypto
{
478
enum
cipher
cipher
;
479
480
enum
set_key_cmd
cmd
;
481
const
u8
*
address
;
482
483
u32
bssidx
;
484
485
u8
key
[16];
486
u8
tx_mic
[8];
487
u8
rx_mic
[8];
488
489
int
wcid
;
490
};
491
492
/*
493
* Configuration structure wrapper around the
494
* rt2x00 interface configuration handler.
495
*/
496
struct
rt2x00intf_conf
{
497
/*
498
* Interface type
499
*/
500
enum
nl80211_iftype
type
;
501
502
/*
503
* TSF sync value, this is dependent on the operation type.
504
*/
505
enum
tsf_sync
sync
;
506
507
/*
508
* The MAC and BSSID addresses are simple array of bytes,
509
* these arrays are little endian, so when sending the addresses
510
* to the drivers, copy the it into a endian-signed variable.
511
*
512
* Note that all devices (except rt2500usb) have 32 bits
513
* register word sizes. This means that whatever variable we
514
* pass _must_ be a multiple of 32 bits. Otherwise the device
515
* might not accept what we are sending to it.
516
* This will also make it easier for the driver to write
517
* the data to the device.
518
*/
519
__le32
mac
[2];
520
__le32
bssid
[2];
521
};
522
523
/*
524
* Private structure for storing STA details
525
* wcid: Wireless Client ID
526
*/
527
struct
rt2x00_sta
{
528
int
wcid
;
529
};
530
531
static
inline
struct
rt2x00_sta
* sta_to_rt2x00_sta(
struct
ieee80211_sta
*sta)
532
{
533
return
(
struct
rt2x00_sta
*)sta->drv_priv;
534
}
535
536
/*
537
* rt2x00lib callback functions.
538
*/
539
struct
rt2x00lib_ops
{
540
/*
541
* Interrupt handlers.
542
*/
543
irq_handler_t
irq_handler
;
544
545
/*
546
* TX status tasklet handler.
547
*/
548
void
(*
txstatus_tasklet
) (
unsigned
long
data
);
549
void
(*
pretbtt_tasklet
) (
unsigned
long
data
);
550
void
(*
tbtt_tasklet
) (
unsigned
long
data
);
551
void
(*
rxdone_tasklet
) (
unsigned
long
data
);
552
void
(*
autowake_tasklet
) (
unsigned
long
data
);
553
554
/*
555
* Device init handlers.
556
*/
557
int
(*
probe_hw
) (
struct
rt2x00_dev
*rt2x00dev);
558
char
*(*get_firmware_name) (
struct
rt2x00_dev
*rt2x00dev);
559
int
(*
check_firmware
) (
struct
rt2x00_dev
*rt2x00dev,
560
const
u8
*
data
,
const
size_t
len
);
561
int
(*
load_firmware
) (
struct
rt2x00_dev
*rt2x00dev,
562
const
u8
*
data
,
const
size_t
len
);
563
564
/*
565
* Device initialization/deinitialization handlers.
566
*/
567
int
(*
initialize
) (
struct
rt2x00_dev
*rt2x00dev);
568
void
(*
uninitialize
) (
struct
rt2x00_dev
*rt2x00dev);
569
570
/*
571
* queue initialization handlers
572
*/
573
bool
(*
get_entry_state
) (
struct
queue_entry *
entry
);
574
void
(*
clear_entry
) (
struct
queue_entry *
entry
);
575
576
/*
577
* Radio control handlers.
578
*/
579
int
(*
set_device_state
) (
struct
rt2x00_dev
*rt2x00dev,
580
enum
dev_state
state
);
581
int
(*
rfkill_poll
) (
struct
rt2x00_dev
*rt2x00dev);
582
void
(*
link_stats
) (
struct
rt2x00_dev
*rt2x00dev,
583
struct
link_qual
*qual);
584
void
(*
reset_tuner
) (
struct
rt2x00_dev
*rt2x00dev,
585
struct
link_qual
*qual);
586
void
(*
link_tuner
) (
struct
rt2x00_dev
*rt2x00dev,
587
struct
link_qual
*qual,
const
u32
count
);
588
void
(*
gain_calibration
) (
struct
rt2x00_dev
*rt2x00dev);
589
void
(*
vco_calibration
) (
struct
rt2x00_dev
*rt2x00dev);
590
591
/*
592
* Data queue handlers.
593
*/
594
void
(*
watchdog
) (
struct
rt2x00_dev
*rt2x00dev);
595
void
(*
start_queue
) (
struct
data_queue
*
queue
);
596
void
(*
kick_queue
) (
struct
data_queue
*
queue
);
597
void
(*
stop_queue
) (
struct
data_queue
*
queue
);
598
void
(*
flush_queue
) (
struct
data_queue
*
queue
,
bool
drop);
599
void
(*
tx_dma_done
) (
struct
queue_entry *
entry
);
600
601
/*
602
* TX control handlers
603
*/
604
void
(*
write_tx_desc
) (
struct
queue_entry *
entry
,
605
struct
txentry_desc
*
txdesc
);
606
void
(*
write_tx_data
) (
struct
queue_entry *
entry
,
607
struct
txentry_desc
*
txdesc
);
608
void
(*
write_beacon
) (
struct
queue_entry *
entry
,
609
struct
txentry_desc
*
txdesc
);
610
void
(*
clear_beacon
) (
struct
queue_entry *
entry
);
611
int
(*
get_tx_data_len
) (
struct
queue_entry *
entry
);
612
613
/*
614
* RX control handlers
615
*/
616
void
(*
fill_rxdone
) (
struct
queue_entry *
entry
,
617
struct
rxdone_entry_desc
*
rxdesc
);
618
619
/*
620
* Configuration handlers.
621
*/
622
int
(*
config_shared_key
) (
struct
rt2x00_dev
*rt2x00dev,
623
struct
rt2x00lib_crypto
*crypto,
624
struct
ieee80211_key_conf
*
key
);
625
int
(*
config_pairwise_key
) (
struct
rt2x00_dev
*rt2x00dev,
626
struct
rt2x00lib_crypto
*crypto,
627
struct
ieee80211_key_conf
*
key
);
628
void
(*
config_filter
) (
struct
rt2x00_dev
*rt2x00dev,
629
const
unsigned
int
filter_flags);
630
void
(*
config_intf
) (
struct
rt2x00_dev
*rt2x00dev,
631
struct
rt2x00_intf
*
intf
,
632
struct
rt2x00intf_conf
*conf,
633
const
unsigned
int
flags
);
634
#define CONFIG_UPDATE_TYPE ( 1 << 1 )
635
#define CONFIG_UPDATE_MAC ( 1 << 2 )
636
#define CONFIG_UPDATE_BSSID ( 1 << 3 )
637
638
void
(*
config_erp
) (
struct
rt2x00_dev
*rt2x00dev,
639
struct
rt2x00lib_erp
*erp,
640
u32
changed
);
641
void
(*
config_ant
) (
struct
rt2x00_dev
*rt2x00dev,
642
struct
antenna_setup
*ant);
643
void
(*
config
) (
struct
rt2x00_dev
*rt2x00dev,
644
struct
rt2x00lib_conf
*libconf,
645
const
unsigned
int
changed_flags);
646
int
(*
sta_add
) (
struct
rt2x00_dev
*rt2x00dev,
647
struct
ieee80211_vif
*vif,
648
struct
ieee80211_sta
*sta);
649
int
(*
sta_remove
) (
struct
rt2x00_dev
*rt2x00dev,
650
int
wcid);
651
};
652
653
/*
654
* rt2x00 driver callback operation structure.
655
*/
656
struct
rt2x00_ops
{
657
const
char
*
name
;
658
const
unsigned
int
drv_data_size
;
659
const
unsigned
int
max_ap_intf
;
660
const
unsigned
int
eeprom_size
;
661
const
unsigned
int
rf_size
;
662
const
unsigned
int
tx_queues
;
663
const
unsigned
int
extra_tx_headroom
;
664
const
struct
data_queue_desc
*
rx
;
665
const
struct
data_queue_desc
*
tx
;
666
const
struct
data_queue_desc
*
bcn
;
667
const
struct
data_queue_desc
*
atim
;
668
const
struct
rt2x00lib_ops
*
lib
;
669
const
void
*
drv
;
670
const
struct
ieee80211_ops
*
hw
;
671
#ifdef CONFIG_RT2X00_LIB_DEBUGFS
672
const
struct
rt2x00debug
*debugfs;
673
#endif
/* CONFIG_RT2X00_LIB_DEBUGFS */
674
};
675
676
/*
677
* rt2x00 state flags
678
*/
679
enum
rt2x00_state_flags
{
680
/*
681
* Device flags
682
*/
683
DEVICE_STATE_PRESENT
,
684
DEVICE_STATE_REGISTERED_HW
,
685
DEVICE_STATE_INITIALIZED
,
686
DEVICE_STATE_STARTED
,
687
DEVICE_STATE_ENABLED_RADIO
,
688
DEVICE_STATE_SCANNING
,
689
690
/*
691
* Driver configuration
692
*/
693
CONFIG_CHANNEL_HT40
,
694
CONFIG_POWERSAVING
,
695
CONFIG_HT_DISABLED
,
696
CONFIG_QOS_DISABLED
,
697
698
/*
699
* Mark we currently are sequentially reading TX_STA_FIFO register
700
* FIXME: this is for only rt2800usb, should go to private data
701
*/
702
TX_STATUS_READING
,
703
};
704
705
/*
706
* rt2x00 capability flags
707
*/
708
enum
rt2x00_capability_flags
{
709
/*
710
* Requirements
711
*/
712
REQUIRE_FIRMWARE
,
713
REQUIRE_BEACON_GUARD
,
714
REQUIRE_ATIM_QUEUE
,
715
REQUIRE_DMA
,
716
REQUIRE_COPY_IV
,
717
REQUIRE_L2PAD
,
718
REQUIRE_TXSTATUS_FIFO
,
719
REQUIRE_TASKLET_CONTEXT
,
720
REQUIRE_SW_SEQNO
,
721
REQUIRE_HT_TX_DESC
,
722
REQUIRE_PS_AUTOWAKE
,
723
724
/*
725
* Capabilities
726
*/
727
CAPABILITY_HW_BUTTON
,
728
CAPABILITY_HW_CRYPTO
,
729
CAPABILITY_POWER_LIMIT
,
730
CAPABILITY_CONTROL_FILTERS
,
731
CAPABILITY_CONTROL_FILTER_PSPOLL
,
732
CAPABILITY_PRE_TBTT_INTERRUPT
,
733
CAPABILITY_LINK_TUNING
,
734
CAPABILITY_FRAME_TYPE
,
735
CAPABILITY_RF_SEQUENCE
,
736
CAPABILITY_EXTERNAL_LNA_A
,
737
CAPABILITY_EXTERNAL_LNA_BG
,
738
CAPABILITY_DOUBLE_ANTENNA
,
739
CAPABILITY_BT_COEXIST
,
740
CAPABILITY_VCO_RECALIBRATION
,
741
};
742
743
/*
744
* Interface combinations
745
*/
746
enum
{
747
IF_COMB_AP
= 0,
748
NUM_IF_COMB
,
749
};
750
751
/*
752
* rt2x00 device structure.
753
*/
754
struct
rt2x00_dev
{
755
/*
756
* Device structure.
757
* The structure stored in here depends on the
758
* system bus (PCI or USB).
759
* When accessing this variable, the rt2x00dev_{pci,usb}
760
* macros should be used for correct typecasting.
761
*/
762
struct
device
*
dev
;
763
764
/*
765
* Callback functions.
766
*/
767
const
struct
rt2x00_ops
*
ops
;
768
769
/*
770
* Driver data.
771
*/
772
void
*
drv_data
;
773
774
/*
775
* IEEE80211 control structure.
776
*/
777
struct
ieee80211_hw
*
hw
;
778
struct
ieee80211_supported_band
bands
[
IEEE80211_NUM_BANDS
];
779
enum
ieee80211_band
curr_band
;
780
int
curr_freq
;
781
782
/*
783
* If enabled, the debugfs interface structures
784
* required for deregistration of debugfs.
785
*/
786
#ifdef CONFIG_RT2X00_LIB_DEBUGFS
787
struct
rt2x00debug_intf
*debugfs_intf;
788
#endif
/* CONFIG_RT2X00_LIB_DEBUGFS */
789
790
/*
791
* LED structure for changing the LED status
792
* by mac8011 or the kernel.
793
*/
794
#ifdef CONFIG_RT2X00_LIB_LEDS
795
struct
rt2x00_led
led_radio;
796
struct
rt2x00_led
led_assoc;
797
struct
rt2x00_led
led_qual;
798
u16
led_mcu_reg;
799
#endif
/* CONFIG_RT2X00_LIB_LEDS */
800
801
/*
802
* Device state flags.
803
* In these flags the current status is stored.
804
* Access to these flags should occur atomically.
805
*/
806
unsigned
long
flags
;
807
808
/*
809
* Device capabiltiy flags.
810
* In these flags the device/driver capabilities are stored.
811
* Access to these flags should occur non-atomically.
812
*/
813
unsigned
long
cap_flags
;
814
815
/*
816
* Device information, Bus IRQ and name (PCI, SoC)
817
*/
818
int
irq
;
819
const
char
*
name
;
820
821
/*
822
* Chipset identification.
823
*/
824
struct
rt2x00_chip
chip
;
825
826
/*
827
* hw capability specifications.
828
*/
829
struct
hw_mode_spec
spec
;
830
831
/*
832
* This is the default TX/RX antenna setup as indicated
833
* by the device's EEPROM.
834
*/
835
struct
antenna_setup
default_ant
;
836
837
/*
838
* Register pointers
839
* csr.base: CSR base register address. (PCI)
840
* csr.cache: CSR cache for usb_control_msg. (USB)
841
*/
842
union
csr
{
843
void
__iomem
*
base
;
844
void
*
cache
;
845
}
csr
;
846
847
/*
848
* Mutex to protect register accesses.
849
* For PCI and USB devices it protects against concurrent indirect
850
* register access (BBP, RF, MCU) since accessing those
851
* registers require multiple calls to the CSR registers.
852
* For USB devices it also protects the csr_cache since that
853
* field is used for normal CSR access and it cannot support
854
* multiple callers simultaneously.
855
*/
856
struct
mutex
csr_mutex
;
857
858
/*
859
* Current packet filter configuration for the device.
860
* This contains all currently active FIF_* flags send
861
* to us by mac80211 during configure_filter().
862
*/
863
unsigned
int
packet_filter
;
864
865
/*
866
* Interface details:
867
* - Open ap interface count.
868
* - Open sta interface count.
869
* - Association count.
870
* - Beaconing enabled count.
871
*/
872
unsigned
int
intf_ap_count
;
873
unsigned
int
intf_sta_count
;
874
unsigned
int
intf_associated
;
875
unsigned
int
intf_beaconing
;
876
877
/*
878
* Interface combinations
879
*/
880
struct
ieee80211_iface_limit
if_limits_ap
;
881
struct
ieee80211_iface_combination
if_combinations
[
NUM_IF_COMB
];
882
883
/*
884
* Link quality
885
*/
886
struct
link
link
;
887
888
/*
889
* EEPROM data.
890
*/
891
__le16
*
eeprom
;
892
893
/*
894
* Active RF register values.
895
* These are stored here so we don't need
896
* to read the rf registers and can directly
897
* use this value instead.
898
* This field should be accessed by using
899
* rt2x00_rf_read() and rt2x00_rf_write().
900
*/
901
u32
*
rf
;
902
903
/*
904
* LNA gain
905
*/
906
short
lna_gain
;
907
908
/*
909
* Current TX power value.
910
*/
911
u16
tx_power
;
912
913
/*
914
* Current retry values.
915
*/
916
u8
short_retry
;
917
u8
long_retry
;
918
919
/*
920
* Rssi <-> Dbm offset
921
*/
922
u8
rssi_offset
;
923
924
/*
925
* Frequency offset.
926
*/
927
u8
freq_offset
;
928
929
/*
930
* Association id.
931
*/
932
u16
aid
;
933
934
/*
935
* Beacon interval.
936
*/
937
u16
beacon_int
;
938
942
unsigned
long
last_beacon
;
943
944
/*
945
* Low level statistics which will have
946
* to be kept up to date while device is running.
947
*/
948
struct
ieee80211_low_level_stats
low_level_stats
;
949
955
struct
workqueue_struct
*
workqueue
;
956
957
/*
958
* Scheduled work.
959
* NOTE: intf_work will use ieee80211_iterate_active_interfaces()
960
* which means it cannot be placed on the hw->workqueue
961
* due to RTNL locking requirements.
962
*/
963
struct
work_struct
intf_work
;
964
968
struct
work_struct
rxdone_work
;
969
struct
work_struct
txdone_work
;
970
971
/*
972
* Powersaving work
973
*/
974
struct
delayed_work
autowakeup_work
;
975
struct
work_struct
sleep_work
;
976
977
/*
978
* Data queue arrays for RX, TX, Beacon and ATIM.
979
*/
980
unsigned
int
data_queues
;
981
struct
data_queue
*
rx
;
982
struct
data_queue
*
tx
;
983
struct
data_queue
*
bcn
;
984
struct
data_queue
*
atim
;
985
986
/*
987
* Firmware image.
988
*/
989
const
struct
firmware
*
fw
;
990
991
/*
992
* FIFO for storing tx status reports between isr and tasklet.
993
*/
994
DECLARE_KFIFO_PTR
(txstatus_fifo,
u32
);
995
996
/*
997
* Timer to ensure tx status reports are read (rt2800usb).
998
*/
999
struct
hrtimer
txstatus_timer
;
1000
1001
/*
1002
* Tasklet for processing tx status reports (rt2800pci).
1003
*/
1004
struct
tasklet_struct
txstatus_tasklet
;
1005
struct
tasklet_struct
pretbtt_tasklet
;
1006
struct
tasklet_struct
tbtt_tasklet
;
1007
struct
tasklet_struct
rxdone_tasklet
;
1008
struct
tasklet_struct
autowake_tasklet
;
1009
1010
/*
1011
* Used for VCO periodic calibration.
1012
*/
1013
int
rf_channel
;
1014
1015
/*
1016
* Protect the interrupt mask register.
1017
*/
1018
spinlock_t
irqmask_lock
;
1019
};
1020
1021
/*
1022
* Register defines.
1023
* Some registers require multiple attempts before success,
1024
* in those cases REGISTER_BUSY_COUNT attempts should be
1025
* taken with a REGISTER_BUSY_DELAY interval.
1026
*/
1027
#define REGISTER_BUSY_COUNT 100
1028
#define REGISTER_BUSY_DELAY 100
1029
1030
/*
1031
* Generic RF access.
1032
* The RF is being accessed by word index.
1033
*/
1034
static
inline
void
rt2x00_rf_read(
struct
rt2x00_dev
*rt2x00dev,
1035
const
unsigned
int
word
,
u32
*
data
)
1036
{
1037
BUG_ON
(
word < 1 || word >
rt2x00dev->
ops
->rf_size /
sizeof
(
u32
));
1038
*data = rt2x00dev->
rf
[word - 1];
1039
}
1040
1041
static
inline
void
rt2x00_rf_write(
struct
rt2x00_dev
*rt2x00dev,
1042
const
unsigned
int
word
,
u32
data
)
1043
{
1044
BUG_ON
(
word < 1 || word >
rt2x00dev->
ops
->rf_size /
sizeof
(
u32
));
1045
rt2x00dev->
rf
[word - 1] =
data
;
1046
}
1047
1048
/*
1049
* Generic EEPROM access.
1050
* The EEPROM is being accessed by word index.
1051
*/
1052
static
inline
void
*rt2x00_eeprom_addr(
struct
rt2x00_dev
*rt2x00dev,
1053
const
unsigned
int
word
)
1054
{
1055
return
(
void
*)&rt2x00dev->
eeprom
[
word
];
1056
}
1057
1058
static
inline
void
rt2x00_eeprom_read(
struct
rt2x00_dev
*rt2x00dev,
1059
const
unsigned
int
word,
u16
*
data
)
1060
{
1061
*data =
le16_to_cpu
(rt2x00dev->
eeprom
[word]);
1062
}
1063
1064
static
inline
void
rt2x00_eeprom_write(
struct
rt2x00_dev
*rt2x00dev,
1065
const
unsigned
int
word,
u16
data
)
1066
{
1067
rt2x00dev->
eeprom
[
word
] =
cpu_to_le16
(data);
1068
}
1069
1070
/*
1071
* Chipset handlers
1072
*/
1073
static
inline
void
rt2x00_set_chip(
struct
rt2x00_dev
*rt2x00dev,
1074
const
u16
rt,
const
u16
rf,
const
u16
rev
)
1075
{
1076
rt2x00dev->
chip
.rt = rt;
1077
rt2x00dev->
chip
.rf = rf;
1078
rt2x00dev->
chip
.rev =
rev
;
1079
1080
INFO
(rt2x00dev,
1081
"Chipset detected - rt: %04x, rf: %04x, rev: %04x.\n"
,
1082
rt2x00dev->
chip
.rt, rt2x00dev->
chip
.rf, rt2x00dev->
chip
.rev);
1083
}
1084
1085
static
inline
bool
rt2x00_rt(
struct
rt2x00_dev
*rt2x00dev,
const
u16
rt)
1086
{
1087
return
(rt2x00dev->
chip
.rt == rt);
1088
}
1089
1090
static
inline
bool
rt2x00_rf(
struct
rt2x00_dev
*rt2x00dev,
const
u16
rf)
1091
{
1092
return
(rt2x00dev->
chip
.rf == rf);
1093
}
1094
1095
static
inline
u16
rt2x00_rev(
struct
rt2x00_dev
*rt2x00dev)
1096
{
1097
return
rt2x00dev->
chip
.rev;
1098
}
1099
1100
static
inline
bool
rt2x00_rt_rev(
struct
rt2x00_dev
*rt2x00dev,
1101
const
u16
rt,
const
u16
rev
)
1102
{
1103
return
(rt2x00_rt(rt2x00dev, rt) && rt2x00_rev(rt2x00dev) == rev);
1104
}
1105
1106
static
inline
bool
rt2x00_rt_rev_lt(
struct
rt2x00_dev
*rt2x00dev,
1107
const
u16
rt,
const
u16
rev)
1108
{
1109
return
(rt2x00_rt(rt2x00dev, rt) && rt2x00_rev(rt2x00dev) < rev);
1110
}
1111
1112
static
inline
bool
rt2x00_rt_rev_gte(
struct
rt2x00_dev
*rt2x00dev,
1113
const
u16
rt,
const
u16
rev)
1114
{
1115
return
(rt2x00_rt(rt2x00dev, rt) && rt2x00_rev(rt2x00dev) >= rev);
1116
}
1117
1118
static
inline
void
rt2x00_set_chip_intf(
struct
rt2x00_dev
*rt2x00dev,
1119
enum
rt2x00_chip_intf
intf
)
1120
{
1121
rt2x00dev->
chip
.intf =
intf
;
1122
}
1123
1124
static
inline
bool
rt2x00_intf
(
struct
rt2x00_dev
*rt2x00dev,
1125
enum
rt2x00_chip_intf
intf
)
1126
{
1127
return
(rt2x00dev->
chip
.intf == intf);
1128
}
1129
1130
static
inline
bool
rt2x00_is_pci(
struct
rt2x00_dev
*rt2x00dev)
1131
{
1132
return
rt2x00_intf
(rt2x00dev,
RT2X00_CHIP_INTF_PCI
) ||
1133
rt2x00_intf
(rt2x00dev,
RT2X00_CHIP_INTF_PCIE
);
1134
}
1135
1136
static
inline
bool
rt2x00_is_pcie(
struct
rt2x00_dev
*rt2x00dev)
1137
{
1138
return
rt2x00_intf
(rt2x00dev,
RT2X00_CHIP_INTF_PCIE
);
1139
}
1140
1141
static
inline
bool
rt2x00_is_usb(
struct
rt2x00_dev
*rt2x00dev)
1142
{
1143
return
rt2x00_intf
(rt2x00dev,
RT2X00_CHIP_INTF_USB
);
1144
}
1145
1146
static
inline
bool
rt2x00_is_soc(
struct
rt2x00_dev
*rt2x00dev)
1147
{
1148
return
rt2x00_intf
(rt2x00dev,
RT2X00_CHIP_INTF_SOC
);
1149
}
1150
1155
void
rt2x00queue_map_txskb
(
struct
queue_entry *
entry
);
1156
1161
void
rt2x00queue_unmap_skb
(
struct
queue_entry *
entry
);
1162
1170
static
inline
struct
data_queue
*
1171
rt2x00queue_get_tx_queue(
struct
rt2x00_dev
*rt2x00dev,
1172
const
enum
data_queue_qid
queue
)
1173
{
1174
if
(
queue < rt2x00dev->
ops
->tx_queues && rt2x00dev->
tx
)
1175
return
&rt2x00dev->
tx
[queue];
1176
1177
if
(queue ==
QID_ATIM
)
1178
return
rt2x00dev->
atim
;
1179
1180
return
NULL
;
1181
}
1182
1188
struct
queue_entry *
rt2x00queue_get_entry
(
struct
data_queue
*queue,
1189
enum
queue_index
index
);
1190
1199
void
rt2x00queue_pause_queue
(
struct
data_queue
*queue);
1200
1208
void
rt2x00queue_unpause_queue
(
struct
data_queue
*queue);
1209
1216
void
rt2x00queue_start_queue
(
struct
data_queue
*queue);
1217
1224
void
rt2x00queue_stop_queue
(
struct
data_queue
*queue);
1225
1234
void
rt2x00queue_flush_queue
(
struct
data_queue
*queue,
bool
drop);
1235
1242
void
rt2x00queue_start_queues
(
struct
rt2x00_dev
*rt2x00dev);
1243
1251
void
rt2x00queue_stop_queues
(
struct
rt2x00_dev
*rt2x00dev);
1252
1261
void
rt2x00queue_flush_queues
(
struct
rt2x00_dev
*rt2x00dev,
bool
drop);
1262
1263
/*
1264
* Debugfs handlers.
1265
*/
1272
#ifdef CONFIG_RT2X00_LIB_DEBUGFS
1273
void
rt2x00debug_dump_frame
(
struct
rt2x00_dev
*rt2x00dev,
1274
enum
rt2x00_dump_type
type
,
struct
sk_buff
*
skb
);
1275
#else
1276
static
inline
void
rt2x00debug_dump_frame
(
struct
rt2x00_dev
*rt2x00dev,
1277
enum
rt2x00_dump_type
type
,
1278
struct
sk_buff
*
skb
)
1279
{
1280
}
1281
#endif
/* CONFIG_RT2X00_LIB_DEBUGFS */
1282
1283
/*
1284
* Utility functions.
1285
*/
1286
u32
rt2x00lib_get_bssidx
(
struct
rt2x00_dev
*rt2x00dev,
1287
struct
ieee80211_vif
*vif);
1288
1289
/*
1290
* Interrupt context handlers.
1291
*/
1292
void
rt2x00lib_beacondone
(
struct
rt2x00_dev
*rt2x00dev);
1293
void
rt2x00lib_pretbtt
(
struct
rt2x00_dev
*rt2x00dev);
1294
void
rt2x00lib_dmastart
(
struct
queue_entry *
entry
);
1295
void
rt2x00lib_dmadone
(
struct
queue_entry *
entry
);
1296
void
rt2x00lib_txdone
(
struct
queue_entry *
entry
,
1297
struct
txdone_entry_desc
*
txdesc
);
1298
void
rt2x00lib_txdone_noinfo
(
struct
queue_entry *
entry
,
u32
status
);
1299
void
rt2x00lib_rxdone
(
struct
queue_entry *
entry
,
gfp_t
gfp);
1300
1301
/*
1302
* mac80211 handlers.
1303
*/
1304
void
rt2x00mac_tx
(
struct
ieee80211_hw
*
hw
,
1305
struct
ieee80211_tx_control
*
control
,
1306
struct
sk_buff
*
skb
);
1307
int
rt2x00mac_start
(
struct
ieee80211_hw
*
hw
);
1308
void
rt2x00mac_stop
(
struct
ieee80211_hw
*
hw
);
1309
int
rt2x00mac_add_interface
(
struct
ieee80211_hw
*
hw
,
1310
struct
ieee80211_vif
*vif);
1311
void
rt2x00mac_remove_interface
(
struct
ieee80211_hw
*
hw
,
1312
struct
ieee80211_vif
*vif);
1313
int
rt2x00mac_config
(
struct
ieee80211_hw
*
hw
,
u32
changed
);
1314
void
rt2x00mac_configure_filter
(
struct
ieee80211_hw
*
hw
,
1315
unsigned
int
changed_flags,
1316
unsigned
int
*total_flags,
1317
u64
multicast);
1318
int
rt2x00mac_set_tim
(
struct
ieee80211_hw
*
hw
,
struct
ieee80211_sta
*sta,
1319
bool
set
);
1320
#ifdef CONFIG_RT2X00_LIB_CRYPTO
1321
int
rt2x00mac_set_key
(
struct
ieee80211_hw
*
hw
,
enum
set_key_cmd
cmd
,
1322
struct
ieee80211_vif
*vif,
struct
ieee80211_sta
*sta,
1323
struct
ieee80211_key_conf
*
key
);
1324
#else
1325
#define rt2x00mac_set_key NULL
1326
#endif
/* CONFIG_RT2X00_LIB_CRYPTO */
1327
int
rt2x00mac_sta_add
(
struct
ieee80211_hw
*
hw
,
struct
ieee80211_vif
*vif,
1328
struct
ieee80211_sta
*sta);
1329
int
rt2x00mac_sta_remove
(
struct
ieee80211_hw
*
hw
,
struct
ieee80211_vif
*vif,
1330
struct
ieee80211_sta
*sta);
1331
void
rt2x00mac_sw_scan_start
(
struct
ieee80211_hw
*
hw
);
1332
void
rt2x00mac_sw_scan_complete
(
struct
ieee80211_hw
*
hw
);
1333
int
rt2x00mac_get_stats
(
struct
ieee80211_hw
*
hw
,
1334
struct
ieee80211_low_level_stats
*
stats
);
1335
void
rt2x00mac_bss_info_changed
(
struct
ieee80211_hw
*
hw
,
1336
struct
ieee80211_vif
*vif,
1337
struct
ieee80211_bss_conf
*bss_conf,
1338
u32
changes);
1339
int
rt2x00mac_conf_tx
(
struct
ieee80211_hw
*
hw
,
1340
struct
ieee80211_vif
*vif,
u16
queue,
1341
const
struct
ieee80211_tx_queue_params
*
params
);
1342
void
rt2x00mac_rfkill_poll
(
struct
ieee80211_hw
*
hw
);
1343
void
rt2x00mac_flush
(
struct
ieee80211_hw
*
hw
,
bool
drop);
1344
int
rt2x00mac_set_antenna
(
struct
ieee80211_hw
*
hw
,
u32
tx_ant,
u32
rx_ant);
1345
int
rt2x00mac_get_antenna
(
struct
ieee80211_hw
*
hw
,
u32
*tx_ant,
u32
*rx_ant);
1346
void
rt2x00mac_get_ringparam
(
struct
ieee80211_hw
*
hw
,
1347
u32
*
tx
,
u32
*tx_max,
u32
*
rx
,
u32
*rx_max);
1348
bool
rt2x00mac_tx_frames_pending
(
struct
ieee80211_hw
*
hw
);
1349
1350
/*
1351
* Driver allocation handlers.
1352
*/
1353
int
rt2x00lib_probe_dev
(
struct
rt2x00_dev
*rt2x00dev);
1354
void
rt2x00lib_remove_dev
(
struct
rt2x00_dev
*rt2x00dev);
1355
#ifdef CONFIG_PM
1356
int
rt2x00lib_suspend(
struct
rt2x00_dev
*rt2x00dev,
pm_message_t
state
);
1357
int
rt2x00lib_resume(
struct
rt2x00_dev
*rt2x00dev);
1358
#endif
/* CONFIG_PM */
1359
1360
#endif
/* RT2X00_H */
Generated on Thu Jan 10 2013 14:12:52 for Linux Kernel by
1.8.2