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