1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#ifndef RT2X00_H
27#define RT2X00_H
28
29#include <linux/bitops.h>
30#include <linux/skbuff.h>
31#include <linux/workqueue.h>
32#include <linux/firmware.h>
33#include <linux/leds.h>
34#include <linux/mutex.h>
35#include <linux/etherdevice.h>
36
37#include <net/mac80211.h>
38
39#include "rt2x00debug.h"
40#include "rt2x00leds.h"
41#include "rt2x00reg.h"
42#include "rt2x00queue.h"
43
44
45
46
47#define DRV_VERSION "2.2.1"
48#define DRV_PROJECT "http://rt2x00.serialmonkey.com"
49
50
51
52
53
54#define DEBUG_PRINTK_MSG(__dev, __kernlvl, __lvl, __msg, __args...) \
55 printk(__kernlvl "%s -> %s: %s - " __msg, \
56 wiphy_name((__dev)->hw->wiphy), __func__, __lvl, ##__args)
57
58#define DEBUG_PRINTK_PROBE(__kernlvl, __lvl, __msg, __args...) \
59 printk(__kernlvl "%s -> %s: %s - " __msg, \
60 KBUILD_MODNAME, __func__, __lvl, ##__args)
61
62#ifdef CONFIG_RT2X00_DEBUG
63#define DEBUG_PRINTK(__dev, __kernlvl, __lvl, __msg, __args...) \
64 DEBUG_PRINTK_MSG(__dev, __kernlvl, __lvl, __msg, ##__args);
65#else
66#define DEBUG_PRINTK(__dev, __kernlvl, __lvl, __msg, __args...) \
67 do { } while (0)
68#endif
69
70
71
72
73
74
75
76
77#define PANIC(__dev, __msg, __args...) \
78 DEBUG_PRINTK_MSG(__dev, KERN_CRIT, "Panic", __msg, ##__args)
79#define ERROR(__dev, __msg, __args...) \
80 DEBUG_PRINTK_MSG(__dev, KERN_ERR, "Error", __msg, ##__args)
81#define ERROR_PROBE(__msg, __args...) \
82 DEBUG_PRINTK_PROBE(KERN_ERR, "Error", __msg, ##__args)
83#define WARNING(__dev, __msg, __args...) \
84 DEBUG_PRINTK(__dev, KERN_WARNING, "Warning", __msg, ##__args)
85#define NOTICE(__dev, __msg, __args...) \
86 DEBUG_PRINTK(__dev, KERN_NOTICE, "Notice", __msg, ##__args)
87#define INFO(__dev, __msg, __args...) \
88 DEBUG_PRINTK(__dev, KERN_INFO, "Info", __msg, ##__args)
89#define DEBUG(__dev, __msg, __args...) \
90 DEBUG_PRINTK(__dev, KERN_DEBUG, "Debug", __msg, ##__args)
91#define EEPROM(__dev, __msg, __args...) \
92 DEBUG_PRINTK(__dev, KERN_DEBUG, "EEPROM recovery", __msg, ##__args)
93
94
95
96
97
98#define ACK_SIZE 14
99#define IEEE80211_HEADER 24
100#define PLCP 48
101#define BEACON 100
102#define PREAMBLE 144
103#define SHORT_PREAMBLE 72
104#define SLOT_TIME 20
105#define SHORT_SLOT_TIME 9
106#define SIFS 10
107#define PIFS ( SIFS + SLOT_TIME )
108#define SHORT_PIFS ( SIFS + SHORT_SLOT_TIME )
109#define DIFS ( PIFS + SLOT_TIME )
110#define SHORT_DIFS ( SHORT_PIFS + SHORT_SLOT_TIME )
111#define EIFS ( SIFS + DIFS + \
112 (8 * (IEEE80211_HEADER + ACK_SIZE)) )
113#define SHORT_EIFS ( SIFS + SHORT_DIFS + \
114 (8 * (IEEE80211_HEADER + ACK_SIZE)) )
115
116
117
118
119
120
121struct rt2x00_chip {
122 u16 rt;
123#define RT2460 0x0101
124#define RT2560 0x0201
125#define RT2570 0x1201
126#define RT2561s 0x0301
127#define RT2561 0x0302
128#define RT2661 0x0401
129#define RT2571 0x1300
130
131 u16 rf;
132 u32 rev;
133};
134
135
136
137
138struct rf_channel {
139 int channel;
140 u32 rf1;
141 u32 rf2;
142 u32 rf3;
143 u32 rf4;
144};
145
146
147
148
149struct channel_info {
150 unsigned int flags;
151#define GEOGRAPHY_ALLOWED 0x00000001
152
153 short tx_power1;
154 short tx_power2;
155};
156
157
158
159
160struct antenna_setup {
161 enum antenna rx;
162 enum antenna tx;
163};
164
165
166
167
168struct link_qual {
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187 int avg_rssi;
188 int false_cca;
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207 int rx_percentage;
208 int rx_success;
209 int rx_failed;
210 int tx_percentage;
211 int tx_success;
212 int tx_failed;
213#define WEIGHT_RSSI 20
214#define WEIGHT_RX 40
215#define WEIGHT_TX 40
216};
217
218
219
220
221struct link_ant {
222
223
224
225 unsigned int flags;
226#define ANTENNA_RX_DIVERSITY 0x00000001
227#define ANTENNA_TX_DIVERSITY 0x00000002
228#define ANTENNA_MODE_SAMPLE 0x00000004
229
230
231
232
233
234
235 struct antenna_setup active;
236
237
238
239
240
241
242
243
244
245 int rssi_history[2];
246
247
248
249
250
251
252 int rssi_ant;
253};
254
255
256
257
258
259
260struct link {
261
262
263
264
265
266 u32 count;
267
268
269
270
271 struct link_qual qual;
272
273
274
275
276 struct link_ant ant;
277
278
279
280
281 int vgc_level;
282
283
284
285
286 struct delayed_work work;
287};
288
289
290
291
292#define MOVING_AVERAGE(__avg, __val, __samples) \
293 ( (((__avg) * ((__samples) - 1)) + (__val)) / (__samples) )
294
295
296
297
298
299#define DEFAULT_RSSI ( -128 )
300
301
302
303
304static inline int rt2x00_get_link_rssi(struct link *link)
305{
306 if (link->qual.avg_rssi && link->qual.rx_success)
307 return link->qual.avg_rssi;
308 return DEFAULT_RSSI;
309}
310
311static inline int rt2x00_get_link_ant_rssi(struct link *link)
312{
313 if (link->ant.rssi_ant && link->qual.rx_success)
314 return link->ant.rssi_ant;
315 return DEFAULT_RSSI;
316}
317
318static inline void rt2x00_reset_link_ant_rssi(struct link *link)
319{
320 link->ant.rssi_ant = 0;
321}
322
323static inline int rt2x00_get_link_ant_rssi_history(struct link *link,
324 enum antenna ant)
325{
326 if (link->ant.rssi_history[ant - ANTENNA_A])
327 return link->ant.rssi_history[ant - ANTENNA_A];
328 return DEFAULT_RSSI;
329}
330
331static inline int rt2x00_update_ant_rssi(struct link *link, int rssi)
332{
333 int old_rssi = link->ant.rssi_history[link->ant.active.rx - ANTENNA_A];
334 link->ant.rssi_history[link->ant.active.rx - ANTENNA_A] = rssi;
335 return old_rssi;
336}
337
338
339
340
341
342
343struct rt2x00_intf {
344
345
346
347
348 spinlock_t lock;
349
350
351
352
353
354
355 struct ieee80211_bss_conf conf;
356
357
358
359
360 u8 mac[ETH_ALEN];
361
362
363
364
365 u8 bssid[ETH_ALEN];
366
367
368
369
370
371
372 struct queue_entry *beacon;
373
374
375
376
377 unsigned int delayed_flags;
378#define DELAYED_UPDATE_BEACON 0x00000001
379#define DELAYED_CONFIG_ERP 0x00000002
380#define DELAYED_LED_ASSOC 0x00000004
381
382
383
384
385
386
387 spinlock_t seqlock;
388 u16 seqno;
389};
390
391static inline struct rt2x00_intf* vif_to_intf(struct ieee80211_vif *vif)
392{
393 return (struct rt2x00_intf *)vif->drv_priv;
394}
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410struct hw_mode_spec {
411 unsigned int supported_bands;
412#define SUPPORT_BAND_2GHZ 0x00000001
413#define SUPPORT_BAND_5GHZ 0x00000002
414
415 unsigned int supported_rates;
416#define SUPPORT_RATE_CCK 0x00000001
417#define SUPPORT_RATE_OFDM 0x00000002
418
419 unsigned int num_channels;
420 const struct rf_channel *channels;
421 const struct channel_info *channels_info;
422};
423
424
425
426
427
428
429
430
431struct rt2x00lib_conf {
432 struct ieee80211_conf *conf;
433
434 struct rf_channel rf;
435 struct channel_info channel;
436
437 struct antenna_setup ant;
438
439 enum ieee80211_band band;
440
441 u32 basic_rates;
442 u32 slot_time;
443
444 short sifs;
445 short pifs;
446 short difs;
447 short eifs;
448};
449
450
451
452
453struct rt2x00lib_erp {
454 int short_preamble;
455 int cts_protection;
456
457 int ack_timeout;
458 int ack_consume_time;
459};
460
461
462
463
464struct rt2x00lib_crypto {
465 enum cipher cipher;
466
467 enum set_key_cmd cmd;
468 const u8 *address;
469
470 u32 bssidx;
471 u32 aid;
472
473 u8 key[16];
474 u8 tx_mic[8];
475 u8 rx_mic[8];
476};
477
478
479
480
481
482struct rt2x00intf_conf {
483
484
485
486 enum nl80211_iftype type;
487
488
489
490
491 enum tsf_sync sync;
492
493
494
495
496
497
498
499
500
501
502
503
504
505 __le32 mac[2];
506 __le32 bssid[2];
507};
508
509
510
511
512struct rt2x00lib_ops {
513
514
515
516 irq_handler_t irq_handler;
517
518
519
520
521 int (*probe_hw) (struct rt2x00_dev *rt2x00dev);
522 char *(*get_firmware_name) (struct rt2x00_dev *rt2x00dev);
523 u16 (*get_firmware_crc) (const void *data, const size_t len);
524 int (*load_firmware) (struct rt2x00_dev *rt2x00dev, const void *data,
525 const size_t len);
526
527
528
529
530 int (*initialize) (struct rt2x00_dev *rt2x00dev);
531 void (*uninitialize) (struct rt2x00_dev *rt2x00dev);
532
533
534
535
536 void (*init_rxentry) (struct rt2x00_dev *rt2x00dev,
537 struct queue_entry *entry);
538 void (*init_txentry) (struct rt2x00_dev *rt2x00dev,
539 struct queue_entry *entry);
540
541
542
543
544 int (*set_device_state) (struct rt2x00_dev *rt2x00dev,
545 enum dev_state state);
546 int (*rfkill_poll) (struct rt2x00_dev *rt2x00dev);
547 void (*link_stats) (struct rt2x00_dev *rt2x00dev,
548 struct link_qual *qual);
549 void (*reset_tuner) (struct rt2x00_dev *rt2x00dev);
550 void (*link_tuner) (struct rt2x00_dev *rt2x00dev);
551
552
553
554
555 void (*write_tx_desc) (struct rt2x00_dev *rt2x00dev,
556 struct sk_buff *skb,
557 struct txentry_desc *txdesc);
558 int (*write_tx_data) (struct queue_entry *entry);
559 void (*write_beacon) (struct queue_entry *entry);
560 int (*get_tx_data_len) (struct rt2x00_dev *rt2x00dev,
561 struct sk_buff *skb);
562 void (*kick_tx_queue) (struct rt2x00_dev *rt2x00dev,
563 const enum data_queue_qid queue);
564
565
566
567
568 void (*fill_rxdone) (struct queue_entry *entry,
569 struct rxdone_entry_desc *rxdesc);
570
571
572
573
574 int (*config_shared_key) (struct rt2x00_dev *rt2x00dev,
575 struct rt2x00lib_crypto *crypto,
576 struct ieee80211_key_conf *key);
577 int (*config_pairwise_key) (struct rt2x00_dev *rt2x00dev,
578 struct rt2x00lib_crypto *crypto,
579 struct ieee80211_key_conf *key);
580 void (*config_filter) (struct rt2x00_dev *rt2x00dev,
581 const unsigned int filter_flags);
582 void (*config_intf) (struct rt2x00_dev *rt2x00dev,
583 struct rt2x00_intf *intf,
584 struct rt2x00intf_conf *conf,
585 const unsigned int flags);
586#define CONFIG_UPDATE_TYPE ( 1 << 1 )
587#define CONFIG_UPDATE_MAC ( 1 << 2 )
588#define CONFIG_UPDATE_BSSID ( 1 << 3 )
589
590 void (*config_erp) (struct rt2x00_dev *rt2x00dev,
591 struct rt2x00lib_erp *erp);
592 void (*config) (struct rt2x00_dev *rt2x00dev,
593 struct rt2x00lib_conf *libconf,
594 const unsigned int flags);
595#define CONFIG_UPDATE_PHYMODE ( 1 << 1 )
596#define CONFIG_UPDATE_CHANNEL ( 1 << 2 )
597#define CONFIG_UPDATE_TXPOWER ( 1 << 3 )
598#define CONFIG_UPDATE_ANTENNA ( 1 << 4 )
599#define CONFIG_UPDATE_SLOT_TIME ( 1 << 5 )
600#define CONFIG_UPDATE_BEACON_INT ( 1 << 6 )
601#define CONFIG_UPDATE_ALL 0xffff
602};
603
604
605
606
607struct rt2x00_ops {
608 const char *name;
609 const unsigned int max_sta_intf;
610 const unsigned int max_ap_intf;
611 const unsigned int eeprom_size;
612 const unsigned int rf_size;
613 const unsigned int tx_queues;
614 const struct data_queue_desc *rx;
615 const struct data_queue_desc *tx;
616 const struct data_queue_desc *bcn;
617 const struct data_queue_desc *atim;
618 const struct rt2x00lib_ops *lib;
619 const struct ieee80211_ops *hw;
620#ifdef CONFIG_RT2X00_LIB_DEBUGFS
621 const struct rt2x00debug *debugfs;
622#endif
623};
624
625
626
627
628enum rt2x00_flags {
629
630
631
632 DEVICE_STATE_PRESENT,
633 DEVICE_STATE_REGISTERED_HW,
634 DEVICE_STATE_INITIALIZED,
635 DEVICE_STATE_STARTED,
636 DEVICE_STATE_STARTED_SUSPEND,
637 DEVICE_STATE_ENABLED_RADIO,
638 DEVICE_STATE_DISABLED_RADIO_HW,
639
640
641
642
643 DRIVER_REQUIRE_FIRMWARE,
644 DRIVER_REQUIRE_BEACON_GUARD,
645 DRIVER_REQUIRE_ATIM_QUEUE,
646 DRIVER_REQUIRE_SCHEDULED,
647 DRIVER_REQUIRE_DMA,
648
649
650
651
652 CONFIG_SUPPORT_HW_BUTTON,
653 CONFIG_SUPPORT_HW_CRYPTO,
654
655
656
657
658 CONFIG_FRAME_TYPE,
659 CONFIG_RF_SEQUENCE,
660 CONFIG_EXTERNAL_LNA_A,
661 CONFIG_EXTERNAL_LNA_BG,
662 CONFIG_DOUBLE_ANTENNA,
663 CONFIG_DISABLE_LINK_TUNING,
664};
665
666
667
668
669struct rt2x00_dev {
670
671
672
673
674
675
676
677 struct device *dev;
678
679
680
681
682 const struct rt2x00_ops *ops;
683
684
685
686
687 struct ieee80211_hw *hw;
688 struct ieee80211_supported_band bands[IEEE80211_NUM_BANDS];
689 enum ieee80211_band curr_band;
690
691
692
693
694
695#ifdef CONFIG_RT2X00_LIB_RFKILL
696 unsigned long rfkill_state;
697#define RFKILL_STATE_ALLOCATED 1
698#define RFKILL_STATE_REGISTERED 2
699 struct rfkill *rfkill;
700 struct delayed_work rfkill_work;
701#endif
702
703
704
705
706
707#ifdef CONFIG_RT2X00_LIB_DEBUGFS
708 struct rt2x00debug_intf *debugfs_intf;
709#endif
710
711
712
713
714
715#ifdef CONFIG_RT2X00_LIB_LEDS
716 struct rt2x00_led led_radio;
717 struct rt2x00_led led_assoc;
718 struct rt2x00_led led_qual;
719 u16 led_mcu_reg;
720#endif
721
722
723
724
725
726
727 unsigned long flags;
728
729
730
731
732 struct rt2x00_chip chip;
733
734
735
736
737 struct hw_mode_spec spec;
738
739
740
741
742
743
744 struct antenna_setup default_ant;
745
746
747
748
749
750
751 union csr {
752 void __iomem *base;
753 void *cache;
754 } csr;
755
756
757
758
759
760
761
762
763
764
765
766 struct mutex usb_cache_mutex;
767
768
769
770
771
772
773 unsigned int packet_filter;
774
775
776
777
778
779
780
781 unsigned int intf_ap_count;
782 unsigned int intf_sta_count;
783 unsigned int intf_associated;
784
785
786
787
788 struct link link;
789
790
791
792
793 __le16 *eeprom;
794
795
796
797
798
799
800
801
802
803 u32 *rf;
804
805
806
807
808 short lna_gain;
809
810
811
812
813 u16 usb_maxpacket;
814
815
816
817
818 u16 tx_power;
819
820
821
822
823 u8 rssi_offset;
824
825
826
827
828 u8 freq_offset;
829
830
831
832
833
834 struct ieee80211_low_level_stats low_level_stats;
835
836
837
838
839 struct ieee80211_rx_status rx_status;
840
841
842
843
844
845
846
847 struct work_struct intf_work;
848 struct work_struct filter_work;
849
850
851
852
853
854
855 unsigned int data_queues;
856 struct data_queue *rx;
857 struct data_queue *tx;
858 struct data_queue *bcn;
859
860
861
862
863 const struct firmware *fw;
864};
865
866
867
868
869
870static inline void rt2x00_rf_read(struct rt2x00_dev *rt2x00dev,
871 const unsigned int word, u32 *data)
872{
873 *data = rt2x00dev->rf[word];
874}
875
876static inline void rt2x00_rf_write(struct rt2x00_dev *rt2x00dev,
877 const unsigned int word, u32 data)
878{
879 rt2x00dev->rf[word] = data;
880}
881
882
883
884
885
886static inline void *rt2x00_eeprom_addr(struct rt2x00_dev *rt2x00dev,
887 const unsigned int word)
888{
889 return (void *)&rt2x00dev->eeprom[word];
890}
891
892static inline void rt2x00_eeprom_read(struct rt2x00_dev *rt2x00dev,
893 const unsigned int word, u16 *data)
894{
895 *data = le16_to_cpu(rt2x00dev->eeprom[word]);
896}
897
898static inline void rt2x00_eeprom_write(struct rt2x00_dev *rt2x00dev,
899 const unsigned int word, u16 data)
900{
901 rt2x00dev->eeprom[word] = cpu_to_le16(data);
902}
903
904
905
906
907static inline void rt2x00_set_chip(struct rt2x00_dev *rt2x00dev,
908 const u16 rt, const u16 rf, const u32 rev)
909{
910 INFO(rt2x00dev,
911 "Chipset detected - rt: %04x, rf: %04x, rev: %08x.\n",
912 rt, rf, rev);
913
914 rt2x00dev->chip.rt = rt;
915 rt2x00dev->chip.rf = rf;
916 rt2x00dev->chip.rev = rev;
917}
918
919static inline char rt2x00_rt(const struct rt2x00_chip *chipset, const u16 chip)
920{
921 return (chipset->rt == chip);
922}
923
924static inline char rt2x00_rf(const struct rt2x00_chip *chipset, const u16 chip)
925{
926 return (chipset->rf == chip);
927}
928
929static inline u16 rt2x00_rev(const struct rt2x00_chip *chipset)
930{
931 return chipset->rev;
932}
933
934static inline u16 rt2x00_check_rev(const struct rt2x00_chip *chipset,
935 const u32 rev)
936{
937 return (((chipset->rev & 0xffff0) == rev) &&
938 !!(chipset->rev & 0x0000f));
939}
940
941
942
943
944
945
946
947
948static inline u16 get_duration(const unsigned int size, const u8 rate)
949{
950 return ((size * 8 * 10) / rate);
951}
952
953static inline u16 get_duration_res(const unsigned int size, const u8 rate)
954{
955 return ((size * 8 * 10) % rate);
956}
957
958
959
960
961
962
963void rt2x00queue_map_txskb(struct rt2x00_dev *rt2x00dev, struct sk_buff *skb);
964
965
966
967
968
969
970struct data_queue *rt2x00queue_get_queue(struct rt2x00_dev *rt2x00dev,
971 const enum data_queue_qid queue);
972
973
974
975
976
977
978struct queue_entry *rt2x00queue_get_entry(struct data_queue *queue,
979 enum queue_index index);
980
981
982
983
984void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev);
985void rt2x00lib_txdone(struct queue_entry *entry,
986 struct txdone_entry_desc *txdesc);
987void rt2x00lib_rxdone(struct rt2x00_dev *rt2x00dev,
988 struct queue_entry *entry);
989
990
991
992
993int rt2x00mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb);
994int rt2x00mac_start(struct ieee80211_hw *hw);
995void rt2x00mac_stop(struct ieee80211_hw *hw);
996int rt2x00mac_add_interface(struct ieee80211_hw *hw,
997 struct ieee80211_if_init_conf *conf);
998void rt2x00mac_remove_interface(struct ieee80211_hw *hw,
999 struct ieee80211_if_init_conf *conf);
1000int rt2x00mac_config(struct ieee80211_hw *hw, struct ieee80211_conf *conf);
1001int rt2x00mac_config_interface(struct ieee80211_hw *hw,
1002 struct ieee80211_vif *vif,
1003 struct ieee80211_if_conf *conf);
1004void rt2x00mac_configure_filter(struct ieee80211_hw *hw,
1005 unsigned int changed_flags,
1006 unsigned int *total_flags,
1007 int mc_count, struct dev_addr_list *mc_list);
1008#ifdef CONFIG_RT2X00_LIB_CRYPTO
1009int rt2x00mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1010 const u8 *local_address, const u8 *address,
1011 struct ieee80211_key_conf *key);
1012#else
1013#define rt2x00mac_set_key NULL
1014#endif
1015int rt2x00mac_get_stats(struct ieee80211_hw *hw,
1016 struct ieee80211_low_level_stats *stats);
1017int rt2x00mac_get_tx_stats(struct ieee80211_hw *hw,
1018 struct ieee80211_tx_queue_stats *stats);
1019void rt2x00mac_bss_info_changed(struct ieee80211_hw *hw,
1020 struct ieee80211_vif *vif,
1021 struct ieee80211_bss_conf *bss_conf,
1022 u32 changes);
1023int rt2x00mac_conf_tx(struct ieee80211_hw *hw, u16 queue,
1024 const struct ieee80211_tx_queue_params *params);
1025
1026
1027
1028
1029int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev);
1030void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev);
1031#ifdef CONFIG_PM
1032int rt2x00lib_suspend(struct rt2x00_dev *rt2x00dev, pm_message_t state);
1033int rt2x00lib_resume(struct rt2x00_dev *rt2x00dev);
1034#endif
1035
1036#endif
1037