1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24#ifndef IEEE80211_H
25#define IEEE80211_H
26#include <linux/if_ether.h>
27#include <linux/kernel.h>
28#include <linux/module.h>
29#include <linux/jiffies.h>
30#include <linux/timer.h>
31#include <linux/sched.h>
32#include <linux/semaphore.h>
33#include <linux/interrupt.h>
34
35#include <linux/delay.h>
36#include <linux/wireless.h>
37
38#include "rtl819x_HT.h"
39#include "rtl819x_BA.h"
40#include "rtl819x_TS.h"
41
42
43#ifndef IW_MODE_MONITOR
44#define IW_MODE_MONITOR 6
45#endif
46
47#ifndef IWEVCUSTOM
48#define IWEVCUSTOM 0x8c02
49#endif
50
51
52#ifndef container_of
53
54
55
56
57
58
59
60
61#define container_of(ptr, type, member) ({ \
62 const typeof( ((type *)0)->member ) *__mptr = (ptr); \
63 (type *)( (char *)__mptr - offsetof(type,member) );})
64#endif
65
66#define KEY_TYPE_NA 0x0
67#define KEY_TYPE_WEP40 0x1
68#define KEY_TYPE_TKIP 0x2
69#define KEY_TYPE_CCMP 0x4
70#define KEY_TYPE_WEP104 0x5
71
72
73#define MAX_QUEUE_SIZE 0x10
74
75
76
77
78#define BK_QUEUE 0
79#define BE_QUEUE 1
80#define VI_QUEUE 2
81#define VO_QUEUE 3
82#define HCCA_QUEUE 4
83#define TXCMD_QUEUE 5
84#define MGNT_QUEUE 6
85#define HIGH_QUEUE 7
86#define BEACON_QUEUE 8
87
88#define LOW_QUEUE BE_QUEUE
89#define NORMAL_QUEUE MGNT_QUEUE
90
91
92#define SWRF_TIMEOUT 50
93
94
95#define IE_CISCO_FLAG_POSITION 0x08
96#define SUPPORT_CKIP_MIC 0x08
97#define SUPPORT_CKIP_PK 0x10
98
99
100typedef struct cb_desc {
101
102 u8 bLastIniPkt:1;
103 u8 bCmdOrInit:1;
104 u8 bFirstSeg:1;
105 u8 bLastSeg:1;
106 u8 bEncrypt:1;
107 u8 bTxDisableRateFallBack:1;
108 u8 bTxUseDriverAssingedRate:1;
109 u8 bHwSec:1;
110
111 u8 reserved1;
112
113
114 u8 bCTSEnable:1;
115 u8 bRTSEnable:1;
116 u8 bUseShortGI:1;
117 u8 bUseShortPreamble:1;
118 u8 bTxEnableFwCalcDur:1;
119 u8 bAMPDUEnable:1;
120 u8 bRTSSTBC:1;
121 u8 RTSSC:1;
122
123 u8 bRTSBW:1;
124 u8 bPacketBW:1;
125 u8 bRTSUseShortPreamble:1;
126 u8 bRTSUseShortGI:1;
127 u8 bMulticast:1;
128 u8 bBroadcast:1;
129
130 u8 drv_agg_enable:1;
131 u8 reserved2:1;
132
133
134 u8 rata_index;
135 u8 queue_index;
136
137
138 u16 txbuf_size;
139
140 u8 RATRIndex;
141 u8 reserved6;
142 u8 reserved7;
143 u8 reserved8;
144
145
146 u8 data_rate;
147 u8 rts_rate;
148 u8 ampdu_factor;
149 u8 ampdu_density;
150
151
152
153 u8 DrvAggrNum;
154 u16 pkt_size;
155 u8 reserved12;
156}cb_desc, *pcb_desc;
157
158
159#define MGN_1M 0x02
160#define MGN_2M 0x04
161#define MGN_5_5M 0x0b
162#define MGN_11M 0x16
163
164#define MGN_6M 0x0c
165#define MGN_9M 0x12
166#define MGN_12M 0x18
167#define MGN_18M 0x24
168#define MGN_24M 0x30
169#define MGN_36M 0x48
170#define MGN_48M 0x60
171#define MGN_54M 0x6c
172
173#define MGN_MCS0 0x80
174#define MGN_MCS1 0x81
175#define MGN_MCS2 0x82
176#define MGN_MCS3 0x83
177#define MGN_MCS4 0x84
178#define MGN_MCS5 0x85
179#define MGN_MCS6 0x86
180#define MGN_MCS7 0x87
181#define MGN_MCS8 0x88
182#define MGN_MCS9 0x89
183#define MGN_MCS10 0x8a
184#define MGN_MCS11 0x8b
185#define MGN_MCS12 0x8c
186#define MGN_MCS13 0x8d
187#define MGN_MCS14 0x8e
188#define MGN_MCS15 0x8f
189
190
191
192
193enum _ReasonCode{
194 unspec_reason = 0x1,
195 auth_not_valid = 0x2,
196 deauth_lv_ss = 0x3,
197 inactivity = 0x4,
198 ap_overload = 0x5,
199 class2_err = 0x6,
200 class3_err = 0x7,
201 disas_lv_ss = 0x8,
202 asoc_not_auth = 0x9,
203
204
205 mic_failure = 0xe,
206
207
208
209 invalid_IE = 0x0d,
210 four_way_tmout = 0x0f,
211 two_way_tmout = 0x10,
212 IE_dismatch = 0x11,
213 invalid_Gcipher = 0x12,
214 invalid_Pcipher = 0x13,
215 invalid_AKMP = 0x14,
216 unsup_RSNIEver = 0x15,
217 invalid_RSNIE = 0x16,
218 auth_802_1x_fail= 0x17,
219 ciper_reject = 0x18,
220
221
222 QoS_unspec = 0x20,
223 QAP_bandwidth = 0x21,
224 poor_condition = 0x22,
225 no_facility = 0x23,
226
227 req_declined = 0x25,
228 invalid_param = 0x26,
229 req_not_honored= 0x27,
230 TS_not_created = 0x2F,
231 DL_not_allowed = 0x30,
232 dest_not_exist = 0x31,
233 dest_not_QSTA = 0x32,
234};
235
236
237
238#define aSifsTime ((priv->ieee80211->current_network.mode == IEEE_A)||(priv->ieee80211->current_network.mode == IEEE_N_24G)||(priv->ieee80211->current_network.mode == IEEE_N_5G))? 16 : 10
239
240#define MGMT_QUEUE_NUM 5
241
242#define IEEE_CMD_SET_WPA_PARAM 1
243#define IEEE_CMD_SET_WPA_IE 2
244#define IEEE_CMD_SET_ENCRYPTION 3
245#define IEEE_CMD_MLME 4
246
247#define IEEE_PARAM_WPA_ENABLED 1
248#define IEEE_PARAM_TKIP_COUNTERMEASURES 2
249#define IEEE_PARAM_DROP_UNENCRYPTED 3
250#define IEEE_PARAM_PRIVACY_INVOKED 4
251#define IEEE_PARAM_AUTH_ALGS 5
252#define IEEE_PARAM_IEEE_802_1X 6
253
254
255#define IEEE_PARAM_WPAX_SELECT 7
256
257
258#define IEEE_PROTO_WPA 1
259#define IEEE_PROTO_RSN 2
260
261
262#define IEEE_WPAX_USEGROUP 0
263#define IEEE_WPAX_WEP40 1
264#define IEEE_WPAX_TKIP 2
265#define IEEE_WPAX_WRAP 3
266#define IEEE_WPAX_CCMP 4
267#define IEEE_WPAX_WEP104 5
268
269#define IEEE_KEY_MGMT_IEEE8021X 1
270#define IEEE_KEY_MGMT_PSK 2
271
272#define IEEE_MLME_STA_DEAUTH 1
273#define IEEE_MLME_STA_DISASSOC 2
274
275
276#define IEEE_CRYPT_ERR_UNKNOWN_ALG 2
277#define IEEE_CRYPT_ERR_UNKNOWN_ADDR 3
278#define IEEE_CRYPT_ERR_CRYPT_INIT_FAILED 4
279#define IEEE_CRYPT_ERR_KEY_SET_FAILED 5
280#define IEEE_CRYPT_ERR_TX_KEY_SET_FAILED 6
281#define IEEE_CRYPT_ERR_CARD_CONF_FAILED 7
282
283
284#define IEEE_CRYPT_ALG_NAME_LEN 16
285
286#define MAX_IE_LEN 0xff
287
288
289#define ieee80211_crypt_deinit_entries ieee80211_crypt_deinit_entries_rsl
290#define ieee80211_crypt_deinit_handler ieee80211_crypt_deinit_handler_rsl
291#define ieee80211_crypt_delayed_deinit ieee80211_crypt_delayed_deinit_rsl
292#define ieee80211_register_crypto_ops ieee80211_register_crypto_ops_rsl
293#define ieee80211_unregister_crypto_ops ieee80211_unregister_crypto_ops_rsl
294#define ieee80211_get_crypto_ops ieee80211_get_crypto_ops_rsl
295
296#define ieee80211_ccmp_null ieee80211_ccmp_null_rsl
297
298#define ieee80211_tkip_null ieee80211_tkip_null_rsl
299
300#define ieee80211_wep_null ieee80211_wep_null_rsl
301
302#define free_ieee80211 free_ieee80211_rsl
303#define alloc_ieee80211 alloc_ieee80211_rsl
304
305#define ieee80211_rx ieee80211_rx_rsl
306#define ieee80211_rx_mgt ieee80211_rx_mgt_rsl
307
308#define ieee80211_get_beacon ieee80211_get_beacon_rsl
309#define ieee80211_wake_queue ieee80211_wake_queue_rsl
310#define ieee80211_stop_queue ieee80211_stop_queue_rsl
311#define ieee80211_reset_queue ieee80211_reset_queue_rsl
312#define ieee80211_softmac_stop_protocol ieee80211_softmac_stop_protocol_rsl
313#define ieee80211_softmac_start_protocol ieee80211_softmac_start_protocol_rsl
314#define ieee80211_is_shortslot ieee80211_is_shortslot_rsl
315#define ieee80211_is_54g ieee80211_is_54g_rsl
316#define ieee80211_wpa_supplicant_ioctl ieee80211_wpa_supplicant_ioctl_rsl
317#define ieee80211_ps_tx_ack ieee80211_ps_tx_ack_rsl
318#define ieee80211_softmac_xmit ieee80211_softmac_xmit_rsl
319#define ieee80211_stop_send_beacons ieee80211_stop_send_beacons_rsl
320#define notify_wx_assoc_event notify_wx_assoc_event_rsl
321#define SendDisassociation SendDisassociation_rsl
322#define ieee80211_disassociate ieee80211_disassociate_rsl
323#define ieee80211_start_send_beacons ieee80211_start_send_beacons_rsl
324#define ieee80211_stop_scan ieee80211_stop_scan_rsl
325#define ieee80211_send_probe_requests ieee80211_send_probe_requests_rsl
326#define ieee80211_softmac_scan_syncro ieee80211_softmac_scan_syncro_rsl
327#define ieee80211_start_scan_syncro ieee80211_start_scan_syncro_rsl
328
329#define ieee80211_wx_get_essid ieee80211_wx_get_essid_rsl
330#define ieee80211_wx_set_essid ieee80211_wx_set_essid_rsl
331#define ieee80211_wx_set_rate ieee80211_wx_set_rate_rsl
332#define ieee80211_wx_get_rate ieee80211_wx_get_rate_rsl
333#define ieee80211_wx_set_wap ieee80211_wx_set_wap_rsl
334#define ieee80211_wx_get_wap ieee80211_wx_get_wap_rsl
335#define ieee80211_wx_set_mode ieee80211_wx_set_mode_rsl
336#define ieee80211_wx_get_mode ieee80211_wx_get_mode_rsl
337#define ieee80211_wx_set_scan ieee80211_wx_set_scan_rsl
338#define ieee80211_wx_get_freq ieee80211_wx_get_freq_rsl
339#define ieee80211_wx_set_freq ieee80211_wx_set_freq_rsl
340#define ieee80211_wx_set_rawtx ieee80211_wx_set_rawtx_rsl
341#define ieee80211_wx_get_name ieee80211_wx_get_name_rsl
342#define ieee80211_wx_set_power ieee80211_wx_set_power_rsl
343#define ieee80211_wx_get_power ieee80211_wx_get_power_rsl
344#define ieee80211_wlan_frequencies ieee80211_wlan_frequencies_rsl
345#define ieee80211_wx_set_rts ieee80211_wx_set_rts_rsl
346#define ieee80211_wx_get_rts ieee80211_wx_get_rts_rsl
347
348#define ieee80211_txb_free ieee80211_txb_free_rsl
349
350#define ieee80211_wx_set_gen_ie ieee80211_wx_set_gen_ie_rsl
351#define ieee80211_wx_get_scan ieee80211_wx_get_scan_rsl
352#define ieee80211_wx_set_encode ieee80211_wx_set_encode_rsl
353#define ieee80211_wx_get_encode ieee80211_wx_get_encode_rsl
354#if WIRELESS_EXT >= 18
355#define ieee80211_wx_set_mlme ieee80211_wx_set_mlme_rsl
356#define ieee80211_wx_set_auth ieee80211_wx_set_auth_rsl
357#define ieee80211_wx_set_encode_ext ieee80211_wx_set_encode_ext_rsl
358#define ieee80211_wx_get_encode_ext ieee80211_wx_get_encode_ext_rsl
359#endif
360
361
362typedef struct ieee_param {
363 u32 cmd;
364 u8 sta_addr[ETH_ALEN];
365 union {
366 struct {
367 u8 name;
368 u32 value;
369 } wpa_param;
370 struct {
371 u32 len;
372 u8 reserved[32];
373 u8 data[0];
374 } wpa_ie;
375 struct{
376 int command;
377 int reason_code;
378 } mlme;
379 struct {
380 u8 alg[IEEE_CRYPT_ALG_NAME_LEN];
381 u8 set_tx;
382 u32 err;
383 u8 idx;
384 u8 seq[8];
385 u16 key_len;
386 u8 key[0];
387 } crypt;
388 } u;
389}ieee_param;
390
391
392#if WIRELESS_EXT < 17
393#define IW_QUAL_QUAL_INVALID 0x10
394#define IW_QUAL_LEVEL_INVALID 0x20
395#define IW_QUAL_NOISE_INVALID 0x40
396#define IW_QUAL_QUAL_UPDATED 0x1
397#define IW_QUAL_LEVEL_UPDATED 0x2
398#define IW_QUAL_NOISE_UPDATED 0x4
399#endif
400
401
402
403#define MSECS(t) msecs_to_jiffies(t)
404#define msleep_interruptible_rsl msleep_interruptible
405
406#define IEEE80211_DATA_LEN 2304
407
408
409
410
411
412
413
414#define IEEE80211_1ADDR_LEN 10
415#define IEEE80211_2ADDR_LEN 16
416#define IEEE80211_3ADDR_LEN 24
417#define IEEE80211_4ADDR_LEN 30
418#define IEEE80211_FCS_LEN 4
419#define IEEE80211_HLEN (IEEE80211_4ADDR_LEN)
420#define IEEE80211_FRAME_LEN (IEEE80211_DATA_LEN + IEEE80211_HLEN)
421#define IEEE80211_MGMT_HDR_LEN 24
422#define IEEE80211_DATA_HDR3_LEN 24
423#define IEEE80211_DATA_HDR4_LEN 30
424
425#define MIN_FRAG_THRESHOLD 256U
426#define MAX_FRAG_THRESHOLD 2346U
427
428
429
430#define IEEE80211_FCTL_VERS 0x0003
431#define IEEE80211_FCTL_FTYPE 0x000c
432#define IEEE80211_FCTL_STYPE 0x00f0
433#define IEEE80211_FCTL_FRAMETYPE 0x00fc
434#define IEEE80211_FCTL_TODS 0x0100
435#define IEEE80211_FCTL_FROMDS 0x0200
436#define IEEE80211_FCTL_DSTODS 0x0300
437#define IEEE80211_FCTL_MOREFRAGS 0x0400
438#define IEEE80211_FCTL_RETRY 0x0800
439#define IEEE80211_FCTL_PM 0x1000
440#define IEEE80211_FCTL_MOREDATA 0x2000
441#define IEEE80211_FCTL_WEP 0x4000
442#define IEEE80211_FCTL_ORDER 0x8000
443
444#define IEEE80211_FTYPE_MGMT 0x0000
445#define IEEE80211_FTYPE_CTL 0x0004
446#define IEEE80211_FTYPE_DATA 0x0008
447
448
449#define IEEE80211_STYPE_ASSOC_REQ 0x0000
450#define IEEE80211_STYPE_ASSOC_RESP 0x0010
451#define IEEE80211_STYPE_REASSOC_REQ 0x0020
452#define IEEE80211_STYPE_REASSOC_RESP 0x0030
453#define IEEE80211_STYPE_PROBE_REQ 0x0040
454#define IEEE80211_STYPE_PROBE_RESP 0x0050
455#define IEEE80211_STYPE_BEACON 0x0080
456#define IEEE80211_STYPE_ATIM 0x0090
457#define IEEE80211_STYPE_DISASSOC 0x00A0
458#define IEEE80211_STYPE_AUTH 0x00B0
459#define IEEE80211_STYPE_DEAUTH 0x00C0
460#define IEEE80211_STYPE_MANAGE_ACT 0x00D0
461
462
463#define IEEE80211_STYPE_PSPOLL 0x00A0
464#define IEEE80211_STYPE_RTS 0x00B0
465#define IEEE80211_STYPE_CTS 0x00C0
466#define IEEE80211_STYPE_ACK 0x00D0
467#define IEEE80211_STYPE_CFEND 0x00E0
468#define IEEE80211_STYPE_CFENDACK 0x00F0
469#define IEEE80211_STYPE_BLOCKACK 0x0094
470
471
472#define IEEE80211_STYPE_DATA 0x0000
473#define IEEE80211_STYPE_DATA_CFACK 0x0010
474#define IEEE80211_STYPE_DATA_CFPOLL 0x0020
475#define IEEE80211_STYPE_DATA_CFACKPOLL 0x0030
476#define IEEE80211_STYPE_NULLFUNC 0x0040
477#define IEEE80211_STYPE_CFACK 0x0050
478#define IEEE80211_STYPE_CFPOLL 0x0060
479#define IEEE80211_STYPE_CFACKPOLL 0x0070
480#define IEEE80211_STYPE_QOS_DATA 0x0080
481#define IEEE80211_STYPE_QOS_NULL 0x00C0
482
483#define IEEE80211_SCTL_FRAG 0x000F
484#define IEEE80211_SCTL_SEQ 0xFFF0
485
486
487#define IEEE80211_QCTL_TID 0x000F
488
489#define FC_QOS_BIT BIT7
490#define IsDataFrame(pdu) ( ((pdu[0] & 0x0C)==0x08) ? true : false )
491#define IsLegacyDataFrame(pdu) (IsDataFrame(pdu) && (!(pdu[0]&FC_QOS_BIT)) )
492
493#define IsQoSDataFrame(pframe) ((*(u16*)pframe&(IEEE80211_STYPE_QOS_DATA|IEEE80211_FTYPE_DATA)) == (IEEE80211_STYPE_QOS_DATA|IEEE80211_FTYPE_DATA))
494#define Frame_Order(pframe) (*(u16*)pframe&IEEE80211_FCTL_ORDER)
495#define SN_LESS(a, b) (((a-b)&0x800)!=0)
496#define SN_EQUAL(a, b) (a == b)
497#define MAX_DEV_ADDR_SIZE 8
498typedef enum _ACT_CATEGORY{
499 ACT_CAT_QOS = 1,
500 ACT_CAT_DLS = 2,
501 ACT_CAT_BA = 3,
502 ACT_CAT_HT = 7,
503 ACT_CAT_WMM = 17,
504} ACT_CATEGORY, *PACT_CATEGORY;
505
506typedef enum _TS_ACTION{
507 ACT_ADDTSREQ = 0,
508 ACT_ADDTSRSP = 1,
509 ACT_DELTS = 2,
510 ACT_SCHEDULE = 3,
511} TS_ACTION, *PTS_ACTION;
512
513typedef enum _BA_ACTION{
514 ACT_ADDBAREQ = 0,
515 ACT_ADDBARSP = 1,
516 ACT_DELBA = 2,
517} BA_ACTION, *PBA_ACTION;
518
519typedef enum _InitialGainOpType{
520 IG_Backup=0,
521 IG_Restore,
522 IG_Max
523}InitialGainOpType;
524
525
526#define CONFIG_IEEE80211_DEBUG
527#ifdef CONFIG_IEEE80211_DEBUG
528extern u32 ieee80211_debug_level;
529#define IEEE80211_DEBUG(level, fmt, args...) \
530do { if (ieee80211_debug_level & (level)) \
531 printk(KERN_DEBUG "ieee80211: " fmt, ## args); } while (0)
532
533
534#define IEEE80211_DEBUG_DATA(level, data, datalen) \
535 do{ if ((ieee80211_debug_level & (level)) == (level)) \
536 { \
537 int i; \
538 u8* pdata = (u8*) data; \
539 printk(KERN_DEBUG "ieee80211: %s()\n", __FUNCTION__); \
540 for(i=0; i<(int)(datalen); i++) \
541 { \
542 printk("%2x ", pdata[i]); \
543 if ((i+1)%16 == 0) printk("\n"); \
544 } \
545 printk("\n"); \
546 } \
547 } while (0)
548#else
549#define IEEE80211_DEBUG(level, fmt, args...) do {} while (0)
550#define IEEE80211_DEBUG_DATA(level, data, datalen) do {} while(0)
551#endif
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581#define IEEE80211_DL_INFO (1<<0)
582#define IEEE80211_DL_WX (1<<1)
583#define IEEE80211_DL_SCAN (1<<2)
584#define IEEE80211_DL_STATE (1<<3)
585#define IEEE80211_DL_MGMT (1<<4)
586#define IEEE80211_DL_FRAG (1<<5)
587#define IEEE80211_DL_EAP (1<<6)
588#define IEEE80211_DL_DROP (1<<7)
589
590#define IEEE80211_DL_TX (1<<8)
591#define IEEE80211_DL_RX (1<<9)
592
593#define IEEE80211_DL_HT (1<<10)
594#define IEEE80211_DL_BA (1<<11)
595#define IEEE80211_DL_TS (1<<12)
596#define IEEE80211_DL_QOS (1<<13)
597#define IEEE80211_DL_REORDER (1<<14)
598#define IEEE80211_DL_IOT (1<<15)
599#define IEEE80211_DL_IPS (1<<16)
600#define IEEE80211_DL_TRACE (1<<29)
601#define IEEE80211_DL_DATA (1<<30)
602#define IEEE80211_DL_ERR (1<<31)
603#define IEEE80211_ERROR(f, a...) printk(KERN_ERR "ieee80211: " f, ## a)
604#define IEEE80211_WARNING(f, a...) printk(KERN_WARNING "ieee80211: " f, ## a)
605#define IEEE80211_DEBUG_INFO(f, a...) IEEE80211_DEBUG(IEEE80211_DL_INFO, f, ## a)
606
607#define IEEE80211_DEBUG_WX(f, a...) IEEE80211_DEBUG(IEEE80211_DL_WX, f, ## a)
608#define IEEE80211_DEBUG_SCAN(f, a...) IEEE80211_DEBUG(IEEE80211_DL_SCAN, f, ## a)
609#define IEEE80211_DEBUG_STATE(f, a...) IEEE80211_DEBUG(IEEE80211_DL_STATE, f, ## a)
610#define IEEE80211_DEBUG_MGMT(f, a...) IEEE80211_DEBUG(IEEE80211_DL_MGMT, f, ## a)
611#define IEEE80211_DEBUG_FRAG(f, a...) IEEE80211_DEBUG(IEEE80211_DL_FRAG, f, ## a)
612#define IEEE80211_DEBUG_EAP(f, a...) IEEE80211_DEBUG(IEEE80211_DL_EAP, f, ## a)
613#define IEEE80211_DEBUG_DROP(f, a...) IEEE80211_DEBUG(IEEE80211_DL_DROP, f, ## a)
614#define IEEE80211_DEBUG_TX(f, a...) IEEE80211_DEBUG(IEEE80211_DL_TX, f, ## a)
615#define IEEE80211_DEBUG_RX(f, a...) IEEE80211_DEBUG(IEEE80211_DL_RX, f, ## a)
616#define IEEE80211_DEBUG_QOS(f, a...) IEEE80211_DEBUG(IEEE80211_DL_QOS, f, ## a)
617
618#ifdef CONFIG_IEEE80211_DEBUG
619
620#define MAX_STR_LEN 64
621
622#define PRINTABLE(_ch) (_ch>'!' && _ch<'~')
623#define IEEE80211_PRINT_STR(_Comp, _TitleString, _Ptr, _Len) \
624 if((_Comp) & level) \
625 { \
626 int __i; \
627 u8 buffer[MAX_STR_LEN]; \
628 int length = (_Len<MAX_STR_LEN)? _Len : (MAX_STR_LEN-1) ; \
629 memset(buffer, 0, MAX_STR_LEN); \
630 memcpy(buffer, (u8 *)_Ptr, length ); \
631 for( __i=0; __i<MAX_STR_LEN; __i++ ) \
632 { \
633 if( !PRINTABLE(buffer[__i]) ) buffer[__i] = '?'; \
634 } \
635 buffer[length] = '\0'; \
636 printk("Rtl819x: "); \
637 printk(_TitleString); \
638 printk(": %d, <%s>\n", _Len, buffer); \
639 }
640#else
641#define IEEE80211_PRINT_STR(_Comp, _TitleString, _Ptr, _Len) do {} while (0)
642#endif
643
644#include <linux/netdevice.h>
645#include <linux/if_arp.h>
646
647#ifndef WIRELESS_SPY
648#define WIRELESS_SPY
649#endif
650#include <net/iw_handler.h>
651
652#ifndef ETH_P_PAE
653#define ETH_P_PAE 0x888E
654#endif
655
656#define ETH_P_PREAUTH 0x88C7
657
658#ifndef ETH_P_80211_RAW
659#define ETH_P_80211_RAW (ETH_P_ECONET + 1)
660#endif
661
662
663
664#define P80211_OUI_LEN 3
665
666struct ieee80211_snap_hdr {
667
668 u8 dsap;
669 u8 ssap;
670 u8 ctrl;
671 u8 oui[P80211_OUI_LEN];
672
673} __attribute__ ((packed));
674
675#define SNAP_SIZE sizeof(struct ieee80211_snap_hdr)
676
677#define WLAN_FC_GET_VERS(fc) ((fc) & IEEE80211_FCTL_VERS)
678#define WLAN_FC_GET_TYPE(fc) ((fc) & IEEE80211_FCTL_FTYPE)
679#define WLAN_FC_GET_STYPE(fc) ((fc) & IEEE80211_FCTL_STYPE)
680
681#define WLAN_FC_GET_FRAMETYPE(fc) ((fc) & IEEE80211_FCTL_FRAMETYPE)
682#define WLAN_GET_SEQ_FRAG(seq) ((seq) & IEEE80211_SCTL_FRAG)
683#define WLAN_GET_SEQ_SEQ(seq) (((seq) & IEEE80211_SCTL_SEQ) >> 4)
684
685
686#define WLAN_AUTH_OPEN 0
687#define WLAN_AUTH_SHARED_KEY 1
688#define WLAN_AUTH_LEAP 2
689
690#define WLAN_AUTH_CHALLENGE_LEN 128
691
692#define WLAN_CAPABILITY_BSS (1<<0)
693#define WLAN_CAPABILITY_IBSS (1<<1)
694#define WLAN_CAPABILITY_CF_POLLABLE (1<<2)
695#define WLAN_CAPABILITY_CF_POLL_REQUEST (1<<3)
696#define WLAN_CAPABILITY_PRIVACY (1<<4)
697#define WLAN_CAPABILITY_SHORT_PREAMBLE (1<<5)
698#define WLAN_CAPABILITY_PBCC (1<<6)
699#define WLAN_CAPABILITY_CHANNEL_AGILITY (1<<7)
700#define WLAN_CAPABILITY_SPECTRUM_MGMT (1<<8)
701#define WLAN_CAPABILITY_QOS (1<<9)
702#define WLAN_CAPABILITY_SHORT_SLOT (1<<10)
703#define WLAN_CAPABILITY_DSSS_OFDM (1<<13)
704
705
706#define WLAN_ERP_NON_ERP_PRESENT (1<<0)
707#define WLAN_ERP_USE_PROTECTION (1<<1)
708#define WLAN_ERP_BARKER_PREAMBLE (1<<2)
709
710
711enum ieee80211_statuscode {
712 WLAN_STATUS_SUCCESS = 0,
713 WLAN_STATUS_UNSPECIFIED_FAILURE = 1,
714 WLAN_STATUS_CAPS_UNSUPPORTED = 10,
715 WLAN_STATUS_REASSOC_NO_ASSOC = 11,
716 WLAN_STATUS_ASSOC_DENIED_UNSPEC = 12,
717 WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG = 13,
718 WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION = 14,
719 WLAN_STATUS_CHALLENGE_FAIL = 15,
720 WLAN_STATUS_AUTH_TIMEOUT = 16,
721 WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA = 17,
722 WLAN_STATUS_ASSOC_DENIED_RATES = 18,
723
724 WLAN_STATUS_ASSOC_DENIED_NOSHORTPREAMBLE = 19,
725 WLAN_STATUS_ASSOC_DENIED_NOPBCC = 20,
726 WLAN_STATUS_ASSOC_DENIED_NOAGILITY = 21,
727
728 WLAN_STATUS_ASSOC_DENIED_NOSPECTRUM = 22,
729 WLAN_STATUS_ASSOC_REJECTED_BAD_POWER = 23,
730 WLAN_STATUS_ASSOC_REJECTED_BAD_SUPP_CHAN = 24,
731
732 WLAN_STATUS_ASSOC_DENIED_NOSHORTTIME = 25,
733 WLAN_STATUS_ASSOC_DENIED_NODSSSOFDM = 26,
734
735 WLAN_STATUS_INVALID_IE = 40,
736 WLAN_STATUS_INVALID_GROUP_CIPHER = 41,
737 WLAN_STATUS_INVALID_PAIRWISE_CIPHER = 42,
738 WLAN_STATUS_INVALID_AKMP = 43,
739 WLAN_STATUS_UNSUPP_RSN_VERSION = 44,
740 WLAN_STATUS_INVALID_RSN_IE_CAP = 45,
741 WLAN_STATUS_CIPHER_SUITE_REJECTED = 46,
742};
743
744
745enum ieee80211_reasoncode {
746 WLAN_REASON_UNSPECIFIED = 1,
747 WLAN_REASON_PREV_AUTH_NOT_VALID = 2,
748 WLAN_REASON_DEAUTH_LEAVING = 3,
749 WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY = 4,
750 WLAN_REASON_DISASSOC_AP_BUSY = 5,
751 WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA = 6,
752 WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA = 7,
753 WLAN_REASON_DISASSOC_STA_HAS_LEFT = 8,
754 WLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH = 9,
755
756 WLAN_REASON_DISASSOC_BAD_POWER = 10,
757 WLAN_REASON_DISASSOC_BAD_SUPP_CHAN = 11,
758
759 WLAN_REASON_INVALID_IE = 13,
760 WLAN_REASON_MIC_FAILURE = 14,
761 WLAN_REASON_4WAY_HANDSHAKE_TIMEOUT = 15,
762 WLAN_REASON_GROUP_KEY_HANDSHAKE_TIMEOUT = 16,
763 WLAN_REASON_IE_DIFFERENT = 17,
764 WLAN_REASON_INVALID_GROUP_CIPHER = 18,
765 WLAN_REASON_INVALID_PAIRWISE_CIPHER = 19,
766 WLAN_REASON_INVALID_AKMP = 20,
767 WLAN_REASON_UNSUPP_RSN_VERSION = 21,
768 WLAN_REASON_INVALID_RSN_IE_CAP = 22,
769 WLAN_REASON_IEEE8021X_FAILED = 23,
770 WLAN_REASON_CIPHER_SUITE_REJECTED = 24,
771};
772
773#define IEEE80211_STATMASK_SIGNAL (1<<0)
774#define IEEE80211_STATMASK_RSSI (1<<1)
775#define IEEE80211_STATMASK_NOISE (1<<2)
776#define IEEE80211_STATMASK_RATE (1<<3)
777#define IEEE80211_STATMASK_WEMASK 0x7
778
779#define IEEE80211_CCK_MODULATION (1<<0)
780#define IEEE80211_OFDM_MODULATION (1<<1)
781
782#define IEEE80211_24GHZ_BAND (1<<0)
783#define IEEE80211_52GHZ_BAND (1<<1)
784
785#define IEEE80211_CCK_RATE_LEN 4
786#define IEEE80211_CCK_RATE_1MB 0x02
787#define IEEE80211_CCK_RATE_2MB 0x04
788#define IEEE80211_CCK_RATE_5MB 0x0B
789#define IEEE80211_CCK_RATE_11MB 0x16
790#define IEEE80211_OFDM_RATE_LEN 8
791#define IEEE80211_OFDM_RATE_6MB 0x0C
792#define IEEE80211_OFDM_RATE_9MB 0x12
793#define IEEE80211_OFDM_RATE_12MB 0x18
794#define IEEE80211_OFDM_RATE_18MB 0x24
795#define IEEE80211_OFDM_RATE_24MB 0x30
796#define IEEE80211_OFDM_RATE_36MB 0x48
797#define IEEE80211_OFDM_RATE_48MB 0x60
798#define IEEE80211_OFDM_RATE_54MB 0x6C
799#define IEEE80211_BASIC_RATE_MASK 0x80
800
801#define IEEE80211_CCK_RATE_1MB_MASK (1<<0)
802#define IEEE80211_CCK_RATE_2MB_MASK (1<<1)
803#define IEEE80211_CCK_RATE_5MB_MASK (1<<2)
804#define IEEE80211_CCK_RATE_11MB_MASK (1<<3)
805#define IEEE80211_OFDM_RATE_6MB_MASK (1<<4)
806#define IEEE80211_OFDM_RATE_9MB_MASK (1<<5)
807#define IEEE80211_OFDM_RATE_12MB_MASK (1<<6)
808#define IEEE80211_OFDM_RATE_18MB_MASK (1<<7)
809#define IEEE80211_OFDM_RATE_24MB_MASK (1<<8)
810#define IEEE80211_OFDM_RATE_36MB_MASK (1<<9)
811#define IEEE80211_OFDM_RATE_48MB_MASK (1<<10)
812#define IEEE80211_OFDM_RATE_54MB_MASK (1<<11)
813
814#define IEEE80211_CCK_RATES_MASK 0x0000000F
815#define IEEE80211_CCK_BASIC_RATES_MASK (IEEE80211_CCK_RATE_1MB_MASK | \
816 IEEE80211_CCK_RATE_2MB_MASK)
817#define IEEE80211_CCK_DEFAULT_RATES_MASK (IEEE80211_CCK_BASIC_RATES_MASK | \
818 IEEE80211_CCK_RATE_5MB_MASK | \
819 IEEE80211_CCK_RATE_11MB_MASK)
820
821#define IEEE80211_OFDM_RATES_MASK 0x00000FF0
822#define IEEE80211_OFDM_BASIC_RATES_MASK (IEEE80211_OFDM_RATE_6MB_MASK | \
823 IEEE80211_OFDM_RATE_12MB_MASK | \
824 IEEE80211_OFDM_RATE_24MB_MASK)
825#define IEEE80211_OFDM_DEFAULT_RATES_MASK (IEEE80211_OFDM_BASIC_RATES_MASK | \
826 IEEE80211_OFDM_RATE_9MB_MASK | \
827 IEEE80211_OFDM_RATE_18MB_MASK | \
828 IEEE80211_OFDM_RATE_36MB_MASK | \
829 IEEE80211_OFDM_RATE_48MB_MASK | \
830 IEEE80211_OFDM_RATE_54MB_MASK)
831#define IEEE80211_DEFAULT_RATES_MASK (IEEE80211_OFDM_DEFAULT_RATES_MASK | \
832 IEEE80211_CCK_DEFAULT_RATES_MASK)
833
834#define IEEE80211_NUM_OFDM_RATES 8
835#define IEEE80211_NUM_CCK_RATES 4
836#define IEEE80211_OFDM_SHIFT_MASK_A 4
837
838
839
840#define IEEE80211_FC0_TYPE_MASK 0x0c
841#define IEEE80211_FC0_TYPE_DATA 0x08
842#define IEEE80211_FC0_SUBTYPE_MASK 0xB0
843#define IEEE80211_FC0_SUBTYPE_QOS 0x80
844
845#define IEEE80211_QOS_HAS_SEQ(fc) \
846 (((fc) & (IEEE80211_FC0_TYPE_MASK | IEEE80211_FC0_SUBTYPE_MASK)) == \
847 (IEEE80211_FC0_TYPE_DATA | IEEE80211_FC0_SUBTYPE_QOS))
848
849
850#define IEEE_IBSS_MAC_HASH_SIZE 31
851struct ieee_ibss_seq {
852 u8 mac[ETH_ALEN];
853 u16 seq_num[17];
854 u16 frag_num[17];
855 unsigned long packet_time[17];
856 struct list_head list;
857};
858
859
860
861
862struct ieee80211_rx_stats {
863 u32 mac_time[2];
864 s8 rssi;
865 u8 signal;
866 u8 noise;
867 u16 rate;
868 u8 received_channel;
869 u8 control;
870 u8 mask;
871 u8 freq;
872 u16 len;
873 u64 tsf;
874 u32 beacon_time;
875 u8 nic_type;
876 u16 Length;
877
878 u8 SignalQuality;
879 s32 RecvSignalPower;
880 s8 RxPower;
881 u8 SignalStrength;
882 u16 bHwError:1;
883 u16 bCRC:1;
884 u16 bICV:1;
885 u16 bShortPreamble:1;
886 u16 Antenna:1;
887 u16 Decrypted:1;
888 u16 Wakeup:1;
889 u16 Reserved0:1;
890 u8 AGC;
891 u32 TimeStampLow;
892 u32 TimeStampHigh;
893 bool bShift;
894 bool bIsQosData;
895 u8 UserPriority;
896
897
898
899
900
901 u8 RxDrvInfoSize;
902 u8 RxBufShift;
903 bool bIsAMPDU;
904 bool bFirstMPDU;
905 bool bContainHTC;
906 bool RxIs40MHzPacket;
907 u32 RxPWDBAll;
908 u8 RxMIMOSignalStrength[4];
909 s8 RxMIMOSignalQuality[2];
910 bool bPacketMatchBSSID;
911 bool bIsCCK;
912 bool bPacketToSelf;
913
914 u8* virtual_address;
915 u16 packetlength;
916 u16 fraglength;
917 u16 fragoffset;
918 u16 ntotalfrag;
919 bool bisrxaggrsubframe;
920 bool bPacketBeacon;
921 bool bToSelfBA;
922 char cck_adc_pwdb[4];
923 u16 Seq_Num;
924
925};
926
927
928
929
930
931#define IEEE80211_FRAG_CACHE_LEN 4
932
933struct ieee80211_frag_entry {
934 unsigned long first_frag_time;
935 unsigned int seq;
936 unsigned int last_frag;
937 struct sk_buff *skb;
938 u8 src_addr[ETH_ALEN];
939 u8 dst_addr[ETH_ALEN];
940};
941
942struct ieee80211_stats {
943 unsigned int tx_unicast_frames;
944 unsigned int tx_multicast_frames;
945 unsigned int tx_fragments;
946 unsigned int tx_unicast_octets;
947 unsigned int tx_multicast_octets;
948 unsigned int tx_deferred_transmissions;
949 unsigned int tx_single_retry_frames;
950 unsigned int tx_multiple_retry_frames;
951 unsigned int tx_retry_limit_exceeded;
952 unsigned int tx_discards;
953 unsigned int rx_unicast_frames;
954 unsigned int rx_multicast_frames;
955 unsigned int rx_fragments;
956 unsigned int rx_unicast_octets;
957 unsigned int rx_multicast_octets;
958 unsigned int rx_fcs_errors;
959 unsigned int rx_discards_no_buffer;
960 unsigned int tx_discards_wrong_sa;
961 unsigned int rx_discards_undecryptable;
962 unsigned int rx_message_in_msg_fragments;
963 unsigned int rx_message_in_bad_msg_fragments;
964};
965
966struct ieee80211_device;
967
968#include "ieee80211_crypt.h"
969
970#define SEC_KEY_1 (1<<0)
971#define SEC_KEY_2 (1<<1)
972#define SEC_KEY_3 (1<<2)
973#define SEC_KEY_4 (1<<3)
974#define SEC_ACTIVE_KEY (1<<4)
975#define SEC_AUTH_MODE (1<<5)
976#define SEC_UNICAST_GROUP (1<<6)
977#define SEC_LEVEL (1<<7)
978#define SEC_ENABLED (1<<8)
979#define SEC_ENCRYPT (1<<9)
980
981#define SEC_LEVEL_0 0
982#define SEC_LEVEL_1 1
983#define SEC_LEVEL_2 2
984#define SEC_LEVEL_2_CKIP 3
985#define SEC_LEVEL_3 4
986
987#define SEC_ALG_NONE 0
988#define SEC_ALG_WEP 1
989#define SEC_ALG_TKIP 2
990#define SEC_ALG_CCMP 3
991
992#define WEP_KEYS 4
993#define WEP_KEY_LEN 13
994#define SCM_KEY_LEN 32
995#define SCM_TEMPORAL_KEY_LENGTH 16
996
997struct ieee80211_security {
998 u16 active_key:2,
999 enabled:1,
1000 auth_mode:2,
1001 auth_algo:4,
1002 unicast_uses_group:1,
1003 encrypt:1;
1004 u8 key_sizes[WEP_KEYS];
1005 u8 keys[WEP_KEYS][SCM_KEY_LEN];
1006 u8 level;
1007 u16 flags;
1008} __attribute__ ((packed));
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023enum ieee80211_mfie {
1024 MFIE_TYPE_SSID = 0,
1025 MFIE_TYPE_RATES = 1,
1026 MFIE_TYPE_FH_SET = 2,
1027 MFIE_TYPE_DS_SET = 3,
1028 MFIE_TYPE_CF_SET = 4,
1029 MFIE_TYPE_TIM = 5,
1030 MFIE_TYPE_IBSS_SET = 6,
1031 MFIE_TYPE_COUNTRY = 7,
1032 MFIE_TYPE_HOP_PARAMS = 8,
1033 MFIE_TYPE_HOP_TABLE = 9,
1034 MFIE_TYPE_REQUEST = 10,
1035 MFIE_TYPE_CHALLENGE = 16,
1036 MFIE_TYPE_POWER_CONSTRAINT = 32,
1037 MFIE_TYPE_POWER_CAPABILITY = 33,
1038 MFIE_TYPE_TPC_REQUEST = 34,
1039 MFIE_TYPE_TPC_REPORT = 35,
1040 MFIE_TYPE_SUPP_CHANNELS = 36,
1041 MFIE_TYPE_CSA = 37,
1042 MFIE_TYPE_MEASURE_REQUEST = 38,
1043 MFIE_TYPE_MEASURE_REPORT = 39,
1044 MFIE_TYPE_QUIET = 40,
1045 MFIE_TYPE_IBSS_DFS = 41,
1046 MFIE_TYPE_ERP = 42,
1047 MFIE_TYPE_RSN = 48,
1048 MFIE_TYPE_RATES_EX = 50,
1049 MFIE_TYPE_HT_CAP= 45,
1050 MFIE_TYPE_HT_INFO= 61,
1051 MFIE_TYPE_AIRONET=133,
1052 MFIE_TYPE_GENERIC = 221,
1053 MFIE_TYPE_QOS_PARAMETER = 222,
1054};
1055
1056
1057
1058
1059struct ieee80211_hdr {
1060 __le16 frame_ctl;
1061 __le16 duration_id;
1062 u8 payload[0];
1063} __attribute__ ((packed));
1064
1065struct ieee80211_hdr_1addr {
1066 __le16 frame_ctl;
1067 __le16 duration_id;
1068 u8 addr1[ETH_ALEN];
1069 u8 payload[0];
1070} __attribute__ ((packed));
1071
1072struct ieee80211_hdr_2addr {
1073 __le16 frame_ctl;
1074 __le16 duration_id;
1075 u8 addr1[ETH_ALEN];
1076 u8 addr2[ETH_ALEN];
1077 u8 payload[0];
1078} __attribute__ ((packed));
1079
1080struct ieee80211_hdr_3addr {
1081 __le16 frame_ctl;
1082 __le16 duration_id;
1083 u8 addr1[ETH_ALEN];
1084 u8 addr2[ETH_ALEN];
1085 u8 addr3[ETH_ALEN];
1086 __le16 seq_ctl;
1087 u8 payload[0];
1088} __attribute__ ((packed));
1089
1090struct ieee80211_hdr_4addr {
1091 __le16 frame_ctl;
1092 __le16 duration_id;
1093 u8 addr1[ETH_ALEN];
1094 u8 addr2[ETH_ALEN];
1095 u8 addr3[ETH_ALEN];
1096 __le16 seq_ctl;
1097 u8 addr4[ETH_ALEN];
1098 u8 payload[0];
1099} __attribute__ ((packed));
1100
1101struct ieee80211_hdr_3addrqos {
1102 __le16 frame_ctl;
1103 __le16 duration_id;
1104 u8 addr1[ETH_ALEN];
1105 u8 addr2[ETH_ALEN];
1106 u8 addr3[ETH_ALEN];
1107 __le16 seq_ctl;
1108 u8 payload[0];
1109 __le16 qos_ctl;
1110} __attribute__ ((packed));
1111
1112struct ieee80211_hdr_4addrqos {
1113 __le16 frame_ctl;
1114 __le16 duration_id;
1115 u8 addr1[ETH_ALEN];
1116 u8 addr2[ETH_ALEN];
1117 u8 addr3[ETH_ALEN];
1118 __le16 seq_ctl;
1119 u8 addr4[ETH_ALEN];
1120 u8 payload[0];
1121 __le16 qos_ctl;
1122} __attribute__ ((packed));
1123
1124struct ieee80211_info_element {
1125 u8 id;
1126 u8 len;
1127 u8 data[0];
1128} __attribute__ ((packed));
1129
1130struct ieee80211_authentication {
1131 struct ieee80211_hdr_3addr header;
1132 __le16 algorithm;
1133 __le16 transaction;
1134 __le16 status;
1135
1136 struct ieee80211_info_element info_element[0];
1137} __attribute__ ((packed));
1138
1139struct ieee80211_disassoc {
1140 struct ieee80211_hdr_3addr header;
1141 __le16 reason;
1142} __attribute__ ((packed));
1143
1144struct ieee80211_probe_request {
1145 struct ieee80211_hdr_3addr header;
1146
1147 struct ieee80211_info_element info_element[0];
1148} __attribute__ ((packed));
1149
1150struct ieee80211_probe_response {
1151 struct ieee80211_hdr_3addr header;
1152 u32 time_stamp[2];
1153 __le16 beacon_interval;
1154 __le16 capability;
1155
1156
1157 struct ieee80211_info_element info_element[0];
1158} __attribute__ ((packed));
1159
1160
1161#define ieee80211_beacon ieee80211_probe_response
1162
1163struct ieee80211_assoc_request_frame {
1164 struct ieee80211_hdr_3addr header;
1165 __le16 capability;
1166 __le16 listen_interval;
1167
1168 struct ieee80211_info_element info_element[0];
1169} __attribute__ ((packed));
1170
1171struct ieee80211_reassoc_request_frame {
1172 struct ieee80211_hdr_3addr header;
1173 __le16 capability;
1174 __le16 listen_interval;
1175 u8 current_ap[ETH_ALEN];
1176
1177 struct ieee80211_info_element info_element[0];
1178} __attribute__ ((packed));
1179
1180struct ieee80211_assoc_response_frame {
1181 struct ieee80211_hdr_3addr header;
1182 __le16 capability;
1183 __le16 status;
1184 __le16 aid;
1185 struct ieee80211_info_element info_element[0];
1186} __attribute__ ((packed));
1187
1188struct ieee80211_txb {
1189 u8 nr_frags;
1190 u8 encrypted;
1191 u8 queue_index;
1192 u8 rts_included;
1193 u16 reserved;
1194 __le16 frag_size;
1195 __le16 payload_size;
1196 struct sk_buff *fragments[0];
1197};
1198
1199#define MAX_TX_AGG_COUNT 16
1200struct ieee80211_drv_agg_txb {
1201 u8 nr_drv_agg_frames;
1202 struct sk_buff *tx_agg_frames[MAX_TX_AGG_COUNT];
1203}__attribute__((packed));
1204
1205#define MAX_SUBFRAME_COUNT 64
1206struct ieee80211_rxb {
1207 u8 nr_subframes;
1208 struct sk_buff *subframes[MAX_SUBFRAME_COUNT];
1209 u8 dst[ETH_ALEN];
1210 u8 src[ETH_ALEN];
1211}__attribute__((packed));
1212
1213typedef union _frameqos {
1214 u16 shortdata;
1215 u8 chardata[2];
1216 struct {
1217 u16 tid:4;
1218 u16 eosp:1;
1219 u16 ack_policy:2;
1220 u16 reserved:1;
1221 u16 txop:8;
1222 }field;
1223}frameqos,*pframeqos;
1224
1225
1226#define MAX_SWEEP_TAB_ENTRIES 42
1227#define MAX_SWEEP_TAB_ENTRIES_PER_PACKET 7
1228
1229
1230
1231
1232#define MAX_RATES_LENGTH ((u8)12)
1233#define MAX_RATES_EX_LENGTH ((u8)16)
1234#define MAX_NETWORK_COUNT 128
1235
1236#define MAX_CHANNEL_NUMBER 161
1237#define IEEE80211_SOFTMAC_SCAN_TIME 100
1238
1239#define IEEE80211_SOFTMAC_ASSOC_RETRY_TIME (HZ * 2)
1240
1241#define CRC_LENGTH 4U
1242
1243#define MAX_WPA_IE_LEN 64
1244
1245#define NETWORK_EMPTY_ESSID (1<<0)
1246#define NETWORK_HAS_OFDM (1<<1)
1247#define NETWORK_HAS_CCK (1<<2)
1248
1249
1250#define NETWORK_HAS_QOS_PARAMETERS (1<<3)
1251#define NETWORK_HAS_QOS_INFORMATION (1<<4)
1252#define NETWORK_HAS_QOS_MASK (NETWORK_HAS_QOS_PARAMETERS | \
1253 NETWORK_HAS_QOS_INFORMATION)
1254
1255#define NETWORK_HAS_POWER_CONSTRAINT (1<<5)
1256#define NETWORK_HAS_CSA (1<<6)
1257#define NETWORK_HAS_QUIET (1<<7)
1258#define NETWORK_HAS_IBSS_DFS (1<<8)
1259#define NETWORK_HAS_TPC_REPORT (1<<9)
1260
1261#define NETWORK_HAS_ERP_VALUE (1<<10)
1262
1263#define QOS_QUEUE_NUM 4
1264#define QOS_OUI_LEN 3
1265#define QOS_OUI_TYPE 2
1266#define QOS_ELEMENT_ID 221
1267#define QOS_OUI_INFO_SUB_TYPE 0
1268#define QOS_OUI_PARAM_SUB_TYPE 1
1269#define QOS_VERSION_1 1
1270#define QOS_AIFSN_MIN_VALUE 2
1271struct ieee80211_qos_information_element {
1272 u8 elementID;
1273 u8 length;
1274 u8 qui[QOS_OUI_LEN];
1275 u8 qui_type;
1276 u8 qui_subtype;
1277 u8 version;
1278 u8 ac_info;
1279} __attribute__ ((packed));
1280
1281struct ieee80211_qos_ac_parameter {
1282 u8 aci_aifsn;
1283 u8 ecw_min_max;
1284 __le16 tx_op_limit;
1285} __attribute__ ((packed));
1286
1287struct ieee80211_qos_parameter_info {
1288 struct ieee80211_qos_information_element info_element;
1289 u8 reserved;
1290 struct ieee80211_qos_ac_parameter ac_params_record[QOS_QUEUE_NUM];
1291} __attribute__ ((packed));
1292
1293struct ieee80211_qos_parameters {
1294 __le16 cw_min[QOS_QUEUE_NUM];
1295 __le16 cw_max[QOS_QUEUE_NUM];
1296 u8 aifs[QOS_QUEUE_NUM];
1297 u8 flag[QOS_QUEUE_NUM];
1298 __le16 tx_op_limit[QOS_QUEUE_NUM];
1299} __attribute__ ((packed));
1300
1301struct ieee80211_qos_data {
1302 struct ieee80211_qos_parameters parameters;
1303 int active;
1304 int supported;
1305 u8 param_count;
1306 u8 old_param_count;
1307};
1308
1309struct ieee80211_tim_parameters {
1310 u8 tim_count;
1311 u8 tim_period;
1312} __attribute__ ((packed));
1313
1314
1315struct ieee80211_wmm_ac_param {
1316 u8 ac_aci_acm_aifsn;
1317 u8 ac_ecwmin_ecwmax;
1318 u16 ac_txop_limit;
1319};
1320
1321struct ieee80211_wmm_ts_info {
1322 u8 ac_dir_tid;
1323 u8 ac_up_psb;
1324 u8 reserved;
1325} __attribute__ ((packed));
1326
1327struct ieee80211_wmm_tspec_elem {
1328 struct ieee80211_wmm_ts_info ts_info;
1329 u16 norm_msdu_size;
1330 u16 max_msdu_size;
1331 u32 min_serv_inter;
1332 u32 max_serv_inter;
1333 u32 inact_inter;
1334 u32 suspen_inter;
1335 u32 serv_start_time;
1336 u32 min_data_rate;
1337 u32 mean_data_rate;
1338 u32 peak_data_rate;
1339 u32 max_burst_size;
1340 u32 delay_bound;
1341 u32 min_phy_rate;
1342 u16 surp_band_allow;
1343 u16 medium_time;
1344}__attribute__((packed));
1345enum eap_type {
1346 EAP_PACKET = 0,
1347 EAPOL_START,
1348 EAPOL_LOGOFF,
1349 EAPOL_KEY,
1350 EAPOL_ENCAP_ASF_ALERT
1351};
1352
1353static const char *eap_types[] = {
1354 [EAP_PACKET] = "EAP-Packet",
1355 [EAPOL_START] = "EAPOL-Start",
1356 [EAPOL_LOGOFF] = "EAPOL-Logoff",
1357 [EAPOL_KEY] = "EAPOL-Key",
1358 [EAPOL_ENCAP_ASF_ALERT] = "EAPOL-Encap-ASF-Alert"
1359};
1360
1361static inline const char *eap_get_type(int type)
1362{
1363 return ((u32)type >= ARRAY_SIZE(eap_types)) ? "Unknown" : eap_types[type];
1364}
1365
1366static inline u8 Frame_QoSTID(u8* buf)
1367{
1368 struct ieee80211_hdr_3addr *hdr;
1369 u16 fc;
1370 hdr = (struct ieee80211_hdr_3addr *)buf;
1371 fc = le16_to_cpu(hdr->frame_ctl);
1372 return (u8)((frameqos*)(buf + (((fc & IEEE80211_FCTL_TODS)&&(fc & IEEE80211_FCTL_FROMDS))? 30 : 24)))->field.tid;
1373}
1374
1375
1376
1377struct eapol {
1378 u8 snap[6];
1379 u16 ethertype;
1380 u8 version;
1381 u8 type;
1382 u16 length;
1383} __attribute__ ((packed));
1384
1385struct ieee80211_softmac_stats{
1386 unsigned int rx_ass_ok;
1387 unsigned int rx_ass_err;
1388 unsigned int rx_probe_rq;
1389 unsigned int tx_probe_rs;
1390 unsigned int tx_beacons;
1391 unsigned int rx_auth_rq;
1392 unsigned int rx_auth_rs_ok;
1393 unsigned int rx_auth_rs_err;
1394 unsigned int tx_auth_rq;
1395 unsigned int no_auth_rs;
1396 unsigned int no_ass_rs;
1397 unsigned int tx_ass_rq;
1398 unsigned int rx_ass_rq;
1399 unsigned int tx_probe_rq;
1400 unsigned int reassoc;
1401 unsigned int swtxstop;
1402 unsigned int swtxawake;
1403 unsigned char CurrentShowTxate;
1404 unsigned char last_packet_rate;
1405 unsigned int txretrycount;
1406};
1407
1408#define BEACON_PROBE_SSID_ID_POSITION 12
1409
1410struct ieee80211_info_element_hdr {
1411 u8 id;
1412 u8 len;
1413} __attribute__ ((packed));
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432#define IEEE80211_DEFAULT_TX_ESSID "Penguin"
1433#define IEEE80211_DEFAULT_BASIC_RATE 2
1434
1435enum {WMM_all_frame, WMM_two_frame, WMM_four_frame, WMM_six_frame};
1436#define MAX_SP_Len (WMM_all_frame << 4)
1437#define IEEE80211_QOS_TID 0x0f
1438#define QOS_CTL_NOTCONTAIN_ACK (0x01 << 5)
1439
1440#define IEEE80211_DTIM_MBCAST 4
1441#define IEEE80211_DTIM_UCAST 2
1442#define IEEE80211_DTIM_VALID 1
1443#define IEEE80211_DTIM_INVALID 0
1444
1445#define IEEE80211_PS_DISABLED 0
1446#define IEEE80211_PS_UNICAST IEEE80211_DTIM_UCAST
1447#define IEEE80211_PS_MBCAST IEEE80211_DTIM_MBCAST
1448
1449
1450
1451#ifdef WMM_Hang_8187
1452#undef WMM_Hang_8187
1453#endif
1454
1455#define WME_AC_BK 0x00
1456#define WME_AC_BE 0x01
1457#define WME_AC_VI 0x02
1458#define WME_AC_VO 0x03
1459#define WME_ACI_MASK 0x03
1460#define WME_AIFSN_MASK 0x03
1461#define WME_AC_PRAM_LEN 16
1462
1463#define MAX_RECEIVE_BUFFER_SIZE 9100
1464
1465
1466
1467#define UP2AC(up) ( \
1468 ((up) < 1) ? WME_AC_BE : \
1469 ((up) < 3) ? WME_AC_BK : \
1470 ((up) < 4) ? WME_AC_BE : \
1471 ((up) < 6) ? WME_AC_VI : \
1472 WME_AC_VO)
1473
1474#define AC2UP(_ac) ( \
1475 ((_ac) == WME_AC_VO) ? 6 : \
1476 ((_ac) == WME_AC_VI) ? 5 : \
1477 ((_ac) == WME_AC_BK) ? 1 : \
1478 0)
1479
1480#define ETHER_ADDR_LEN 6
1481#define ETHERNET_HEADER_SIZE 14
1482
1483struct ether_header {
1484 u8 ether_dhost[ETHER_ADDR_LEN];
1485 u8 ether_shost[ETHER_ADDR_LEN];
1486 u16 ether_type;
1487} __attribute__((packed));
1488
1489#ifndef ETHERTYPE_PAE
1490#define ETHERTYPE_PAE 0x888e
1491#endif
1492#ifndef ETHERTYPE_IP
1493#define ETHERTYPE_IP 0x0800
1494#endif
1495
1496typedef struct _bss_ht{
1497
1498 bool support_ht;
1499
1500
1501 u8 ht_cap_buf[32];
1502 u16 ht_cap_len;
1503 u8 ht_info_buf[32];
1504 u16 ht_info_len;
1505
1506 HT_SPEC_VER ht_spec_ver;
1507
1508
1509
1510 bool aggregation;
1511 bool long_slot_time;
1512}bss_ht, *pbss_ht;
1513
1514typedef enum _erp_t{
1515 ERP_NonERPpresent = 0x01,
1516 ERP_UseProtection = 0x02,
1517 ERP_BarkerPreambleMode = 0x04,
1518} erp_t;
1519
1520
1521struct ieee80211_network {
1522
1523 u8 bssid[ETH_ALEN];
1524 u8 channel;
1525
1526 u8 ssid[IW_ESSID_MAX_SIZE + 1];
1527 u8 ssid_len;
1528 struct ieee80211_qos_data qos_data;
1529
1530
1531 bool bWithAironetIE;
1532 bool bCkipSupported;
1533 bool bCcxRmEnable;
1534 u16 CcxRmState[2];
1535
1536 bool bMBssidValid;
1537 u8 MBssidMask;
1538 u8 MBssid[6];
1539
1540 bool bWithCcxVerNum;
1541 u8 BssCcxVerNumber;
1542
1543 struct ieee80211_rx_stats stats;
1544 u16 capability;
1545 u8 rates[MAX_RATES_LENGTH];
1546 u8 rates_len;
1547 u8 rates_ex[MAX_RATES_EX_LENGTH];
1548 u8 rates_ex_len;
1549 unsigned long last_scanned;
1550 u8 mode;
1551 u32 flags;
1552 u32 last_associate;
1553 u32 time_stamp[2];
1554 u16 beacon_interval;
1555 u16 listen_interval;
1556 u16 atim_window;
1557 u8 erp_value;
1558 u8 wpa_ie[MAX_WPA_IE_LEN];
1559 size_t wpa_ie_len;
1560 u8 rsn_ie[MAX_WPA_IE_LEN];
1561 size_t rsn_ie_len;
1562
1563 struct ieee80211_tim_parameters tim;
1564 u8 dtim_period;
1565 u8 dtim_data;
1566 u32 last_dtim_sta_time[2];
1567
1568
1569 u8 wmm_info;
1570 struct ieee80211_wmm_ac_param wmm_param[4];
1571 u8 QoS_Enable;
1572#ifdef THOMAS_TURBO
1573 u8 Turbo_Enable;
1574#endif
1575 u16 CountryIeLen;
1576 u8 CountryIeBuf[MAX_IE_LEN];
1577
1578 BSS_HT bssht;
1579
1580 bool broadcom_cap_exist;
1581 bool ralink_cap_exist;
1582 bool atheros_cap_exist;
1583 bool cisco_cap_exist;
1584 bool unknown_cap_exist;
1585
1586 bool berp_info_valid;
1587 bool buseprotection;
1588
1589 struct list_head list;
1590};
1591
1592enum ieee80211_state {
1593
1594
1595 IEEE80211_NOLINK = 0,
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606 IEEE80211_ASSOCIATING,
1607 IEEE80211_ASSOCIATING_RETRY,
1608
1609
1610 IEEE80211_ASSOCIATING_AUTHENTICATING,
1611
1612
1613
1614
1615 IEEE80211_ASSOCIATING_AUTHENTICATED,
1616
1617
1618
1619
1620 IEEE80211_LINKED,
1621
1622
1623
1624
1625
1626
1627 IEEE80211_LINKED_SCANNING,
1628
1629};
1630
1631#define DEFAULT_MAX_SCAN_AGE (15 * HZ)
1632#define DEFAULT_FTS 2346
1633
1634#define CFG_IEEE80211_RESERVE_FCS (1<<0)
1635#define CFG_IEEE80211_COMPUTE_FCS (1<<1)
1636#define CFG_IEEE80211_RTS (1<<2)
1637
1638#define IEEE80211_24GHZ_MIN_CHANNEL 1
1639#define IEEE80211_24GHZ_MAX_CHANNEL 14
1640#define IEEE80211_24GHZ_CHANNELS (IEEE80211_24GHZ_MAX_CHANNEL - \
1641 IEEE80211_24GHZ_MIN_CHANNEL + 1)
1642
1643#define IEEE80211_52GHZ_MIN_CHANNEL 34
1644#define IEEE80211_52GHZ_MAX_CHANNEL 165
1645#define IEEE80211_52GHZ_CHANNELS (IEEE80211_52GHZ_MAX_CHANNEL - \
1646 IEEE80211_52GHZ_MIN_CHANNEL + 1)
1647
1648
1649
1650typedef struct tx_pending_t{
1651 int frag;
1652 struct ieee80211_txb *txb;
1653}tx_pending_t;
1654
1655typedef struct _bandwidth_autoswitch
1656{
1657 long threshold_20Mhzto40Mhz;
1658 long threshold_40Mhzto20Mhz;
1659 bool bforced_tx20Mhz;
1660 bool bautoswitch_enable;
1661}bandwidth_autoswitch,*pbandwidth_autoswitch;
1662
1663
1664
1665
1666#define REORDER_WIN_SIZE 128
1667#define REORDER_ENTRY_NUM 128
1668typedef struct _RX_REORDER_ENTRY
1669{
1670 struct list_head List;
1671 u16 SeqNum;
1672 struct ieee80211_rxb* prxb;
1673} RX_REORDER_ENTRY, *PRX_REORDER_ENTRY;
1674
1675typedef enum _Fsync_State{
1676 Default_Fsync,
1677 HW_Fsync,
1678 SW_Fsync
1679}Fsync_State;
1680
1681
1682typedef enum _RT_PS_MODE
1683{
1684 eActive,
1685 eMaxPs,
1686 eFastPs
1687}RT_PS_MODE;
1688
1689typedef enum _IPS_CALLBACK_FUNCION
1690{
1691 IPS_CALLBACK_NONE = 0,
1692 IPS_CALLBACK_MGNT_LINK_REQUEST = 1,
1693 IPS_CALLBACK_JOIN_REQUEST = 2,
1694}IPS_CALLBACK_FUNCION;
1695
1696typedef enum _RT_JOIN_ACTION{
1697 RT_JOIN_INFRA = 1,
1698 RT_JOIN_IBSS = 2,
1699 RT_START_IBSS = 3,
1700 RT_NO_ACTION = 4,
1701}RT_JOIN_ACTION;
1702
1703typedef struct _IbssParms{
1704 u16 atimWin;
1705}IbssParms, *PIbssParms;
1706#define MAX_NUM_RATES 264
1707
1708
1709typedef enum _RT_RF_POWER_STATE
1710{
1711 eRfOn,
1712 eRfSleep,
1713 eRfOff
1714}RT_RF_POWER_STATE;
1715
1716typedef struct _RT_POWER_SAVE_CONTROL
1717{
1718
1719
1720
1721
1722 bool bInactivePs;
1723 bool bIPSModeBackup;
1724 bool bSwRfProcessing;
1725 RT_RF_POWER_STATE eInactivePowerState;
1726 struct work_struct InactivePsWorkItem;
1727 struct timer_list InactivePsTimer;
1728
1729
1730 IPS_CALLBACK_FUNCION ReturnPoint;
1731
1732
1733 bool bTmpBssDesc;
1734 RT_JOIN_ACTION tmpJoinAction;
1735 struct ieee80211_network tmpBssDesc;
1736
1737
1738 bool bTmpScanOnly;
1739 bool bTmpActiveScan;
1740 bool bTmpFilterHiddenAP;
1741 bool bTmpUpdateParms;
1742 u8 tmpSsidBuf[33];
1743 OCTET_STRING tmpSsid2Scan;
1744 bool bTmpSsid2Scan;
1745 u8 tmpNetworkType;
1746 u8 tmpChannelNumber;
1747 u16 tmpBcnPeriod;
1748 u8 tmpDtimPeriod;
1749 u16 tmpmCap;
1750 OCTET_STRING tmpSuppRateSet;
1751 u8 tmpSuppRateBuf[MAX_NUM_RATES];
1752 bool bTmpSuppRate;
1753 IbssParms tmpIbpm;
1754 bool bTmpIbpm;
1755
1756
1757
1758
1759 bool bLeisurePs;
1760
1761}RT_POWER_SAVE_CONTROL,*PRT_POWER_SAVE_CONTROL;
1762
1763typedef u32 RT_RF_CHANGE_SOURCE;
1764#define RF_CHANGE_BY_SW BIT31
1765#define RF_CHANGE_BY_HW BIT30
1766#define RF_CHANGE_BY_PS BIT29
1767#define RF_CHANGE_BY_IPS BIT28
1768#define RF_CHANGE_BY_INIT 0
1769
1770typedef enum
1771{
1772 COUNTRY_CODE_FCC = 0,
1773 COUNTRY_CODE_IC = 1,
1774 COUNTRY_CODE_ETSI = 2,
1775 COUNTRY_CODE_SPAIN = 3,
1776 COUNTRY_CODE_FRANCE = 4,
1777 COUNTRY_CODE_MKK = 5,
1778 COUNTRY_CODE_MKK1 = 6,
1779 COUNTRY_CODE_ISRAEL = 7,
1780 COUNTRY_CODE_TELEC,
1781 COUNTRY_CODE_MIC,
1782 COUNTRY_CODE_GLOBAL_DOMAIN
1783}country_code_type_t;
1784
1785#define RT_MAX_LD_SLOT_NUM 10
1786typedef struct _RT_LINK_DETECT_T{
1787
1788 u32 NumRecvBcnInPeriod;
1789 u32 NumRecvDataInPeriod;
1790
1791 u32 RxBcnNum[RT_MAX_LD_SLOT_NUM];
1792 u32 RxDataNum[RT_MAX_LD_SLOT_NUM];
1793 u16 SlotNum;
1794 u16 SlotIndex;
1795
1796 u32 NumTxOkInPeriod;
1797 u32 NumRxOkInPeriod;
1798 bool bBusyTraffic;
1799}RT_LINK_DETECT_T, *PRT_LINK_DETECT_T;
1800
1801
1802struct ieee80211_device {
1803 struct net_device *dev;
1804 struct ieee80211_security sec;
1805
1806
1807
1808 u8 hwsec_active;
1809 bool is_silent_reset;
1810 bool ieee_up;
1811
1812 bool bSupportRemoteWakeUp;
1813 RT_PS_MODE dot11PowerSaveMode;
1814 bool actscanning;
1815 bool beinretry;
1816 RT_RF_POWER_STATE eRFPowerState;
1817 RT_RF_CHANGE_SOURCE RfOffReason;
1818 bool is_set_key;
1819
1820
1821
1822 PRT_HIGH_THROUGHPUT pHTInfo;
1823
1824
1825 spinlock_t bw_spinlock;
1826
1827 spinlock_t reorder_spinlock;
1828
1829
1830 u8 Regdot11HTOperationalRateSet[16];
1831 u8 dot11HTOperationalRateSet[16];
1832 u8 RegHTSuppRateSet[16];
1833 u8 HTCurrentOperaRate;
1834 u8 HTHighestOperaRate;
1835
1836 u8 bTxDisableRateFallBack;
1837 u8 bTxUseDriverAssingedRate;
1838 atomic_t atm_chnlop;
1839 atomic_t atm_swbw;
1840
1841
1842
1843
1844 struct list_head Tx_TS_Admit_List;
1845 struct list_head Tx_TS_Pending_List;
1846 struct list_head Tx_TS_Unused_List;
1847 TX_TS_RECORD TxTsRecord[TOTAL_TS_NUM];
1848
1849 struct list_head Rx_TS_Admit_List;
1850 struct list_head Rx_TS_Pending_List;
1851 struct list_head Rx_TS_Unused_List;
1852 RX_TS_RECORD RxTsRecord[TOTAL_TS_NUM];
1853
1854 RX_REORDER_ENTRY RxReorderEntry[128];
1855 struct list_head RxReorder_Unused_List;
1856
1857
1858
1859 u8 ForcedPriority;
1860
1861
1862
1863 struct net_device_stats stats;
1864 struct ieee80211_stats ieee_stats;
1865 struct ieee80211_softmac_stats softmac_stats;
1866
1867
1868 struct list_head network_free_list;
1869 struct list_head network_list;
1870 struct ieee80211_network *networks;
1871 int scans;
1872 int scan_age;
1873
1874 int iw_mode;
1875 struct iw_spy_data spy_data;
1876
1877 spinlock_t lock;
1878 spinlock_t wpax_suitlist_lock;
1879
1880 int tx_headroom;
1881
1882 u32 config;
1883
1884
1885 int open_wep;
1886 int auth_mode;
1887 int reset_on_keychange;
1888
1889
1890
1891 int host_encrypt;
1892 int host_encrypt_msdu;
1893 int host_decrypt;
1894
1895 int host_mc_decrypt;
1896
1897
1898
1899 int host_strip_iv_icv;
1900
1901 int host_open_frag;
1902 int host_build_iv;
1903 int ieee802_1x;
1904
1905
1906 bool bHalfWirelessN24GMode;
1907 int wpa_enabled;
1908 int drop_unencrypted;
1909 int tkip_countermeasures;
1910 int privacy_invoked;
1911 size_t wpa_ie_len;
1912 u8 *wpa_ie;
1913 u8 ap_mac_addr[6];
1914 u16 pairwise_key_type;
1915 u16 group_key_type;
1916 struct list_head crypt_deinit_list;
1917 struct ieee80211_crypt_data *crypt[WEP_KEYS];
1918 int tx_keyidx;
1919 struct timer_list crypt_deinit_timer;
1920 int crypt_quiesced;
1921
1922 int bcrx_sta_key;
1923
1924
1925
1926
1927 struct ieee80211_frag_entry frag_cache[17][IEEE80211_FRAG_CACHE_LEN];
1928 unsigned int frag_next_idx[17];
1929 u16 fts;
1930#define DEFAULT_RTS_THRESHOLD 2346U
1931#define MIN_RTS_THRESHOLD 1
1932#define MAX_RTS_THRESHOLD 2346U
1933 u16 rts;
1934
1935
1936 u8 bssid[ETH_ALEN];
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946 struct ieee80211_network current_network;
1947
1948 enum ieee80211_state state;
1949
1950 int short_slot;
1951 int reg_mode;
1952 int mode;
1953 int modulation;
1954 int freq_band;
1955 int abg_true;
1956
1957
1958
1959
1960 short sync_scan_hurryup;
1961
1962 int perfect_rssi;
1963 int worst_rssi;
1964
1965 u16 prev_seq_ctl;
1966
1967
1968
1969 void* pDot11dInfo;
1970 bool bGlobalDomain;
1971 int rate;
1972 int basic_rate;
1973
1974 short active_scan;
1975
1976
1977 u16 softmac_features;
1978
1979
1980 u16 seq_ctrl[5];
1981
1982
1983 u16 associate_seq;
1984
1985
1986 u16 assoc_id;
1987
1988
1989 short ps;
1990 short sta_sleep;
1991 int ps_timeout;
1992 int ps_period;
1993 struct tasklet_struct ps_task;
1994 u32 ps_th;
1995 u32 ps_tl;
1996
1997 short raw_tx;
1998
1999 short queue_stop;
2000 short scanning;
2001 short proto_started;
2002
2003 struct semaphore wx_sem;
2004 struct semaphore scan_sem;
2005
2006 spinlock_t mgmt_tx_lock;
2007 spinlock_t beacon_lock;
2008
2009 short beacon_txing;
2010
2011 short wap_set;
2012 short ssid_set;
2013
2014 u8 wpax_type_set;
2015 u32 wpax_type_notify;
2016
2017
2018 char init_wmmparam_flag;
2019
2020 u8 qos_support;
2021
2022
2023 struct list_head ibss_mac_hash[IEEE_IBSS_MAC_HASH_SIZE];
2024
2025
2026 u16 last_rxseq_num[17];
2027 u16 last_rxfrag_num[17];
2028 unsigned long last_packet_time[17];
2029
2030
2031 unsigned long last_rx_ps_time;
2032
2033
2034 struct sk_buff *mgmt_queue_ring[MGMT_QUEUE_NUM];
2035 int mgmt_queue_head;
2036 int mgmt_queue_tail;
2037
2038#define IEEE80211_QUEUE_LIMIT 128
2039 u8 AsocRetryCount;
2040 unsigned int hw_header;
2041 struct sk_buff_head skb_waitQ[MAX_QUEUE_SIZE];
2042 struct sk_buff_head skb_aggQ[MAX_QUEUE_SIZE];
2043 struct sk_buff_head skb_drv_aggQ[MAX_QUEUE_SIZE];
2044 u32 sta_edca_param[4];
2045 bool aggregation;
2046
2047 bool enable_rx_imm_BA;
2048 bool bibsscoordinator;
2049
2050
2051
2052 bool bdynamic_txpower_enable;
2053
2054 bool bCTSToSelfEnable;
2055 u8 CTSToSelfTH;
2056
2057 u32 fsync_time_interval;
2058 u32 fsync_rate_bitmap;
2059 u8 fsync_rssi_threshold;
2060 bool bfsync_enable;
2061
2062 u8 fsync_multiple_timeinterval;
2063 u32 fsync_firstdiff_ratethreshold;
2064 u32 fsync_seconddiff_ratethreshold;
2065 Fsync_State fsync_state;
2066 bool bis_any_nonbepkts;
2067
2068 bandwidth_autoswitch bandwidth_auto_switch;
2069
2070 bool FwRWRF;
2071
2072
2073 RT_LINK_DETECT_T LinkDetectInfo;
2074
2075 RT_POWER_SAVE_CONTROL PowerSaveControl;
2076
2077
2078 struct tx_pending_t tx_pending;
2079
2080
2081 struct timer_list associate_timer;
2082
2083
2084 struct timer_list beacon_timer;
2085 struct work_struct associate_complete_wq;
2086 struct work_struct associate_procedure_wq;
2087 struct delayed_work softmac_scan_wq;
2088 struct delayed_work associate_retry_wq;
2089 struct delayed_work start_ibss_wq;
2090 struct work_struct wx_sync_scan_wq;
2091 struct workqueue_struct *wq;
2092
2093
2094
2095
2096
2097
2098
2099
2100 void (*set_security)(struct net_device *dev,
2101 struct ieee80211_security *sec);
2102
2103
2104
2105
2106
2107 int (*hard_start_xmit)(struct ieee80211_txb *txb,
2108 struct net_device *dev);
2109
2110 int (*reset_port)(struct net_device *dev);
2111 int (*is_queue_full) (struct net_device * dev, int pri);
2112
2113 int (*handle_management) (struct net_device * dev,
2114 struct ieee80211_network * network, u16 type);
2115 int (*is_qos_active) (struct net_device *dev, struct sk_buff *skb);
2116
2117
2118
2119
2120
2121
2122
2123
2124 int (*softmac_hard_start_xmit)(struct sk_buff *skb,
2125 struct net_device *dev);
2126
2127
2128
2129
2130
2131
2132
2133 void (*softmac_data_hard_start_xmit)(struct sk_buff *skb,
2134 struct net_device *dev,int rate);
2135
2136
2137
2138
2139
2140 void (*data_hard_stop)(struct net_device *dev);
2141
2142
2143 void (*data_hard_resume)(struct net_device *dev);
2144
2145
2146
2147
2148
2149 void (*set_chan)(struct net_device *dev,short ch);
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166 void (*scan_syncro)(struct net_device *dev);
2167 void (*start_scan)(struct net_device *dev);
2168 void (*stop_scan)(struct net_device *dev);
2169
2170
2171
2172
2173
2174
2175 void (*link_change)(struct net_device *dev);
2176
2177
2178
2179
2180
2181
2182
2183 void (*start_send_beacons) (struct net_device *dev,u16 tx_rate);
2184 void (*stop_send_beacons) (struct net_device *dev);
2185
2186
2187 void (*sta_wake_up) (struct net_device *dev);
2188 void (*ps_request_tx_ack) (struct net_device *dev);
2189 void (*enter_sleep_state) (struct net_device *dev, u32 th, u32 tl);
2190 short (*ps_is_queue_empty) (struct net_device *dev);
2191 int (*handle_beacon) (struct net_device * dev, struct ieee80211_beacon * beacon, struct ieee80211_network * network);
2192 int (*handle_assoc_response) (struct net_device * dev, struct ieee80211_assoc_response_frame * resp, struct ieee80211_network * network);
2193
2194
2195
2196 short (*check_nic_enough_desc)(struct net_device *dev, int queue_index);
2197
2198
2199 void (*SetBWModeHandler)(struct net_device *dev, HT_CHANNEL_WIDTH Bandwidth, HT_EXTCHNL_OFFSET Offset);
2200
2201 bool (*GetNmodeSupportBySecCfg)(struct net_device* dev);
2202 void (*SetWirelessMode)(struct net_device* dev, u8 wireless_mode);
2203 bool (*GetHalfNmodeSupportByAPsHandler)(struct net_device* dev);
2204 void (*InitialGainHandler)(struct net_device *dev, u8 Operation);
2205
2206
2207
2208 u8 priv[0];
2209};
2210
2211#define IEEE_A (1<<0)
2212#define IEEE_B (1<<1)
2213#define IEEE_G (1<<2)
2214#define IEEE_N_24G (1<<4)
2215#define IEEE_N_5G (1<<5)
2216#define IEEE_MODE_MASK (IEEE_A|IEEE_B|IEEE_G)
2217
2218
2219
2220
2221
2222
2223#define IEEE_SOFTMAC_SCAN (1<<2)
2224
2225
2226#define IEEE_SOFTMAC_ASSOCIATE (1<<3)
2227
2228
2229#define IEEE_SOFTMAC_PROBERQ (1<<4)
2230
2231
2232#define IEEE_SOFTMAC_PROBERS (1<<5)
2233
2234
2235
2236
2237#define IEEE_SOFTMAC_TX_QUEUE (1<<7)
2238
2239
2240
2241
2242#define IEEE_SOFTMAC_SINGLE_QUEUE (1<<8)
2243
2244
2245
2246
2247#define IEEE_SOFTMAC_BEACONS (1<<6)
2248
2249static inline void *ieee80211_priv(struct net_device *dev)
2250{
2251 return ((struct ieee80211_device *)netdev_priv(dev))->priv;
2252}
2253
2254extern inline int ieee80211_is_empty_essid(const char *essid, int essid_len)
2255{
2256
2257 if (essid_len == 1 && essid[0] == ' ')
2258 return 1;
2259
2260
2261 while (essid_len) {
2262 essid_len--;
2263 if (essid[essid_len] != '\0')
2264 return 0;
2265 }
2266
2267 return 1;
2268}
2269
2270extern inline int ieee80211_is_valid_mode(struct ieee80211_device *ieee, int mode)
2271{
2272
2273
2274
2275
2276
2277
2278 if ((mode & IEEE_A) &&
2279 (ieee->modulation & IEEE80211_OFDM_MODULATION) &&
2280 (ieee->freq_band & IEEE80211_52GHZ_BAND))
2281 return 1;
2282
2283 if ((mode & IEEE_G) &&
2284 (ieee->modulation & IEEE80211_OFDM_MODULATION) &&
2285 (ieee->freq_band & IEEE80211_24GHZ_BAND))
2286 return 1;
2287
2288 if ((mode & IEEE_B) &&
2289 (ieee->modulation & IEEE80211_CCK_MODULATION) &&
2290 (ieee->freq_band & IEEE80211_24GHZ_BAND))
2291 return 1;
2292
2293 return 0;
2294}
2295
2296extern inline int ieee80211_get_hdrlen(u16 fc)
2297{
2298 int hdrlen = IEEE80211_3ADDR_LEN;
2299
2300 switch (WLAN_FC_GET_TYPE(fc)) {
2301 case IEEE80211_FTYPE_DATA:
2302 if ((fc & IEEE80211_FCTL_FROMDS) && (fc & IEEE80211_FCTL_TODS))
2303 hdrlen = IEEE80211_4ADDR_LEN;
2304 if(IEEE80211_QOS_HAS_SEQ(fc))
2305 hdrlen += 2;
2306 break;
2307 case IEEE80211_FTYPE_CTL:
2308 switch (WLAN_FC_GET_STYPE(fc)) {
2309 case IEEE80211_STYPE_CTS:
2310 case IEEE80211_STYPE_ACK:
2311 hdrlen = IEEE80211_1ADDR_LEN;
2312 break;
2313 default:
2314 hdrlen = IEEE80211_2ADDR_LEN;
2315 break;
2316 }
2317 break;
2318 }
2319
2320 return hdrlen;
2321}
2322
2323static inline u8 *ieee80211_get_payload(struct ieee80211_hdr *hdr)
2324{
2325 switch (ieee80211_get_hdrlen(le16_to_cpu(hdr->frame_ctl))) {
2326 case IEEE80211_1ADDR_LEN:
2327 return ((struct ieee80211_hdr_1addr *)hdr)->payload;
2328 case IEEE80211_2ADDR_LEN:
2329 return ((struct ieee80211_hdr_2addr *)hdr)->payload;
2330 case IEEE80211_3ADDR_LEN:
2331 return ((struct ieee80211_hdr_3addr *)hdr)->payload;
2332 case IEEE80211_4ADDR_LEN:
2333 return ((struct ieee80211_hdr_4addr *)hdr)->payload;
2334 }
2335 return NULL;
2336}
2337
2338static inline int ieee80211_is_ofdm_rate(u8 rate)
2339{
2340 switch (rate & ~IEEE80211_BASIC_RATE_MASK) {
2341 case IEEE80211_OFDM_RATE_6MB:
2342 case IEEE80211_OFDM_RATE_9MB:
2343 case IEEE80211_OFDM_RATE_12MB:
2344 case IEEE80211_OFDM_RATE_18MB:
2345 case IEEE80211_OFDM_RATE_24MB:
2346 case IEEE80211_OFDM_RATE_36MB:
2347 case IEEE80211_OFDM_RATE_48MB:
2348 case IEEE80211_OFDM_RATE_54MB:
2349 return 1;
2350 }
2351 return 0;
2352}
2353
2354static inline int ieee80211_is_cck_rate(u8 rate)
2355{
2356 switch (rate & ~IEEE80211_BASIC_RATE_MASK) {
2357 case IEEE80211_CCK_RATE_1MB:
2358 case IEEE80211_CCK_RATE_2MB:
2359 case IEEE80211_CCK_RATE_5MB:
2360 case IEEE80211_CCK_RATE_11MB:
2361 return 1;
2362 }
2363 return 0;
2364}
2365
2366
2367
2368extern void free_ieee80211(struct net_device *dev);
2369extern struct net_device *alloc_ieee80211(int sizeof_priv);
2370
2371extern int ieee80211_set_encryption(struct ieee80211_device *ieee);
2372
2373
2374
2375extern int ieee80211_encrypt_fragment(
2376 struct ieee80211_device *ieee,
2377 struct sk_buff *frag,
2378 int hdr_len);
2379
2380extern int ieee80211_xmit(struct sk_buff *skb,
2381 struct net_device *dev);
2382extern void ieee80211_txb_free(struct ieee80211_txb *);
2383
2384
2385
2386extern int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
2387 struct ieee80211_rx_stats *rx_stats);
2388extern void ieee80211_rx_mgt(struct ieee80211_device *ieee,
2389 struct ieee80211_hdr_4addr *header,
2390 struct ieee80211_rx_stats *stats);
2391
2392
2393extern int ieee80211_wx_get_scan(struct ieee80211_device *ieee,
2394 struct iw_request_info *info,
2395 union iwreq_data *wrqu, char *key);
2396extern int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
2397 struct iw_request_info *info,
2398 union iwreq_data *wrqu, char *key);
2399extern int ieee80211_wx_get_encode(struct ieee80211_device *ieee,
2400 struct iw_request_info *info,
2401 union iwreq_data *wrqu, char *key);
2402#if WIRELESS_EXT >= 18
2403extern int ieee80211_wx_get_encode_ext(struct ieee80211_device *ieee,
2404 struct iw_request_info *info,
2405 union iwreq_data* wrqu, char *extra);
2406extern int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
2407 struct iw_request_info *info,
2408 union iwreq_data* wrqu, char *extra);
2409extern int ieee80211_wx_set_auth(struct ieee80211_device *ieee,
2410 struct iw_request_info *info,
2411 struct iw_param *data, char *extra);
2412extern int ieee80211_wx_set_mlme(struct ieee80211_device *ieee,
2413 struct iw_request_info *info,
2414 union iwreq_data *wrqu, char *extra);
2415#endif
2416extern int ieee80211_wx_set_gen_ie(struct ieee80211_device *ieee, u8 *ie, size_t len);
2417
2418
2419extern short ieee80211_is_54g(const struct ieee80211_network *net);
2420extern short ieee80211_is_shortslot(const struct ieee80211_network *net);
2421extern int ieee80211_rx_frame_softmac(struct ieee80211_device *ieee, struct sk_buff *skb,
2422 struct ieee80211_rx_stats *rx_stats, u16 type,
2423 u16 stype);
2424extern void ieee80211_softmac_new_net(struct ieee80211_device *ieee, struct ieee80211_network *net);
2425
2426void SendDisassociation(struct ieee80211_device *ieee, u8* asSta, u8 asRsn);
2427extern void ieee80211_softmac_xmit(struct ieee80211_txb *txb, struct ieee80211_device *ieee);
2428
2429extern void ieee80211_stop_send_beacons(struct ieee80211_device *ieee);
2430extern void notify_wx_assoc_event(struct ieee80211_device *ieee);
2431extern void ieee80211_softmac_check_all_nets(struct ieee80211_device *ieee);
2432extern void ieee80211_start_bss(struct ieee80211_device *ieee);
2433extern void ieee80211_start_master_bss(struct ieee80211_device *ieee);
2434extern void ieee80211_start_ibss(struct ieee80211_device *ieee);
2435extern void ieee80211_softmac_init(struct ieee80211_device *ieee);
2436extern void ieee80211_softmac_free(struct ieee80211_device *ieee);
2437extern void ieee80211_associate_abort(struct ieee80211_device *ieee);
2438extern void ieee80211_disassociate(struct ieee80211_device *ieee);
2439extern void ieee80211_stop_scan(struct ieee80211_device *ieee);
2440extern void ieee80211_start_scan_syncro(struct ieee80211_device *ieee);
2441extern void ieee80211_check_all_nets(struct ieee80211_device *ieee);
2442extern void ieee80211_start_protocol(struct ieee80211_device *ieee);
2443extern void ieee80211_stop_protocol(struct ieee80211_device *ieee);
2444extern void ieee80211_softmac_start_protocol(struct ieee80211_device *ieee);
2445extern void ieee80211_softmac_stop_protocol(struct ieee80211_device *ieee);
2446extern void ieee80211_reset_queue(struct ieee80211_device *ieee);
2447extern void ieee80211_wake_queue(struct ieee80211_device *ieee);
2448extern void ieee80211_stop_queue(struct ieee80211_device *ieee);
2449extern struct sk_buff *ieee80211_get_beacon(struct ieee80211_device *ieee);
2450extern void ieee80211_start_send_beacons(struct ieee80211_device *ieee);
2451extern void ieee80211_stop_send_beacons(struct ieee80211_device *ieee);
2452extern int ieee80211_wpa_supplicant_ioctl(struct ieee80211_device *ieee, struct iw_point *p);
2453extern void notify_wx_assoc_event(struct ieee80211_device *ieee);
2454extern void ieee80211_ps_tx_ack(struct ieee80211_device *ieee, short success);
2455
2456extern void softmac_mgmt_xmit(struct sk_buff *skb, struct ieee80211_device *ieee);
2457
2458
2459extern void ieee80211_tkip_null(void);
2460extern void ieee80211_wep_null(void);
2461extern void ieee80211_ccmp_null(void);
2462
2463
2464
2465extern int ieee80211_wx_get_wap(struct ieee80211_device *ieee,
2466 struct iw_request_info *info,
2467 union iwreq_data *wrqu, char *ext);
2468
2469extern int ieee80211_wx_set_wap(struct ieee80211_device *ieee,
2470 struct iw_request_info *info,
2471 union iwreq_data *awrq,
2472 char *extra);
2473
2474extern int ieee80211_wx_get_essid(struct ieee80211_device *ieee, struct iw_request_info *a,union iwreq_data *wrqu,char *b);
2475
2476extern int ieee80211_wx_set_rate(struct ieee80211_device *ieee,
2477 struct iw_request_info *info,
2478 union iwreq_data *wrqu, char *extra);
2479
2480extern int ieee80211_wx_get_rate(struct ieee80211_device *ieee,
2481 struct iw_request_info *info,
2482 union iwreq_data *wrqu, char *extra);
2483
2484extern int ieee80211_wx_set_mode(struct ieee80211_device *ieee, struct iw_request_info *a,
2485 union iwreq_data *wrqu, char *b);
2486
2487extern int ieee80211_wx_set_scan(struct ieee80211_device *ieee, struct iw_request_info *a,
2488 union iwreq_data *wrqu, char *b);
2489
2490extern int ieee80211_wx_set_essid(struct ieee80211_device *ieee,
2491 struct iw_request_info *a,
2492 union iwreq_data *wrqu, char *extra);
2493
2494extern int ieee80211_wx_get_mode(struct ieee80211_device *ieee, struct iw_request_info *a,
2495 union iwreq_data *wrqu, char *b);
2496
2497extern int ieee80211_wx_set_freq(struct ieee80211_device *ieee, struct iw_request_info *a,
2498 union iwreq_data *wrqu, char *b);
2499
2500extern int ieee80211_wx_get_freq(struct ieee80211_device *ieee, struct iw_request_info *a,
2501 union iwreq_data *wrqu, char *b);
2502
2503
2504extern void ieee80211_wx_sync_scan_wq(struct work_struct *work);
2505
2506
2507extern int ieee80211_wx_set_rawtx(struct ieee80211_device *ieee,
2508 struct iw_request_info *info,
2509 union iwreq_data *wrqu, char *extra);
2510
2511extern int ieee80211_wx_get_name(struct ieee80211_device *ieee,
2512 struct iw_request_info *info,
2513 union iwreq_data *wrqu, char *extra);
2514
2515extern int ieee80211_wx_set_power(struct ieee80211_device *ieee,
2516 struct iw_request_info *info,
2517 union iwreq_data *wrqu, char *extra);
2518
2519extern int ieee80211_wx_get_power(struct ieee80211_device *ieee,
2520 struct iw_request_info *info,
2521 union iwreq_data *wrqu, char *extra);
2522
2523extern int ieee80211_wx_set_rts(struct ieee80211_device *ieee,
2524 struct iw_request_info *info,
2525 union iwreq_data *wrqu, char *extra);
2526
2527extern int ieee80211_wx_get_rts(struct ieee80211_device *ieee,
2528 struct iw_request_info *info,
2529 union iwreq_data *wrqu, char *extra);
2530
2531#define MAX_RECEIVE_BUFFER_SIZE 9100
2532extern void HTDebugHTCapability(u8* CapIE, u8* TitleString );
2533extern void HTDebugHTInfo(u8* InfoIE, u8* TitleString);
2534
2535void HTSetConnectBwMode(struct ieee80211_device* ieee, HT_CHANNEL_WIDTH Bandwidth, HT_EXTCHNL_OFFSET Offset);
2536extern void HTUpdateDefaultSetting(struct ieee80211_device* ieee);
2537extern void HTConstructCapabilityElement(struct ieee80211_device* ieee, u8* posHTCap, u8* len, u8 isEncrypt);
2538extern void HTConstructInfoElement(struct ieee80211_device* ieee, u8* posHTInfo, u8* len, u8 isEncrypt);
2539extern void HTConstructRT2RTAggElement(struct ieee80211_device* ieee, u8* posRT2RTAgg, u8* len);
2540extern void HTOnAssocRsp(struct ieee80211_device *ieee);
2541extern void HTInitializeHTInfo(struct ieee80211_device* ieee);
2542extern void HTInitializeBssDesc(PBSS_HT pBssHT);
2543extern void HTResetSelfAndSavePeerSetting(struct ieee80211_device* ieee, struct ieee80211_network * pNetwork);
2544extern void HTUpdateSelfAndPeerSetting(struct ieee80211_device* ieee, struct ieee80211_network * pNetwork);
2545extern u8 HTGetHighestMCSRate(struct ieee80211_device* ieee, u8* pMCSRateSet, u8* pMCSFilter);
2546extern u8 MCS_FILTER_ALL[];
2547extern u16 MCS_DATA_RATE[2][2][77] ;
2548extern u8 HTCCheck(struct ieee80211_device* ieee, u8* pFrame);
2549
2550extern void HTResetIOTSetting(PRT_HIGH_THROUGHPUT pHTInfo);
2551extern bool IsHTHalfNmodeAPs(struct ieee80211_device* ieee);
2552extern u16 HTHalfMcsToDataRate(struct ieee80211_device* ieee, u8 nMcsRate);
2553extern u16 HTMcsToDataRate( struct ieee80211_device* ieee, u8 nMcsRate);
2554extern u16 TxCountToDataRate( struct ieee80211_device* ieee, u8 nDataRate);
2555
2556extern int ieee80211_rx_ADDBAReq( struct ieee80211_device* ieee, struct sk_buff *skb);
2557extern int ieee80211_rx_ADDBARsp( struct ieee80211_device* ieee, struct sk_buff *skb);
2558extern int ieee80211_rx_DELBA(struct ieee80211_device* ieee,struct sk_buff *skb);
2559extern void TsInitAddBA( struct ieee80211_device* ieee, PTX_TS_RECORD pTS, u8 Policy, u8 bOverwritePending);
2560extern void TsInitDelBA( struct ieee80211_device* ieee, PTS_COMMON_INFO pTsCommonInfo, TR_SELECT TxRxSelect);
2561extern void BaSetupTimeOut(unsigned long data);
2562extern void TxBaInactTimeout(unsigned long data);
2563extern void RxBaInactTimeout(unsigned long data);
2564extern void ResetBaEntry( PBA_RECORD pBA);
2565
2566extern bool GetTs(
2567 struct ieee80211_device* ieee,
2568 PTS_COMMON_INFO *ppTS,
2569 u8* Addr,
2570 u8 TID,
2571 TR_SELECT TxRxSelect,
2572 bool bAddNewTs
2573 );
2574extern void TSInitialize(struct ieee80211_device *ieee);
2575extern void TsStartAddBaProcess(struct ieee80211_device* ieee, PTX_TS_RECORD pTxTS);
2576extern void RemovePeerTS(struct ieee80211_device* ieee, u8* Addr);
2577extern void RemoveAllTS(struct ieee80211_device* ieee);
2578void ieee80211_softmac_scan_syncro(struct ieee80211_device *ieee);
2579
2580extern const long ieee80211_wlan_frequencies[];
2581
2582extern inline void ieee80211_increment_scans(struct ieee80211_device *ieee)
2583{
2584 ieee->scans++;
2585}
2586
2587extern inline int ieee80211_get_scans(struct ieee80211_device *ieee)
2588{
2589 return ieee->scans;
2590}
2591
2592static inline const char *escape_essid(const char *essid, u8 essid_len) {
2593 static char escaped[IW_ESSID_MAX_SIZE * 2 + 1];
2594 const char *s = essid;
2595 char *d = escaped;
2596
2597 if (ieee80211_is_empty_essid(essid, essid_len)) {
2598 memcpy(escaped, "<hidden>", sizeof("<hidden>"));
2599 return escaped;
2600 }
2601
2602 essid_len = min(essid_len, (u8)IW_ESSID_MAX_SIZE);
2603 while (essid_len--) {
2604 if (*s == '\0') {
2605 *d++ = '\\';
2606 *d++ = '0';
2607 s++;
2608 } else {
2609 *d++ = *s++;
2610 }
2611 }
2612 *d = '\0';
2613 return escaped;
2614}
2615
2616
2617
2618
2619extern short check_nic_enough_desc(struct net_device *dev, int queue_index);
2620extern int ieee80211_data_xmit(struct sk_buff *skb, struct net_device *dev);
2621extern int ieee80211_parse_info_param(struct ieee80211_device *ieee,
2622 struct ieee80211_info_element *info_element,
2623 u16 length,
2624 struct ieee80211_network *network,
2625 struct ieee80211_rx_stats *stats);
2626
2627void ieee80211_indicate_packets(struct ieee80211_device *ieee, struct ieee80211_rxb** prxbIndicateArray,u8 index);
2628#define RT_ASOC_RETRY_LIMIT 5
2629#endif
2630