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