1/******************************************************************************
2 * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
3 *
4 * Based on the r8180 driver, which is:
5 * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al.
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of version 2 of the GNU General Public License as
8 * published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13 * more details.
14 *
15 * You should have received a copy of the GNU General Public License along with
16 * this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
18 *
19 * The full GNU General Public License is included in this distribution in the
20 * file called LICENSE.
21 *
22 * Contact Information:
23 * wlanfae <wlanfae@realtek.com>
24******************************************************************************/
25
26#ifndef _RTL_CORE_H
27#define _RTL_CORE_H
28
29#include <linux/module.h>
30#include <linux/kernel.h>
31#include <linux/init.h>
32#include <linux/ioport.h>
33#include <linux/sched.h>
34#include <linux/types.h>
35#include <linux/interrupt.h>
36#include <linux/slab.h>
37#include <linux/netdevice.h>
38#include <linux/pci.h>
39#include <linux/etherdevice.h>
40#include <linux/delay.h>
41#include <linux/rtnetlink.h>
42#include <linux/wireless.h>
43#include <linux/timer.h>
44#include <linux/proc_fs.h>
45#include <linux/if_arp.h>
46#include <linux/random.h>
47#include <linux/io.h>
48
49/* Need this defined before including local include files */
50#define DRV_NAME "rtl819xE"
51
52#include "../rtllib.h"
53
54#include "../dot11d.h"
55
56#include "r8192E_firmware.h"
57#include "r8192E_hw.h"
58
59#include "r8190P_def.h"
60#include "r8192E_dev.h"
61
62#include "rtl_eeprom.h"
63#include "rtl_ps.h"
64#include "rtl_pci.h"
65#include "rtl_cam.h"
66
67#define DRV_COPYRIGHT		\
68	"Copyright(c) 2008 - 2010 Realsil Semiconductor Corporation"
69#define DRV_AUTHOR  "<wlanfae@realtek.com>"
70#define DRV_VERSION  "0014.0401.2010"
71
72#define IS_HARDWARE_TYPE_819xP(_priv)		\
73	((((struct r8192_priv *)rtllib_priv(dev))->card_8192 == NIC_8190P) || \
74	(((struct r8192_priv *)rtllib_priv(dev))->card_8192 == NIC_8192E))
75#define IS_HARDWARE_TYPE_8192SE(_priv)		\
76	(((struct r8192_priv *)rtllib_priv(dev))->card_8192 == NIC_8192SE)
77#define IS_HARDWARE_TYPE_8192CE(_priv)		\
78	(((struct r8192_priv *)rtllib_priv(dev))->card_8192 == NIC_8192CE)
79#define IS_HARDWARE_TYPE_8192CU(_priv)		\
80	(((struct r8192_priv *)rtllib_priv(dev))->card_8192 == NIC_8192CU)
81#define IS_HARDWARE_TYPE_8192DE(_priv)		\
82	(((struct r8192_priv *)rtllib_priv(dev))->card_8192 == NIC_8192DE)
83#define IS_HARDWARE_TYPE_8192DU(_priv)		\
84	(((struct r8192_priv *)rtllib_priv(dev))->card_8192 == NIC_8192DU)
85
86#define RTL_PCI_DEVICE(vend, dev, cfg) \
87	.vendor = (vend), .device = (dev), \
88	.subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID , \
89	.driver_data = (kernel_ulong_t)&(cfg)
90
91#define irqreturn_type irqreturn_t
92
93#define rtl8192_interrupt(x, y, z) rtl8192_interrupt_rsl(x, y)
94
95#define RTL_MAX_SCAN_SIZE 128
96
97#define RTL_RATE_MAX		30
98
99#define TOTAL_CAM_ENTRY		32
100#define CAM_CONTENT_COUNT	8
101
102#ifndef BIT
103#define BIT(_i)				(1<<(_i))
104#endif
105
106#define IS_NIC_DOWN(priv)	(!(priv)->up)
107
108#define IS_ADAPTER_SENDS_BEACON(dev) 0
109
110#define IS_UNDER_11N_AES_MODE(_rtllib)		\
111	((_rtllib->pHTInfo->bCurrentHTSupport == true) && \
112	(_rtllib->pairwise_key_type == KEY_TYPE_CCMP))
113
114#define HAL_MEMORY_MAPPED_IO_RANGE_8190PCI	0x1000
115#define HAL_HW_PCI_REVISION_ID_8190PCI			0x00
116#define HAL_MEMORY_MAPPED_IO_RANGE_8192PCIE	0x4000
117#define HAL_HW_PCI_REVISION_ID_8192PCIE		0x01
118#define HAL_MEMORY_MAPPED_IO_RANGE_8192SE	0x4000
119#define HAL_HW_PCI_REVISION_ID_8192SE	0x10
120#define HAL_HW_PCI_REVISION_ID_8192CE			0x1
121#define HAL_MEMORY_MAPPED_IO_RANGE_8192CE	0x4000
122#define HAL_HW_PCI_REVISION_ID_8192DE			0x0
123#define HAL_MEMORY_MAPPED_IO_RANGE_8192DE	0x4000
124
125#define HAL_HW_PCI_8180_DEVICE_ID			0x8180
126#define HAL_HW_PCI_8185_DEVICE_ID			0x8185
127#define HAL_HW_PCI_8188_DEVICE_ID			0x8188
128#define HAL_HW_PCI_8198_DEVICE_ID			0x8198
129#define HAL_HW_PCI_8190_DEVICE_ID			0x8190
130#define HAL_HW_PCI_8192_DEVICE_ID			0x8192
131#define HAL_HW_PCI_8192SE_DEVICE_ID			0x8192
132#define HAL_HW_PCI_8174_DEVICE_ID			0x8174
133#define HAL_HW_PCI_8173_DEVICE_ID			0x8173
134#define HAL_HW_PCI_8172_DEVICE_ID			0x8172
135#define HAL_HW_PCI_8171_DEVICE_ID			0x8171
136#define HAL_HW_PCI_0045_DEVICE_ID			0x0045
137#define HAL_HW_PCI_0046_DEVICE_ID			0x0046
138#define HAL_HW_PCI_0044_DEVICE_ID			0x0044
139#define HAL_HW_PCI_0047_DEVICE_ID			0x0047
140#define HAL_HW_PCI_700F_DEVICE_ID			0x700F
141#define HAL_HW_PCI_701F_DEVICE_ID			0x701F
142#define HAL_HW_PCI_DLINK_DEVICE_ID			0x3304
143#define HAL_HW_PCI_8192CET_DEVICE_ID			0x8191
144#define HAL_HW_PCI_8192CE_DEVICE_ID			0x8178
145#define HAL_HW_PCI_8191CE_DEVICE_ID			0x8177
146#define HAL_HW_PCI_8188CE_DEVICE_ID			0x8176
147#define HAL_HW_PCI_8192CU_DEVICE_ID			0x8191
148#define HAL_HW_PCI_8192DE_DEVICE_ID			0x092D
149#define HAL_HW_PCI_8192DU_DEVICE_ID			0x092D
150
151#define RTL819X_DEFAULT_RF_TYPE		RF_1T2R
152
153#define RTLLIB_WATCH_DOG_TIME		2000
154
155#define MAX_DEV_ADDR_SIZE		8  /*support till 64 bit bus width OS*/
156#define MAX_FIRMWARE_INFORMATION_SIZE   32
157#define MAX_802_11_HEADER_LENGTH	(40 + MAX_FIRMWARE_INFORMATION_SIZE)
158#define ENCRYPTION_MAX_OVERHEAD		128
159#define MAX_FRAGMENT_COUNT		8
160#define MAX_TRANSMIT_BUFFER_SIZE	\
161	(1600 + (MAX_802_11_HEADER_LENGTH + ENCRYPTION_MAX_OVERHEAD) *	\
162	 MAX_FRAGMENT_COUNT)
163
164#define scrclng				4
165
166#define DEFAULT_FRAG_THRESHOLD	2342U
167#define MIN_FRAG_THRESHOLD	256U
168#define DEFAULT_BEACONINTERVAL	0x64U
169
170#define DEFAULT_SSID		""
171#define DEFAULT_RETRY_RTS	7
172#define DEFAULT_RETRY_DATA	7
173#define PRISM_HDR_SIZE		64
174
175#define	PHY_RSSI_SLID_WIN_MAX			100
176
177#define RTL_IOCTL_WPA_SUPPLICANT		(SIOCIWFIRSTPRIV + 30)
178
179#define TxBBGainTableLength			37
180#define CCKTxBBGainTableLength			23
181
182#define CHANNEL_PLAN_LEN			10
183#define sCrcLng					4
184
185#define NIC_SEND_HANG_THRESHOLD_NORMAL		4
186#define NIC_SEND_HANG_THRESHOLD_POWERSAVE	8
187
188#define MAX_TX_QUEUE				9
189
190#define MAX_RX_QUEUE				1
191
192#define MAX_RX_COUNT				64
193#define MAX_TX_QUEUE_COUNT			9
194
195enum RTL819x_PHY_PARAM {
196	RTL819X_PHY_MACPHY_REG			= 0,
197	RTL819X_PHY_MACPHY_REG_PG		= 1,
198	RTL8188C_PHY_MACREG			= 2,
199	RTL8192C_PHY_MACREG			= 3,
200	RTL819X_PHY_REG				= 4,
201	RTL819X_PHY_REG_1T2R			= 5,
202	RTL819X_PHY_REG_to1T1R			= 6,
203	RTL819X_PHY_REG_to1T2R			= 7,
204	RTL819X_PHY_REG_to2T2R			= 8,
205	RTL819X_PHY_REG_PG			= 9,
206	RTL819X_AGC_TAB				= 10,
207	RTL819X_PHY_RADIO_A			= 11,
208	RTL819X_PHY_RADIO_A_1T			= 12,
209	RTL819X_PHY_RADIO_A_2T			= 13,
210	RTL819X_PHY_RADIO_B			= 14,
211	RTL819X_PHY_RADIO_B_GM			= 15,
212	RTL819X_PHY_RADIO_C			= 16,
213	RTL819X_PHY_RADIO_D			= 17,
214	RTL819X_EEPROM_MAP			= 18,
215	RTL819X_EFUSE_MAP			= 19,
216};
217
218enum nic_t {
219	NIC_UNKNOWN     = 0,
220	NIC_8192E       = 1,
221	NIC_8190P       = 2,
222	NIC_8192SE      = 4,
223	NIC_8192CE	= 5,
224	NIC_8192CU	= 6,
225	NIC_8192DE	= 7,
226	NIC_8192DU	= 8,
227};
228
229enum rt_eeprom_type {
230	EEPROM_93C46,
231	EEPROM_93C56,
232	EEPROM_BOOT_EFUSE,
233};
234
235enum dcmg_txcmd_op {
236	TXCMD_TXRA_HISTORY_CTRL		= 0xFF900000,
237	TXCMD_RESET_TX_PKT_BUFF		= 0xFF900001,
238	TXCMD_RESET_RX_PKT_BUFF		= 0xFF900002,
239	TXCMD_SET_TX_DURATION		= 0xFF900003,
240	TXCMD_SET_RX_RSSI		= 0xFF900004,
241	TXCMD_SET_TX_PWR_TRACKING	= 0xFF900005,
242	TXCMD_XXXX_CTRL,
243};
244
245enum rt_rf_type_819xu {
246	RF_TYPE_MIN = 0,
247	RF_8225,
248	RF_8256,
249	RF_8258,
250	RF_6052 = 4,
251	RF_PSEUDO_11N = 5,
252};
253
254enum rf_step {
255	RF_STEP_INIT = 0,
256	RF_STEP_NORMAL,
257	RF_STEP_MAX
258};
259
260enum rt_status {
261	RT_STATUS_SUCCESS,
262	RT_STATUS_FAILURE,
263	RT_STATUS_PENDING,
264	RT_STATUS_RESOURCE
265};
266
267enum rt_customer_id {
268	RT_CID_DEFAULT	  = 0,
269	RT_CID_8187_ALPHA0      = 1,
270	RT_CID_8187_SERCOMM_PS  = 2,
271	RT_CID_8187_HW_LED      = 3,
272	RT_CID_8187_NETGEAR     = 4,
273	RT_CID_WHQL	     = 5,
274	RT_CID_819x_CAMEO       = 6,
275	RT_CID_819x_RUNTOP      = 7,
276	RT_CID_819x_Senao       = 8,
277	RT_CID_TOSHIBA	  = 9,
278	RT_CID_819x_Netcore     = 10,
279	RT_CID_Nettronix	= 11,
280	RT_CID_DLINK	    = 12,
281	RT_CID_PRONET	   = 13,
282	RT_CID_COREGA	   = 14,
283	RT_CID_819x_ALPHA       = 15,
284	RT_CID_819x_Sitecom     = 16,
285	RT_CID_CCX	      = 17,
286	RT_CID_819x_Lenovo      = 18,
287	RT_CID_819x_QMI	 = 19,
288	RT_CID_819x_Edimax_Belkin = 20,
289	RT_CID_819x_Sercomm_Belkin = 21,
290	RT_CID_819x_CAMEO1 = 22,
291	RT_CID_819x_MSI = 23,
292	RT_CID_819x_Acer = 24,
293	RT_CID_819x_HP	= 27,
294	RT_CID_819x_CLEVO = 28,
295	RT_CID_819x_Arcadyan_Belkin = 29,
296	RT_CID_819x_SAMSUNG = 30,
297	RT_CID_819x_WNC_COREGA = 31,
298};
299
300enum reset_type {
301	RESET_TYPE_NORESET = 0x00,
302	RESET_TYPE_NORMAL = 0x01,
303	RESET_TYPE_SILENT = 0x02
304};
305
306enum ic_inferiority_8192s {
307	IC_INFERIORITY_A	    = 0,
308	IC_INFERIORITY_B	    = 1,
309};
310
311enum pci_bridge_vendor {
312	PCI_BRIDGE_VENDOR_INTEL = 0x0,
313	PCI_BRIDGE_VENDOR_ATI,
314	PCI_BRIDGE_VENDOR_AMD,
315	PCI_BRIDGE_VENDOR_SIS ,
316	PCI_BRIDGE_VENDOR_UNKNOWN,
317	PCI_BRIDGE_VENDOR_MAX ,
318};
319
320struct buffer {
321	struct buffer *next;
322	u32 *buf;
323	dma_addr_t dma;
324
325};
326
327struct rtl_reg_debug {
328	unsigned int  cmd;
329	struct {
330		unsigned char type;
331		unsigned char addr;
332		unsigned char page;
333		unsigned char length;
334	} head;
335	unsigned char buf[0xff];
336};
337
338struct rt_tx_rahis {
339	u32	     cck[4];
340	u32	     ofdm[8];
341	u32	     ht_mcs[4][16];
342};
343
344struct rt_smooth_data_4rf {
345	char	elements[4][100];
346	u32	index;
347	u32	TotalNum;
348	u32	TotalVal[4];
349};
350
351struct rt_stats {
352	unsigned long txrdu;
353	unsigned long rxrdu;
354	unsigned long rxok;
355	unsigned long rxframgment;
356	unsigned long rxcmdpkt[8];
357	unsigned long rxurberr;
358	unsigned long rxstaterr;
359	unsigned long rxdatacrcerr;
360	unsigned long rxmgmtcrcerr;
361	unsigned long rxcrcerrmin;
362	unsigned long rxcrcerrmid;
363	unsigned long rxcrcerrmax;
364	unsigned long received_rate_histogram[4][32];
365	unsigned long received_preamble_GI[2][32];
366	unsigned long	rx_AMPDUsize_histogram[5];
367	unsigned long rx_AMPDUnum_histogram[5];
368	unsigned long numpacket_matchbssid;
369	unsigned long numpacket_toself;
370	unsigned long num_process_phyinfo;
371	unsigned long numqry_phystatus;
372	unsigned long numqry_phystatusCCK;
373	unsigned long numqry_phystatusHT;
374	unsigned long received_bwtype[5];
375	unsigned long txnperr;
376	unsigned long txnpdrop;
377	unsigned long txresumed;
378	unsigned long rxoverflow;
379	unsigned long rxint;
380	unsigned long txnpokint;
381	unsigned long ints;
382	unsigned long shints;
383	unsigned long txoverflow;
384	unsigned long txlpokint;
385	unsigned long txlpdrop;
386	unsigned long txlperr;
387	unsigned long txbeokint;
388	unsigned long txbedrop;
389	unsigned long txbeerr;
390	unsigned long txbkokint;
391	unsigned long txbkdrop;
392	unsigned long txbkerr;
393	unsigned long txviokint;
394	unsigned long txvidrop;
395	unsigned long txvierr;
396	unsigned long txvookint;
397	unsigned long txvodrop;
398	unsigned long txvoerr;
399	unsigned long txbeaconokint;
400	unsigned long txbeacondrop;
401	unsigned long txbeaconerr;
402	unsigned long txmanageokint;
403	unsigned long txmanagedrop;
404	unsigned long txmanageerr;
405	unsigned long txcmdpktokint;
406	unsigned long txdatapkt;
407	unsigned long txfeedback;
408	unsigned long txfeedbackok;
409	unsigned long txoktotal;
410	unsigned long txokbytestotal;
411	unsigned long txokinperiod;
412	unsigned long txmulticast;
413	unsigned long txbytesmulticast;
414	unsigned long txbroadcast;
415	unsigned long txbytesbroadcast;
416	unsigned long txunicast;
417	unsigned long txbytesunicast;
418	unsigned long rxbytesunicast;
419	unsigned long txfeedbackfail;
420	unsigned long txerrtotal;
421	unsigned long txerrbytestotal;
422	unsigned long txerrmulticast;
423	unsigned long txerrbroadcast;
424	unsigned long txerrunicast;
425	unsigned long txretrycount;
426	unsigned long txfeedbackretry;
427	u8	last_packet_rate;
428	unsigned long slide_signal_strength[100];
429	unsigned long slide_evm[100];
430	unsigned long	slide_rssi_total;
431	unsigned long slide_evm_total;
432	long signal_strength;
433	long signal_quality;
434	long last_signal_strength_inpercent;
435	long	recv_signal_power;
436	u8 rx_rssi_percentage[4];
437	u8 rx_evm_percentage[2];
438	long rxSNRdB[4];
439	struct rt_tx_rahis txrate;
440	u32 Slide_Beacon_pwdb[100];
441	u32 Slide_Beacon_Total;
442	struct rt_smooth_data_4rf cck_adc_pwdb;
443	u32	CurrentShowTxate;
444};
445
446struct channel_access_setting {
447	u16 SIFS_Timer;
448	u16 DIFS_Timer;
449	u16 SlotTimeTimer;
450	u16 EIFS_Timer;
451	u16 CWminIndex;
452	u16 CWmaxIndex;
453};
454
455enum two_port_status {
456	TWO_PORT_STATUS__DEFAULT_ONLY,
457	TWO_PORT_STATUS__EXTENSION_ONLY,
458	TWO_PORT_STATUS__EXTENSION_FOLLOW_DEFAULT,
459	TWO_PORT_STATUS__DEFAULT_G_EXTENSION_N20,
460	TWO_PORT_STATUS__ADHOC,
461	TWO_PORT_STATUS__WITHOUT_ANY_ASSOCIATE
462};
463
464struct txbbgain_struct {
465	long	txbb_iq_amplifygain;
466	u32	txbbgain_value;
467};
468
469struct ccktxbbgain {
470	u8	ccktxbb_valuearray[8];
471};
472
473struct init_gain {
474	u8	xaagccore1;
475	u8	xbagccore1;
476	u8	xcagccore1;
477	u8	xdagccore1;
478	u8	cca;
479
480};
481
482struct tx_ring {
483	u32 *desc;
484	u8 nStuckCount;
485	struct tx_ring *next;
486} __packed;
487
488struct rtl8192_tx_ring {
489	struct tx_desc *desc;
490	dma_addr_t dma;
491	unsigned int idx;
492	unsigned int entries;
493	struct sk_buff_head queue;
494};
495
496
497
498struct rtl819x_ops {
499	enum nic_t nic_type;
500	void (*get_eeprom_size)(struct net_device *dev);
501	void (*init_adapter_variable)(struct net_device *dev);
502	void (*init_before_adapter_start)(struct net_device *dev);
503	bool (*initialize_adapter)(struct net_device *dev);
504	void (*link_change)(struct net_device *dev);
505	void (*tx_fill_descriptor)(struct net_device *dev,
506				   struct tx_desc *tx_desc,
507				   struct cb_desc *cb_desc,
508				   struct sk_buff *skb);
509	void (*tx_fill_cmd_descriptor)(struct net_device *dev,
510				       struct tx_desc_cmd *entry,
511				       struct cb_desc *cb_desc,
512				       struct sk_buff *skb);
513	bool (*rx_query_status_descriptor)(struct net_device *dev,
514					   struct rtllib_rx_stats *stats,
515					   struct rx_desc *pdesc,
516					   struct sk_buff *skb);
517	bool (*rx_command_packet_handler)(struct net_device *dev,
518					  struct sk_buff *skb,
519					  struct rx_desc *pdesc);
520	void (*stop_adapter)(struct net_device *dev, bool reset);
521	void (*update_ratr_table)(struct net_device *dev);
522	void (*irq_enable)(struct net_device *dev);
523	void (*irq_disable)(struct net_device *dev);
524	void (*irq_clear)(struct net_device *dev);
525	void (*rx_enable)(struct net_device *dev);
526	void (*tx_enable)(struct net_device *dev);
527	void (*interrupt_recognized)(struct net_device *dev,
528				     u32 *p_inta, u32 *p_intb);
529	bool (*TxCheckStuckHandler)(struct net_device *dev);
530	bool (*RxCheckStuckHandler)(struct net_device *dev);
531};
532
533struct r8192_priv {
534	struct pci_dev *pdev;
535	struct pci_dev *bridge_pdev;
536
537	bool		bfirst_init;
538	bool		bfirst_after_down;
539	bool		initialized_at_probe;
540	bool		being_init_adapter;
541	bool		bDriverIsGoingToUnload;
542
543	int		irq;
544	short	irq_enabled;
545
546	short	up;
547	short	up_first_time;
548	struct delayed_work		update_beacon_wq;
549	struct delayed_work		watch_dog_wq;
550	struct delayed_work		txpower_tracking_wq;
551	struct delayed_work		rfpath_check_wq;
552	struct delayed_work		gpio_change_rf_wq;
553	struct delayed_work		initialgain_operate_wq;
554	struct delayed_work		check_hw_scan_wq;
555	struct delayed_work		hw_scan_simu_wq;
556	struct delayed_work		start_hw_scan_wq;
557
558	struct workqueue_struct		*priv_wq;
559
560	struct channel_access_setting ChannelAccessSetting;
561
562	struct mp_adapter NdisAdapter;
563
564	struct rtl819x_ops			*ops;
565	struct rtllib_device			*rtllib;
566
567	struct work_struct				reset_wq;
568
569	struct log_int_8190 InterruptLog;
570
571	enum rt_customer_id CustomerID;
572
573
574	enum rt_rf_type_819xu rf_chip;
575	enum ic_inferiority_8192s IC_Class;
576	enum ht_channel_width CurrentChannelBW;
577	struct bb_reg_definition PHYRegDef[4];
578	struct rate_adaptive rate_adaptive;
579
580	struct ccktxbbgain cck_txbbgain_table[CCKTxBBGainTableLength];
581	struct ccktxbbgain cck_txbbgain_ch14_table[CCKTxBBGainTableLength];
582
583	struct txbbgain_struct txbbgain_table[TxBBGainTableLength];
584
585	enum acm_method AcmMethod;
586
587	struct rt_firmware			*pFirmware;
588	enum rtl819x_loopback LoopbackMode;
589	enum firmware_source firmware_source;
590
591	struct timer_list			watch_dog_timer;
592	struct timer_list			fsync_timer;
593	struct timer_list			gpio_polling_timer;
594
595	spinlock_t				fw_scan_lock;
596	spinlock_t				irq_lock;
597	spinlock_t				irq_th_lock;
598	spinlock_t				tx_lock;
599	spinlock_t				rf_ps_lock;
600	spinlock_t				rw_lock;
601	spinlock_t				rt_h2c_lock;
602	spinlock_t				rf_lock;
603	spinlock_t				ps_lock;
604
605	struct sk_buff_head		rx_queue;
606	struct sk_buff_head		skb_queue;
607
608	struct tasklet_struct		irq_rx_tasklet;
609	struct tasklet_struct		irq_tx_tasklet;
610	struct tasklet_struct		irq_prepare_beacon_tasklet;
611
612	struct semaphore			wx_sem;
613	struct semaphore			rf_sem;
614	struct mutex				mutex;
615
616	struct rt_stats stats;
617	struct iw_statistics			wstats;
618	struct proc_dir_entry		*dir_dev;
619
620	short (*rf_set_sens)(struct net_device *dev, short sens);
621	u8 (*rf_set_chan)(struct net_device *dev, u8 ch);
622	void (*rf_close)(struct net_device *dev);
623	void (*rf_init)(struct net_device *dev);
624
625	struct rx_desc *rx_ring[MAX_RX_QUEUE];
626	struct sk_buff	*rx_buf[MAX_RX_QUEUE][MAX_RX_COUNT];
627	dma_addr_t	rx_ring_dma[MAX_RX_QUEUE];
628	unsigned int	rx_idx[MAX_RX_QUEUE];
629	int		rxringcount;
630	u16		rxbuffersize;
631
632	u64		LastRxDescTSF;
633
634	u16		EarlyRxThreshold;
635	u32		ReceiveConfig;
636	u8		AcmControl;
637	u8		RFProgType;
638	u8		retry_data;
639	u8		retry_rts;
640	u16		rts;
641
642	struct rtl8192_tx_ring tx_ring[MAX_TX_QUEUE_COUNT];
643	int		 txringcount;
644	int		txbuffsize;
645	int		txfwbuffersize;
646	atomic_t	tx_pending[0x10];
647
648	u16		ShortRetryLimit;
649	u16		LongRetryLimit;
650	u32		TransmitConfig;
651	u8		RegCWinMin;
652	u8		keepAliveLevel;
653
654	bool		sw_radio_on;
655	bool		bHwRadioOff;
656	bool		pwrdown;
657	bool		blinked_ingpio;
658	u8		polling_timer_on;
659
660	/**********************************************************/
661
662	enum card_type {
663		PCI, MINIPCI,
664		CARDBUS, USB
665	} card_type;
666
667	struct work_struct qos_activate;
668
669	u8 bIbssCoordinator;
670
671	short	promisc;
672	short	crcmon;
673
674	int txbeaconcount;
675
676	short	chan;
677	short	sens;
678	short	max_sens;
679	u32 rx_prevlen;
680
681	u8 ScanDelay;
682	bool ps_force;
683
684	u32 irq_mask[2];
685
686	u8 Rf_Mode;
687	enum nic_t card_8192;
688	u8 card_8192_version;
689
690	short	enable_gpio0;
691
692	u8 rf_type;
693	u8 IC_Cut;
694	char nick[IW_ESSID_MAX_SIZE + 1];
695
696	u8 RegBcnCtrlVal;
697	bool bHwAntDiv;
698
699	bool bTKIPinNmodeFromReg;
700	bool bWEPinNmodeFromReg;
701
702	bool bLedOpenDrain;
703
704	u8 check_roaming_cnt;
705
706	bool bIgnoreSilentReset;
707	u32 SilentResetRxSoltNum;
708	u32 SilentResetRxSlotIndex;
709	u32 SilentResetRxStuckEvent[MAX_SILENT_RESET_RX_SLOT_NUM];
710
711	void *scan_cmd;
712	u8 hwscan_bw_40;
713
714	u16 nrxAMPDU_size;
715	u8 nrxAMPDU_aggr_num;
716
717	u32 last_rxdesc_tsf_high;
718	u32 last_rxdesc_tsf_low;
719
720	u16 basic_rate;
721	u8 short_preamble;
722	u8 dot11CurrentPreambleMode;
723	u8 slot_time;
724	u16 SifsTime;
725
726	u8 RegWirelessMode;
727
728	u8 firmware_version;
729	u16 FirmwareSubVersion;
730	u16 rf_pathmap;
731	bool AutoloadFailFlag;
732
733	u8 RegPciASPM;
734	u8 RegAMDPciASPM;
735	u8 RegHwSwRfOffD3;
736	u8 RegSupportPciASPM;
737	bool bSupportASPM;
738
739	u32 RfRegChnlVal[2];
740
741	u8 ShowRateMode;
742	u8 RATRTableBitmap;
743
744	u8 EfuseMap[2][HWSET_MAX_SIZE_92S];
745	u16 EfuseUsedBytes;
746	u8 EfuseUsedPercentage;
747
748	short	epromtype;
749	u16 eeprom_vid;
750	u16 eeprom_did;
751	u16 eeprom_svid;
752	u16 eeprom_smid;
753	u8 eeprom_CustomerID;
754	u16 eeprom_ChannelPlan;
755	u8 eeprom_version;
756
757	u8 EEPROMRegulatory;
758	u8 EEPROMPwrGroup[2][3];
759	u8 EEPROMOptional;
760
761	u8 EEPROMTxPowerLevelCCK[14];
762	u8 EEPROMTxPowerLevelOFDM24G[14];
763	u8 EEPROMTxPowerLevelOFDM5G[24];
764	u8 EEPROMRfACCKChnl1TxPwLevel[3];
765	u8 EEPROMRfAOfdmChnlTxPwLevel[3];
766	u8 EEPROMRfCCCKChnl1TxPwLevel[3];
767	u8 EEPROMRfCOfdmChnlTxPwLevel[3];
768	u16 EEPROMTxPowerDiff;
769	u16 EEPROMAntPwDiff;
770	u8 EEPROMThermalMeter;
771	u8 EEPROMPwDiff;
772	u8 EEPROMCrystalCap;
773
774	u8 EEPROMBluetoothCoexist;
775	u8 EEPROMBluetoothType;
776	u8 EEPROMBluetoothAntNum;
777	u8 EEPROMBluetoothAntIsolation;
778	u8 EEPROMBluetoothRadioShared;
779
780
781	u8 EEPROMSupportWoWLAN;
782	u8 EEPROMBoardType;
783	u8 EEPROM_Def_Ver;
784	u8 EEPROMHT2T_TxPwr[6];
785	u8 EEPROMTSSI_A;
786	u8 EEPROMTSSI_B;
787	u8 EEPROMTxPowerLevelCCK_V1[3];
788	u8 EEPROMLegacyHTTxPowerDiff;
789
790	u8 BluetoothCoexist;
791
792	u8 CrystalCap;
793	u8 ThermalMeter[2];
794
795	u16 FwCmdIOMap;
796	u32 FwCmdIOParam;
797
798	u8 SwChnlInProgress;
799	u8 SwChnlStage;
800	u8 SwChnlStep;
801	u8 SetBWModeInProgress;
802
803	u8 nCur40MhzPrimeSC;
804
805	u32 RfReg0Value[4];
806	u8 NumTotalRFPath;
807	bool brfpath_rxenable[4];
808
809	bool bTXPowerDataReadFromEEPORM;
810
811	u16 RegChannelPlan;
812	u16 ChannelPlan;
813	bool bChnlPlanFromHW;
814
815	bool RegRfOff;
816	bool isRFOff;
817	bool bInPowerSaveMode;
818	u8 bHwRfOffAction;
819
820	bool aspm_clkreq_enable;
821	u32 pci_bridge_vendor;
822	u8 RegHostPciASPMSetting;
823	u8 RegDevicePciASPMSetting;
824
825	bool RFChangeInProgress;
826	bool SetRFPowerStateInProgress;
827	bool bdisable_nic;
828
829	u8 pwrGroupCnt;
830
831	u8 ThermalValue_LCK;
832	u8 ThermalValue_IQK;
833	bool bRfPiEnable;
834
835	u32 APKoutput[2][2];
836	bool bAPKdone;
837
838	long RegE94;
839	long RegE9C;
840	long RegEB4;
841	long RegEBC;
842
843	u32 RegC04;
844	u32 Reg874;
845	u32 RegC08;
846	u32 ADDA_backup[16];
847	u32 IQK_MAC_backup[3];
848
849	bool SetFwCmdInProgress;
850	u8 CurrentFwCmdIO;
851
852	u8 rssi_level;
853
854	bool bInformFWDriverControlDM;
855	u8 PwrGroupHT20[2][14];
856	u8 PwrGroupHT40[2][14];
857
858	u8 ThermalValue;
859	long EntryMinUndecoratedSmoothedPWDB;
860	long EntryMaxUndecoratedSmoothedPWDB;
861	u8 DynamicTxHighPowerLvl;
862	u8 LastDTPLvl;
863	u32 CurrentRATR0;
864	struct false_alarm_stats FalseAlmCnt;
865
866	u8 DMFlag;
867	u8 DM_Type;
868
869	u8 CckPwEnl;
870	u16 TSSI_13dBm;
871	u32 Pwr_Track;
872	u8 CCKPresentAttentuation_20Mdefault;
873	u8 CCKPresentAttentuation_40Mdefault;
874	char CCKPresentAttentuation_difference;
875	char CCKPresentAttentuation;
876	u8 bCckHighPower;
877	long undecorated_smoothed_pwdb;
878	long undecorated_smoothed_cck_adc_pwdb[4];
879
880	u32 MCSTxPowerLevelOriginalOffset[6];
881	u32 CCKTxPowerLevelOriginalOffset;
882	u8 TxPowerLevelCCK[14];
883	u8 TxPowerLevelCCK_A[14];
884	u8 TxPowerLevelCCK_C[14];
885	u8		TxPowerLevelOFDM24G[14];
886	u8		TxPowerLevelOFDM5G[14];
887	u8		TxPowerLevelOFDM24G_A[14];
888	u8		TxPowerLevelOFDM24G_C[14];
889	u8		LegacyHTTxPowerDiff;
890	u8		TxPowerDiff;
891	s8		RF_C_TxPwDiff;
892	s8		RF_B_TxPwDiff;
893	u8		RfTxPwrLevelCck[2][14];
894	u8		RfTxPwrLevelOfdm1T[2][14];
895	u8		RfTxPwrLevelOfdm2T[2][14];
896	u8		AntennaTxPwDiff[3];
897	u8		TxPwrHt20Diff[2][14];
898	u8		TxPwrLegacyHtDiff[2][14];
899	u8		TxPwrSafetyFlag;
900	u8		HT2T_TxPwr_A[14];
901	u8		HT2T_TxPwr_B[14];
902	u8		CurrentCckTxPwrIdx;
903	u8		CurrentOfdm24GTxPwrIdx;
904
905	bool		bdynamic_txpower;
906	bool		bDynamicTxHighPower;
907	bool		bDynamicTxLowPower;
908	bool		bLastDTPFlag_High;
909	bool		bLastDTPFlag_Low;
910
911	bool		bstore_last_dtpflag;
912	bool		bstart_txctrl_bydtp;
913
914	u8		rfa_txpowertrackingindex;
915	u8		rfa_txpowertrackingindex_real;
916	u8		rfa_txpowertracking_default;
917	u8		rfc_txpowertrackingindex;
918	u8		rfc_txpowertrackingindex_real;
919	u8		rfc_txpowertracking_default;
920	bool		btxpower_tracking;
921	bool		bcck_in_ch14;
922
923	u8		TxPowerTrackControl;
924	u8		txpower_count;
925	bool		btxpower_trackingInit;
926
927	u8		OFDM_index[2];
928	u8		CCK_index;
929
930	u8		Record_CCK_20Mindex;
931	u8		Record_CCK_40Mindex;
932
933	struct init_gain initgain_backup;
934	u8		DefaultInitialGain[4];
935	bool		bis_any_nonbepkts;
936	bool		bcurrent_turbo_EDCA;
937	bool		bis_cur_rdlstate;
938
939	bool		bCCKinCH14;
940
941	u8		MidHighPwrTHR_L1;
942	u8		MidHighPwrTHR_L2;
943
944	bool		bfsync_processing;
945	u32		rate_record;
946	u32		rateCountDiffRecord;
947	u32		ContiuneDiffCount;
948	bool		bswitch_fsync;
949	u8		framesync;
950	u32		framesyncC34;
951	u8		framesyncMonitor;
952
953	bool		bDMInitialGainEnable;
954	bool		MutualAuthenticationFail;
955
956	bool		bDisableFrameBursting;
957
958	u32		reset_count;
959	bool		bpbc_pressed;
960
961	u32		txpower_checkcnt;
962	u32		txpower_tracking_callback_cnt;
963	u8		thermal_read_val[40];
964	u8		thermal_readback_index;
965	u32		ccktxpower_adjustcnt_not_ch14;
966	u32		ccktxpower_adjustcnt_ch14;
967
968	enum reset_type ResetProgress;
969	bool		bForcedSilentReset;
970	bool		bDisableNormalResetCheck;
971	u16		TxCounter;
972	u16		RxCounter;
973	int		IrpPendingCount;
974	bool		bResetInProgress;
975	bool		force_reset;
976	bool		force_lps;
977	u8		InitialGainOperateType;
978
979	bool		chan_forced;
980	bool		bSingleCarrier;
981	bool		RegBoard;
982	bool		bCckContTx;
983	bool		bOfdmContTx;
984	bool		bStartContTx;
985	u8		RegPaModel;
986	u8		btMpCckTxPower;
987	u8		btMpOfdmTxPower;
988
989	u32		MptActType;
990	u32		MptIoOffset;
991	u32		MptIoValue;
992	u32		MptRfPath;
993
994	u32		MptBandWidth;
995	u32		MptRateIndex;
996	u8		MptChannelToSw;
997	u32	MptRCR;
998
999	u8		PwrDomainProtect;
1000	u8		H2CTxCmdSeq;
1001
1002
1003};
1004
1005extern const struct ethtool_ops rtl819x_ethtool_ops;
1006
1007void rtl8192_tx_cmd(struct net_device *dev, struct sk_buff *skb);
1008short rtl8192_tx(struct net_device *dev, struct sk_buff *skb);
1009
1010u8 read_nic_io_byte(struct net_device *dev, int x);
1011u32 read_nic_io_dword(struct net_device *dev, int x);
1012u16 read_nic_io_word(struct net_device *dev, int x) ;
1013void write_nic_io_byte(struct net_device *dev, int x, u8 y);
1014void write_nic_io_word(struct net_device *dev, int x, u16 y);
1015void write_nic_io_dword(struct net_device *dev, int x, u32 y);
1016
1017u8 read_nic_byte(struct net_device *dev, int x);
1018u32 read_nic_dword(struct net_device *dev, int x);
1019u16 read_nic_word(struct net_device *dev, int x) ;
1020void write_nic_byte(struct net_device *dev, int x, u8 y);
1021void write_nic_word(struct net_device *dev, int x, u16 y);
1022void write_nic_dword(struct net_device *dev, int x, u32 y);
1023
1024void force_pci_posting(struct net_device *dev);
1025
1026void rtl8192_rx_enable(struct net_device *);
1027void rtl8192_tx_enable(struct net_device *);
1028
1029int rtl8192_hard_start_xmit(struct sk_buff *skb, struct net_device *dev);
1030void rtl8192_hard_data_xmit(struct sk_buff *skb, struct net_device *dev,
1031			    int rate);
1032void rtl8192_data_hard_stop(struct net_device *dev);
1033void rtl8192_data_hard_resume(struct net_device *dev);
1034void rtl8192_restart(void *data);
1035void rtl819x_watchdog_wqcallback(void *data);
1036void rtl8192_hw_sleep_wq(void *data);
1037void watch_dog_timer_callback(unsigned long data);
1038void rtl8192_irq_rx_tasklet(struct r8192_priv *priv);
1039void rtl8192_irq_tx_tasklet(struct r8192_priv *priv);
1040int rtl8192_down(struct net_device *dev, bool shutdownrf);
1041int rtl8192_up(struct net_device *dev);
1042void rtl8192_commit(struct net_device *dev);
1043void rtl8192_set_chan(struct net_device *dev, short ch);
1044
1045void check_rfctrl_gpio_timer(unsigned long data);
1046
1047void rtl8192_hw_wakeup_wq(void *data);
1048irqreturn_type rtl8192_interrupt(int irq, void *netdev, struct pt_regs *regs);
1049
1050short rtl8192_pci_initdescring(struct net_device *dev);
1051
1052void rtl8192_cancel_deferred_work(struct r8192_priv *priv);
1053
1054int _rtl8192_up(struct net_device *dev, bool is_silent_reset);
1055
1056short rtl8192_is_tx_queue_empty(struct net_device *dev);
1057void rtl8192_irq_disable(struct net_device *dev);
1058
1059void rtl8192_tx_timeout(struct net_device *dev);
1060void rtl8192_pci_resetdescring(struct net_device *dev);
1061void rtl8192_SetWirelessMode(struct net_device *dev, u8 wireless_mode);
1062void rtl8192_irq_enable(struct net_device *dev);
1063void rtl8192_config_rate(struct net_device *dev, u16 *rate_config);
1064void rtl8192_update_cap(struct net_device *dev, u16 cap);
1065void rtl8192_irq_disable(struct net_device *dev);
1066
1067void rtl819x_UpdateRxPktTimeStamp(struct net_device *dev,
1068				  struct rtllib_rx_stats *stats);
1069long rtl819x_translate_todbm(struct r8192_priv *priv, u8 signal_strength_index);
1070void rtl819x_update_rxsignalstatistics8190pci(struct r8192_priv *priv,
1071				      struct rtllib_rx_stats *pprevious_stats);
1072u8 rtl819x_evm_dbtopercentage(char value);
1073void rtl819x_process_cck_rxpathsel(struct r8192_priv *priv,
1074				   struct rtllib_rx_stats *pprevious_stats);
1075u8 rtl819x_query_rxpwrpercentage(char antpower);
1076void rtl8192_record_rxdesc_forlateruse(struct rtllib_rx_stats *psrc_stats,
1077				       struct rtllib_rx_stats *ptarget_stats);
1078bool NicIFEnableNIC(struct net_device *dev);
1079bool NicIFDisableNIC(struct net_device *dev);
1080
1081bool MgntActSet_RF_State(struct net_device *dev,
1082			 enum rt_rf_power_state StateToSet,
1083			 RT_RF_CHANGE_SOURCE ChangeSource,
1084			 bool	ProtectOrNot);
1085void ActUpdateChannelAccessSetting(struct net_device *dev,
1086			   enum wireless_mode WirelessMode,
1087			   struct channel_access_setting *ChnlAccessSetting);
1088
1089/* proc stuff from rtl_debug.c */
1090void rtl8192_proc_init_one(struct net_device *dev);
1091void rtl8192_proc_remove_one(struct net_device *dev);
1092void rtl8192_proc_module_init(void);
1093void rtl8192_proc_module_remove(void);
1094
1095#endif
1096