summaryrefslogtreecommitdiff
path: root/network/wlan/WDI/HEADER/TDLSType.h
blob: d81c456816b258c0bdbfa3a9fecf6c322a6a449c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
#ifndef __INC_TDLSTYPE_H
#define __INC_TDLSTYPE_H

#if (TDLS_SUPPORT==1)

#define MAX_TDLS_PAIR		16
#define MAX_BLOCKED_PEER	8

#define TDLSETUP_DELAY_LONG			60000
#define TDLSETUP_DELAY_SHORT			5000
#define TDLS_SETUP_TIMEOUT			5000
#define TDLS_PEER_REACHABLE_PERIOD	2000
#define TDLS_LINK_ALIVE_PERIOD			2000
#define TDLS_BLOCK_PEER_PERIOD		60000
#define TDLS_TEARDOWN_CHECK			100
#define TDLS_CHNLSW_TIMEOUT			5000
#define TDLS_PTI_TIMEOUT_CNT			10

#define TDLS_TYPE_NONE				0
#define TDLS_TYPE_SETUPREQ		1
#define TDLS_TYPE_SETUPRSP		2
#define TDLS_TYPE_SETUPCFRM		3
#define TDLS_TYPE_TEARDOWN		4
#define TDLS_TYPE_DISCOVERYREQ	5
#define TDLS_TYPE_DISCOVERYRSP	6
#define TDLS_TYPE_TRAFFICIND		7
#define TDLS_TYPE_TRAFFICRSP		8
#define TDLS_TYPE_CHNLSWITCHREQ	9
#define TDLS_TYPE_CHNLSWITCHRSP	10
#define TDLS_TYPE_UNKNOWN		15

#define TDLS_THRESHOLD_AP_HIGH	80
#define TDLS_THRESHOLD_PEER_LOW	10

#define MAX_TDLS_SLOT_NUM		5

#define TDLS_TIMEOUT_INTERVAL_TYPE	2
#define TDLS_TIMEOUT_KEY_LIFETIME		600		// seconds
#define TDLS_TIMEOUT_MIN_LIFETIME		300
#define TDLS_TIMEOUT_MAX_LIFETIME		0xffffffff

#define TDLS_MAX_GEN_KEY_LENGTH		64

#define SWITCH_CHANNEL_DELAY			2*sTU

typedef enum _TDLS_TIMER_CONTROL{
	TDLS_TIMER_CONTROL_INIT,
	TDLS_TIMER_CONTROL_SET,
	TDLS_TIMER_CONTROL_CANCEL,
	TDLS_TIMER_CONTROL_RELEASE
} TDLS_TIMER_CONTROL;

typedef enum _TDLS_LINK_STATUS{
	TDLS_LINK_STATUS_DISCONNECT		= 0x00,
	TDLS_LINK_STATUS_KEEP_CONNECT	= 0x01,
	TDLS_LINK_STATUS_PEER_SS_WEEK	= 0x02,
	TDLS_LINK_STATUS_PEER_DISAPPEAR	= 0x04,
	TDLS_LINK_STATUS_AP_SS_STRONG	= 0x08
} TDLS_LINK_STATUS;

typedef enum _TDLS_SETUP_PROGRESS_STAGE{
	TDLS_SETUP_PROGRESS_IDLE			= 0x00,
	TDLS_SETUP_PROGRESS_SEND_REQ	= 0x01,
	TDLS_SETUP_PROGRESS_RECV_REQ	= 0x02,
	TDLS_SETUP_PROGRESS_RECV_RSP	= 0x04,
	TDLS_SETUP_PROGRESS_DONE		= 0x08
} TDLS_SETUP_PROGRESS_STAGE;

typedef enum _TDLS_MAX_PEER_CAP{
	TDLS_MAX_PEER_CAP_B			= 0x00,
	TDLS_MAX_PEER_CAP_G			= 0x01
} TDLS_MAX_PEER_CAP;

typedef enum _TDLS_EXT_CAP_SUPPORT{
	TDLS_EXT_CAP_SUPPORT_NONE			= 0x00,
	TDLS_EXT_CAP_SUPPORT_BU_STA			= 0x01,
	TDLS_EXT_CAP_SUPPORT_SLEEP_STA		= 0x02,
	TDLS_EXT_CAP_SUPPORT_CHNLSWITCH	= 0x04
}TDLS_EXT_CAP_SUPPORT;

