summaryrefslogtreecommitdiff
path: root/network/wlan/WDI/COMMON/MgntLink.h
blob: 951693eacc6be851f6aafc72ea75860d67e6f128 (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
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
#ifndef __INC_MGNTLINK_H
#define __INC_MGNTLINK_H

#define MAX_CHANNEL_PLAN	8

//
// Components in decreasing weight to select a BSS:
// - SSID matched: its weight should > sum of components below.
// - BSSID matched: its weight should > sum of components below.
// - From Probe Response: for Vista DTM, its weight should > sum of components below.
// - From Neighbor List: for CCX test plan v4.59 6.2.2.4, its weight should > sum of components below.
// - RSSI: 0-100.
// - channel load: 0-31, for CCX test plan v4.59 6.2.1.1 and 6.2.1.2.
//
#define	WEIGHTING_SAME_SSID			0x8000    // This is for hidden AP (Hidden will not be given this weight)
#define	WEIGHTING_BEST_RSSI			0x5000
#define	WEIGHTING_SAME_BSSID		0x4000
#define	WEIGHTING_PREFER_BAND		0x2000
#define	WEIGHTING_PROBE_RSP			0x1000
#define	WEIGHTING_NEIGHBOR_LIST		0x0800
#define	WEIGHTING_DEFAULT_QBSS_LOAD	0x000F	// half of 32.



#define	JOIN_TIMEOUT					1000		//Timeout time to detect beacon after join an BSS/IBSS

#define	AUTH_REQ_TIMEOUT				1000		//Timeout time to detect beacon after join an BSS/IBSS
#define	ASSOC_REQ_TIMEOUT				1000		//Timeout time to detect beacon after join an BSS/IBSS
#define	ADDTS_TIMEOUT					1000		// Tmeout time to add the ts.


#define	SWRF_TIMEOUT					50
#define	SWRF_TIMEOUT_ANT_DET					2000


#define SW_BEACON_INTERVAL			1000	// Interval of SW beacons.
#define KEY_MGNT_INTERVAL				1000	// Interval of key management for WPA-PSK.

#define	FAST_RESUME_BEACON_TIME			1000
#define	DELAY_START_BEACON			20000

#define	RT_AUTH_RETRY_LIMIT			3//5
#define	RT_ASOC_RETRY_LIMIT			3//5

#define	RT_CONNECT_ROAM_INDICATE_TIME_LIMIT		90	//10sec, in 0.1 sec

#define	RECONNECT_SLOT_COUNT			3
#define	ROAM_RETRY_LIMIT				2

//
// 061207, Roger: 
// Turbo mode related parameter.
//
#define TCA_CHECK_PERIOD			1000	// in ms. 
#define TCA_DEF_CHECK_INTERVAL		2		// in # of TCA_CHECK_PERIOD.
#define TCA_NG_EXTRA_CHECK_INTERVAL	2		// in# of TCA_CHECK_PERIOD, extra penalty when TCA is NG.
#define TCA_OK_CHECK_INTERVAL		1		// in# of TCA_CHECK_PERIOD.

// Justin, 2011.06.22
// Define a packets count threadhold for the dection of running High Throughput testing
#define BUSY_TRAFFIC_THREADHOLD					100			// Tx/Rx packets in a certain period
#define BUSY_TRAFFIC_TP								10			// Tx/Rx packets in a certain period


//#define BUSY_TRAFFIC_HIGH_THREADHOLD			4000		// Tx/Rx packets in a certain period
#define BUSY_TRAFFIC_HIGH_THREADHOLD			2000		// Tx/Rx packets in a certain period, Justin: make this value smaller, so can adjust the USB aggregation faster
#define BUSY_TRAFFIC_HIGH_TP							80		// Tx/Rx packets in a certain period, Justin: make this value smaller, so can adjust the USB aggregation faster

// 2014/09/25 MH Add for very high speed
#define BUSY_TRAFFIC_VERY_HIGH_THREADHOLD			10000		
#define BUSY_TRAFFIC_VERY_HIGH_TP						250		

#define	SCAN_DELAY_TIME_MS_LONG						1000
#define	SCAN_DELAY_TIME_MS_SHORT					50

#define	ASSOC_HANDSHAKE_DHCP_DELAY_SEC				20

#if 0
#define 	MgntIsLinkInProgress(_pMgntInfo)								\
	(																	\
		((_pMgntInfo)->bScanInProgress && !(_pMgntInfo)->bScanOnly)	||	\
		((_pMgntInfo)->JoinTimer.Status&RT_TIMER_STATUS_SET)			||	\
		((_pMgntInfo)->JoinConfirmTimer.Status&RT_TIMER_STATUS_SET)			||	\
		((_pMgntInfo)->JoinProbeReqTimer.Status&RT_TIMER_STATUS_SET)			||	\
		((_pMgntInfo)->AuthTimer.Status&RT_TIMER_STATUS_SET)			||	\
		((_pMgntInfo)->AsocTimer.Status&RT_TIMER_STATUS_SET)			||	\
		((_pMgntInfo)->bJoinInProgress)								\
	)
#endif	

#define	MgntLinkStatusUpdateRxBeacon(_Adapter)		\
			_Adapter->MgntInfo.LinkDetectInfo.NumRecvBcnInPeriod ++;
#define	MgntLinkStatusResetRxBeacon(_Adapter)		\
			_Adapter->MgntInfo.LinkDetectInfo.NumRecvBcnInPeriod = 0;

#define	MgntLinkStatusUpdateRxData(_Adapter,_pSaddr)	\
			_Adapter->MgntInfo.LinkDetectInfo.NumRecvDataInPeriod ++;

#define MgntLinkStatusSetRoamingState(_Adapter, _RoamingFailCount, _RoamingType, _RoamingState) \
			_Adapter->MgntInfo.RoamingFailCount = (_RoamingFailCount);	\
			_Adapter->MgntInfo.RoamingType = (_RoamingType);	\
			_Adapter->MgntInfo.RoamingState  = (_RoamingState);

//
// Determine if the roaming is going now. By Bruce, 2008-05-16.
//
#define	MgntRoamingInProgress(_pMgntInfo)			\
	(!((_pMgntInfo)->RoamingType == RT_ROAMING_NONE))

#define	MgntResetOrPnPInProgress(_Adapter)			\
	((_Adapter)->MgntInfo.bDriverIsGoingToSleep) ||	\
	((_Adapter)->MgntInfo.bResetInProgress)

//
// Reset the status of all variables about roaming in MGNT_INFO, by Bruce, 2008-05-16.
//
#define	MgntResetRoamingState(_pMgntInfo)			\
{													\
	(_pMgntInfo)->RoamingType = RT_ROAMING_NONE;	\
	(_pMgntInfo)->RoamingState = ROAMINGSTATE_IDLE;	\
	(_pMgntInfo)->RoamingFailCount = 0;				\
}

//
// Reset the counters of all variables about join actions in MGNT_INFO, by Bruce, 2008-05-16.
//
#define	MgntResetJoinCounter(_pMgntInfo)			\
{													\
	(_pMgntInfo)->JoinRetryCount = 0;				\
	(_pMgntInfo)->AuthRetryCount = 0;				\
	(_pMgntInfo)->AsocRetryCount = 0;				\
}

#define	MgntInitAdapterInProgress(_pMgntInfo)									\
		((_pMgntInfo)->init_adpt_in_progress)

#define IN_SEND_BEACON_MODE(_Adapter) \
			(( _Adapter->MgntInfo.OpMode == RT_OP_MODE_AP || \
			_Adapter->MgntInfo.OpMode == RT_OP_MODE_IBSS)?TRUE:FALSE)

//----------------------------------------------------------------------------
//  Authenticate
//----------------------------------------------------------------------------
enum	_MlmeAuthenticateRequest_State{
	STATE_Auth_Req_Idle      =  0,
	STATE_Wait_Auth_Seq_2  =  2,
	STATE_Wait_Auth_Seq_4  =  4
};


//----------------------------------------------------------------------------
//  Association
//----------------------------------------------------------------------------
enum	_MlmeAssociateRequest_State{
	STATE_Asoc_Idle,
	STATE_Wait_Asoc_Response,
	STATE_Wait_Reasoc_Response
};

//
// Used for MlmeAssociateConfirm() only.
//
enum MlmeAssocConfirmState
{
	AssocSuccess = 0, // Association Success
	AssocUnspecFail, // Association Fail and select another one to join or indicate disconnected
	AssocRetry, // Retry association again.
};



//----------------------------------------------------------------------------
//  Management status. parm of Mlme operation confirm
//----------------------------------------------------------------------------
enum MlmeStatus {
	MlmeStatus_success        = 0,
	MlmeStatus_invalid          = 1,
	MlmeStatus_timeout         = 2,
	MlmeStatus_refused         = 3,
	MlmeStatus_tomany_req  = 4,
	MlmeStatus_already_bss  = 5
};


//----------------------------------------------------------------------------
//      802.11 Management frame Status Code field
//----------------------------------------------------------------------------
typedef	enum	_AUTH_STATUS{
	AUTH_STATUS_IDLE,			//initialization state
	AUTH_STATUS_IN_PROGRESS,	//authentication packet exchange in progress
	AUTH_STATUS_FAILED,			//last authentication failed
	AUTH_STATUS_SUCCESSFUL,		//last authentication successed
	AUTH_STATUS_METHOD_NOT_MATCH,//last authentication authenation did not started because of method does not match(open vs shared)
}AUTH_STATUS;


//----------------------------------------------------------------------------
//      802.11 Management frame Status Code field
//----------------------------------------------------------------------------
enum StatusCode
{
	StatusCode_success                      = 0,
	StatusCode_Unspecified_failure   = 1,

	// For 802.11z
	StatusCode_TDLS_alternative_wakeup_schedule	= 2,
	StatusCode_TDLS_wakeup_schedule_reject	= 3,
	StatusCode_notallowed_by_BSS	= 4,
	StatusCode_security_disabled		= 5,
	StatusCode_unacceptable_lifetime	= 6,
	StatusCode_notsame_BSS			= 7,
	
	StatusCode_notsupport_cap         = 10,
	StatusCode_reassoc_denied         = 11,
	StatusCode_assoc_denied             = 12,
	StatusCode_notsupport_authalg   = 13,
	StatusCode_error_seqnum            = 14,
	StatusCode_challenge_failure       = 15,
	StatusCode_auth_timeout              = 16,
	StatusCode_assoc_deniedbyap      = 17,
	StatusCode_assoc_deniedbyrate   = 18,

	// For RTL8185
	StatusCode_assoc_notsupport_shortslottime   = 25,
	StatusCode_assoc_notsupport_DSSS_OFDM   = 26,

	StatusCode_request_declined		= 37,
	StatusCode_invalid_ie				= 40,
	StatusCode_invalid_pairwise_cipher	= 42,
	StatusCode_invalid_AKMP			= 43,
	StatusCode_invalid_RSN_cap		= 45,
	StatusCode_invalid_FTIE			= 55,	// Defined in 802.11r
};




//----------------------------------------------------------------------------
//      802.11 Management frame Reason Code field
//----------------------------------------------------------------------------
enum	_ReasonCode{
	unspec_reason	= 0x1,
	auth_not_valid	= 0x2,
	deauth_lv_ss	= 0x3, 
	inactivity		= 0x4,
	ap_overload		= 0x5, 
	class2_err		= 0x6,
	class3_err		= 0x7, 
	disas_lv_ss		= 0x8,
	asoc_not_auth	= 0x9,

	//----MIC_CHECK
	mic_failure		= 0xe,
	//----END MIC_CHECK

	// Reason code defined in 802.11i D10.0 p.28.
	invalid_IE		= 0x0d,
	four_way_tmout	= 0x0f,
	two_way_tmout	= 0x10,
	IE_dismatch		= 0x11,
	invalid_Gcipher	= 0x12,
	invalid_Pcipher	= 0x13,
	invalid_AKMP	= 0x14,
	unsup_RSNIEver = 0x15,
	invalid_RSNIE	= 0x16,
	auth_802_1x_fail= 0x17,
	ciper_reject		= 0x18,

	unreachable_TDLS_peer	= 0x19,	//25 Defined in 802.11z
	teardown_unspec_reacon	= 0x1a,	//26 Defined in 802.11z

	// Reason code defined in 7.3.1.7, 802.1e D13.0, p.42. Added by Annie, 2005-11-15.
	QoS_unspec		= 0x20,	// 32
	QAP_bandwidth	= 0x21,	// 33
	poor_condition	= 0x22,	// 34
	no_facility		= 0x23,	// 35
							// Where is 36???
	req_declined	= 0x25,	// 37
	invalid_param	= 0x26,	// 38
	req_not_honored= 0x27,	// 39
	TS_not_created	= 0x2F,	// 47
	DL_not_allowed	= 0x30,	// 48
	dest_not_exist	= 0x31,	// 49
	dest_not_QSTA	= 0x32,	// 50
	dest_unreachable  = 0x33,	// 51 for win8 dtm
};



//----------------------------------------------------------------------------
//      802.11 Preamble Mode
//----------------------------------------------------------------------------
enum	_REG_PREAMBLE_MODE{
	PREAMBLE_LONG	= 1,
	PREAMBLE_AUTO	= 2,
	PREAMBLE_SHORT	= 3,
};


extern u4Byte DSSS_Freq_Channel[];

extern BOOLEAN		bDebugFixBssid;
extern u1Byte		debug_fixed_bssid[];

BOOLEAN 
AssembleFragmentWcnIeFromMmpdu(
	IN	PADAPTER		Adapter,
	IN    PSIMPLE_CONFIG_T	pSimpleConfig,
	IN OUT	POCTET_STRING posMmpdu
);

PRT_WLAN_BSS 
BssDescDupByDesc(
	IN	PADAPTER		Adapter,
	IN	PRT_WLAN_BSS	pRtBSS
	);

PRT_WLAN_BSS 
BssDescDupByBssid(
	IN	PADAPTER		Adapter,
	IN	pu1Byte			pBssid
	);

PRT_WLAN_RSSI
BssDescDupByBssid4Rssi(
	IN	PADAPTER		Adapter,
	IN	pu1Byte			pBssid
	);

u1Byte
ToLegalChannel(
	PADAPTER		Adapter,
	u8Byte			freq_channel
);


BOOLEAN
GetValueFromBeaconOrProbeRsp(
	IN	PADAPTER		Adapter,
	IN	PRT_RFD			pRfd,
	OUT	RT_WLAN_BSS		*bssDesc,
	IN	BOOLEAN			bUpdate
	);

VOID
GetScanInfo(
	PADAPTER		Adapter,
	PRT_RFD			pRfd
);

VOID
FilterSupportRate(
	OCTET_STRING	RegRate,
	POCTET_STRING	pSupRate,
	BOOLEAN			bFilterOutCCKRate
	);


VOID
SelectRateSet(
	PADAPTER		Adapter,
	OCTET_STRING	SuppRateSet
);


WIRELESS_MODE
SetupJoinWirelessMode(
	PADAPTER		Adapter,
	BOOLEAN			bSupportNmode,
	WIRELESS_MODE	bssWirelessMode
);



WIRELESS_MODE
SetupStarWirelessMode(
	PADAPTER		Adapter,
	BOOLEAN			bSupportNmode
);


BOOLEAN
IncludedInSupportedRates(
	IN	PADAPTER	Adapter,
	IN	u1Byte		TxRate
);

VOID
ActUpdate_ProtectionMode(
	PADAPTER		Adapter,
	BOOLEAN		bUseProtection
);


VOID
ActUpdate_mCapInfo(
	PADAPTER		Adapter,
	u2Byte			updateCap
);

VOID
ActUpdate_ERPInfo(
	PADAPTER		Adapter,
	u1Byte			ERPInfo
);

RT_JOIN_ACTION
SelectNetworkBySSID(
	IN	PADAPTER		Adapter,
	IN	OCTET_STRING	*ssid2match,
	IN	BOOLEAN			bRoaming,
	OUT	PRT_WLAN_BSS	pRtBss
	);

BOOLEAN
MlmeAssociateRequest(
	PADAPTER		Adapter,
	pu1Byte			asocStaAddr,
	u4Byte			asocTmot,
	u2Byte			asCap,
	u2Byte			asListenInterval,
	BOOLEAN			Reassociate	
);

RT_STATUS
MlmeAssociateConfirm(
	IN	PADAPTER		Adapter,
	IN	PRT_RFD			pRfd,
	IN	POCTET_STRING	posMpdu,
	IN	BOOLEAN			bReassociate,
	IN	u2Byte			result
	);

BOOLEAN
MlmeAuthenticateRequest(
	PADAPTER		Adapter,
	pu1Byte			auStaAddr,
	u1Byte			auAlg,
	u4Byte			auTmot
);

BOOLEAN
MlmeAuthenticateRequest_Confirm(
	PADAPTER		Adapter,
	u2Byte			result
	);

VOID
JoinConfirm(
	PRT_TIMER	pTimer
);

VOID
JoinProbeReq(
	PRT_TIMER	pTimer
);


VOID
MgntRoamComplete(
	IN	PADAPTER		pAdapter,
	IN	u2Byte			Result
	);

VOID
JoinProbeReq(
	PRT_TIMER	pTimer
);

void
MgntDisconnectAP(
        PADAPTER		Adapter,
	u1Byte                  asRsn
);


void
MgntDisconnectIBSS(
	PADAPTER		Adapter
) ;


#define	GENERAL_INDICATE		0x00
#define	FORCE_INDICATE		0x01
#define	FORCE_NO_INDICATE		0x02


void 
MgntIndicateMediaStatus(
	PADAPTER			Adapter,
	RT_MEDIA_STATUS	mstatus,
	u1Byte				Indicatemode
);

void
AsocTimeout(
	PRT_TIMER		pTimer
);

void
AuthTimeout(
	PRT_TIMER		pTimer
);

void
JoinTimeout(
	PRT_TIMER		pTimer
	);

VOID
JoinRequest(
	PADAPTER		Adapter,
	RT_JOIN_ACTION		JoinAction,
	RT_WLAN_BSS		*bssDesc
);

VOID
ScanByTimer(
	PADAPTER	Adapter,
	BOOLEAN		bActiveScan,
	BOOLEAN		bScanOnly
	);

VOID
ScanComplete(
	PADAPTER	Adapter
	);

VOID
ScanCallback(
	PRT_TIMER		pTimer
	);

VOID
WatchDogTimerCallback(
	IN	PRT_TIMER		pTimer
);

VOID
SendDataFrameQueued(
	PADAPTER	Adapter
	);				
// -------------------------------------------
VOID
MgntResetScanProcess(
	PADAPTER		pAdapter
);

VOID
MgntResetLinkProcess(
	PADAPTER		Adapter
);

VOID
MgntResetJoinProcess(
	PADAPTER		Adapter
);

BOOLEAN
MgntLinkRetry(
	PADAPTER		Adapter,
	BOOLEAN			bForceRetry
	);

BOOLEAN
MgntRoamRetry(
	IN	PADAPTER		Adapter,
	IN	BOOLEAN 		bForceRetry
	);

BOOLEAN
MgntLinkRequest(
	PADAPTER		Adapter,
	BOOLEAN        	bScanOnly,
	BOOLEAN         	bActiveScan,
	BOOLEAN        	bFilterHiddenAP,
	BOOLEAN			bUpdateParms,
	POCTET_STRING	pSsid2scan,
	u1Byte          		NetworkType,
	u1Byte          		ChannelNumber,
	u2Byte          		BcnPeriod,
	u1Byte          		DtimPeriod,
	u2Byte          		mCap,
	POCTET_STRING	pSuppRateSet,
	PIbssParms       	pIbpm
	);

 VOID
MgntLinkHandleIPS(
 PADAPTER Adapter
);

  VOID
MgntLinkHandleLPS(
 PADAPTER Adapter
);

VOID
MgntLinkStatusWatchdogForSystemWide(
	PADAPTER 		Adapter
);

BOOLEAN
MgntLinkStatusIsWifiBusy(
	IN	PADAPTER	Adapter
	);

VOID
MgntLinkMultiPortStatusWatchdog(
	PADAPTER 		Adapter
);

VOID
MgntLinkStatusWatchdogForEachPortSpecific(
	PADAPTER		Adapter
);

VOID
MgntResetLinkStatusWatchdogState(
	PADAPTER		Adapter
	);

RT_MEDIA_STATUS
MgntLinkStatusQuery(
	PADAPTER		Adapter
	);

VOID
SwBeaconCallback(
	PRT_TIMER		pTimer
);

VOID
IbssStartRequestCallback(
	IN	PVOID	Context
);

VOID
IbssAgeFunction(
	IN	PADAPTER		Adapter
);

u2Byte
GetRandomU2ByteNumber(
	IN	u2Byte	MinIndex,
	IN	u2Byte	MaxIndex
);

int
GetRandomNumber(
	IN	int	MinIndex,
	IN	int	MaxIndex
);

VOID
GetRandomBuffer(
	OUT	pu1Byte	pHashed
);

VOID
MgntAddRejectedAsocAP(
	IN	PADAPTER	Adapter,
	IN	pu1Byte		AddrOfAP
);

VOID
MgntClearRejectedAsocAP(
	IN	PADAPTER	Adapter
);

u4Byte
MgntGetRejectedAPIndex(
	IN	PADAPTER	Adapter,
	IN	pu1Byte		AddrOfAP
);


VOID
InitTurboChannelAccess(
	PADAPTER	Adapter
);

VOID
DeInitTurboChannelAccess(
	PADAPTER	Adapter
);


VOID
TcaCheckTimerCallback(
	PRT_TIMER		pTimer
);

// For Parsing Realtek information element (sent from 8186). Added by Roger, 2006.12.07.
VOID
GetRealtekIEContentForTurboMode(
	IN	PADAPTER		Adapter,
	IN	PRT_WLAN_BSS	pBssDesc,
	IN	POCTET_STRING	pRealtekIE
);

PRT_WLAN_BSS
MgntHasOtherAPwithSameSSID(
	IN	PADAPTER	Adapter
);

BOOLEAN
MgntIsInRejectedAPList(
	IN	PADAPTER	Adapter,
	IN	pu1Byte		AddrOfAP
);

BOOLEAN
MgntTryToRoam(
	IN	PADAPTER	Adapter
);
BOOLEAN
MgntDisconnect(
	IN	PADAPTER		Adapter,
	IN	u1Byte			asRsn
); 


VOID
WaitingKeyTimerCallback(
	PRT_TIMER		pTimer
);


//Keep Alive Mechanism, Isaiah 2008-08-16
//VOID
//MgntLinkKeepAlive(
//	IN	PADAPTER		pAdapter
//);

BOOLEAN
IsInDesiredBSSIDList(
	IN	PADAPTER	Adapter,
	IN	pu1Byte		MacAddr
	);

BOOLEAN
GetDesiredSSIDList(
	IN	PADAPTER	Adapter
	);

VOID
PnPWakeUpJoinTimerCallback(
	IN PRT_TIMER		pTimer
	);

BOOLEAN
CheckBSSSetting(
	IN	PADAPTER		Adapter,
	IN	PRT_WLAN_BSS	pRtBss
);


VOID
MgntResumeBeacon(
	IN		PADAPTER	pAdapter
	);

VOID
MgntStopBeacon(
	IN		PADAPTER	pAdapter
	);

BOOLEAN
MgntScanInProgress(
	PMGNT_INFO	pMgntInfo
);

BOOLEAN 
MgntIsLinkInProgress(
	PMGNT_INFO		pMgntInfo
);

BOOLEAN 
MgntIsTimeOutForIndication(
	PMGNT_INFO		pMgntInfo
);

u1Byte
AutoSelectChannel(
	PADAPTER		Adapter, 
	PRT_WLAN_BSS	pBssList,
	int				nNumBss
);

BOOLEAN
IsSendingBeacon(
	PADAPTER	Adapter
);

VOID
Mgnt_SwChnl(
	IN	PADAPTER	Adapter,
	IN	u1Byte		Channel,
	IN	u1Byte		SwitchChannelMethod
);
VOID
Mgnt_BackupVarBeforeScan(
	IN	PADAPTER			Adapter,
	IN	u1Byte				wirelessMode,
	IN	u1Byte				chnl,
	IN	CHANNEL_WIDTH		bw,
	IN	EXTCHNL_OFFSET		chExt
	);

VOID
MgntScanTxFeedbackCallback(
	IN	PADAPTER		pAdapter,
	IN	PVOID			pContext
	);

extern VOID
Hal_PauseTx(
	IN		PADAPTER	Adapter,
	u1Byte	type
	);

VOID
MgntRecoverFWOffloadMechanism(
	IN	PADAPTER			Adapter
	);

VOID
FtResetEntryList(
	IN	PADAPTER	pAdapter
	);

PFT_INFO_ENTRY
FtGetNewEntry(
	IN	PADAPTER			pAdapter,
	IN	pu1Byte				pTargetAddr
	);

PFT_INFO_ENTRY
FtGetEntry(
	IN	PADAPTER			pAdapter,
	IN	pu1Byte				pTargetAddr
	);

RT_STATUS
FtUpdateEntryInfo(
	IN	PADAPTER			pAdapter,
	IN	FT_ENTRY_ACTION		action,
	IN	pu1Byte				pTargetAddr,
	IN	PVOID				pInfoBuffer,
	IN	u4Byte				BufLen	
	);

BOOLEAN
FtIsFtAuthReady(
	IN	PADAPTER			pAdapter,
	IN	pu1Byte				pTargetAddr
	);

BOOLEAN
FtIsFtAssocReqReady(
	IN	PADAPTER			pAdapter,
	IN	pu1Byte				pTargetAddr
	);

RT_STATUS
FtGetWaitOSDecisionAddr(
	IN	PADAPTER	pAdapter,
	OUT	pu1Byte		pAddr
	);

#endif // #ifndef __INC_MGNTLINK_H