summaryrefslogtreecommitdiff
path: root/network/wlan/WDI/HAL/HalComLed.h
blob: eaee5e77c6f8e2bf7a00f77d81a97104eaa86c0e (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
#ifndef __INC_HALCOMLED_H
#define __INC_HALCOMLED_H
/*++
Copyright (c) Realtek Semiconductor Corp. All rights reserved.

Module Name:
	HalComLed.h
	
Abstract:
	LED related data structure and interface to manipulate LED.
	    
Major Change History:
	When       Who               What
	---------- ---------------   -------------------------------
	2012-12-23 Isaiah           Create.
	
--*/

//================================================================================
//	LED Behavior Constant.
//================================================================================
// Default LED behavior.
//
#define LED_BLINK_NORMAL_INTERVAL		100
#define LED_BLINK_SLOWLY_INTERVAL		200

#define LED_BLINK_LONG_INTERVAL			400
#define LED_INITIAL_INTERVAL			1800


// LED Customerization 

//NETTRONIX
#define LED_BLINK_NORMAL_INTERVAL_NETTRONIX	100
#define LED_BLINK_SLOWLY_INTERVAL_NETTRONIX	2000

//PORNET
#define LED_BLINK_SLOWLY_INTERVAL_PORNET	1000
#define LED_BLINK_NORMAL_INTERVAL_PORNET	100
#define LED_BLINK_FAST_INTERVAL_BITLAND		30

//AzWave.
#define LED_CM2_BLINK_ON_INTERVAL		250
#define LED_CM2_BLINK_OFF_INTERVAL		4750
#define LED_CM8_BLINK_OFF_INTERVAL		3750	//for QMI

//RunTop
#define LED_RunTop_BLINK_INTERVAL		300

//ALPHA
#define LED_BLINK_NO_LINK_INTERVAL_ALPHA	1000
#define LED_BLINK_NO_LINK_INTERVAL_ALPHA_500MS 500 //add by ylb 20121012 for customer led for alpha
#define LED_BLINK_LINK_INTERVAL_ALPHA		500	//500
#define LED_BLINK_SCAN_INTERVAL_ALPHA		180 	//150
#define LED_BLINK_FASTER_INTERVAL_ALPHA		50
#define LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA	5000

// 111122 by hpfan: Customized for Xavi
#define LED_CM11_BLINK_INTERVAL			300
#define LED_CM11_LINK_ON_INTERVEL		3000

//Netgear
#define LED_BLINK_LINK_INTERVAL_NETGEAR		500
#define LED_BLINK_LINK_SLOWLY_INTERVAL_NETGEAR		1000

#define LED_WPS_BLINK_OFF_INTERVAL_NETGEAR		100
#define LED_WPS_BLINK_ON_INTERVAL_NETGEAR		500


//Belkin AC950
#define LED_BLINK_LINK_INTERVAL_ON_BELKIN		200
#define LED_BLINK_LINK_INTERVAL_OFF_BELKIN		100
#define LED_BLINK_ERROR_INTERVAL_BELKIN		100

//by chiyokolin for Azurewave
#define LED_CM12_BLINK_INTERVAL_5Mbps		160
#define LED_CM12_BLINK_INTERVAL_10Mbps		80
#define LED_CM12_BLINK_INTERVAL_20Mbps		50
#define LED_CM12_BLINK_INTERVAL_40Mbps		40
#define LED_CM12_BLINK_INTERVAL_80Mbps		30
#define LED_CM12_BLINK_INTERVAL_MAXMbps		25

//ECS
#define LED_BLINK_INTERVAL_OVER_2Mbps		500
#define LED_BLINK_INTERVAL_OVER_1Mbps		1000

//Dlink
#define	LED_BLINK_NO_LINK_INTERVAL		1000
#define	LED_BLINK_LINK_IDEL_INTERVAL		100

#define	LED_BLINK_SCAN_ON_INTERVAL		30
#define	LED_BLINK_SCAN_OFF_INTERVAL		300

#define LED_WPS_BLINK_ON_INTERVAL_DLINK		30
#define LED_WPS_BLINK_OFF_INTERVAL_DLINK			300
#define LED_WPS_BLINK_LINKED_ON_INTERVAL_DLINK			5000

//Mitac
#define LED_BLINK_TRX_INYERVAL_MITAC		500
#define LED_BLINK_ON_OFF_INYERVAL_MITAC		100

//ELECOM
#define LED_BLINK_WPS_INTERVAL_ELECOM				500
#define LED_BLINK_TRX_INTERVAL_ELECOM				100




//================================================================================
// LED object.
//================================================================================

typedef	enum _LED_STATE{
	LED_UNKNOWN = 0,
	LED_ON = 1,
	LED_OFF = 2,
	LED_BLINK_NORMAL = 3,
	LED_BLINK_SLOWLY = 4,
	LED_POWER_ON_BLINK = 5,
	LED_SCAN_BLINK = 6, 	// LED is blinking during scanning period, the # of times to blink is depend on time for scanning.
	LED_NO_LINK_BLINK = 7, // LED is blinking during no link state.
	LED_BLINK_StartToBlink = 8, // Customzied for Sercomm Printer Server case
	LED_BLINK_TXRX = 9,
	LED_BLINK_WPS = 10,	// LED is blinkg during WPS communication
	LED_BLINK_WPS_STOP = 11,	//for ALPHA
	LED_BLINK_WPS_STOP_OVERLAP = 12,	//for BELKIN
	LED_BLINK_RUNTOP = 13, 	// Customized for RunTop
	LED_BLINK_CAMEO = 14,
	LED_BLINK_XAVI = 15,
	LED_BLINK_ALWAYS_ON = 16,	
	LED_BLINK_LINK_IN_PROCESS = 17,  //Customized for Belkin AC950
	LED_BLINK_AUTH_ERROR = 18,  //Customized for Belkin AC950
	LED_BLINK_Azurewave_5Mbps = 19,		
	LED_BLINK_Azurewave_10Mbps = 20,		
	LED_BLINK_Azurewave_20Mbps = 21,		
	LED_BLINK_Azurewave_40Mbps = 22,			
	LED_BLINK_Azurewave_80Mbps = 23,		
	LED_BLINK_Azurewave_MAXMbps = 24,		
	LED_BLINK_LINK_IDEL = 25,	
	LED_BLINK_WPS_LINKED = 26,
	LED_BLINK_TIME_BY_REG = 27,
	LED_BLINK_ECS_Below_1Mbps = 28,
	LED_BLINK_ECS_Over_1Mbps = 29,
	LED_BLINK_ECS_Over_2Mbps = 30,
}LED_STATE;

typedef enum _LED_PIN{
	LED_PIN_GPIO0,
	LED_PIN_LED0,
	LED_PIN_LED1,
	LED_PIN_LED2,
	LED_PIN_LED3,
	LED_PIN_LED_ALL
}LED_PIN;



	

//================================================================================
// SDIO LED Definition.
//================================================================================


#define IS_LED_WPS_BLINKING(_LED_SDIO)	(((PLED_SDIO)_LED_SDIO)->CurrLedState==LED_BLINK_WPS \
					|| ((PLED_SDIO)_LED_SDIO)->CurrLedState==LED_BLINK_WPS_STOP \
					|| ((PLED_SDIO)_LED_SDIO)->bLedWPSBlinkInProgress)