typedef enum _RT_TDLS_PS_STATE{
	RT_TDLS_PS_NONE				= 0,
	RT_TDLS_PS_SLEEP				= 1,
	RT_TDLS_PS_TRIGGER			= 2,
	RT_TDLS_PS_ACTIVE_PTI			= 3,
	RT_TDLS_PS_ACTIVE_AWAKE		= 4,
	RT_TDLS_PS_ENTER_SLEEP		= 5
}RT_TDLS_PS_STATE;

typedef enum _TDLS_TX_FEEDBACK_INDIC{
	TDLS_TX_FEEDBACK_NONE			= 0,
	TDLS_TX_FEEDBACK_TEARDOWN		= 1,
	TDLS_TX_FEEDBACK_CHNLSWITCH		= 2,
	TDLS_TX_FEEDBACK_NULL			= 3,
}TDLS_TX_FEEDBACK_INDIC;

typedef enum _TDLS_MSG_TIMER_CTRL{
	TDLS_MSG_TIMER_NONE			= 0,
	TDLS_MSG_TIMER_SETUPMSG		= 1,
	TDLS_MSG_TIMER_TEARDOWN	= 2,
	TDLS_MSG_TIMER_PTI			= 3,
	TDLS_MSG_TIMER_CS_REQ		= 4,
	TDLS_MSG_TIMER_CS_RSP		= 5,
	TDLS_MSG_TIMER_CS_NULL		= 6
}TDLS_MSG_TIMER_CTRL;

enum _TDLS_DELAY_LEVEL{
	TDLS_DELAY_LEVEL_NONE	= 0,
	TDLS_DELAY_LEVEL_SHORT	= 1,
	TDLS_DELAY_LEVEL_LONG	= 2
};

enum _TDLS_BLOCK_DIR{
	TDLS_BLOCK_NONE			= 0x00,
	TDLS_BLOCK_PASSIVE		= 0x01,
	TDLS_BLOCK_ACTIVE			= 0x02
};

enum _TDLS_ROLL{
	TDLS_ROLL_NONE			= 0,
	TDLS_ROLL_INITIATOR		= 1,
	TDLS_ROLL_RESPONDER		= 2,
};

enum _TDLS_STA_TEST_CHARACTER{
	TDLS_INITIATOR				= 0x01,
	TDLS_RESPONDER			= 0x02,
	TDLS_WRONGBSSID			= 0x04,
	TDLS_RESENDREQ			= 0x08,
	TDLS_REJECT_CFRM			= 0x10,
	TDLS_PROHIBIT				= 0x20,
	TDLS_KEY_LIFETIME			= 0x40,
	TDLS_IGNORE_TPK_TIMER	= 0x80,
	TDLS_RADIO_OFF			= 0x100,
	TDLS_CS_CHANNEL			= 0x200,
	TDLS_CS_BANDWIDTH		= 0x400,
	TDLS_CS_REJECTREQ			= 0x800,
	TDLS_CS_UNSOLIRSP			= 0x1000,
	TDLS_ACCEPT_WEAK_SEC	= 0x2000,
};

enum _TDLS_AGGR_RATIO{
	TDLS_AGGR_RATIO_NONE	= 0,
	TDLS_AGGR_RATIO_20MHZ	= 1,
	TDLS_AGGR_RATIO_40MHZ	= 2
};
	
enum _TDLSSecurityState{
	TDLSStateSuccess = 0,
	TDLSStateDiscard = 1,
	TDLSStateFail = 2	
};

enum _TDLS_CS_STAGE{
	TDLS_CS_OnBaseChannel		= 0,
	TDLS_CS_ToOffChannel		= 1,
	TDLS_CS_OnOffChannel		= 2,
	TDLS_CS_BackBaseChannel	= 3
};

