summaryrefslogtreecommitdiff
path: root/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_main.h
blob: 03e408b480f0aa0d8c2af21876922a3c5383797c (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
#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