#define IS_LED_BLINKING(_LED_SDIO) 	(((PLED_SDIO)_LED_SDIO)->bLedWPSBlinkInProgress \
					||((PLED_SDIO)_LED_SDIO)->bLedScanBlinkInProgress)


typedef	enum _LED_STRATEGY_SDIO{
	SW_LED_MODE0, // SW control 1 LED via GPIO0. It is default option.
	SW_LED_MODE1, // 2 LEDs, through LED0 and LED1. For ALPHA.
	SW_LED_MODE2, // SW control 1 LED via GPIO0, customized for AzWave 8187 minicard.
	SW_LED_MODE3, // SW control 1 LED via GPIO0, customized for Sercomm Printer Server case.
	SW_LED_MODE4, //for Edimax / Belkin
	SW_LED_MODE5, //for Sercomm / Belkin	
	SW_LED_MODE6,	//for 88CU minicard, porting from ce SW_LED_MODE7
	SW_LED_MODE7,	//for ECS
	HW_LED, // HW control 2 LEDs, LED0 and LED1 (there are 4 different control modes, see MAC.CONFIG1 for details.)
}LED_STRATEGY_SDIO, *PLED_STRATEGY_SDIO;

typedef struct _LED_SDIO{
	PVOID				pAdapter;

	LED_PIN				LedPin;	// Identify how to implement this SW led.

	LED_STATE			CurrLedState; // Current LED state.
	BOOLEAN				bLedOn; // TRUE if LED is ON, FALSE if LED is OFF.

	BOOLEAN				bSWLedCtrl;

	BOOLEAN				bLedBlinkInProgress; // TRUE if it is blinking, FALSE o.w..
	// ALPHA, added by chiyoko, 20090106
	BOOLEAN				bLedNoLinkBlinkInProgress;
	BOOLEAN				bLedLinkBlinkInProgress;
	BOOLEAN				bLedStartToLinkBlinkInProgress;	
	BOOLEAN				bLedScanBlinkInProgress;
	BOOLEAN				bLedWPSBlinkInProgress;
	
	u4Byte				BlinkTimes; // Number of times to toggle led state for blinking.
	LED_STATE			BlinkingLedState; // Next state for blinking, either LED_ON or LED_OFF are.

	RT_TIMER			BlinkTimer; // Timer object for led blinking.
	RT_WORK_ITEM		BlinkWorkItem; // Workitem used by BlinkTimer to manipulate H/W to blink LED. 
} LED_SDIO, *PLED_SDIO;