#define	RT_TDLS_OP_CONFIG_DISALBE_TDLS			(u1Byte)0x00
#define	RT_TDLS_OP_CONFIG_ENABLE_TDLS			(u1Byte)0x01
#define	RT_TDLS_OP_CONFIG_DM_DISABLE			(u1Byte)0x02
#define	RT_TDLS_OP_CONFIG_DM_ENABLE				(u1Byte)0x03
#define	RT_TDLS_OP_CONFIG_SEND_DISC				(u1Byte)0x04
#define	RT_TDLS_OP_CONFIG_WIFI_TEST_MODE		(u1Byte)0x05
#define	RT_TDLS_OP_CONFIG_NORMAL_MODE			(u1Byte)0x06
#define	RT_TDLS_OP_CONFIG_START_TDLS_PEER		(u1Byte)0x07
#define	RT_TDLS_OP_CONFIG_TEAR_DOWN_PEER		(u1Byte)0x08
#define	RT_TDLS_OP_CONFIG_PEER_ENTER_UAPSD_PS	(u1Byte)0x09
#define	RT_TDLS_OP_CONFIG_ENABLE_CHNL_SWITCH	(u1Byte)0x0A
#define	RT_TDLS_OP_CONFIG_DISABLE_CHNL_SWITCH	(u1Byte)0x0B
#define	RT_TDLS_OP_CONFIG_PROBE_REQ				(u1Byte)0x0C
#define	RT_TDLS_OP_CONFIG_ACCEPT_WEAK_SEC		(u1Byte)0x0D


#define	TDLS_ENCAP_ACTION_HEADER_OFFSET			(3 + 5 + 1)	// LLC  + SNAP + Payload Type
#define	TDLS_ENCAP_MGNT_FRAME_HEADER_OFFSET		(3 + 5 + 1 + 1 + 3 + 1)	// LLC  + SNAP + Payload Type + Category + OUI + FrameBody Type


//3 Category
#define GET_TDLS_FRAME_CATEGORY_CODE(_pStart)			ReadEF1Byte( (pu1Byte)(_pStart) )
#define SET_TDLS_FRAME_CATEGORY_CODE(_pStart, _val) 		WriteEF1Byte( ((pu1Byte)(_pStart)), _val)

//3 Action Code
#define GET_TDLS_FRAME_ACTION_CODE(_pStart)				ReadEF1Byte( (pu1Byte)(_pStart)+1 )
#define SET_TDLS_FRAME_ACTION_CODE(_pStart, _val)			WriteEF1Byte( ((pu1Byte)(_pStart))+1, _val)

//3 Dialog Token
#define FRAME_OFFSET_TDLS_DIALOG_TOKEN(_pStart)			( ( (GET_TDLS_FRAME_ACTION_CODE(_pStart) == 0) || ( GET_TDLS_FRAME_ACTION_CODE(_pStart) == 0x04) || (GET_TDLS_FRAME_ACTION_CODE(_pStart) >= 0x09))?2:4 )
#define GET_TDLS_FRAME_DIALOG_TOKEN(_pStart)				( ((pu1Byte)(_pStart))+FRAME_OFFSET_TDLS_DIALOG_TOKEN(_pStart))

//3 Status Code
#define GET_TDLS_FRAME_STATUS_CODE(_pStart)				ReadEF2Byte( ((pu1Byte)(_pStart)) + 2)

//3 Capability
#define FRAME_OFFSET_TDLS_CAPABILITY(_pStart)				( ( GET_TDLS_FRAME_ACTION_CODE(_pStart) == 0)?23:25 )
#define GET_TDLS_SETUPREQ_FRAME_CAP(_pStart)				( ((pu1Byte)(_pStart))+FRAME_OFFSET_TDLS_CAPABILITY(_pStart))

