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