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