//3 Extended Capability
#define GET_EXT_CAP_ELE_PEER_UAPSD_BUSTA(_pEleStart)		LE_BITS_TO_4BYTE((_pEleStart), 28, 1)
#define SET_EXT_CAP_ELE_PEER_UAPSD_BUSTA(_pEleStart, _val)				SET_BITS_TO_LE_4BYTE((_pEleStart), 28, 1, _val)
#define SET_EXT_CAP_ELE_PEER_PSM(_pEleStart, _val)			SET_BITS_TO_LE_4BYTE((_pEleStart), 29, 1, _val)
#define GET_EXT_CAP_ELE_CHNL_SWITCH(_pEleStart)			LE_BITS_TO_4BYTE((_pEleStart), 30, 1)
#define SET_EXT_CAP_ELE_CHNL_SWITCH(_pEleStart, _val)		SET_BITS_TO_LE_4BYTE((_pEleStart), 30, 1, _val)
#define GET_EXT_CAP_ELE_TDLS_SUPPORT(_pEleStart)			LE_BITS_TO_4BYTE((_pEleStart+4), 5, 1)
#define SET_EXT_CAP_ELE_TDLS_SUPPORT(_pEleStart, _val)		SET_BITS_TO_LE_4BYTE((_pEleStart+4), 5, 1,  _val)
#define GET_EXT_CAP_ELE_TDLS_PROHIBITED(_pEleStart)		LE_BITS_TO_4BYTE((_pEleStart+4), 6, 1)
#define SET_EXT_CAP_ELE_TDLS_PROHIBITED(_pEleStart, _val)	SET_BITS_TO_LE_4BYTE((_pEleStart+4), 6, 1, _val)
#define GET_EXT_CAP_ELE_CHNL_SWITCH_PROHIBITED(_pEleStart)	LE_BITS_TO_4BYTE((_pEleStart+4), 7, 1)
#define SET_EXT_CAP_ELE_CHNL_SWITCH_PROHIBITED(_pEleStart, _val)		SET_BITS_TO_LE_4BYTE((_pEleStart+4), 7, 1, _val)

//3 PU Buffer Status
#define GET_PU_BUFFER_STATUS_ELE_AC_BK_TRAFFIC(_pEleStart)		LE_BITS_TO_1BYTE((_pEleStart), 0, 1)
#define SET_PU_BUFFER_STATUS_ELE_AC_BK_TRAFFIC(_pEleStart, _val)	SET_BITS_TO_LE_1BYTE(_pEleStart), 0, 1, _val)
#define GET_PU_BUFFER_STATUS_ELE_AC_BE_TRAFFIC(_pEleStart)		LE_BITS_TO_1BYTE((_pEleStart), 1, 1)
#define SET_PU_BUFFER_STATUS_ELE_AC_BE_TRAFFIC(_pEleStart, _val)	SET_BITS_TO_LE_1BYTE((_pEleStart), 1, 1, _val)
#define GET_PU_BUFFER_STATUS_ELE_AC_VI_TRAFFIC(_pEleStart)		LE_BITS_TO_1BYTE((_pEleStart), 2, 1)
#define SET_PU_BUFFER_STATUS_ELE_AC_VI_TRAFFIC(_pEleStart, _val)	SET_BITS_TO_LE_1BYTE((_pEleStart), 2, 1, _val)
#define GET_PU_BUFFER_STATUS_ELE_AC_VO_TRAFFIC(_pEleStart)		LE_BITS_TO_1BYTE((_pEleStart), 3, 1)
#define SET_PU_BUFFER_STATUS_ELE_AC_VO_TRAFFIC(_pEleStart, _val)	SET_BITS_TO_LE_1BYTE((_pEleStart), 3, 1, _val)

//3 Channel Switch
#define GET_TDLS_TARGET_CHANNEL(_pStart)					ReadEF1Byte( ((pu1Byte)(_pStart)) + 2)
#define GET_TDLS_REGULATORY_CLASS(_pStart)				ReadEF1Byte( ((pu1Byte)(_pStart)) + 3)
#define GET_TDLS_SWITCHTIMING_IE_TIME(_pStart)			ReadEF2Byte( (pu1Byte)(_pStart) )
#define SET_TDLS_SWITCHTIMING_IE_TIME(_pStart, _val)		WriteEF2Byte((pu1Byte)(_pStart), _val)
#define GET_TDLS_SWITCHTIMING_IE_TIMEOUT(_pStart)		ReadEF2Byte( ((pu1Byte)(_pStart)) + 2)
#define SET_TDLS_SWITCHTIMING_IE_TIMEOUT(_pStart, _val)	WriteEF2Byte( ((pu1Byte)(_pStart)) + 2, _val)

//
// Link Identifier Element format
//
// |ID 		| Length	| BSSID	| TDLS initiator	| TDLS responder	|
// |			|		|		| STA Address		| STA Address		|
// |1 Byte	| 1 Byte	| 6 Bytes	| 6 Bytes	 		| 6 Bytes			|
//
#define LINK_ID_SIZE		(6+6+6)
typedef u1Byte			LINK_IDENTIFIER[LINK_ID_SIZE], *PLINK_IDENTIFIER;