VOID
LedControlSDIO(
	IN	PADAPTER		Adapter,
	IN	LED_CTL_MODE		LedAction
	);


//================================================================================
// Interface to manipulate LED objects.
//================================================================================

#define SwLedOn(_Adapter, _pLed) \
	if(IS_HARDWARE_TYPE_8814A(_Adapter))	\
		SwLedOn_8814A(_Adapter, _pLed);		\
	else if(IS_HARDWARE_TYPE_JAGUAR(_Adapter)) \
		IS_HARDWARE_TYPE_8821(_Adapter) ? SwLedOn_8821A(_Adapter, _pLed) : SwLedOn_8812A(_Adapter, _pLed);        			\
	else if(IS_HARDWARE_TYPE_8723B(_Adapter)||IS_HARDWARE_TYPE_8192E(_Adapter))											\
		IS_HARDWARE_TYPE_8192E(_Adapter) ? SwLedOn_8192E(_Adapter, _pLed) : SwLedOn_8723B(_Adapter, _pLed);				\
	else if(IS_HARDWARE_TYPE_8821B(_Adapter))											\
		SwLedOn_8821B(_Adapter, _pLed);				\
	else if(IS_HARDWARE_TYPE_8822B(_Adapter))											\
		SwLedOn_8822B(_Adapter, _pLed); 		\
	else if(IS_HARDWARE_TYPE_8703B(_Adapter))			\
		SwLedOn_8703B(_Adapter,_pLed);		\
	else if(IS_HARDWARE_TYPE_8188F(_Adapter))			\
		SwLedOn_8188F(_Adapter,_pLed);		\
	else if(IS_HARDWARE_TYPE_8723D(_Adapter))			\
		SwLedOn_8723D(_Adapter,_pLed);		\
	else	 																													\
		IS_HARDWARE_TYPE_8188E(_Adapter) ? SwLedOn_8188E(_Adapter, _pLed) : SwLedOn_Dummy(_Adapter, _pLed)
		
#define SwLedOff(_Adapter, _pLed) \
	if(IS_HARDWARE_TYPE_8814A(_Adapter))	\
		SwLedOff_8814A(_Adapter, _pLed);		\
	else if(IS_HARDWARE_TYPE_JAGUAR(_Adapter)) 																				\
		IS_HARDWARE_TYPE_8821(_Adapter) ? SwLedOff_8821A(_Adapter, _pLed) : SwLedOff_8812A(_Adapter, _pLed);            		\
	else if(IS_HARDWARE_TYPE_8723B(_Adapter)||IS_HARDWARE_TYPE_8192E(_Adapter))											\
		IS_HARDWARE_TYPE_8192E(_Adapter) ? SwLedOff_8192E(_Adapter, _pLed) : SwLedOff_8723B(_Adapter, _pLed);				\
	else if(IS_HARDWARE_TYPE_8821B(_Adapter))											\
		SwLedOff_8821B(_Adapter, _pLed);				\
	else if(IS_HARDWARE_TYPE_8822B(_Adapter))											\
		SwLedOff_8822B(_Adapter, _pLed);				\
	else if(IS_HARDWARE_TYPE_8703B(_Adapter))			\
		SwLedOff_8703B(_Adapter,_pLed);					\
	else if(IS_HARDWARE_TYPE_8188F(_Adapter))			\
		SwLedOff_8188F(_Adapter,_pLed);					\
	else if(IS_HARDWARE_TYPE_8723D(_Adapter))			\
		SwLedOff_8723D(_Adapter,_pLed);					\
	else																														\
		IS_HARDWARE_TYPE_8188E(_Adapter) ? SwLedOff_8188E(_Adapter, _pLed) : SwLedOff_Dummy(_Adapter, _pLed)
	

VOID
InitSwLeds(
	IN	PADAPTER	Adapter
	);
	
VOID
DeInitSwLeds(
	IN	PADAPTER	Adapter
	);

VOID
SwLedOn_Dummy(
    IN	PADAPTER		Adapter,
    IN	PVOID		pLed
    );

VOID
SwLedOff_Dummy(
    IN	PADAPTER		Adapter,
    IN	PVOID		pLed
    );
	
#endif	/*__INC_HALCOMLED_H*/