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
|
#ifndef __INC_POWERSAVE_H
#define __INC_POWERSAVE_H
/*++
Copyright (c) Realtek Semiconductor Corp. All rights reserved.
Module Name:
HalUsb.h
Abstract:
Prototype of HalUsbXXX() and related data structure.
Major Change History:
When Who What
---------- --------------- -------------------------------
2006-11-06 Rcnjko Create.
--*/
//================================================================================
// Helper macros.
//================================================================================
#define IN_LEGACY_POWER_SAVE(__pStaQos) (((__pStaQos)->Curr4acUapsd & 0x0f) == 0)
#define GET_POWER_SAVE_CONTROL(_pMgntInfo) ((PRT_POWER_SAVE_CONTROL)(&((_pMgntInfo)->PowerSaveControl)))
//
// Get Wifi Mode Power Save, if it is true, follow PS-POLL or WMM APSD specification. Or use NULL-frame to
// implement power save mode. By Bruce, 2008-09-17.
//
#define IS_WIFI_POWER_SAVE(_pMgntInfo) \
((_pMgntInfo)->dot11PowerSaveMode != eActive && (_pMgntInfo)->PsPollType != 2 &&\
((_pMgntInfo)->bWiFiConfg || (_pMgntInfo)->PsPollType == 1 || \
!((_pMgntInfo)->IOTAction & HT_IOT_ACT_NULL_DATA_POWER_SAVING)))
#define IS_FW_POWER_SAVE(_pMgntInfo) \
((_pMgntInfo)->dot11PowerSaveMode != eActive && GET_POWER_SAVE_CONTROL(_pMgntInfo)->bFwCtrlLPS)
#define RT_SET_PS_LEVEL(_pAdapter, _PS_FLAG) (GET_POWER_SAVE_CONTROL(&(_pAdapter->MgntInfo))->CurPsLevel |= _PS_FLAG)
#define RT_CLEAR_PS_LEVEL(_pAdapter, _PS_FLAG) (GET_POWER_SAVE_CONTROL(&(_pAdapter->MgntInfo))->CurPsLevel &= (~(_PS_FLAG)))
#define RT_GET_CUR_PS_LEVEL(_pAdapter) (GET_POWER_SAVE_CONTROL(&(_pAdapter->MgntInfo))->CurPsLevel)
#define RT_IN_PS_LEVEL(_pAdapter, _PS_FLAG) ((RT_GET_CUR_PS_LEVEL(_pAdapter) & _PS_FLAG) ? TRUE : FALSE)
//
// <Roger_Notes> Currently we only take PCIe interface into consideration for RTD3 function.
// 2013.02.08.
//
#define IS_RTD3_SUPPORT(_pAdapter) FALSE
#define RTD3_GET_DEV_PWR_STATE PowerDeviceD0
// Currently we support the machanism on 8723BS A to D-cut for Intel Baytrail-CR old BIOS behavior.
// 2014.04.09 by tynli.
#define IS_CARD_DISABLE_IN_FW_LOW_PWR_STATE(_pAdapter) \
(GET_POWER_SAVE_CONTROL(&(_pAdapter->MgntInfo))->CardDisableInLowClk && IS_VENDOR_8723B_D_CUT_BEFORE(_pAdapter))
//
// Only allow enter WoWLAN mode in infrastructure mode or no link. Do not support WoWLAN if adapter is
// operating in AP or IBSS mode.
//
#define IS_WOWLAN_OPERATING_MODE(_pMgntInfo) \
((_pMgntInfo)->OpMode == RT_OP_MODE_INFRASTRUCTURE || \
(_pMgntInfo)->OpMode == RT_OP_MODE_NO_LINK)
#define IPS_DISABLE_DEF_OPMODE BIT0 // Disable IPS by default port OpMode (IBSS, AP)
#define IPS_DISABLE_EXT_OPMODE BIT1 // Disable IPS by Extension port OpMode (VWifi)
#define IPS_DISABLE_PROXIMITY BIT2 // Disable IPS by PROXIMITY Mode
#define IPS_DISABLE_BT_ON BIT3 // Disable IPS by BT3.0+HS
#define IPS_DISABLE_BY_OID BIT4
#define LPS_DISABLE_AP_MODE BIT0
#define LPS_DISABLE_BT_HS_CONNECTION BIT1
#define LPS_DISABLE_TURN_OFF_ADAPTER BIT2
#define LPS_DISABLE_UPDATE_LPS_STATUS_HNDR BIT3
#define LPS_DISABLE_DEBUG_CONTROL BIT4
#define LPS_DISABLE_INTEL_PROX_MODE BIT5
#define LPS_DISABLE_SET_DISASSOCIATE BIT6
#define LPS_DISABLE_SET_DEAUTH BIT7
#define LPS_DISABLE_ON_DISASSOC BIT8
#define LPS_DISABLE_ON_DEAUTH BIT9
#define LPS_DISABLE_MGNT_DISCONNECT BIT10
#define LPS_DISABLE_MGNT_INDI_DISCONNECT BIT11
#define LPS_DISABLE_JOIN_REQ BIT12
#define LPS_DISABLE_LINK_REQ BIT13
#define LPS_DISABLE_FOR_ROAMING BIT14
#define LPS_DISABLE_WATCH_DOG_BUSY_TRAFFIC BIT15
#define LPS_DISABLE_WATCH_DOG_MEDIA_DISCONNEC BIT16
#define LPS_DISABLE_OID_SET BIT17
#define LPS_DISABLE_LEAVE_ALL_PS BIT18
#define LPS_DISABLE_LEAVE_CHK_RDY BIT19
#define LPS_DISABLE_RX_DETECT_BUSY BIT20
#define LPS_DISABLE_TX_EAPOL_PKT BIT21
#define LPS_DISABLE_TX_DHCP_PKT BIT22
#define LPS_DISABLE_TX_ARP_PKT BIT23
#define LPS_DISABLE_TX_SPECIAL_PKT BIT24
#define LPS_DISABLE_TX_DETECT_BUSY BIT25
#define LPS_DISABLE_BT_COEX BIT26
#define LPS_DISABLE_DEVICE_DISCOVERY BIT27
//================================================================================
// Variable Definition.
//================================================================================
typedef enum _POWER_LEVEL_CONFIG
{
POWER_SAVING_NO_POWER_SAVING, // Maximal Performance
POWER_SAVING_FAST_PSP, // Low Power Saving
POWER_SAVING_MAX_PSP, // Medium Power Saving
POWER_SAVING_MAXIMUM_LEVEL, // Maximal Power Saving
}POWER_LEVEL_CONFIG;
typedef enum _POWER_SETTING_CONFIG
{
POWERGUID_MAX_POWER_SAVINGS, // Power Saver
POWERGUID_TYPICAL_POWER_SAVINGS, // Banlanced
POWERGUID_MIN_POWER_SAVINGS, // High performance
POWERGUID_UNDEFINED,
}POWER_SETTING_CONFIG;
typedef enum _POWER_POLICY_CONFIG
{
POWERCFG_MAX_POWER_SAVINGS, // Enter IPS, LPS when DC mode
POWERCFG_GLOBAL_POWER_SAVINGS, // Enter IPS, LPS when DC mode and PowerSaver config. Depends on OS configuration.
POWERCFG_LOCAL_POWER_SAVINGS, // Enter IPS, LPS when DC mode and not Maximum Performance config. Depends on Wifi configuration.
POWERCFG_LENOVO, // Enter IPS, LPS when DC mode and not Maximum Performance, AC mode and Maximum Power Saving.
POWERCFG_LENOVO_JANPEN, // Enter IPS, LPS when OS config to Banlanced or PowerSave. Don't care about AC/DC mode.
POWERCFG_SAMSUNG, // Enter IPS, LPS when OS config to PowerSave. Don't care about AC/DC mode.
POWERCFG_HP, // Enter IPS, LPS when OS config to PowerSave. Don't care about AC/DC mode.
}POWER_POLICY_CONFIG;
//================================================================================
// Callback routines of timers and workitems.
//================================================================================
VOID
OnMoreData(
IN PADAPTER pAdapter
);
BOOLEAN
IsOurFrameBuffred(
IN OCTET_STRING Tim,
IN u2Byte AId
);
BOOLEAN
IsMcstFrameBuffered(
IN OCTET_STRING octetTim
);
VOID
DozeWorkItemCallback(
IN PVOID pContext
);
VOID
AwakeTimerCallback(
IN PRT_TIMER pTimer
);
VOID
AwakeWorkItemCallback(
IN PVOID pContext
);
VOID
InactivePsWorkItemCallback(
IN PVOID pContext
);
VOID
InactivePsTimerCallback(
IN PRT_TIMER pTimer
);
//================================================================================
// 802.11 legacy power save.
//================================================================================
VOID
LPS_OnBeacon_BSS(
IN PADAPTER pAdapter,
IN OCTET_STRING osBeacon
);
VOID
LPS_DozeStart(
PADAPTER pAdapter
);
VOID
LPS_DozeComplete(
IN PADAPTER pAdapter
);
VOID
LPS_AwakeComplete(
IN PADAPTER pAdapter
);
BOOLEAN
LPS_OnTx(
IN PADAPTER pAdapter,
IN PRT_TCB pTcb
);
//================================================================================
// WMM power save.
//================================================================================
VOID
WMMPS_OnBeacon_BSS(
IN PADAPTER pAdapter,
IN OCTET_STRING osBeacon
);
VOID
WMMPS_DozeStart(
PADAPTER pAdapter
);
VOID
WMMPS_DozeComplete(
IN PADAPTER pAdapter
);
VOID
WMMPS_AwakeComplete(
IN PADAPTER pAdapter
);
BOOLEAN
WMMPS_OnTx(
IN PADAPTER pAdapter,
IN PRT_TCB pTcb
);
BOOLEAN
GetQosQueueIDMaskAPSD(
u1Byte QueueID,
AC_UAPSD APSD
);
BOOLEAN
GetPS_Doze(
IN PADAPTER pAdapter
);
//================================================================================
// Inactive power save.
//================================================================================
VOID
IPSEnter(
IN PADAPTER pAdapter
);
VOID
IPSLeave(
IN PADAPTER pAdapter,
IN BOOLEAN bForceEnter
);
VOID
IPSEnable(
IN PADAPTER pAdapter
);
VOID
IPSDisable(
IN PADAPTER pAdapter,
IN BOOLEAN bForceEnter ,
IN u1Byte nReason
);
VOID
IPSReturn(
IN PADAPTER pAdapter,
IN u1Byte nReason
);
//================================================================================
// Leisure Power Save in linked state.
//================================================================================
VOID
LeisurePSEnter(
IN PADAPTER pAdapter
);
VOID
LeisurePSLeave(
IN PADAPTER pAdapter,
IN u4Byte reason
);
//================================================================================
// Fw control LPS.
//================================================================================
BOOLEAN
GetFwLPS_Doze(
IN PADAPTER pAdapter
);
VOID
LeaveAllPowerSaveMode(
IN PADAPTER Adapter
);
BOOLEAN
LPSLeaveAndCheckReady(
IN PADAPTER Adapter
);
VOID
FwPsClockOnWorkitemCallback(
IN PVOID Context
);
#endif
|