#define SET_TDLS_LINKID_BSSID(_pStart, _val) \
	cpMacAddr((pu1Byte)(_pStart), (pu1Byte)(_val))
#define GET_TDLS_LINKID_BSSID(_pStart, _val) \
	cpMacAddr((pu1Byte)(_val), (pu1Byte)(_pStart))
#define SET_TDLS_LINKID_INITIATOR(_pStart, _val) \
	cpMacAddr((pu1Byte)((_pStart)+6), (pu1Byte)(_val))
#define GET_TDLS_LINKID_INITIATOR(_pStart, _val) \
	cpMacAddr((pu1Byte)(_val), (pu1Byte)(_pStart+6))
#define SET_TDLS_LINKID_RESPONDER(_pStart, _val) \
	cpMacAddr((pu1Byte)((_pStart)+6+6), (pu1Byte)(_val))
#define GET_TDLS_LINKID_RESPONDER(_pStart, _val) \
	cpMacAddr((pu1Byte)(_val), (pu1Byte)(_pStart+6+6))

#define SET_TDLS_SETUP_REQ_CAP(_pStart, _val) 	WriteEF2Byte((pu1Byte)(_pStart), _val)


typedef struct _RT_REGULATORY_CLASS
{
	u1Byte	Channel[MAX_CHANNEL_NUM];
	u1Byte	Len;
}RT_REGULATORY_CLASS, *PRT_REGULATORY_CLASS;

typedef struct _CHNL_TUPLE{
	u1Byte	FirstChnl;
	u1Byte	NumChnls;
} CHNL_TUPLE, *PCHNL_TUPLE;

typedef struct _CHNLINFO_TUPLE{
	u1Byte				ChnlNum;
	BOOLEAN				bw40M;
	EXTCHNL_OFFSET	ChnlOffset;
} CHNLINFO_TUPLE, *PCHNLINFO_TUPLE;

typedef struct _CHNLSWITCH_TIMING{
	u2Byte				SwitchTime;
	u2Byte				SwitchTimeout;
} CHNLSWITCH_TIMING, *PCHNLSWITCH_TIMING;
typedef struct _LINK_CAP{
	u2Byte				WirelessMode;
	u2Byte				RateCap;
	u2Byte				AggregationCap;
} LINK_CAP, *PLINK_CAP;

typedef struct _TDLS_LINK_INFO{
	// Count Traffic
	u4Byte				NumRxDataCount;
	u4Byte				RxDataCount[MAX_TDLS_SLOT_NUM];
	u2Byte				SlotNum;
	u2Byte				SlotIndex;

	// Peer Capability on Direct Link
	BOOLEAN				bBW40MHz;
	BOOLEAN				bShortGIEnabled;
	LINK_CAP			DirectLinkCapInfo;
	RT_ENC_ALG			DirectLinkEncAlgorithm;

	// Peer Capability to AP
	BOOLEAN				BssbBW40MHz;
	BOOLEAN				BssbShortGIEnabled;
	LINK_CAP			BssCapInfo;
	RT_ENC_ALG			BssEncAlgorithm;
	
	// Link maintenance
	u2Byte				KeepConnectCount;

	// Link Status
	u2Byte				LinkStatus;
	BOOLEAN				bUseDirectLink;
	u4Byte				TimeoutValue;
} TDLS_LINK_INFO, *PTDLS_LINK_INFO;

typedef struct _TDLS_CHNLSWITCH_INFO
{
	CHNLINFO_TUPLE		CurrentChnl;
	CHNLINFO_TUPLE		TargetChnl;
	CHNLSWITCH_TIMING	SwitchTiming;
	CHNLSWITCH_TIMING	MaxSwitchTiming;
}TDLS_CHNLSWITCH_INFO, *PTDLS_CHNLSWITCH_INFO;

typedef struct _TDLS_BLOCKED_RECORD{
	u1Byte				Addr[6];
	u2Byte				BlockedLevel;
	u8Byte				StartBlockTime;
	u8Byte				BlockDuration;
} TDLS_BLOCKED_RECORD, *PTDLS_BLOCKED_RECORD;

#define GET_TDLS_RSNIE_VERSION(_pStart) \
	ReadEF2Byte((pu1Byte)(_pStart))
#define GET_TDLS_RSNIE_PAIRWISESUITECOUNT(_pStart)\
	ReadEF2Byte((pu1Byte)(_pStart)+6)
	

