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