• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/drivers/net/wireless/libertas/
1/**
2  * This file contains definitions and data structures specific
3  * to Marvell 802.11 NIC. It contains the Device Information
4  * structure wlan_adapter.
5  */
6#ifndef _WLAN_DEV_H_
7#define _WLAN_DEV_H_
8
9#include <linux/netdevice.h>
10#include <linux/wireless.h>
11#include <linux/ethtool.h>
12#include <linux/debugfs.h>
13#include <net/ieee80211.h>
14
15#include "defs.h"
16#include "scan.h"
17#include "thread.h"
18
19extern struct ethtool_ops libertas_ethtool_ops;
20
21#define	MAX_BSSID_PER_CHANNEL		16
22
23#define NR_TX_QUEUE			3
24
25/* For the extended Scan */
26#define MAX_EXTENDED_SCAN_BSSID_LIST    MAX_BSSID_PER_CHANNEL * \
27						MRVDRV_MAX_CHANNEL_SIZE + 1
28
29#define	MAX_REGION_CHANNEL_NUM	2
30
31/** Chan-freq-TxPower mapping table*/
32struct chan_freq_power {
33	/** channel Number		*/
34	u16 channel;
35	/** frequency of this channel	*/
36	u32 freq;
37	/** Max allowed Tx power level	*/
38	u16 maxtxpower;
39	/** TRUE:channel unsupported;  FLASE:supported*/
40	u8 unsupported;
41};
42
43/** region-band mapping table*/
44struct region_channel {
45	/** TRUE if this entry is valid		     */
46	u8 valid;
47	/** region code for US, Japan ...	     */
48	u8 region;
49	/** band B/G/A, used for BAND_CONFIG cmd	     */
50	u8 band;
51	/** Actual No. of elements in the array below */
52	u8 nrcfp;
53	/** chan-freq-txpower mapping table*/
54	struct chan_freq_power *CFP;
55};
56
57struct wlan_802_11_security {
58	u8 WPAenabled;
59	u8 WPA2enabled;
60	u8 wep_enabled;
61	u8 auth_mode;
62};
63
64/** Current Basic Service Set State Structure */
65struct current_bss_params {
66	/** bssid */
67	u8 bssid[ETH_ALEN];
68	/** ssid */
69	u8 ssid[IW_ESSID_MAX_SIZE + 1];
70	u8 ssid_len;
71
72	/** band */
73	u8 band;
74	/** channel */
75	u8 channel;
76	/** number of rates supported */
77	int numofrates;
78	/** supported rates*/
79	u8 datarates[WLAN_SUPPORTED_RATES];
80};
81
82/** sleep_params */
83struct sleep_params {
84	u16 sp_error;
85	u16 sp_offset;
86	u16 sp_stabletime;
87	u8 sp_calcontrol;
88	u8 sp_extsleepclk;
89	u16 sp_reserved;
90};
91
92/* Mesh statistics */
93struct wlan_mesh_stats {
94	u32	fwd_bcast_cnt;		/* Fwd: Broadcast counter */
95	u32	fwd_unicast_cnt;	/* Fwd: Unicast counter */
96	u32	fwd_drop_ttl;		/* Fwd: TTL zero */
97	u32	fwd_drop_rbt;		/* Fwd: Recently Broadcasted */
98	u32	fwd_drop_noroute; 	/* Fwd: No route to Destination */
99	u32	fwd_drop_nobuf;		/* Fwd: Run out of internal buffers */
100	u32	drop_blind;		/* Rx:  Dropped by blinding table */
101	u32	tx_failed_cnt;		/* Tx:  Failed transmissions */
102};
103
104/** Private structure for the MV device */
105struct _wlan_private {
106	int open;
107	int mesh_open;
108	int infra_open;
109
110	char name[DEV_NAME_LEN];
111
112	void *card;
113	wlan_adapter *adapter;
114	struct net_device *dev;
115
116	struct net_device_stats stats;
117	struct net_device *mesh_dev ; /* Virtual device */
118
119	struct iw_statistics wstats;
120	struct wlan_mesh_stats mstats;
121	struct dentry *debugfs_dir;
122	struct dentry *debugfs_debug;
123	struct dentry *debugfs_files[6];
124
125	struct dentry *events_dir;
126	struct dentry *debugfs_events_files[6];
127
128	struct dentry *regs_dir;
129	struct dentry *debugfs_regs_files[6];
130
131	u32 mac_offset;
132	u32 bbp_offset;
133	u32 rf_offset;
134
135	/** Upload length */
136	u32 upld_len;
137	/* Upload buffer */
138	u8 upld_buf[WLAN_UPLD_SIZE];
139	/* Download sent:
140	   bit0 1/0=data_sent/data_tx_done,
141	   bit1 1/0=cmd_sent/cmd_tx_done,
142	   all other bits reserved 0 */
143	u8 dnld_sent;
144
145	const struct firmware *firmware;
146	struct device *hotplug_device;
147
148	/** thread to service interrupts */
149	struct wlan_thread mainthread;
150
151	struct delayed_work assoc_work;
152	struct workqueue_struct *assoc_thread;
153	struct work_struct sync_channel;
154
155	/** Hardware access */
156	int (*hw_register_dev) (wlan_private * priv);
157	int (*hw_unregister_dev) (wlan_private *);
158	int (*hw_prog_firmware) (wlan_private *);
159	int (*hw_host_to_card) (wlan_private * priv, u8 type, u8 * payload, u16 nb);
160	int (*hw_get_int_status) (wlan_private * priv, u8 *);
161	int (*hw_read_event_cause) (wlan_private *);
162};
163
164/** Association request
165 *
166 * Encapsulates all the options that describe a specific assocation request
167 * or configuration of the wireless card's radio, mode, and security settings.
168 */
169struct assoc_request {
170#define ASSOC_FLAG_SSID			1
171#define ASSOC_FLAG_CHANNEL		2
172#define ASSOC_FLAG_BAND			3
173#define ASSOC_FLAG_MODE			4
174#define ASSOC_FLAG_BSSID		5
175#define ASSOC_FLAG_WEP_KEYS		6
176#define ASSOC_FLAG_WEP_TX_KEYIDX	7
177#define ASSOC_FLAG_WPA_MCAST_KEY	8
178#define ASSOC_FLAG_WPA_UCAST_KEY	9
179#define ASSOC_FLAG_SECINFO		10
180#define ASSOC_FLAG_WPA_IE		11
181	unsigned long flags;
182
183	u8 ssid[IW_ESSID_MAX_SIZE + 1];
184	u8 ssid_len;
185	u8 channel;
186	u8 band;
187	u8 mode;
188	u8 bssid[ETH_ALEN];
189
190	/** WEP keys */
191	struct WLAN_802_11_KEY wep_keys[4];
192	u16 wep_tx_keyidx;
193
194	/** WPA keys */
195	struct WLAN_802_11_KEY wpa_mcast_key;
196	struct WLAN_802_11_KEY wpa_unicast_key;
197
198	struct wlan_802_11_security secinfo;
199
200	/** WPA Information Elements*/
201	u8 wpa_ie[MAX_WPA_IE_LEN];
202	u8 wpa_ie_len;
203
204	/* BSS to associate with for infrastructure of Ad-Hoc join */
205	struct bss_descriptor bss;
206};
207
208/** Wlan adapter data structure*/
209struct _wlan_adapter {
210	/** STATUS variables */
211	u8 fwreleasenumber[4];
212	u32 fwcapinfo;
213	/* protected with big lock */
214
215	struct mutex lock;
216
217	u8 tmptxbuf[WLAN_UPLD_SIZE];
218	/* protected by hard_start_xmit serialization */
219
220	/** command-related variables */
221	u16 seqnum;
222	/* protected by big lock */
223
224	struct cmd_ctrl_node *cmd_array;
225	/** Current command */
226	struct cmd_ctrl_node *cur_cmd;
227	int cur_cmd_retcode;
228	/** command Queues */
229	/** Free command buffers */
230	struct list_head cmdfreeq;
231	/** Pending command buffers */
232	struct list_head cmdpendingq;
233
234	wait_queue_head_t cmd_pending;
235	u8 nr_cmd_pending;
236	/* command related variables protected by adapter->driver_lock */
237
238	/** Async and Sync Event variables */
239	u32 intcounter;
240	u32 eventcause;
241	u8 nodename[16];	/* nickname */
242
243	/** spin locks */
244	spinlock_t driver_lock;
245
246	/** Timers */
247	struct timer_list command_timer;
248
249	/* TX queue used in PS mode */
250	spinlock_t txqueue_lock;
251	struct sk_buff *tx_queue_ps[NR_TX_QUEUE];
252	unsigned int tx_queue_idx;
253
254	u8 hisregcpy;
255
256	/** current ssid/bssid related parameters*/
257	struct current_bss_params curbssparams;
258
259	/* IW_MODE_* */
260	u8 mode;
261
262	u8 prev_ssid[IW_ESSID_MAX_SIZE + 1];
263	u8 prev_ssid_len;
264	u8 prev_bssid[ETH_ALEN];
265
266	/* Scan results list */
267	struct list_head network_list;
268	struct list_head network_free_list;
269	struct bss_descriptor *networks;
270
271	u8 scantype;
272	u32 scanmode;
273
274	u16 beaconperiod;
275	u8 adhoccreate;
276
277	/** capability Info used in Association, start, join */
278	struct ieeetypes_capinfo capinfo;
279
280	/** MAC address information */
281	u8 current_addr[ETH_ALEN];
282	u8 multicastlist[MRVDRV_MAX_MULTICAST_LIST_SIZE][ETH_ALEN];
283	u32 nr_of_multicastmacaddr;
284
285	/** 802.11 statistics */
286//	struct cmd_DS_802_11_GET_STAT wlan802_11Stat;
287
288	u16 enablehwauto;
289	u16 ratebitmap;
290	/** control G rates */
291	u8 adhoc_grate_enabled;
292
293	u32 txantenna;
294	u32 rxantenna;
295
296	u32 fragthsd;
297	u32 rtsthsd;
298
299	u32 datarate;
300	u8 is_datarate_auto;
301
302	u16 listeninterval;
303	u16 prescan;
304	u8 txretrycount;
305
306	/** Tx-related variables (for single packet tx) */
307	struct sk_buff *currenttxskb;
308	u16 TxLockFlag;
309
310	/** NIC Operation characteristics */
311	u16 currentpacketfilter;
312	u32 connect_status;
313	u16 regioncode;
314	u16 regiontableindex;
315	u16 txpowerlevel;
316
317	/** POWER MANAGEMENT AND PnP SUPPORT */
318	u8 surpriseremoved;
319	u16 atimwindow;
320
321	u16 psmode;		/* Wlan802_11PowermodeCAM=disable
322				   Wlan802_11PowermodeMAX_PSP=enable */
323	u16 multipledtim;
324	u32 psstate;
325	u8 needtowakeup;
326
327	struct PS_CMD_ConfirmSleep libertas_ps_confirm_sleep;
328	u16 locallisteninterval;
329	u16 nullpktinterval;
330
331	struct assoc_request * pending_assoc_req;
332	struct assoc_request * in_progress_assoc_req;
333
334	/** Encryption parameter */
335	struct wlan_802_11_security secinfo;
336
337	/** WEP keys */
338	struct WLAN_802_11_KEY wep_keys[4];
339	u16 wep_tx_keyidx;
340
341	/** WPA keys */
342	struct WLAN_802_11_KEY wpa_mcast_key;
343	struct WLAN_802_11_KEY wpa_unicast_key;
344
345	/** WPA Information Elements*/
346	u8 wpa_ie[MAX_WPA_IE_LEN];
347	u8 wpa_ie_len;
348
349	u16 rxantennamode;
350	u16 txantennamode;
351
352	/** Requested Signal Strength*/
353	u16 bcn_avg_factor;
354	u16 data_avg_factor;
355	u16 SNR[MAX_TYPE_B][MAX_TYPE_AVG];
356	u16 NF[MAX_TYPE_B][MAX_TYPE_AVG];
357	u8 RSSI[MAX_TYPE_B][MAX_TYPE_AVG];
358	u8 rawSNR[DEFAULT_DATA_AVG_FACTOR];
359	u8 rawNF[DEFAULT_DATA_AVG_FACTOR];
360	u16 nextSNRNF;
361	u16 numSNRNF;
362	u16 rxpd_rate;
363
364	u8 radioon;
365	u32 preamble;
366
367	/** Multi bands Parameter*/
368	u8 libertas_supported_rates[G_SUPPORTED_RATES];
369
370	/** Blue Tooth Co-existence Arbitration */
371
372	/** sleep_params */
373	struct sleep_params sp;
374
375	/** RF calibration data */
376
377#define	MAX_REGION_CHANNEL_NUM	2
378	/** region channel data */
379	struct region_channel region_channel[MAX_REGION_CHANNEL_NUM];
380
381	struct region_channel universal_channel[MAX_REGION_CHANNEL_NUM];
382
383	/** 11D and Domain Regulatory Data */
384	struct wlan_802_11d_domain_reg domainreg;
385	struct parsed_region_chan_11d parsed_region_chan;
386
387	/** FSM variable for 11d support */
388	u32 enable11d;
389
390	/**	MISCELLANEOUS */
391	u8 *prdeeprom;
392	struct wlan_offset_value offsetvalue;
393
394	struct cmd_ds_802_11_get_log logmsg;
395	u16 scanprobes;
396
397	u32 pkttxctrl;
398
399	u16 txrate;
400	u32 linkmode;
401	u32 radiomode;
402	u32 debugmode;
403	u8 fw_ready;
404
405	u8 last_scanned_channel;
406};
407
408#endif				/* _WLAN_DEV_H_ */
409