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