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