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