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
|
#ifndef __INC_N6SDIO_MAIN_H
#define __INC_N6SDIO_MAIN_H
// Forward declaration.
typedef struct _ADAPTER ADAPTER, *PADAPTER;
typedef struct _RT_TCB RT_TCB, *PRT_TCB;
typedef struct _RT_RFD RT_RFD, *PRT_RFD;
//sherry added here for dual mac 20110627
extern RT_LIST_ENTRY GlobalAdapterList;
extern BOOLEAN GlobalFirstConfigurationForNormalChip;
extern ULONG GlobalMutexForGlobalAdapterList;
extern GLOBAL_SPINLOCK GlobalSpinlockForGlobalAdapterList;
extern ULONG GlobalMutexForPowerAndEfuse;
extern ULONG GlobalMutexForPowerOnAndPowerOff;
extern ULONG GlobalMutexForFwDownload;
extern ULONG GlobalMutexForMac0_2G_Mac1_5G;
extern GLOBAL_SPINLOCK GlobalSpinLockForDusc;
#define N6SDIO_GET_MINIPORT_HANDLE(_pAdapter) (GET_RT_SDIO_DEVICE(_pAdapter)->hNdisAdapter)
//-------------------------------------------------------------------------
// Tx Related.
//-------------------------------------------------------------------------
#define N6SDIO_CANNOT_TX(__pAdapter) \
( RT_SDIO_CANNOT_TX(__pAdapter) || \
N6C_GET_MP_DRIVER_STATE(__pAdapter) <= MINIPORT_PAUSING || \
NicIFGetLinkStatus((__pAdapter)) != RT_MEDIA_CONNECT )
#define N6SDIO_INC_TX_RESET_COUNT(__pDevice) ++((pDevice)->TxResetCnt)
#define N6SDIO_DEC_TX_RESET_COUNT(__pDevice) --((pDevice)->TxResetCnt)
#define N6SDIO_CANNOT_RX(__pAdapter) \
( (__pAdapter)->bDriverStopped || \
(__pAdapter)->MgntInfo.bDriverIsGoingToSleep || \
RT_IS_FUNC_DISABLED((__pAdapter), DF_RX_BIT) || \
N6C_GET_MP_DRIVER_STATE(__pAdapter) <= MINIPORT_PAUSING )
#if defined(__cplusplus)
extern "C"
{
#endif
typedef enum {
SDIO_LOCAL = 0,
SDIO_WLAN_TX_HIQ = 1,
SDIO_WLAN_TX_MIQ = 2,
SDIO_WLAN_TX_LOQ = 3,
SDIO_WLAN_RX_FF = 4,
SDIO_IOREG = 5
} SDIO_DEVICE_ID;
NDIS_STATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
);
#if defined(__cplusplus)
};
#endif
NDIS_STATUS
N6SdioInitialize(
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_HANDLE MiniportDriverContext,
IN PNDIS_MINIPORT_INIT_PARAMETERS MiniportInitParameters
);
VOID
N6SdioUpdateDefaultSetting(
IN PADAPTER pAdapter
);
RT_STATUS
N6SdioDumpDeviceProperty(
IN PRT_SDIO_DEVICE pDevice
);
NTSTATUS
N6SdioConfigureBusCLKByWorkAround(
IN PRT_SDIO_DEVICE pDevice
);
NTSTATUS
N6SdioConfigureBusCLK_SDR12(
IN PRT_SDIO_DEVICE pDevice
);
NTSTATUS
N6SdioConfigureDevice(
IN PRT_SDIO_DEVICE pDevice
);
RT_STATUS
N6SdioQueryCISArea(
IN PRT_SDIO_DEVICE pDevice
);
RT_STATUS
N6SdioFindCisTuple(
IN PRT_SDIO_DEVICE pDevice,
IN u1Byte Tuple,
IN OUT pu4Byte pTupleScanAddress,
OUT pu1Byte pBuffer,
IN OUT pu1Byte pLength
);
NTSTATUS
N6SdioInitTxQueue(
IN PADAPTER Adapter
);
NDIS_STATUS
N6SdioRestart(
IN NDIS_HANDLE MiniportAdapterContext,
IN PNDIS_MINIPORT_RESTART_PARAMETERS MiniportRestartParameters
);
NDIS_STATUS
N6SdioPause(
IN NDIS_HANDLE MiniportAdapterContext,
IN PNDIS_MINIPORT_PAUSE_PARAMETERS MiniportPauseParameters
);
VOID
N6SdioShutdown(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_SHUTDOWN_ACTION ShutdownAction
);
VOID
N6SdioPnPEventNotify(
IN NDIS_HANDLE MiniportAdapterContext,
IN PNET_DEVICE_PNP_EVENT NetDevicePnPEvent
);
NDIS_STATUS
N6SdioPowerSettingCallback(
IN CONST LPGUID SettingGuid,
IN PULONG Value,
IN ULONG ValueLength,
IN PVOID MiniportAdapterContext
);
NDIS_STATUS
N6SdioWLANPowerModeCallback(
IN CONST LPGUID SettingGuid,
IN PULONG Value,
IN ULONG ValueLength,
IN PVOID MiniportAdapterContext
);
VOID
N6SdioPowerSettingChangeNotify(
IN PADAPTER Adapter
);
VOID
N6SdioHalt(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_HALT_ACTION HaltAction
);
VOID
N6SdioUnload(
IN PDRIVER_OBJECT DriverObject
);
NDIS_STATUS
N6SdioOidRequest(
IN NDIS_HANDLE MiniportAdapterContext,
IN PNDIS_OID_REQUEST NdisRequest
);
VOID
N6SdioCancelOidRequest(
IN NDIS_HANDLE hMiniportAdapterContext,
IN PVOID RequestId
);
NDIS_STATUS
N6SdioSetOptions(
IN NDIS_HANDLE NdisMiniportDriverHandle,
IN NDIS_HANDLE MiniportDriverContext
);
VOID
N6SdioSendNetBufferLists(
IN NDIS_HANDLE MiniportAdapterContext,
IN PNET_BUFFER_LIST pNetBufferLists,
IN NDIS_PORT_NUMBER PortNumber,
IN ULONG SendFlags
);
BOOLEAN
N6SdioSendSingleNetBufferList(
IN PADAPTER Adapter,
IN PNET_BUFFER_LIST pNetBufferList,
IN BOOLEAN bFromQueue
);
BOOLEAN
N6SdioGetPacketBuffers(
IN PADAPTER Adapter,
IN PNET_BUFFER pNetBuffer,
OUT PRT_TCB pTcb
);
VOID
N6SdioSendCoalescedNetBuffer(
IN PADAPTER Adapter,
IN PNET_BUFFER pNetBuffer,
OUT PRT_TCB pTcb
);
VOID
N6SdioReturnAllPendingTxPackets(
IN PADAPTER pAdapter
);
VOID
N6SdioCancelSend(
IN NDIS_HANDLE MiniportAdapterContext,
IN PVOID CancelId
);
VOID
N6SdioReturnNetBufferLists(
IN NDIS_HANDLE MiniportAdapterContext,
IN PNET_BUFFER_LIST NetBufferLists,
IN ULONG ReturnFlags
);
BOOLEAN
N6SdioCheckForHang(
IN NDIS_HANDLE MiniportAdapterContext
);
NDIS_STATUS
N6SdioReset(
IN NDIS_HANDLE MiniportAdapterContext,
OUT PBOOLEAN AddressingReset
);
//
// NDIS5 Legacy -------------------------------------------------------------------
//
VOID
N6SdioFill80211PhyAttributes(
IN PADAPTER Adapter,
IN PNDIS_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES pDot11Attributes
);
NDIS_STATUS
N6SdioAllocateNative80211MIBs(
IN PADAPTER Adapter
);
VOID
N6SdioFreeNative80211MIBs(
IN PADAPTER Adapter
);
NDIS_STATUS
N6SdioReadRegParameters(
IN PRT_SDIO_DEVICE device
);
VOID
N6SdioFreeTxQueueRes(
IN PADAPTER pAdapter
);
VOID
N6SdioDereferInterface(
IN PRT_SDIO_DEVICE sdiodevice
);
VOID
N6SdioFreeDevice(
IN PRT_SDIO_DEVICE usbdevice
);
VOID
N6SdioCancelAllTimer(
IN PADAPTER Adapter
);
VOID
N6SdioFreeAll(
IN PADAPTER Adapter
);
VOID
N6SdioStartTxQueue(
IN PADAPTER pAdapter,
IN int nTxQueueIdx
);
VOID
N6SdioStopTxQueue(
IN PADAPTER pAdapter,
IN int nTxQueueIdx
);
NDIS_STATUS
N6SdioAllocateRxNetBufferListPool(
IN PADAPTER Adapter
);
VOID
N6SdioFreeRxNetBufferListPool(
IN PADAPTER Adapter
);
VOID
N6SdioEnableDeviceInterrupt(
IN PADAPTER Adapter
);
VOID
N6SdioDisableDeviceInterrupt(
IN PADAPTER Adapter
);
VOID
PnpWorkItemCallback(
IN PVOID pContext);
#if POWER_MAN
NDIS_STATUS
N6Sdio_Mgnt_SetPower(
PADAPTER Adapter,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength,
OUT PULONG BytesNeeded,
OUT PULONG BytesRead
);
#endif
VOID
N6SdioCleanUpInitializedResourcesEx(
IN PADAPTER Adapter,
IN RES_MON_OBJ ResMonObj
);
VOID
N6SdioCleanUpInitializedResources(
IN PADAPTER Adapter,
IN RM_RES_TYPE ResType
);
VOID
FillPnpCapabilities(
IN PADAPTER pAdapter,
IN OUT PNDIS_PNP_CAPABILITIES pPnpCapabilities
);
VOID
FillPmCapabilities(
IN PADAPTER pAdapter,
IN OUT PNDIS_PM_CAPABILITIES pPmCapabilities
);
VOID
N6SdioAllocRes(
IN PADAPTER Adapter
);
VOID
N6SdioFreeRes(
IN PADAPTER Adapter
);
// TODO: add for WDI
NDIS_STATUS
N6sdioAllocateAdapter(
OUT PADAPTER *pAdapter,
IN NDIS_HANDLE MiniportAdapterHandle
);
RT_STATUS
N6SdioSyncCurrentSdBusClk(
IN PRT_SDIO_DEVICE pDevice
);
VOID
N6SdioDummyIO(
IN PRT_SDIO_DEVICE pDevice
);
#endif // #ifndef __INC_N6SDIO_MAIN_H
|