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