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_NDIS_COMMON_H
#define __INC_NDIS_COMMON_H
#define N6_LLC_SIZE 8
#define MAX_STALL_TIME 50 //us. If the delay time is larger than 50us, it's better to call NdisMSleep
#define NDIS_ADAPTER_TYPE RT_SDIO_DEVICE
#define PNDIS_ADAPTER_TYPE PRT_SDIO_DEVICE
#define GET_NDIS_ADAPTER(_Adapter) &_Adapter->NdisSdioDev
#ifndef MAX_PATH
#define MAX_PATH 260 // From DDK.
#endif // #ifndef MAX_PATH
#define REGISTRY(_Adapter, _VAR) (_Adapter->pNdisCommon->##_VAR)
#define SetRegLdpc(_Adapter, _RegLdpc) (_Adapter->pNdisCommon->RegLdpc= _RegLdpc)
#define SetRegStbc(_Adapter, _RegStbc) (_Adapter->pNdisCommon->RegStbc= _RegStbc)
//
// <Roger_DBG> Using following state flag to trace vWiFi and power transaction event for some vWiFi bus BSOD issue.
// 2013.1213
//
#define DrvStateNull 0
#define DrvStateNdisInitialized BIT0
#define DrvStateHwInitialized BIT1
#define DrvStateHwHalting BIT2
#define DrvStateHwHalted BIT3
#define DrvStateMacCreating BIT4
#define DrvStateMacCreated BIT5
#define DrvStateMacDeleting BIT6
#define DrvStateMacDeleted BIT7
//
// Following flags are abnormal cases
//
#define DrvStateMacCreate_NO_DO BIT8
#define DrvStateMacCreate_TMR_FAIL BIT9
#define DrvStateMacCreate_Fail BIT10
#define DrvStateMacDelete_NO_DO BIT11
#define DrvStateMacDelete_TMR_FAIL BIT12
#define DrvStateMacDelete_Fail BIT13
#define DrvStateMacCreDel_WI_FAIL BIT14
#define DrvStateMacCreatDispatch BIT15
#define DrvStateMacCreatWait BIT16
#define DrvStateNdisReqPended BIT22
#define DrvStateNdisReqPended_Error0 BIT23
#define DrvStateMacPendReq_Error0 BIT24
#define DrvStateMacPendReq_Error1 BIT25
#define DrvStateMacPendReq_Error2 BIT26
#define DrvStateResetting BIT27
#define DrvStateWI_Error0 BIT28
#define DrvStateWI_Error1 BIT29
#define DrvStateWI_Error2 BIT30
#define DrvStateWI_Error3 BIT31
#if DRV_LOG_REGISTRY
#define RT_GET_DRV_STATE(__pAdapter) (GetDefaultAdapter(__pAdapter)->DrvState)
#define RT_GET_DRV_STATE_ERROR(__pAdapter) (GetDefaultAdapter(__pAdapter)->bDrvStateError)
#define RT_CLEAR_DRV_STATE_ERROR(__pAdapter) (GetDefaultAdapter(__pAdapter)->bDrvStateError = FALSE)
// Reset all driver state for initialization
#define RT_INIT_DRV_STATE(__pAdapter)\
{\
u4Byte DrvState;\
RT_TRACE(COMP_INIT, DBG_TRACE, ("RT_INIT_DRV_STATE: \n"));\
PlatformAcquireSpinLock(__pAdapter, RT_DRV_STATE_SPINLOCK);\
GetDefaultAdapter(__pAdapter)->DrvState= DrvStateNull;\
DrvState = RT_GET_DRV_STATE(__pAdapter);\
PlatformReleaseSpinLock(__pAdapter, RT_DRV_STATE_SPINLOCK);\
if(N6WriteRegDriverState(__pAdapter, DrvState) == NDIS_STATUS_FAILURE)\
{\
GetDefaultAdapter(__pAdapter)->bDrvStateError = TRUE;\
}\
}
// Set specific driver state
#define RT_SET_DRV_STATE(__pAdapter, __StaBits) \
{ \
u4Byte DrvState;\
RT_TRACE(COMP_INIT, DBG_TRACE, ("RT_SET_DRV_STATE: %#x\n", __StaBits));\
PlatformAcquireSpinLock(__pAdapter, RT_DRV_STATE_SPINLOCK);\
(GetDefaultAdapter(__pAdapter))->DrvState |= ((RT_DF_TYPE)(__StaBits));\
DrvState = RT_GET_DRV_STATE(__pAdapter);\
PlatformReleaseSpinLock(__pAdapter, RT_DRV_STATE_SPINLOCK);\
if(N6WriteRegDriverState(__pAdapter, DrvState) == NDIS_STATUS_FAILURE)\
{\
GetDefaultAdapter(__pAdapter)->bDrvStateError = TRUE;\
}\
}
// Clear corresponding driver state
#define RT_CLEAR_DRV_STATE(__pAdapter, __StaBits)\
{\
u4Byte DrvState;\
RT_TRACE(COMP_INIT, DBG_TRACE, ("RT_CLEAR_DRV_STATE: %#x\n", __StaBits));\
PlatformAcquireSpinLock(__pAdapter, RT_DRV_STATE_SPINLOCK);\
(GetDefaultAdapter(__pAdapter))->DrvState &= (~((RT_DF_TYPE)(__StaBits)));\
DrvState = RT_GET_DRV_STATE(__pAdapter);\
PlatformReleaseSpinLock(__pAdapter, RT_DRV_STATE_SPINLOCK);\
if(N6WriteRegDriverState(__pAdapter, DrvState) == NDIS_STATUS_FAILURE)\
{\
GetDefaultAdapter(__pAdapter)->bDrvStateError = TRUE;\
}\
}
#else
#define RT_GET_DRV_STATE(__pAdapter) 0
#define RT_GET_DRV_STATE_ERROR(__pAdapter) 0
#define RT_CLEAR_DRV_STATE_ERROR(__pAdapter)
#define RT_INIT_DRV_STATE(__pAdapter)
#define RT_SET_DRV_STATE(__pAdapter, __StaBits)
#define RT_CLEAR_DRV_STATE(__pAdapter, __StaBits)
#endif
typedef struct __RT_THREAD_PLATFORM_EXT{
NDIS_EVENT CompleteEvent;
NDIS_EVENT TrigerEvent;
u4Byte Period;
NDIS_SPIN_LOCK Lock;
PKTHREAD Thread;
}RT_THREAD_PLATFORM_EXT, *PRT_THREAD_PLATFORM_EXT;
// Add for windwos common binary.
typedef struct _NIC_MUTEX
{
ULONG Counter;
ULONG ModuleAndLine; // useful for debugging
} NIC_MUTEX, *PNIC_MUTEX;
//
// 2011/02/25 MH Moev the global spin lock and and mutex for global variable between two adapter
// we need to define all the MAC and structure for dedicated OS.
//
// Add for 92D Dual MAC communication protection.
typedef struct GLOBAL_SPINLOCK
{
ULONG SpinlockCounter;
KIRQL SpinlockIrql;
} GLOBAL_SPINLOCK, *PGLOBAL_SPINLOCK;
//
// Global Mutex: can only be used at PASSIVE level.
//
#define ACQUIRE_GLOBAL_MUTEX(_MutexCounter) \
{ \
while (NdisInterlockedIncrement((PULONG)&(_MutexCounter)) != 1)\
{ \
NdisInterlockedDecrement((PULONG)&(_MutexCounter)); \
NdisMSleep(10000); \
} \
}
#define RELEASE_GLOBAL_MUTEX(_MutexCounter) \
{ \
NdisInterlockedDecrement((PULONG)&(_MutexCounter)); \
}
//
// Global Spinlock: can be used at PASSIVE and DISPATCH level.
//
#define ACQUIRE_GLOBAL_SPINLOCK(_pSpinlock) \
{ \
KIRQL TempIrql; \
TempIrql = KeGetCurrentIrql(); \
if (TempIrql == PASSIVE_LEVEL) \
{ \
KeRaiseIrql(DISPATCH_LEVEL, &TempIrql); \
} \
while (NdisInterlockedIncrement((PULONG)&((_pSpinlock)->SpinlockCounter)) != 1)\
{ \
NdisInterlockedDecrement((PULONG)&((_pSpinlock)->SpinlockCounter)); \
NdisStallExecution(40); \
} \
(_pSpinlock)->SpinlockIrql = TempIrql; \
}
#define RELEASE_GLOBAL_SPINLOCK(_pSpinlock) \
{ \
KIRQL TempIrql; \
TempIrql = (_pSpinlock)->SpinlockIrql; \
NdisInterlockedDecrement((PULONG)&((_pSpinlock)->SpinlockCounter)); \
if (TempIrql == PASSIVE_LEVEL) \
KeLowerIrql(TempIrql); \
}
//===============================================
// The following is for Windows pIRP definition
//===============================================
typedef struct _IRP_ENTRY
{
RT_LIST_ENTRY List;
PIRP pIrp;
}IRP_ENTRY, *PIRP_ENTRY;
//
// Data structure used in DbgWorkItem related OID.
//
typedef struct _RT8187DBGWIPARAM
{
ULONG bDbgActCompleted;
ULONG eDbgActType;
ULONG IoOffset;
ULONG IoValue;
ULONG outLen;
UCHAR outBuf[200];
}RT8187DBGWIPARAM, *PRT8187DBGWIPARAM;
//===============================================
NDIS_STATUS
NdisStatusFromRtStatus(
IN u4Byte rtStatus
);
VOID
Dot11_UpdateDefaultSetting(
IN PADAPTER pAdapter
);
VOID
HT_UpdateDefaultSetting(
IN PADAPTER pAdapter
);
VOID
VHT_UpdateDefaultSetting(
IN PADAPTER pAdapter
);
VOID
PSC_UpdateDefaultSetting(
IN PADAPTER pAdapter
);
VOID
HAL_UpdateDefaultSetting(
IN PADAPTER pAdapter
);
NTSTATUS
PlatformReadCommonDwordRegistry(
IN PWCHAR registryName,
OUT pu4Byte Data);
NTSTATUS
PlatformWriteCommonDwordRegistry(
IN PWCHAR registryName,
IN pu4Byte Data);
NTSTATUS
PlatformWriteBTAntPosDwordRegistry(
IN PWCHAR registryName,
IN pu4Byte Data);
NTSTATUS
PlatformReadBTFWLoaderDwordRegistry(
IN PWCHAR registryName,
OUT pu1Byte resultValue);
#endif
|