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
1336 bool bMBssidValid;
1337 u8 MBssid[ETH_ALEN];
1338 u8 MBssidMask;
1339
1340 u8 ssid[IW_ESSID_MAX_SIZE + 1];
1341 u8 ssid_len;
1342 struct ieee80211_qos_data qos_data;
1343
1344
1345 bool bWithAironetIE;
1346 bool bCkipSupported;
1347 bool bCcxRmEnable;
1348 u16 CcxRmState[2];
1349
1350 bool bWithCcxVerNum;
1351 u8 BssCcxVerNumber;
1352
1353 struct ieee80211_rx_stats stats;
1354 u16 capability;
1355 u8 rates[MAX_RATES_LENGTH];
1356 u8 rates_len;
1357 u8 rates_ex[MAX_RATES_EX_LENGTH];
1358 u8 rates_ex_len;
1359 unsigned long last_scanned;
1360 u8 mode;
1361 u32 flags;
1362 u32 last_associate;
1363 u32 time_stamp[2];
1364 u16 beacon_interval;
1365 u16 listen_interval;
1366 u16 atim_window;
1367 u8 erp_value;
1368 u8 wpa_ie[MAX_WPA_IE_LEN];
1369 size_t wpa_ie_len;
1370 u8 rsn_ie[MAX_WPA_IE_LEN];
1371 size_t rsn_ie_len;
1372
1373 struct ieee80211_tim_parameters tim;
1374 u8 dtim_period;
1375 u8 dtim_data;
1376 u32 last_dtim_sta_time[2];
1377
1378
1379 u8 wmm_info;
1380 struct ieee80211_wmm_ac_param wmm_param[4];
1381 u8 QoS_Enable;
1382#ifdef THOMAS_TURBO
1383 u8 Turbo_Enable;
1384#endif
1385 u16 CountryIeLen;
1386 u8 CountryIeBuf[MAX_IE_LEN];
1387
1388 BSS_HT bssht;
1389
1390 bool broadcom_cap_exist;
1391 bool ralink_cap_exist;
1392 bool atheros_cap_exist;
1393 bool cisco_cap_exist;
1394 bool unknown_cap_exist;
1395
1396 bool berp_info_valid;
1397 bool buseprotection;
1398
1399 struct list_head list;
1400};
1401
1402enum ieee80211_state {
1403
1404
1405 IEEE80211_NOLINK = 0,
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416 IEEE80211_ASSOCIATING,
1417 IEEE80211_ASSOCIATING_RETRY,
1418
1419
1420 IEEE80211_ASSOCIATING_AUTHENTICATING,
1421
1422
1423
1424
1425 IEEE80211_ASSOCIATING_AUTHENTICATED,
1426
1427
1428
1429
1430 IEEE80211_LINKED,
1431
1432
1433
1434
1435
1436
1437 IEEE80211_LINKED_SCANNING,
1438
1439};
1440
1441#define DEFAULT_MAX_SCAN_AGE (15 * HZ)
1442#define DEFAULT_FTS 2346
1443
1444#define CFG_IEEE80211_RESERVE_FCS (1<<0)
1445#define CFG_IEEE80211_COMPUTE_FCS (1<<1)
1446#define CFG_IEEE80211_RTS (1<<2)
1447
1448#define IEEE80211_24GHZ_MIN_CHANNEL 1
1449#define IEEE80211_24GHZ_MAX_CHANNEL 14
1450#define IEEE80211_24GHZ_CHANNELS (IEEE80211_24GHZ_MAX_CHANNEL - \
1451 IEEE80211_24GHZ_MIN_CHANNEL + 1)
1452
1453#define IEEE80211_52GHZ_MIN_CHANNEL 34
1454#define IEEE80211_52GHZ_MAX_CHANNEL 165
1455#define IEEE80211_52GHZ_CHANNELS (IEEE80211_52GHZ_MAX_CHANNEL - \
1456 IEEE80211_52GHZ_MIN_CHANNEL + 1)
1457
1458
1459
1460struct tx_pending {
1461 int frag;
1462 struct ieee80211_txb *txb;
1463};
1464
1465typedef struct _bandwidth_autoswitch {
1466 long threshold_20Mhzto40Mhz;
1467 long threshold_40Mhzto20Mhz;
1468 bool bforced_tx20Mhz;
1469 bool bautoswitch_enable;
1470} bandwidth_autoswitch, *pbandwidth_autoswitch;
1471
1472
1473
1474
1475#define REORDER_WIN_SIZE 128
1476#define REORDER_ENTRY_NUM 128
1477typedef struct _RX_REORDER_ENTRY {
1478 struct list_head List;
1479 u16 SeqNum;
1480 struct ieee80211_rxb *prxb;
1481} RX_REORDER_ENTRY, *PRX_REORDER_ENTRY;
1482
1483typedef enum _Fsync_State {
1484 Default_Fsync,
1485 HW_Fsync,
1486 SW_Fsync
1487} Fsync_State;
1488
1489
1490typedef enum _RT_PS_MODE {
1491 eActive,
1492 eMaxPs,
1493 eFastPs
1494} RT_PS_MODE;
1495
1496typedef enum _IPS_CALLBACK_FUNCION {
1497 IPS_CALLBACK_NONE = 0,
1498 IPS_CALLBACK_MGNT_LINK_REQUEST = 1,
1499 IPS_CALLBACK_JOIN_REQUEST = 2,
1500} IPS_CALLBACK_FUNCION;
1501
1502typedef enum _RT_JOIN_ACTION {
1503 RT_JOIN_INFRA = 1,
1504 RT_JOIN_IBSS = 2,
1505 RT_START_IBSS = 3,
1506 RT_NO_ACTION = 4,
1507} RT_JOIN_ACTION;
1508
1509typedef struct _IbssParms {
1510 u16 atimWin;
1511} IbssParms, *PIbssParms;
1512#define MAX_NUM_RATES 264
1513
1514
1515typedef enum _RT_RF_POWER_STATE {
1516 eRfOn,
1517 eRfSleep,
1518 eRfOff
1519} RT_RF_POWER_STATE;
1520
1521typedef struct _RT_POWER_SAVE_CONTROL {
1522
1523
1524
1525
1526 bool bInactivePs;
1527 bool bIPSModeBackup;
1528 bool bSwRfProcessing;
1529 RT_RF_POWER_STATE eInactivePowerState;
1530 struct work_struct InactivePsWorkItem;
1531 struct timer_list InactivePsTimer;
1532
1533
1534 IPS_CALLBACK_FUNCION ReturnPoint;
1535
1536
1537 bool bTmpBssDesc;
1538 RT_JOIN_ACTION tmpJoinAction;
1539 struct ieee80211_network tmpBssDesc;
1540
1541
1542 bool bTmpScanOnly;
1543 bool bTmpActiveScan;
1544 bool bTmpFilterHiddenAP;
1545 bool bTmpUpdateParms;
1546 u8 tmpSsidBuf[33];
1547 struct octet_string tmpSsid2Scan;
1548 bool bTmpSsid2Scan;
1549 u8 tmpNetworkType;
1550 u8 tmpChannelNumber;
1551 u16 tmpBcnPeriod;
1552 u8 tmpDtimPeriod;
1553 u16 tmpmCap;
1554 struct octet_string tmpSuppRateSet;
1555 u8 tmpSuppRateBuf[MAX_NUM_RATES];
1556 bool bTmpSuppRate;
1557 IbssParms tmpIbpm;
1558 bool bTmpIbpm;
1559
1560
1561
1562
1563 bool bLeisurePs;
1564
1565} RT_POWER_SAVE_CONTROL, *PRT_POWER_SAVE_CONTROL;
1566
1567typedef u32 RT_RF_CHANGE_SOURCE;
1568#define RF_CHANGE_BY_SW BIT(31)
1569#define RF_CHANGE_BY_HW BIT(30)
1570#define RF_CHANGE_BY_PS BIT(29)
1571#define RF_CHANGE_BY_IPS BIT(28)
1572#define RF_CHANGE_BY_INIT 0
1573
1574typedef enum {
1575 COUNTRY_CODE_FCC = 0,
1576 COUNTRY_CODE_IC = 1,
1577 COUNTRY_CODE_ETSI = 2,
1578 COUNTRY_CODE_SPAIN = 3,
1579 COUNTRY_CODE_FRANCE = 4,
1580 COUNTRY_CODE_MKK = 5,
1581 COUNTRY_CODE_MKK1 = 6,
1582 COUNTRY_CODE_ISRAEL = 7,
1583 COUNTRY_CODE_TELEC,
1584 COUNTRY_CODE_MIC,
1585 COUNTRY_CODE_GLOBAL_DOMAIN
1586} country_code_type_t;
1587
1588#define RT_MAX_LD_SLOT_NUM 10
1589typedef struct _RT_LINK_DETECT_T {
1590
1591 u32 NumRecvBcnInPeriod;
1592 u32 NumRecvDataInPeriod;
1593
1594 u32 RxBcnNum[RT_MAX_LD_SLOT_NUM];
1595 u32 RxDataNum[RT_MAX_LD_SLOT_NUM];
1596 u16 SlotNum;
1597 u16 SlotIndex;
1598
1599 u32 NumTxOkInPeriod;
1600 u32 NumRxOkInPeriod;
1601 bool bBusyTraffic;
1602} RT_LINK_DETECT_T, *PRT_LINK_DETECT_T;
1603
1604
1605struct ieee80211_device {
1606 struct net_device *dev;
1607 struct ieee80211_security sec;
1608
1609
1610
1611 u8 hwsec_active;
1612 bool is_silent_reset;
1613 bool ieee_up;
1614
1615 bool bSupportRemoteWakeUp;
1616 RT_PS_MODE dot11PowerSaveMode;
1617 bool actscanning;
1618 bool beinretry;
1619 RT_RF_POWER_STATE eRFPowerState;
1620 RT_RF_CHANGE_SOURCE RfOffReason;
1621 bool is_set_key;
1622
1623
1624
1625 PRT_HIGH_THROUGHPUT pHTInfo;
1626
1627
1628 spinlock_t bw_spinlock;
1629
1630 spinlock_t reorder_spinlock;
1631
1632
1633 u8 Regdot11HTOperationalRateSet[16];
1634 u8 dot11HTOperationalRateSet[16];
1635 u8 RegHTSuppRateSet[16];
1636 u8 HTCurrentOperaRate;
1637 u8 HTHighestOperaRate;
1638
1639 u8 bTxDisableRateFallBack;
1640 u8 bTxUseDriverAssingedRate;
1641 atomic_t atm_chnlop;
1642 atomic_t atm_swbw;
1643
1644
1645
1646
1647 struct list_head Tx_TS_Admit_List;
1648 struct list_head Tx_TS_Pending_List;
1649 struct list_head Tx_TS_Unused_List;
1650 struct tx_ts_record TxTsRecord[TOTAL_TS_NUM];
1651
1652 struct list_head Rx_TS_Admit_List;
1653 struct list_head Rx_TS_Pending_List;
1654 struct list_head Rx_TS_Unused_List;
1655 struct rx_ts_record RxTsRecord[TOTAL_TS_NUM];
1656
1657 RX_REORDER_ENTRY RxReorderEntry[128];
1658 struct list_head RxReorder_Unused_List;
1659
1660
1661
1662 u8 ForcedPriority;
1663
1664
1665
1666 struct net_device_stats stats;
1667 struct ieee80211_stats ieee_stats;
1668 struct ieee80211_softmac_stats softmac_stats;
1669
1670
1671 struct list_head network_free_list;
1672 struct list_head network_list;
1673 struct ieee80211_network *networks;
1674 int scans;
1675 int scan_age;
1676
1677 int iw_mode;
1678 struct iw_spy_data spy_data;
1679
1680 spinlock_t lock;
1681 spinlock_t wpax_suitlist_lock;
1682
1683 int tx_headroom;
1684
1685
1686 u32 config;
1687
1688
1689 int open_wep;
1690 int auth_mode;
1691 int reset_on_keychange;
1692
1693
1694
1695
1696 int host_encrypt;
1697 int host_encrypt_msdu;
1698 int host_decrypt;
1699
1700 int host_mc_decrypt;
1701
1702
1703
1704 int host_strip_iv_icv;
1705
1706 int host_open_frag;
1707 int host_build_iv;
1708 int ieee802_1x;
1709
1710
1711 bool bHalfWirelessN24GMode;
1712 int wpa_enabled;
1713 int drop_unencrypted;
1714 int tkip_countermeasures;
1715 int privacy_invoked;
1716 size_t wpa_ie_len;
1717 u8 *wpa_ie;
1718 u8 ap_mac_addr[6];
1719 u16 pairwise_key_type;
1720 u16 group_key_type;
1721 struct list_head crypt_deinit_list;
1722 struct ieee80211_crypt_data *crypt[WEP_KEYS];
1723 int tx_keyidx;
1724 struct timer_list crypt_deinit_timer;
1725 int crypt_quiesced;
1726
1727 int bcrx_sta_key;
1728
1729
1730
1731
1732
1733 struct ieee80211_frag_entry frag_cache[17][IEEE80211_FRAG_CACHE_LEN];
1734 unsigned int frag_next_idx[17];
1735 u16 fts;
1736#define DEFAULT_RTS_THRESHOLD 2346U
1737#define MIN_RTS_THRESHOLD 1
1738#define MAX_RTS_THRESHOLD 2346U
1739 u16 rts;
1740
1741
1742 u8 bssid[ETH_ALEN];
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752 struct ieee80211_network current_network;
1753
1754 enum ieee80211_state state;
1755
1756 int short_slot;
1757 int reg_mode;
1758 int mode;
1759 int modulation;
1760 int freq_band;
1761 int abg_true;
1762
1763
1764
1765
1766 short sync_scan_hurryup;
1767
1768 int perfect_rssi;
1769 int worst_rssi;
1770
1771 u16 prev_seq_ctl;
1772
1773
1774
1775 void *dot11d_info;
1776 bool bGlobalDomain;
1777 int rate;
1778 int basic_rate;
1779
1780 short active_scan;
1781
1782
1783 u16 softmac_features;
1784
1785
1786 u16 seq_ctrl[5];
1787
1788
1789 u16 associate_seq;
1790
1791
1792 u16 assoc_id;
1793
1794
1795 short ps;
1796 short sta_sleep;
1797 int ps_timeout;
1798 int ps_period;
1799 struct tasklet_struct ps_task;
1800 u32 ps_th;
1801 u32 ps_tl;
1802
1803 short raw_tx;
1804
1805 short queue_stop;
1806 short scanning;
1807 short proto_started;
1808
1809 struct mutex wx_mutex;
1810 struct mutex scan_mutex;
1811
1812 spinlock_t mgmt_tx_lock;
1813 spinlock_t beacon_lock;
1814
1815 short beacon_txing;
1816
1817 short wap_set;
1818 short ssid_set;
1819
1820 u8 wpax_type_set;
1821 u32 wpax_type_notify;
1822
1823
1824 s8 init_wmmparam_flag;
1825
1826 u8 qos_support;
1827
1828
1829 struct list_head ibss_mac_hash[IEEE_IBSS_MAC_HASH_SIZE];
1830
1831
1832 u16 last_rxseq_num[17];
1833 u16 last_rxfrag_num[17];
1834 unsigned long last_packet_time[17];
1835
1836
1837 unsigned long last_rx_ps_time;
1838
1839
1840 struct sk_buff *mgmt_queue_ring[MGMT_QUEUE_NUM];
1841 int mgmt_queue_head;
1842 int mgmt_queue_tail;
1843
1844#define IEEE80211_QUEUE_LIMIT 128
1845 u8 AsocRetryCount;
1846 unsigned int hw_header;
1847 struct sk_buff_head skb_waitQ[MAX_QUEUE_SIZE];
1848 struct sk_buff_head skb_aggQ[MAX_QUEUE_SIZE];
1849 struct sk_buff_head skb_drv_aggQ[MAX_QUEUE_SIZE];
1850 u32 sta_edca_param[4];
1851 bool aggregation;
1852
1853 bool enable_rx_imm_BA;
1854 bool bibsscoordinator;
1855
1856
1857
1858 bool bdynamic_txpower_enable;
1859
1860 bool bCTSToSelfEnable;
1861 u8 CTSToSelfTH;
1862
1863 u32 fsync_time_interval;
1864 u32 fsync_rate_bitmap;
1865 u8 fsync_rssi_threshold;
1866 bool bfsync_enable;
1867
1868 u8 fsync_multiple_timeinterval;
1869 u32 fsync_firstdiff_ratethreshold;
1870 u32 fsync_seconddiff_ratethreshold;
1871 Fsync_State fsync_state;
1872 bool bis_any_nonbepkts;
1873
1874 bandwidth_autoswitch bandwidth_auto_switch;
1875
1876 bool FwRWRF;
1877
1878
1879 RT_LINK_DETECT_T LinkDetectInfo;
1880
1881 RT_POWER_SAVE_CONTROL PowerSaveControl;
1882
1883
1884 struct tx_pending tx_pending;
1885
1886
1887 struct timer_list associate_timer;
1888
1889
1890 struct timer_list beacon_timer;
1891 struct work_struct associate_complete_wq;
1892 struct work_struct associate_procedure_wq;
1893 struct delayed_work softmac_scan_wq;
1894 struct delayed_work associate_retry_wq;
1895 struct delayed_work start_ibss_wq;
1896 struct work_struct wx_sync_scan_wq;
1897 struct workqueue_struct *wq;
1898
1899
1900
1901
1902
1903
1904 struct ieee80211_rxb *stats_IndicateArray[REORDER_WIN_SIZE];
1905
1906
1907 void (*set_security)(struct net_device *dev,
1908 struct ieee80211_security *sec);
1909
1910
1911
1912
1913
1914 int (*hard_start_xmit)(struct ieee80211_txb *txb,
1915 struct net_device *dev);
1916
1917 int (*reset_port)(struct net_device *dev);
1918 int (*is_queue_full)(struct net_device *dev, int pri);
1919
1920 int (*handle_management)(struct net_device *dev,
1921 struct ieee80211_network *network, u16 type);
1922 int (*is_qos_active)(struct net_device *dev, struct sk_buff *skb);
1923
1924
1925
1926
1927
1928
1929
1930
1931 int (*softmac_hard_start_xmit)(struct sk_buff *skb,
1932 struct net_device *dev);
1933
1934
1935
1936
1937
1938
1939
1940 void (*softmac_data_hard_start_xmit)(struct sk_buff *skb,
1941 struct net_device *dev, int rate);
1942
1943
1944
1945
1946
1947 void (*data_hard_stop)(struct net_device *dev);
1948
1949
1950 void (*data_hard_resume)(struct net_device *dev);
1951
1952
1953
1954
1955
1956 void (*set_chan)(struct net_device *dev, short ch);
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973 void (*scan_syncro)(struct net_device *dev);
1974 void (*start_scan)(struct net_device *dev);
1975 void (*stop_scan)(struct net_device *dev);
1976
1977
1978
1979
1980
1981
1982 void (*link_change)(struct net_device *dev);
1983
1984
1985
1986
1987
1988
1989
1990 void (*start_send_beacons)(struct net_device *dev, u16 tx_rate);
1991 void (*stop_send_beacons)(struct net_device *dev);
1992
1993
1994 void (*sta_wake_up)(struct net_device *dev);
1995 void (*ps_request_tx_ack)(struct net_device *dev);
1996 void (*enter_sleep_state)(struct net_device *dev, u32 th, u32 tl);
1997 short (*ps_is_queue_empty)(struct net_device *dev);
1998 int (*handle_beacon)(struct net_device *dev, struct ieee80211_beacon *beacon, struct ieee80211_network *network);
1999 int (*handle_assoc_response)(struct net_device *dev, struct ieee80211_assoc_response_frame *resp, struct ieee80211_network *network);
2000
2001
2002
2003 short (*check_nic_enough_desc)(struct net_device *dev, int queue_index);
2004
2005
2006 void (*SetBWModeHandler)(struct net_device *dev, enum ht_channel_width Bandwidth, enum ht_extension_chan_offset Offset);
2007
2008 bool (*GetNmodeSupportBySecCfg)(struct net_device *dev);
2009 void (*SetWirelessMode)(struct net_device *dev, u8 wireless_mode);
2010 bool (*GetHalfNmodeSupportByAPsHandler)(struct net_device *dev);
2011 void (*InitialGainHandler)(struct net_device *dev, u8 Operation);
2012
2013
2014
2015
2016 u8 priv[0];
2017};
2018
2019#define IEEE_A (1<<0)
2020#define IEEE_B (1<<1)
2021#define IEEE_G (1<<2)
2022#define IEEE_N_24G (1<<4)
2023#define IEEE_N_5G (1<<5)
2024#define IEEE_MODE_MASK (IEEE_A | IEEE_B | IEEE_G)
2025
2026
2027
2028
2029
2030
2031#define IEEE_SOFTMAC_SCAN (1<<2)
2032
2033
2034#define IEEE_SOFTMAC_ASSOCIATE (1<<3)
2035
2036
2037#define IEEE_SOFTMAC_PROBERQ (1<<4)
2038
2039
2040#define IEEE_SOFTMAC_PROBERS (1<<5)
2041
2042
2043
2044
2045
2046#define IEEE_SOFTMAC_TX_QUEUE (1<<7)
2047
2048
2049
2050
2051#define IEEE_SOFTMAC_SINGLE_QUEUE (1<<8)
2052
2053
2054
2055
2056#define IEEE_SOFTMAC_BEACONS (1<<6)
2057
2058static inline void *ieee80211_priv(struct net_device *dev)
2059{
2060 return ((struct ieee80211_device *)netdev_priv(dev))->priv;
2061}
2062
2063static inline int ieee80211_is_empty_essid(const char *essid, int essid_len)
2064{
2065
2066 if (essid_len == 1 && essid[0] == ' ')
2067 return 1;
2068
2069
2070 while (essid_len) {
2071 essid_len--;
2072 if (essid[essid_len] != '\0')
2073 return 0;
2074 }
2075
2076 return 1;
2077}
2078
2079static inline int ieee80211_is_valid_mode(struct ieee80211_device *ieee, int mode)
2080{
2081
2082
2083
2084
2085
2086
2087 if ((mode & IEEE_A) &&
2088 (ieee->modulation & IEEE80211_OFDM_MODULATION) &&
2089 (ieee->freq_band & IEEE80211_52GHZ_BAND))
2090 return 1;
2091
2092 if ((mode & IEEE_G) &&
2093 (ieee->modulation & IEEE80211_OFDM_MODULATION) &&
2094 (ieee->freq_band & IEEE80211_24GHZ_BAND))
2095 return 1;
2096
2097 if ((mode & IEEE_B) &&
2098 (ieee->modulation & IEEE80211_CCK_MODULATION) &&
2099 (ieee->freq_band & IEEE80211_24GHZ_BAND))
2100 return 1;
2101
2102 return 0;
2103}
2104
2105static inline int ieee80211_get_hdrlen(u16 fc)
2106{
2107 int hdrlen = IEEE80211_3ADDR_LEN;
2108
2109 switch (WLAN_FC_GET_TYPE(fc)) {
2110 case IEEE80211_FTYPE_DATA:
2111 if ((fc & IEEE80211_FCTL_FROMDS) && (fc & IEEE80211_FCTL_TODS))
2112 hdrlen = IEEE80211_4ADDR_LEN;
2113 if (IEEE80211_QOS_HAS_SEQ(fc))
2114 hdrlen += 2;
2115 break;
2116 case IEEE80211_FTYPE_CTL:
2117 switch (WLAN_FC_GET_STYPE(fc)) {
2118 case IEEE80211_STYPE_CTS:
2119 case IEEE80211_STYPE_ACK:
2120 hdrlen = IEEE80211_1ADDR_LEN;
2121 break;
2122 default:
2123 hdrlen = IEEE80211_2ADDR_LEN;
2124 break;
2125 }
2126 break;
2127 }
2128
2129 return hdrlen;
2130}
2131
2132static inline u8 *ieee80211_get_payload(struct rtl_80211_hdr *hdr)
2133{
2134 switch (ieee80211_get_hdrlen(le16_to_cpu(hdr->frame_ctl))) {
2135 case IEEE80211_1ADDR_LEN:
2136 return ((struct rtl_80211_hdr_1addr *)hdr)->payload;
2137 case IEEE80211_2ADDR_LEN:
2138 return ((struct rtl_80211_hdr_2addr *)hdr)->payload;
2139 case IEEE80211_3ADDR_LEN:
2140 return ((struct rtl_80211_hdr_3addr *)hdr)->payload;
2141 case IEEE80211_4ADDR_LEN:
2142 return ((struct rtl_80211_hdr_4addr *)hdr)->payload;
2143 }
2144 return NULL;
2145}
2146
2147static inline int ieee80211_is_ofdm_rate(u8 rate)
2148{
2149 switch (rate & ~IEEE80211_BASIC_RATE_MASK) {
2150 case IEEE80211_OFDM_RATE_6MB:
2151 case IEEE80211_OFDM_RATE_9MB:
2152 case IEEE80211_OFDM_RATE_12MB:
2153 case IEEE80211_OFDM_RATE_18MB:
2154 case IEEE80211_OFDM_RATE_24MB:
2155 case IEEE80211_OFDM_RATE_36MB:
2156 case IEEE80211_OFDM_RATE_48MB:
2157 case IEEE80211_OFDM_RATE_54MB:
2158 return 1;
2159 }
2160 return 0;
2161}
2162
2163static inline int ieee80211_is_cck_rate(u8 rate)
2164{
2165 switch (rate & ~IEEE80211_BASIC_RATE_MASK) {
2166 case IEEE80211_CCK_RATE_1MB:
2167 case IEEE80211_CCK_RATE_2MB:
2168 case IEEE80211_CCK_RATE_5MB:
2169 case IEEE80211_CCK_RATE_11MB:
2170 return 1;
2171 }
2172 return 0;
2173}
2174
2175
2176
2177void free_ieee80211(struct net_device *dev);
2178struct net_device *alloc_ieee80211(int sizeof_priv);
2179
2180int ieee80211_set_encryption(struct ieee80211_device *ieee);
2181
2182
2183
2184int ieee80211_encrypt_fragment(struct ieee80211_device *ieee,
2185 struct sk_buff *frag, int hdr_len);
2186
2187int ieee80211_xmit(struct sk_buff *skb, struct net_device *dev);
2188void ieee80211_txb_free(struct ieee80211_txb *txb);
2189
2190
2191
2192int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
2193 struct ieee80211_rx_stats *rx_stats);
2194void ieee80211_rx_mgt(struct ieee80211_device *ieee,
2195 struct rtl_80211_hdr_4addr *header,
2196 struct ieee80211_rx_stats *stats);
2197
2198
2199int ieee80211_wx_get_scan(struct ieee80211_device *ieee,
2200 struct iw_request_info *info,
2201 union iwreq_data *wrqu, char *key);
2202int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
2203 struct iw_request_info *info,
2204 union iwreq_data *wrqu, char *key);
2205int ieee80211_wx_get_encode(struct ieee80211_device *ieee,
2206 struct iw_request_info *info,
2207 union iwreq_data *wrqu, char *key);
2208int ieee80211_wx_get_encode_ext(struct ieee80211_device *ieee,
2209 struct iw_request_info *info,
2210 union iwreq_data *wrqu, char *extra);
2211int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
2212 struct iw_request_info *info,
2213 union iwreq_data *wrqu, char *extra);
2214int ieee80211_wx_set_auth(struct ieee80211_device *ieee,
2215 struct iw_request_info *info,
2216 struct iw_param *data, char *extra);
2217int ieee80211_wx_set_mlme(struct ieee80211_device *ieee,
2218 struct iw_request_info *info,
2219 union iwreq_data *wrqu, char *extra);
2220int ieee80211_wx_set_gen_ie(struct ieee80211_device *ieee, u8 *ie, size_t len);
2221
2222
2223short ieee80211_is_54g(const struct ieee80211_network *net);
2224short ieee80211_is_shortslot(const struct ieee80211_network *net);
2225int ieee80211_rx_frame_softmac(struct ieee80211_device *ieee,
2226 struct sk_buff *skb,
2227 struct ieee80211_rx_stats *rx_stats,
2228 u16 type, u16 stype);
2229void ieee80211_softmac_new_net(struct ieee80211_device *ieee,
2230 struct ieee80211_network *net);
2231
2232void SendDisassociation(struct ieee80211_device *ieee, u8 *asSta, u8 asRsn);
2233void ieee80211_softmac_xmit(struct ieee80211_txb *txb,
2234 struct ieee80211_device *ieee);
2235
2236void ieee80211_stop_send_beacons(struct ieee80211_device *ieee);
2237void notify_wx_assoc_event(struct ieee80211_device *ieee);
2238void ieee80211_softmac_check_all_nets(struct ieee80211_device *ieee);
2239void ieee80211_start_bss(struct ieee80211_device *ieee);
2240void ieee80211_start_master_bss(struct ieee80211_device *ieee);
2241void ieee80211_start_ibss(struct ieee80211_device *ieee);
2242void ieee80211_softmac_init(struct ieee80211_device *ieee);
2243void ieee80211_softmac_free(struct ieee80211_device *ieee);
2244void ieee80211_associate_abort(struct ieee80211_device *ieee);
2245void ieee80211_disassociate(struct ieee80211_device *ieee);
2246void ieee80211_stop_scan(struct ieee80211_device *ieee);
2247void ieee80211_start_scan_syncro(struct ieee80211_device *ieee);
2248void ieee80211_check_all_nets(struct ieee80211_device *ieee);
2249void ieee80211_start_protocol(struct ieee80211_device *ieee);
2250void ieee80211_stop_protocol(struct ieee80211_device *ieee);
2251void ieee80211_softmac_start_protocol(struct ieee80211_device *ieee);
2252void ieee80211_softmac_stop_protocol(struct ieee80211_device *ieee);
2253void ieee80211_reset_queue(struct ieee80211_device *ieee);
2254void ieee80211_wake_queue(struct ieee80211_device *ieee);
2255void ieee80211_stop_queue(struct ieee80211_device *ieee);
2256struct sk_buff *ieee80211_get_beacon(struct ieee80211_device *ieee);
2257void ieee80211_start_send_beacons(struct ieee80211_device *ieee);
2258void ieee80211_stop_send_beacons(struct ieee80211_device *ieee);
2259int ieee80211_wpa_supplicant_ioctl(struct ieee80211_device *ieee,
2260 struct iw_point *p);
2261void notify_wx_assoc_event(struct ieee80211_device *ieee);
2262void ieee80211_ps_tx_ack(struct ieee80211_device *ieee, short success);
2263
2264void softmac_mgmt_xmit(struct sk_buff *skb, struct ieee80211_device *ieee);
2265
2266
2267void ieee80211_tkip_null(void);
2268
2269int ieee80211_crypto_init(void);
2270void ieee80211_crypto_deinit(void);
2271int ieee80211_crypto_tkip_init(void);
2272void ieee80211_crypto_tkip_exit(void);
2273int ieee80211_crypto_ccmp_init(void);
2274void ieee80211_crypto_ccmp_exit(void);
2275int ieee80211_crypto_wep_init(void);
2276void ieee80211_crypto_wep_exit(void);
2277
2278
2279
2280int ieee80211_wx_get_wap(struct ieee80211_device *ieee,
2281 struct iw_request_info *info,
2282 union iwreq_data *wrqu, char *ext);
2283
2284int ieee80211_wx_set_wap(struct ieee80211_device *ieee,
2285 struct iw_request_info *info,
2286 union iwreq_data *awrq,
2287 char *extra);
2288
2289int ieee80211_wx_get_essid(struct ieee80211_device *ieee,
2290 struct iw_request_info *a,
2291 union iwreq_data *wrqu, char *b);
2292
2293int ieee80211_wx_set_rate(struct ieee80211_device *ieee,
2294 struct iw_request_info *info,
2295 union iwreq_data *wrqu, char *extra);
2296
2297int ieee80211_wx_get_rate(struct ieee80211_device *ieee,
2298 struct iw_request_info *info,
2299 union iwreq_data *wrqu, char *extra);
2300
2301int ieee80211_wx_set_mode(struct ieee80211_device *ieee,
2302 struct iw_request_info *a,
2303 union iwreq_data *wrqu, char *b);
2304
2305int ieee80211_wx_set_scan(struct ieee80211_device *ieee,
2306 struct iw_request_info *a,
2307 union iwreq_data *wrqu, char *b);
2308
2309int ieee80211_wx_set_essid(struct ieee80211_device *ieee,
2310 struct iw_request_info *a,
2311 union iwreq_data *wrqu, char *extra);
2312
2313int ieee80211_wx_get_mode(struct ieee80211_device *ieee,
2314 struct iw_request_info *a,
2315 union iwreq_data *wrqu, char *b);
2316
2317int ieee80211_wx_set_freq(struct ieee80211_device *ieee,
2318 struct iw_request_info *a,
2319 union iwreq_data *wrqu, char *b);
2320
2321int ieee80211_wx_get_freq(struct ieee80211_device *ieee,
2322 struct iw_request_info *a,
2323 union iwreq_data *wrqu, char *b);
2324
2325
2326int ieee80211_debug_init(void);
2327void ieee80211_debug_exit(void);
2328
2329
2330void ieee80211_wx_sync_scan_wq(struct work_struct *work);
2331
2332
2333int ieee80211_wx_set_rawtx(struct ieee80211_device *ieee,
2334 struct iw_request_info *info,
2335 union iwreq_data *wrqu, char *extra);
2336
2337int ieee80211_wx_get_name(struct ieee80211_device *ieee,
2338 struct iw_request_info *info,
2339 union iwreq_data *wrqu, char *extra);
2340
2341int ieee80211_wx_set_power(struct ieee80211_device *ieee,
2342 struct iw_request_info *info,
2343 union iwreq_data *wrqu, char *extra);
2344
2345int ieee80211_wx_get_power(struct ieee80211_device *ieee,
2346 struct iw_request_info *info,
2347 union iwreq_data *wrqu, char *extra);
2348
2349int ieee80211_wx_set_rts(struct ieee80211_device *ieee,
2350 struct iw_request_info *info,
2351 union iwreq_data *wrqu, char *extra);
2352
2353int ieee80211_wx_get_rts(struct ieee80211_device *ieee,
2354 struct iw_request_info *info,
2355 union iwreq_data *wrqu, char *extra);
2356
2357#define MAX_RECEIVE_BUFFER_SIZE 9100
2358void HTDebugHTCapability(u8 *CapIE, u8 *TitleString);
2359void HTDebugHTInfo(u8 *InfoIE, u8 *TitleString);
2360
2361void HTSetConnectBwMode(struct ieee80211_device *ieee,
2362 enum ht_channel_width Bandwidth, enum ht_extension_chan_offset Offset);
2363void HTUpdateDefaultSetting(struct ieee80211_device *ieee);
2364void HTConstructCapabilityElement(struct ieee80211_device *ieee, u8 *posHTCap,
2365 u8 *len, u8 isEncrypt);
2366void HTConstructInfoElement(struct ieee80211_device *ieee, u8 *posHTInfo,
2367 u8 *len, u8 isEncrypt);
2368void HTConstructRT2RTAggElement(struct ieee80211_device *ieee, u8 *posRT2RTAgg,
2369 u8 *len);
2370void HTOnAssocRsp(struct ieee80211_device *ieee);
2371void HTInitializeHTInfo(struct ieee80211_device *ieee);
2372void HTInitializeBssDesc(PBSS_HT pBssHT);
2373void HTResetSelfAndSavePeerSetting(struct ieee80211_device *ieee,
2374 struct ieee80211_network *pNetwork);
2375void HTUpdateSelfAndPeerSetting(struct ieee80211_device *ieee,
2376 struct ieee80211_network *pNetwork);
2377u8 HTGetHighestMCSRate(struct ieee80211_device *ieee,
2378 u8 *pMCSRateSet, u8 *pMCSFilter);
2379extern u8 MCS_FILTER_ALL[];
2380extern u16 MCS_DATA_RATE[2][2][77];
2381u8 HTCCheck(struct ieee80211_device *ieee, u8 *pFrame);
2382void HTResetIOTSetting(PRT_HIGH_THROUGHPUT pHTInfo);
2383bool IsHTHalfNmodeAPs(struct ieee80211_device *ieee);
2384u16 TxCountToDataRate(struct ieee80211_device *ieee, u8 nDataRate);
2385
2386int ieee80211_rx_ADDBAReq(struct ieee80211_device *ieee, struct sk_buff *skb);
2387int ieee80211_rx_ADDBARsp(struct ieee80211_device *ieee, struct sk_buff *skb);
2388int ieee80211_rx_DELBA(struct ieee80211_device *ieee, struct sk_buff *skb);
2389void TsInitAddBA(struct ieee80211_device *ieee, struct tx_ts_record *pTS,
2390 u8 Policy, u8 bOverwritePending);
2391void TsInitDelBA(struct ieee80211_device *ieee,
2392 struct ts_common_info *pTsCommonInfo, enum tr_select TxRxSelect);
2393void BaSetupTimeOut(struct timer_list *t);
2394void TxBaInactTimeout(struct timer_list *t);
2395void RxBaInactTimeout(struct timer_list *t);
2396void ResetBaEntry(struct ba_record *pBA);
2397
2398bool GetTs(
2399 struct ieee80211_device *ieee,
2400 struct ts_common_info **ppTS,
2401 u8 *Addr,
2402 u8 TID,
2403 enum tr_select TxRxSelect,
2404 bool bAddNewTs
2405 );
2406void TSInitialize(struct ieee80211_device *ieee);
2407void TsStartAddBaProcess(struct ieee80211_device *ieee, struct tx_ts_record *pTxTS);
2408void RemovePeerTS(struct ieee80211_device *ieee, u8 *Addr);
2409void RemoveAllTS(struct ieee80211_device *ieee);
2410void ieee80211_softmac_scan_syncro(struct ieee80211_device *ieee);
2411
2412extern const long ieee80211_wlan_frequencies[];
2413
2414static inline void ieee80211_increment_scans(struct ieee80211_device *ieee)
2415{
2416 ieee->scans++;
2417}
2418
2419static inline int ieee80211_get_scans(struct ieee80211_device *ieee)
2420{
2421 return ieee->scans;
2422}
2423
2424static inline const char *escape_essid(const char *essid, u8 essid_len)
2425{
2426 static char escaped[IW_ESSID_MAX_SIZE * 2 + 1];
2427
2428 if (ieee80211_is_empty_essid(essid, essid_len)) {
2429 memcpy(escaped, "<hidden>", sizeof("<hidden>"));
2430 return escaped;
2431 }
2432
2433 snprintf(escaped, sizeof(escaped), "%*pEn", essid_len, essid);
2434 return escaped;
2435}
2436
2437
2438
2439
2440short check_nic_enough_desc(struct net_device *dev, int queue_index);
2441int ieee80211_data_xmit(struct sk_buff *skb, struct net_device *dev);
2442int ieee80211_parse_info_param(struct ieee80211_device *ieee,
2443 struct ieee80211_info_element *info_element,
2444 u16 length,
2445 struct ieee80211_network *network,
2446 struct ieee80211_rx_stats *stats);
2447
2448void ieee80211_indicate_packets(struct ieee80211_device *ieee,
2449 struct ieee80211_rxb **prxbIndicateArray,
2450 u8 index);
2451#define RT_ASOC_RETRY_LIMIT 5
2452#endif
2453