typedef struct _FAST_BSS_TRANSITION{
	u1Byte				MICControl[2];
	u1Byte				MIC[16];
	u1Byte				ANonce[32];
	u1Byte				SNonce[32];
}FAST_BSS_TRANSITION, *PFAST_BSS_TRANSITION;

#define SET_FT_MICControl(_pStart, _val)	WriteEF2Byte((pu1Byte)(_pStart), _val)


//
// Timeout Interval element format
//
// |ID 		| Length	| Timeout  		| Timeout		|
// |              |           	| Interval Type	| Interval Value	|
// |1Byte	| 1Byte	| 1 Byte			| 4 Byte			|
//
#define TIMEOUT_IE_SIZE		5
typedef u1Byte			TIMEOUT_IE[TIMEOUT_IE_SIZE], *PTIMEOUT_IE;

#define GET_TDLS_TIMEOUTIE_TIMEOUT_TYPE(_pStart) \
	ReadEF1Byte((pu1Byte)(_pStart))
#define SET_TDLS_TIMEOUTIE_TIMEOUT_TYPE(_pStart, _val) \
	WriteEF1Byte((pu1Byte)(_pStart), _val)
#define GET_TDLS_TIMEOUTIE_TIMEOUT_VALUE(_pStart) \
	ReadEF4Byte(((pu1Byte)(_pStart)) + 1)
#define SET_TDLS_TIMEOUTIE_TIMEOUT_VALUE(_pStart, _val) \
	WriteEF4Byte(((pu1Byte)(_pStart)) +1, _val)


typedef struct _TDLS_RECORD{
	RT_LIST_ENTRY			List;
	PADAPTER				Adapt;
	RT_TIMER				InitTDLSTimer;
	RT_TIMER				MsgTimer;
	RT_TIMER				BaseChannelTimer;
	RT_TIMER				CSTrafficTimer;
	TDLS_MSG_TIMER_CTRL		MsgTimerCtrl;
	u1Byte					Addr[6];
	BOOLEAN					bValid;
	BOOLEAN					bActive;
	BOOLEAN					bTDLSinProgress;
	BOOLEAN					bTeardownSent;
	u1Byte					ProgressStage;
	u1Byte					InitTDLSDelayedLevel;
	u1Byte					Roll;
	u1Byte					DialogToken;
	u1Byte					LinkDialogToken;
	LINK_IDENTIFIER			LinkID;
	u2Byte					Cap;
	RT_HTINFO_STA_ENTRY		HTInfo;
	u1Byte					ExtCapSupport;
	OCTET_STRING			RegulatoryIE;
	u1Byte					ListofRC[5];
	BOOLEAN					bRT2RTTurbo;
	u2Byte					SupWirelessMode;
	OCTET_STRING			RSNIE;
	u1Byte					RSNIEBuf[22];
	OCTET_STRING			FTIE;
	FAST_BSS_TRANSITION		FTIEContent;
	u1Byte					TPK_KCK[16];
	u1Byte					PTK[64];
	OCTET_STRING			TimeoutIE;
	TIMEOUT_IE				TimeoutInterval;
	OCTET_STRING			RT2RTIE;
	u1Byte					RT2RTLinkInfo[20];
	PRT_WLAN_STA			pWLanSTA;
	OCTET_STRING			WmmAcParaIE;
	u1Byte					WmmAcParaBuf[WMM_PARAM_ELEMENT_SIZE];	// Max WMM parameter size is 24 octets.
	OCTET_STRING			WmmAcInfoIE;
	u1Byte					WmmAcInfoBuf[WMM_INFO_ELEMENT_SIZE];
	u1Byte					PUBufferStatus;
	RT_TDLS_PS_STATE		BufferSTAPSState;
	u1Byte					SleepSTAPSState;
	u1Byte					PTICount;
	BOOLEAN					bEnableCS;
	u1Byte					RejectCnt;	// For marvell
	BOOLEAN					bSupportChnlSwitch;	// Support Channel Switch	
	TDLS_CHNLSWITCH_INFO	ChnlSwitchInfo;
	u2Byte					CSstate;
	u1Byte					TargetState;
	BOOLEAN					bCSRequester;
	RT_WORK_ITEM			OffChannelWorkitem;
	RT_WORK_ITEM			BaseChannelWorkitem;
	BOOLEAN					bSendPTIRsp;
	TDLS_TX_FEEDBACK_INDIC	TxReportFlag;
} TDLS_RECORD, *PTDLS_RECORD;


