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