rt2x00.h revision 9f926fb57a2eb14d58ea6d6699544f9ccd0df8c7
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 tx_power1;
216	short tx_power2;
217};
218
219/*
220 * Antenna setup values.
221 */
222struct antenna_setup {
223	enum antenna rx;
224	enum antenna tx;
225};
226
227/*
228 * Quality statistics about the currently active link.
229 */
230struct link_qual {
231	/*
232	 * Statistics required for Link tuning by driver
233	 * The rssi value is provided by rt2x00lib during the
234	 * link_tuner() callback function.
235	 * The false_cca field is filled during the link_stats()
236	 * callback function and could be used during the
237	 * link_tuner() callback function.
238	 */
239	int rssi;
240	int false_cca;
241
242	/*
243	 * VGC levels
244	 * Hardware driver will tune the VGC level during each call
245	 * to the link_tuner() callback function. This vgc_level is
246	 * is determined based on the link quality statistics like
247	 * average RSSI and the false CCA count.
248	 *
249	 * In some cases the drivers need to differentiate between
250	 * the currently "desired" VGC level and the level configured
251	 * in the hardware. The latter is important to reduce the
252	 * number of BBP register reads to reduce register access
253	 * overhead. For this reason we store both values here.
254	 */
255	u8 vgc_level;
256	u8 vgc_level_reg;
257
258	/*
259	 * Statistics required for Signal quality calculation.
260	 * These fields might be changed during the link_stats()
261	 * callback function.
262	 */
263	int rx_success;
264	int rx_failed;
265	int tx_success;
266	int tx_failed;
267};
268
269/*
270 * Antenna settings about the currently active link.
271 */
272struct link_ant {
273	/*
274	 * Antenna flags
275	 */
276	unsigned int flags;
277#define ANTENNA_RX_DIVERSITY	0x00000001
278#define ANTENNA_TX_DIVERSITY	0x00000002
279#define ANTENNA_MODE_SAMPLE	0x00000004
280
281	/*
282	 * Currently active TX/RX antenna setup.
283	 * When software diversity is used, this will indicate
284	 * which antenna is actually used at this time.
285	 */
286	struct antenna_setup active;
287
288	/*
289	 * RSSI history information for the antenna.
290	 * Used to determine when to switch antenna
291	 * when using software diversity.
292	 */
293	int rssi_history;
294
295	/*
296	 * Current RSSI average of the currently active antenna.
297	 * Similar to the avg_rssi in the link_qual structure
298	 * this value is updated by using the walking average.
299	 */
300	struct avg_val rssi_ant;
301};
302
303/*
304 * To optimize the quality of the link we need to store
305 * the quality of received frames and periodically
306 * optimize the link.
307 */
308struct link {
309	/*
310	 * Link tuner counter
311	 * The number of times the link has been tuned
312	 * since the radio has been switched on.
313	 */
314	u32 count;
315
316	/*
317	 * Quality measurement values.
318	 */
319	struct link_qual qual;
320
321	/*
322	 * TX/RX antenna setup.
323	 */
324	struct link_ant ant;
325
326	/*
327	 * Currently active average RSSI value
328	 */
329	struct avg_val avg_rssi;
330
331	/*
332	 * Work structure for scheduling periodic link tuning.
333	 */
334	struct delayed_work work;
335
336	/*
337	 * Work structure for scheduling periodic watchdog monitoring.
338	 */
339	struct delayed_work watchdog_work;
340};
341
342/*
343 * Interface structure
344 * Per interface configuration details, this structure
345 * is allocated as the private data for ieee80211_vif.
346 */
347struct rt2x00_intf {
348	/*
349	 * All fields within the rt2x00_intf structure
350	 * must be protected with a spinlock.
351	 */
352	spinlock_t lock;
353
354	/*
355	 * MAC of the device.
356	 */
357	u8 mac[ETH_ALEN];
358
359	/*
360	 * BBSID of the AP to associate with.
361	 */
362	u8 bssid[ETH_ALEN];
363
364	/*
365	 * beacon->skb must be protected with the mutex.
366	 */
367	struct mutex beacon_skb_mutex;
368
369	/*
370	 * Entry in the beacon queue which belongs to
371	 * this interface. Each interface has its own
372	 * dedicated beacon entry.
373	 */
374	struct queue_entry *beacon;
375
376	/*
377	 * Actions that needed rescheduling.
378	 */
379	unsigned int delayed_flags;
380#define DELAYED_UPDATE_BEACON		0x00000001
381
382	/*
383	 * Software sequence counter, this is only required
384	 * for hardware which doesn't support hardware
385	 * sequence counting.
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 * struct hw_mode_spec: Hardware specifications structure
398 *
399 * Details about the supported modes, rates and channels
400 * of a particular chipset. This is used by rt2x00lib
401 * to build the ieee80211_hw_mode array for mac80211.
402 *
403 * @supported_bands: Bitmask contained the supported bands (2.4GHz, 5.2GHz).
404 * @supported_rates: Rate types which are supported (CCK, OFDM).
405 * @num_channels: Number of supported channels. This is used as array size
406 *	for @tx_power_a, @tx_power_bg and @channels.
407 * @channels: Device/chipset specific channel values (See &struct rf_channel).
408 * @channels_info: Additional information for channels (See &struct channel_info).
409 * @ht: Driver HT Capabilities (See &ieee80211_sta_ht_cap).
410 */
411struct hw_mode_spec {
412	unsigned int supported_bands;
413#define SUPPORT_BAND_2GHZ	0x00000001
414#define SUPPORT_BAND_5GHZ	0x00000002
415
416	unsigned int supported_rates;
417#define SUPPORT_RATE_CCK	0x00000001
418#define SUPPORT_RATE_OFDM	0x00000002
419
420	unsigned int num_channels;
421	const struct rf_channel *channels;
422	const struct channel_info *channels_info;
423
424	struct ieee80211_sta_ht_cap ht;
425};
426
427/*
428 * Configuration structure wrapper around the
429 * mac80211 configuration structure.
430 * When mac80211 configures the driver, rt2x00lib
431 * can precalculate values which are equal for all
432 * rt2x00 drivers. Those values can be stored in here.
433 */
434struct rt2x00lib_conf {
435	struct ieee80211_conf *conf;
436
437	struct rf_channel rf;
438	struct channel_info channel;
439};
440
441/*
442 * Configuration structure for erp settings.
443 */
444struct rt2x00lib_erp {
445	int short_preamble;
446	int cts_protection;
447
448	u32 basic_rates;
449
450	int slot_time;
451
452	short sifs;
453	short pifs;
454	short difs;
455	short eifs;
456
457	u16 beacon_int;
458};
459
460/*
461 * Configuration structure for hardware encryption.
462 */
463struct rt2x00lib_crypto {
464	enum cipher cipher;
465
466	enum set_key_cmd cmd;
467	const u8 *address;
468
469	u32 bssidx;
470	u32 aid;
471
472	u8 key[16];
473	u8 tx_mic[8];
474	u8 rx_mic[8];
475};
476
477/*
478 * Configuration structure wrapper around the
479 * rt2x00 interface configuration handler.
480 */
481struct rt2x00intf_conf {
482	/*
483	 * Interface type
484	 */
485	enum nl80211_iftype type;
486
487	/*
488	 * TSF sync value, this is dependant on the operation type.
489	 */
490	enum tsf_sync sync;
491
492	/*
493	 * The MAC and BSSID addressess are simple array of bytes,
494	 * these arrays are little endian, so when sending the addressess
495	 * to the drivers, copy the it into a endian-signed variable.
496	 *
497	 * Note that all devices (except rt2500usb) have 32 bits
498	 * register word sizes. This means that whatever variable we
499	 * pass _must_ be a multiple of 32 bits. Otherwise the device
500	 * might not accept what we are sending to it.
501	 * This will also make it easier for the driver to write
502	 * the data to the device.
503	 */
504	__le32 mac[2];
505	__le32 bssid[2];
506};
507
508/*
509 * rt2x00lib callback functions.
510 */
511struct rt2x00lib_ops {
512	/*
513	 * Interrupt handlers.
514	 */
515	irq_handler_t irq_handler;
516
517	/*
518	 * Threaded Interrupt handlers.
519	 */
520	irq_handler_t irq_handler_thread;
521
522	/*
523	 * Device init handlers.
524	 */
525	int (*probe_hw) (struct rt2x00_dev *rt2x00dev);
526	char *(*get_firmware_name) (struct rt2x00_dev *rt2x00dev);
527	int (*check_firmware) (struct rt2x00_dev *rt2x00dev,
528			       const u8 *data, const size_t len);
529	int (*load_firmware) (struct rt2x00_dev *rt2x00dev,
530			      const u8 *data, const size_t len);
531
532	/*
533	 * Device initialization/deinitialization handlers.
534	 */
535	int (*initialize) (struct rt2x00_dev *rt2x00dev);
536	void (*uninitialize) (struct rt2x00_dev *rt2x00dev);
537
538	/*
539	 * queue initialization handlers
540	 */
541	bool (*get_entry_state) (struct queue_entry *entry);
542	void (*clear_entry) (struct queue_entry *entry);
543
544	/*
545	 * Radio control handlers.
546	 */
547	int (*set_device_state) (struct rt2x00_dev *rt2x00dev,
548				 enum dev_state state);
549	int (*rfkill_poll) (struct rt2x00_dev *rt2x00dev);
550	void (*link_stats) (struct rt2x00_dev *rt2x00dev,
551			    struct link_qual *qual);
552	void (*reset_tuner) (struct rt2x00_dev *rt2x00dev,
553			     struct link_qual *qual);
554	void (*link_tuner) (struct rt2x00_dev *rt2x00dev,
555			    struct link_qual *qual, const u32 count);
556	void (*watchdog) (struct rt2x00_dev *rt2x00dev);
557
558	/*
559	 * TX control handlers
560	 */
561	void (*write_tx_desc) (struct rt2x00_dev *rt2x00dev,
562			       struct sk_buff *skb,
563			       struct txentry_desc *txdesc);
564	void (*write_tx_data) (struct queue_entry *entry,
565			       struct txentry_desc *txdesc);
566	void (*write_beacon) (struct queue_entry *entry,
567			      struct txentry_desc *txdesc);
568	int (*get_tx_data_len) (struct queue_entry *entry);
569	void (*kick_tx_queue) (struct rt2x00_dev *rt2x00dev,
570			       const enum data_queue_qid queue);
571	void (*kill_tx_queue) (struct rt2x00_dev *rt2x00dev,
572			       const enum data_queue_qid queue);
573
574	/*
575	 * RX control handlers
576	 */
577	void (*fill_rxdone) (struct queue_entry *entry,
578			     struct rxdone_entry_desc *rxdesc);
579
580	/*
581	 * Configuration handlers.
582	 */
583	int (*config_shared_key) (struct rt2x00_dev *rt2x00dev,
584				  struct rt2x00lib_crypto *crypto,
585				  struct ieee80211_key_conf *key);
586	int (*config_pairwise_key) (struct rt2x00_dev *rt2x00dev,
587				    struct rt2x00lib_crypto *crypto,
588				    struct ieee80211_key_conf *key);
589	void (*config_filter) (struct rt2x00_dev *rt2x00dev,
590			       const unsigned int filter_flags);
591	void (*config_intf) (struct rt2x00_dev *rt2x00dev,
592			     struct rt2x00_intf *intf,
593			     struct rt2x00intf_conf *conf,
594			     const unsigned int flags);
595#define CONFIG_UPDATE_TYPE		( 1 << 1 )
596#define CONFIG_UPDATE_MAC		( 1 << 2 )
597#define CONFIG_UPDATE_BSSID		( 1 << 3 )
598
599	void (*config_erp) (struct rt2x00_dev *rt2x00dev,
600			    struct rt2x00lib_erp *erp);
601	void (*config_ant) (struct rt2x00_dev *rt2x00dev,
602			    struct antenna_setup *ant);
603	void (*config) (struct rt2x00_dev *rt2x00dev,
604			struct rt2x00lib_conf *libconf,
605			const unsigned int changed_flags);
606};
607
608/*
609 * rt2x00 driver callback operation structure.
610 */
611struct rt2x00_ops {
612	const char *name;
613	const unsigned int max_sta_intf;
614	const unsigned int max_ap_intf;
615	const unsigned int eeprom_size;
616	const unsigned int rf_size;
617	const unsigned int tx_queues;
618	const unsigned int extra_tx_headroom;
619	const struct data_queue_desc *rx;
620	const struct data_queue_desc *tx;
621	const struct data_queue_desc *bcn;
622	const struct data_queue_desc *atim;
623	const struct rt2x00lib_ops *lib;
624	const struct ieee80211_ops *hw;
625#ifdef CONFIG_RT2X00_LIB_DEBUGFS
626	const struct rt2x00debug *debugfs;
627#endif /* CONFIG_RT2X00_LIB_DEBUGFS */
628};
629
630/*
631 * rt2x00 device flags
632 */
633enum rt2x00_flags {
634	/*
635	 * Device state flags
636	 */
637	DEVICE_STATE_PRESENT,
638	DEVICE_STATE_REGISTERED_HW,
639	DEVICE_STATE_INITIALIZED,
640	DEVICE_STATE_STARTED,
641	DEVICE_STATE_ENABLED_RADIO,
642	DEVICE_STATE_SCANNING,
643
644	/*
645	 * Driver requirements
646	 */
647	DRIVER_REQUIRE_FIRMWARE,
648	DRIVER_REQUIRE_BEACON_GUARD,
649	DRIVER_REQUIRE_ATIM_QUEUE,
650	DRIVER_REQUIRE_DMA,
651	DRIVER_REQUIRE_COPY_IV,
652	DRIVER_REQUIRE_L2PAD,
653
654	/*
655	 * Driver features
656	 */
657	CONFIG_SUPPORT_HW_BUTTON,
658	CONFIG_SUPPORT_HW_CRYPTO,
659	DRIVER_SUPPORT_CONTROL_FILTERS,
660	DRIVER_SUPPORT_CONTROL_FILTER_PSPOLL,
661	DRIVER_SUPPORT_PRE_TBTT_INTERRUPT,
662	DRIVER_SUPPORT_LINK_TUNING,
663	DRIVER_SUPPORT_WATCHDOG,
664
665	/*
666	 * Driver configuration
667	 */
668	CONFIG_FRAME_TYPE,
669	CONFIG_RF_SEQUENCE,
670	CONFIG_EXTERNAL_LNA_A,
671	CONFIG_EXTERNAL_LNA_BG,
672	CONFIG_DOUBLE_ANTENNA,
673	CONFIG_CHANNEL_HT40,
674};
675
676/*
677 * rt2x00 device structure.
678 */
679struct rt2x00_dev {
680	/*
681	 * Device structure.
682	 * The structure stored in here depends on the
683	 * system bus (PCI or USB).
684	 * When accessing this variable, the rt2x00dev_{pci,usb}
685	 * macros should be used for correct typecasting.
686	 */
687	struct device *dev;
688
689	/*
690	 * Callback functions.
691	 */
692	const struct rt2x00_ops *ops;
693
694	/*
695	 * IEEE80211 control structure.
696	 */
697	struct ieee80211_hw *hw;
698	struct ieee80211_supported_band bands[IEEE80211_NUM_BANDS];
699	enum ieee80211_band curr_band;
700
701	/*
702	 * If enabled, the debugfs interface structures
703	 * required for deregistration of debugfs.
704	 */
705#ifdef CONFIG_RT2X00_LIB_DEBUGFS
706	struct rt2x00debug_intf *debugfs_intf;
707#endif /* CONFIG_RT2X00_LIB_DEBUGFS */
708
709	/*
710	 * LED structure for changing the LED status
711	 * by mac8011 or the kernel.
712	 */
713#ifdef CONFIG_RT2X00_LIB_LEDS
714	struct rt2x00_led led_radio;
715	struct rt2x00_led led_assoc;
716	struct rt2x00_led led_qual;
717	u16 led_mcu_reg;
718#endif /* CONFIG_RT2X00_LIB_LEDS */
719
720	/*
721	 * Device flags.
722	 * In these flags the current status and some
723	 * of the device capabilities are stored.
724	 */
725	unsigned long flags;
726
727	/*
728	 * Device information, Bus IRQ and name (PCI, SoC)
729	 */
730	int irq;
731	const char *name;
732
733	/*
734	 * Chipset identification.
735	 */
736	struct rt2x00_chip chip;
737
738	/*
739	 * hw capability specifications.
740	 */
741	struct hw_mode_spec spec;
742
743	/*
744	 * This is the default TX/RX antenna setup as indicated
745	 * by the device's EEPROM.
746	 */
747	struct antenna_setup default_ant;
748
749	/*
750	 * Register pointers
751	 * csr.base: CSR base register address. (PCI)
752	 * csr.cache: CSR cache for usb_control_msg. (USB)
753	 */
754	union csr {
755		void __iomem *base;
756		void *cache;
757	} csr;
758
759	/*
760	 * Mutex to protect register accesses.
761	 * For PCI and USB devices it protects against concurrent indirect
762	 * register access (BBP, RF, MCU) since accessing those
763	 * registers require multiple calls to the CSR registers.
764	 * For USB devices it also protects the csr_cache since that
765	 * field is used for normal CSR access and it cannot support
766	 * multiple callers simultaneously.
767	 */
768	struct mutex csr_mutex;
769
770	/*
771	 * Current packet filter configuration for the device.
772	 * This contains all currently active FIF_* flags send
773	 * to us by mac80211 during configure_filter().
774	 */
775	unsigned int packet_filter;
776
777	/*
778	 * Interface details:
779	 *  - Open ap interface count.
780	 *  - Open sta interface count.
781	 *  - Association count.
782	 */
783	unsigned int intf_ap_count;
784	unsigned int intf_sta_count;
785	unsigned int intf_associated;
786
787	/*
788	 * Link quality
789	 */
790	struct link link;
791
792	/*
793	 * EEPROM data.
794	 */
795	__le16 *eeprom;
796
797	/*
798	 * Active RF register values.
799	 * These are stored here so we don't need
800	 * to read the rf registers and can directly
801	 * use this value instead.
802	 * This field should be accessed by using
803	 * rt2x00_rf_read() and rt2x00_rf_write().
804	 */
805	u32 *rf;
806
807	/*
808	 * LNA gain
809	 */
810	short lna_gain;
811
812	/*
813	 * Current TX power value.
814	 */
815	u16 tx_power;
816
817	/*
818	 * Current retry values.
819	 */
820	u8 short_retry;
821	u8 long_retry;
822
823	/*
824	 * Rssi <-> Dbm offset
825	 */
826	u8 rssi_offset;
827
828	/*
829	 * Frequency offset (for rt61pci & rt73usb).
830	 */
831	u8 freq_offset;
832
833	/*
834	 * Calibration information (for rt2800usb & rt2800pci).
835	 * [0] -> BW20
836	 * [1] -> BW40
837	 */
838	u8 calibration[2];
839
840	/*
841	 * Beacon interval.
842	 */
843	u16 beacon_int;
844
845	/*
846	 * Low level statistics which will have
847	 * to be kept up to date while device is running.
848	 */
849	struct ieee80211_low_level_stats low_level_stats;
850
851	/*
852	 * RX configuration information.
853	 */
854	struct ieee80211_rx_status rx_status;
855
856	/*
857	 * Scheduled work.
858	 * NOTE: intf_work will use ieee80211_iterate_active_interfaces()
859	 * which means it cannot be placed on the hw->workqueue
860	 * due to RTNL locking requirements.
861	 */
862	struct work_struct intf_work;
863
864	/*
865	 * Data queue arrays for RX, TX and Beacon.
866	 * The Beacon array also contains the Atim queue
867	 * if that is supported by the device.
868	 */
869	unsigned int data_queues;
870	struct data_queue *rx;
871	struct data_queue *tx;
872	struct data_queue *bcn;
873
874	/*
875	 * Firmware image.
876	 */
877	const struct firmware *fw;
878
879	/*
880	 * Interrupt values, stored between interrupt service routine
881	 * and interrupt thread routine.
882	 */
883	u32 irqvalue[2];
884
885	/*
886	 * Driver specific data.
887	 */
888	void *priv;
889};
890
891/*
892 * Register defines.
893 * Some registers require multiple attempts before success,
894 * in those cases REGISTER_BUSY_COUNT attempts should be
895 * taken with a REGISTER_BUSY_DELAY interval.
896 */
897#define REGISTER_BUSY_COUNT	5
898#define REGISTER_BUSY_DELAY	100
899
900/*
901 * Generic RF access.
902 * The RF is being accessed by word index.
903 */
904static inline void rt2x00_rf_read(struct rt2x00_dev *rt2x00dev,
905				  const unsigned int word, u32 *data)
906{
907	BUG_ON(word < 1 || word > rt2x00dev->ops->rf_size / sizeof(u32));
908	*data = rt2x00dev->rf[word - 1];
909}
910
911static inline void rt2x00_rf_write(struct rt2x00_dev *rt2x00dev,
912				   const unsigned int word, u32 data)
913{
914	BUG_ON(word < 1 || word > rt2x00dev->ops->rf_size / sizeof(u32));
915	rt2x00dev->rf[word - 1] = data;
916}
917
918/*
919 *  Generic EEPROM access.
920 * The EEPROM is being accessed by word index.
921 */
922static inline void *rt2x00_eeprom_addr(struct rt2x00_dev *rt2x00dev,
923				       const unsigned int word)
924{
925	return (void *)&rt2x00dev->eeprom[word];
926}
927
928static inline void rt2x00_eeprom_read(struct rt2x00_dev *rt2x00dev,
929				      const unsigned int word, u16 *data)
930{
931	*data = le16_to_cpu(rt2x00dev->eeprom[word]);
932}
933
934static inline void rt2x00_eeprom_write(struct rt2x00_dev *rt2x00dev,
935				       const unsigned int word, u16 data)
936{
937	rt2x00dev->eeprom[word] = cpu_to_le16(data);
938}
939
940/*
941 * Chipset handlers
942 */
943static inline void rt2x00_set_chip(struct rt2x00_dev *rt2x00dev,
944				   const u16 rt, const u16 rf, const u16 rev)
945{
946	rt2x00dev->chip.rt = rt;
947	rt2x00dev->chip.rf = rf;
948	rt2x00dev->chip.rev = rev;
949
950	INFO(rt2x00dev,
951	     "Chipset detected - rt: %04x, rf: %04x, rev: %04x.\n",
952	     rt2x00dev->chip.rt, rt2x00dev->chip.rf, rt2x00dev->chip.rev);
953}
954
955static inline bool rt2x00_rt(struct rt2x00_dev *rt2x00dev, const u16 rt)
956{
957	return (rt2x00dev->chip.rt == rt);
958}
959
960static inline bool rt2x00_rf(struct rt2x00_dev *rt2x00dev, const u16 rf)
961{
962	return (rt2x00dev->chip.rf == rf);
963}
964
965static inline u16 rt2x00_rev(struct rt2x00_dev *rt2x00dev)
966{
967	return rt2x00dev->chip.rev;
968}
969
970static inline bool rt2x00_rt_rev(struct rt2x00_dev *rt2x00dev,
971				 const u16 rt, const u16 rev)
972{
973	return (rt2x00_rt(rt2x00dev, rt) && rt2x00_rev(rt2x00dev) == rev);
974}
975
976static inline bool rt2x00_rt_rev_lt(struct rt2x00_dev *rt2x00dev,
977				    const u16 rt, const u16 rev)
978{
979	return (rt2x00_rt(rt2x00dev, rt) && rt2x00_rev(rt2x00dev) < rev);
980}
981
982static inline bool rt2x00_rt_rev_gte(struct rt2x00_dev *rt2x00dev,
983				     const u16 rt, const u16 rev)
984{
985	return (rt2x00_rt(rt2x00dev, rt) && rt2x00_rev(rt2x00dev) >= rev);
986}
987
988static inline void rt2x00_set_chip_intf(struct rt2x00_dev *rt2x00dev,
989					enum rt2x00_chip_intf intf)
990{
991	rt2x00dev->chip.intf = intf;
992}
993
994static inline bool rt2x00_intf(struct rt2x00_dev *rt2x00dev,
995			       enum rt2x00_chip_intf intf)
996{
997	return (rt2x00dev->chip.intf == intf);
998}
999
1000static inline bool rt2x00_is_pci(struct rt2x00_dev *rt2x00dev)
1001{
1002	return rt2x00_intf(rt2x00dev, RT2X00_CHIP_INTF_PCI) ||
1003	       rt2x00_intf(rt2x00dev, RT2X00_CHIP_INTF_PCIE);
1004}
1005
1006static inline bool rt2x00_is_pcie(struct rt2x00_dev *rt2x00dev)
1007{
1008	return rt2x00_intf(rt2x00dev, RT2X00_CHIP_INTF_PCIE);
1009}
1010
1011static inline bool rt2x00_is_usb(struct rt2x00_dev *rt2x00dev)
1012{
1013	return rt2x00_intf(rt2x00dev, RT2X00_CHIP_INTF_USB);
1014}
1015
1016static inline bool rt2x00_is_soc(struct rt2x00_dev *rt2x00dev)
1017{
1018	return rt2x00_intf(rt2x00dev, RT2X00_CHIP_INTF_SOC);
1019}
1020
1021/**
1022 * rt2x00queue_map_txskb - Map a skb into DMA for TX purposes.
1023 * @rt2x00dev: Pointer to &struct rt2x00_dev.
1024 * @skb: The skb to map.
1025 */
1026void rt2x00queue_map_txskb(struct rt2x00_dev *rt2x00dev, struct sk_buff *skb);
1027
1028/**
1029 * rt2x00queue_unmap_skb - Unmap a skb from DMA.
1030 * @rt2x00dev: Pointer to &struct rt2x00_dev.
1031 * @skb: The skb to unmap.
1032 */
1033void rt2x00queue_unmap_skb(struct rt2x00_dev *rt2x00dev, struct sk_buff *skb);
1034
1035/**
1036 * rt2x00queue_get_queue - Convert queue index to queue pointer
1037 * @rt2x00dev: Pointer to &struct rt2x00_dev.
1038 * @queue: rt2x00 queue index (see &enum data_queue_qid).
1039 */
1040struct data_queue *rt2x00queue_get_queue(struct rt2x00_dev *rt2x00dev,
1041					 const enum data_queue_qid queue);
1042
1043/**
1044 * rt2x00queue_get_entry - Get queue entry where the given index points to.
1045 * @queue: Pointer to &struct data_queue from where we obtain the entry.
1046 * @index: Index identifier for obtaining the correct index.
1047 */
1048struct queue_entry *rt2x00queue_get_entry(struct data_queue *queue,
1049					  enum queue_index index);
1050
1051/*
1052 * Debugfs handlers.
1053 */
1054/**
1055 * rt2x00debug_dump_frame - Dump a frame to userspace through debugfs.
1056 * @rt2x00dev: Pointer to &struct rt2x00_dev.
1057 * @type: The type of frame that is being dumped.
1058 * @skb: The skb containing the frame to be dumped.
1059 */
1060#ifdef CONFIG_RT2X00_LIB_DEBUGFS
1061void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev,
1062			    enum rt2x00_dump_type type, struct sk_buff *skb);
1063#else
1064static inline void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev,
1065					  enum rt2x00_dump_type type,
1066					  struct sk_buff *skb)
1067{
1068}
1069#endif /* CONFIG_RT2X00_LIB_DEBUGFS */
1070
1071/*
1072 * Interrupt context handlers.
1073 */
1074void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev);
1075void rt2x00lib_pretbtt(struct rt2x00_dev *rt2x00dev);
1076void rt2x00lib_txdone(struct queue_entry *entry,
1077		      struct txdone_entry_desc *txdesc);
1078void rt2x00lib_rxdone(struct rt2x00_dev *rt2x00dev,
1079		      struct queue_entry *entry);
1080
1081/*
1082 * mac80211 handlers.
1083 */
1084int rt2x00mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb);
1085int rt2x00mac_start(struct ieee80211_hw *hw);
1086void rt2x00mac_stop(struct ieee80211_hw *hw);
1087int rt2x00mac_add_interface(struct ieee80211_hw *hw,
1088			    struct ieee80211_vif *vif);
1089void rt2x00mac_remove_interface(struct ieee80211_hw *hw,
1090				struct ieee80211_vif *vif);
1091int rt2x00mac_config(struct ieee80211_hw *hw, u32 changed);
1092void rt2x00mac_configure_filter(struct ieee80211_hw *hw,
1093				unsigned int changed_flags,
1094				unsigned int *total_flags,
1095				u64 multicast);
1096int rt2x00mac_set_tim(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
1097		      bool set);
1098#ifdef CONFIG_RT2X00_LIB_CRYPTO
1099int rt2x00mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1100		      struct ieee80211_vif *vif, struct ieee80211_sta *sta,
1101		      struct ieee80211_key_conf *key);
1102#else
1103#define rt2x00mac_set_key	NULL
1104#endif /* CONFIG_RT2X00_LIB_CRYPTO */
1105void rt2x00mac_sw_scan_start(struct ieee80211_hw *hw);
1106void rt2x00mac_sw_scan_complete(struct ieee80211_hw *hw);
1107int rt2x00mac_get_stats(struct ieee80211_hw *hw,
1108			struct ieee80211_low_level_stats *stats);
1109void rt2x00mac_bss_info_changed(struct ieee80211_hw *hw,
1110				struct ieee80211_vif *vif,
1111				struct ieee80211_bss_conf *bss_conf,
1112				u32 changes);
1113int rt2x00mac_conf_tx(struct ieee80211_hw *hw, u16 queue,
1114		      const struct ieee80211_tx_queue_params *params);
1115void rt2x00mac_rfkill_poll(struct ieee80211_hw *hw);
1116
1117/*
1118 * Driver allocation handlers.
1119 */
1120int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev);
1121void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev);
1122#ifdef CONFIG_PM
1123int rt2x00lib_suspend(struct rt2x00_dev *rt2x00dev, pm_message_t state);
1124int rt2x00lib_resume(struct rt2x00_dev *rt2x00dev);
1125#endif /* CONFIG_PM */
1126
1127#endif /* RT2X00_H */
1128