typedef struct _TDLS_TINFO{
	DECLARE_RT_OBJECT(_TDLS_TINFO);
	
	BOOLEAN				bTDLSEnable;
	BOOLEAN				bDMEnable;
	BOOLEAN				bEnableHT;
	u2Byte				NumOfTDL;
	TDLS_BLOCKED_RECORD	BlockedPeerList[MAX_BLOCKED_PEER];
	u2Byte				NumBlockedPeer;
	u4Byte				NumRxCount;
	BOOLEAN				bEDCAInTDLSMode;
	u1Byte				CurRSSIState;
	u2Byte				DiscoveryReqDialogToken;
	BOOLEAN				bTDLSChnlSwEnable;

	// Peer UAPSD related
	u2Byte				PSPeerNum;

	// Channel Switch related
	BOOLEAN				bCSProhibited;
	u1Byte				DTimCnt;
	BOOLEAN				bUseCS;
	BOOLEAN				bOffChannel;
	RT_LIST_ENTRY		CSQueue;

	// Dynamic Mechanism related (TDLS establish / TDLS teardown /EDCA)
	u8Byte				NumTDLSTxBytes;
	u8Byte				NumTDLSRxBytes;
	u2Byte				ToDSCap;
	u2Byte				FromDSCap;
	u1Byte				TxInitRate;	// tx to AP
	u2Byte				AggrRatio;	// tx to AP
	u2Byte				RxStatisticalRate;		// rx from AP

	// WiFi Test and TestBed related
	BOOLEAN				bTDLSTest;
	u2Byte				TestSTA;
	u1Byte				WrongBSSID[6];
	u4Byte				TestTimeout;
	BOOLEAN				bKeepTPKTimer;
	u1Byte				SwitchChannel;
	BOOLEAN				SwitchBandwidth40MHz;
	
	RT_LIST_ENTRY		TDLS_Admit_List;
	RT_LIST_ENTRY		TDLS_Unused_List;
	TDLS_RECORD			TDLSRecord[MAX_TDLS_PAIR];
	u1Byte				NumInAdmitList;
	
	BOOLEAN				bAcceptWeakSec;
}TDLS_TINFO, *PTDLS_TINFO;


#define	GET_TDLS_INFO(__pMgntInfo)				( (PTDLS_TINFO)((__pMgntInfo)->pTDLSTInfo) )
#define	GET_TDLS_ENABLED(__pMgntInfo)			( (((GET_TDLS_INFO(__pMgntInfo))->bTDLSEnable)==TRUE) ? TRUE : FALSE )
#define	SET_TDLS_ENABLED(__pMgntInfo, _value)	( ((GET_TDLS_INFO(__pMgntInfo))->bTDLSEnable) = (_value) )
#define	GET_TDLS_WIFITESTBED(__pMgntInfo)		( (GET_TDLS_INFO(__pMgntInfo))->TestSTA)
#define	GET_TDLS_WIFITEST(__pMgntInfo)		( (GET_TDLS_INFO(__pMgntInfo))->bTDLSTest)
#define	GET_TDLS_HTCAP(__pMgntInfo)			( (GET_TDLS_INFO(__pMgntInfo))->bEnableHT)
#define	IS_TDL_EXIST(_pMgntInfo) 				( (GET_TDLS_INFO(_pMgntInfo)->bTDLSEnable) && _pMgntInfo->mAssoc && (GET_TDLS_INFO(_pMgntInfo)->NumOfTDL > 0) )
#define	IS_TDLS_CONSTRUCTED(_pTDLS)			((_pTDLS)->ProgressStage == TDLS_SETUP_PROGRESS_DONE)
#define	IS_TDLS_PEER_UNDER_PS(_pTDLS)		( ((_pTDLS)->pWLanSTA->bPowerSave==TRUE)?TRUE:FALSE )
#define	GET_TDLS_WIFITESTBED_RADIO_OFF(__pMgntInfo)		( ((GET_TDLS_INFO(__pMgntInfo))->TestSTA) & TDLS_RADIO_OFF )

#endif


#endif