2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS NDIS library
5 * PURPOSE: NDIS library definitions
6 * NOTES: Spin lock acquire order:
13 typedef unsigned long NDIS_STATS
;
21 struct _ADAPTER_BINDING
;
23 typedef struct _NDISI_PACKET_POOL
{
24 NDIS_SPIN_LOCK SpinLock
;
25 struct _NDIS_PACKET
*FreeList
;
28 } NDISI_PACKET_POOL
, * PNDISI_PACKET_POOL
;
30 /* WDK Compatibility. Taken from w32api DDK */
32 typedef struct _X_FILTER FDDI_FILTER
, *PFDDI_FILTER
;
35 (NTAPI
*FDDI_RCV_COMPLETE_HANDLER
)(
36 IN PFDDI_FILTER Filter
);
39 (NTAPI
*FDDI_RCV_INDICATE_HANDLER
)(
40 IN PFDDI_FILTER Filter
,
41 IN NDIS_HANDLE MacReceiveContext
,
43 IN UINT AddressLength
,
44 IN PVOID HeaderBuffer
,
45 IN UINT HeaderBufferSize
,
46 IN PVOID LookaheadBuffer
,
47 IN UINT LookaheadBufferSize
,
50 typedef enum _NDIS_WORK_ITEM_TYPE
{
53 NdisWorkItemReturnPackets
,
54 NdisWorkItemResetRequested
,
55 NdisWorkItemResetInProgress
,
57 NdisWorkItemSendLoopback
,
58 NdisWorkItemMiniportCallback
,
60 } NDIS_WORK_ITEM_TYPE
, *PNDIS_WORK_ITEM_TYPE
;
62 #define NUMBER_OF_WORK_ITEM_TYPES NdisMaxWorkItems
63 #define NUMBER_OF_SINGLE_WORK_ITEMS 6
65 typedef struct _NDIS_MINIPORT_WORK_ITEM
{
66 SINGLE_LIST_ENTRY Link
;
67 NDIS_WORK_ITEM_TYPE WorkItemType
;
68 PVOID WorkItemContext
;
69 } NDIS_MINIPORT_WORK_ITEM
, *PNDIS_MINIPORT_WORK_ITEM
;
71 typedef VOID (NTAPI
*W_MINIPORT_CALLBACK
)(
72 IN NDIS_HANDLE MiniportAdapterContext
,
73 IN PVOID CallbackContext
);
75 typedef struct _NDIS_BIND_PATHS
{
78 } NDIS_BIND_PATHS
, *PNDIS_BIND_PATHS
;
81 #define FILTERDBS_ARCNET_S \
84 #define FILTERDBS_ARCNET_S \
91 PNULL_FILTER NullDB; \
94 PFDDI_FILTER FddiDB; \
97 typedef struct _NDIS_LOG
{
98 PNDIS_MINIPORT_BLOCK Miniport
;
106 } NDIS_LOG
, *PNDIS_LOG
;
108 typedef enum _NDIS_PNP_DEVICE_STATE
{
110 NdisPnPDeviceStarted
,
111 NdisPnPDeviceQueryStopped
,
112 NdisPnPDeviceStopped
,
113 NdisPnPDeviceQueryRemoved
,
114 NdisPnPDeviceRemoved
,
115 NdisPnPDeviceSurpriseRemoved
116 } NDIS_PNP_DEVICE_STATE
;
118 typedef struct _OID_LIST OID_LIST
, *POID_LIST
;
120 struct _NDIS_MINIPORT_BLOCK
{
122 PNDIS_MINIPORT_BLOCK NextMiniport
;
123 PNDIS_M_DRIVER_BLOCK DriverHandle
;
124 NDIS_HANDLE MiniportAdapterContext
;
125 UNICODE_STRING MiniportName
;
126 PNDIS_BIND_PATHS BindPaths
;
127 NDIS_HANDLE OpenQueue
;
129 NDIS_HANDLE DeviceContext
;
133 UCHAR AssignedProcessor
;
135 PNDIS_REQUEST MediaRequest
;
136 PNDIS_MINIPORT_INTERRUPT Interrupt
;
139 LIST_ENTRY PacketList
;
140 PNDIS_PACKET FirstPendingPacket
;
141 PNDIS_PACKET ReturnPacketsQueue
;
143 PVOID SetMCastBuffer
;
144 PNDIS_MINIPORT_BLOCK PrimaryMiniport
;
145 PVOID WrapperContext
;
146 PVOID BusDataContext
;
147 ULONG PnPCapabilities
;
148 PCM_RESOURCE_LIST Resources
;
149 NDIS_TIMER WakeUpDpcTimer
;
150 UNICODE_STRING BaseName
;
151 UNICODE_STRING SymbolicLinkName
;
152 ULONG CheckForHangSeconds
;
154 USHORT CFHangCurrentTick
;
155 NDIS_STATUS ResetStatus
;
156 NDIS_HANDLE ResetOpen
;
158 FILTER_PACKET_INDICATION_HANDLER PacketIndicateHandler
;
159 NDIS_M_SEND_COMPLETE_HANDLER SendCompleteHandler
;
160 NDIS_M_SEND_RESOURCES_HANDLER SendResourcesHandler
;
161 NDIS_M_RESET_COMPLETE_HANDLER ResetCompleteHandler
;
162 NDIS_MEDIUM MediaType
;
164 NDIS_INTERFACE_TYPE BusType
;
165 NDIS_INTERFACE_TYPE AdapterType
;
166 PDEVICE_OBJECT DeviceObject
;
167 PDEVICE_OBJECT PhysicalDeviceObject
;
168 PDEVICE_OBJECT NextDeviceObject
;
169 PMAP_REGISTER_ENTRY MapRegisters
;
170 PNDIS_AF_LIST CallMgrAfList
;
171 PVOID MiniportThread
;
173 USHORT SetInfoBufLen
;
174 USHORT MaxSendPackets
;
175 NDIS_STATUS FakeStatus
;
177 PUNICODE_STRING pAdapterInstanceName
;
178 PNDIS_MINIPORT_TIMER TimerQueue
;
180 PNDIS_REQUEST PendingRequest
;
181 UINT MaximumLongAddresses
;
182 UINT MaximumShortAddresses
;
183 UINT CurrentLookahead
;
184 UINT MaximumLookahead
;
185 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler
;
186 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler
;
187 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler
;
188 W_SEND_PACKETS_HANDLER SendPacketsHandler
;
189 NDIS_M_START_SENDS DeferredSendHandler
;
190 ETH_RCV_INDICATE_HANDLER EthRxIndicateHandler
;
191 TR_RCV_INDICATE_HANDLER TrRxIndicateHandler
;
192 FDDI_RCV_INDICATE_HANDLER FddiRxIndicateHandler
;
193 ETH_RCV_COMPLETE_HANDLER EthRxCompleteHandler
;
194 TR_RCV_COMPLETE_HANDLER TrRxCompleteHandler
;
195 FDDI_RCV_COMPLETE_HANDLER FddiRxCompleteHandler
;
196 NDIS_M_STATUS_HANDLER StatusHandler
;
197 NDIS_M_STS_COMPLETE_HANDLER StatusCompleteHandler
;
198 NDIS_M_TD_COMPLETE_HANDLER TDCompleteHandler
;
199 NDIS_M_REQ_COMPLETE_HANDLER QueryCompleteHandler
;
200 NDIS_M_REQ_COMPLETE_HANDLER SetCompleteHandler
;
201 NDIS_WM_SEND_COMPLETE_HANDLER WanSendCompleteHandler
;
202 WAN_RCV_HANDLER WanRcvHandler
;
203 WAN_RCV_COMPLETE_HANDLER WanRcvCompleteHandler
;
204 #if defined(NDIS_WRAPPER)
205 PNDIS_MINIPORT_BLOCK NextGlobalMiniport
;
206 SINGLE_LIST_ENTRY WorkQueue
[NUMBER_OF_WORK_ITEM_TYPES
];
207 SINGLE_LIST_ENTRY SingleWorkItems
[NUMBER_OF_SINGLE_WORK_ITEMS
];
214 PNDIS_ARC_BUF ArcBuf
;
220 PCM_RESOURCE_LIST AllocatedResources
;
221 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
222 SINGLE_LIST_ENTRY PatternList
;
223 NDIS_PNP_CAPABILITIES PMCapabilities
;
224 DEVICE_CAPABILITIES DeviceCaps
;
226 DEVICE_POWER_STATE CurrentDevicePowerState
;
228 SYSTEM_POWER_STATE WaitWakeSystemState
;
229 LARGE_INTEGER VcIndex
;
230 KSPIN_LOCK VcCountLock
;
231 LIST_ENTRY WmiEnabledVcs
;
232 PNDIS_GUID pNdisGuidMap
;
233 PNDIS_GUID pCustomGuidMap
;
236 USHORT cCustomGuidMap
;
237 USHORT CurrentMapRegister
;
238 PKEVENT AllocationEvent
;
239 USHORT BaseMapRegistersNeeded
;
240 USHORT SGMapRegistersNeeded
;
241 ULONG MaximumPhysicalMapping
;
242 NDIS_TIMER MediaDisconnectTimer
;
243 USHORT MediaDisconnectTimeOut
;
244 USHORT InstanceNumber
;
245 NDIS_EVENT OpenReadyEvent
;
246 NDIS_PNP_DEVICE_STATE PnPDeviceState
;
247 NDIS_PNP_DEVICE_STATE OldPnPDeviceState
;
248 PGET_SET_DEVICE_DATA SetBusData
;
249 PGET_SET_DEVICE_DATA GetBusData
;
253 NDIS_STATS NdisStats
;
257 PNDIS_PACKET IndicatedPacket
[MAXIMUM_PROCESSORS
];
258 PKEVENT RemoveReadyEvent
;
259 PKEVENT AllOpensClosedEvent
;
260 PKEVENT AllRequestsCompletedEvent
;
262 NDIS_MINIPORT_WORK_ITEM WorkItemBuffer
[NUMBER_OF_SINGLE_WORK_ITEMS
];
263 PDMA_ADAPTER SystemAdapterObject
;
264 ULONG DriverVerifyFlags
;
266 USHORT InternalResetCount
;
267 USHORT MiniportResetCount
;
268 USHORT MediaSenseConnectCount
;
269 USHORT MediaSenseDisconnectCount
;
270 PNDIS_PACKET
*xPackets
;
271 ULONG UserModeOpenReferences
;
273 PVOID SavedSendHandler
;
274 PVOID SavedWanSendHandler
;
276 PVOID SavedSendPacketsHandler
;
277 PVOID SavedCancelSendPacketsHandler
;
278 W_SEND_PACKETS_HANDLER WSendPacketsHandler
;
279 ULONG MiniportAttributes
;
280 PDMA_ADAPTER SavedSystemAdapterObject
;
284 ULONG IndicatedPacketsCount
;
285 ULONG PhysicalMediumType
;
286 PNDIS_REQUEST LastRequest
;
287 LONG DmaAdapterRefCount
;
293 KSPIN_LOCK TimerQueueLock
;
294 PKEVENT ResetCompletedEvent
;
295 PKEVENT QueuedBindingCompletedEvent
;
296 PKEVENT DmaResourcesReleasedEvent
;
297 FILTER_PACKET_INDICATION_HANDLER SavedPacketIndicateHandler
;
298 ULONG RegisteredInterrupts
;
299 PNPAGED_LOOKASIDE_LIST SGListLookasideList
;
300 ULONG ScatterGatherListSize
;
306 typedef PVOID QUEUED_CLOSE
;
309 #if defined(NDIS_WRAPPER)
310 #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S \
313 KSPIN_LOCK SpinLock; \
314 NDIS_HANDLE FilterHandle; \
315 ULONG ProtocolOptions; \
316 USHORT CurrentLookahead; \
317 USHORT ConnectDampTicks; \
318 USHORT DisconnectDampTicks; \
319 W_SEND_HANDLER WSendHandler; \
320 W_TRANSFER_DATA_HANDLER WTransferDataHandler; \
321 W_SEND_PACKETS_HANDLER WSendPacketsHandler; \
322 W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \
323 ULONG WakeUpEnable; \
324 PKEVENT CloseCompleteEvent; \
326 ULONG AfReferences; \
327 PNDIS_OPEN_BLOCK NextGlobalOpen;
329 #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S
332 #define NDIS_COMMON_OPEN_BLOCK_S \
334 NDIS_HANDLE BindingHandle; \
335 PNDIS_MINIPORT_BLOCK MiniportHandle; \
336 PNDIS_PROTOCOL_BLOCK ProtocolHandle; \
337 NDIS_HANDLE ProtocolBindingContext; \
338 PNDIS_OPEN_BLOCK MiniportNextOpen; \
339 PNDIS_OPEN_BLOCK ProtocolNextOpen; \
340 NDIS_HANDLE MiniportAdapterContext; \
345 PNDIS_STRING BindDeviceName; \
346 KSPIN_LOCK Reserved5; \
347 PNDIS_STRING RootDeviceName; \
349 SEND_HANDLER SendHandler; \
350 WAN_SEND_HANDLER WanSendHandler; \
352 TRANSFER_DATA_HANDLER TransferDataHandler; \
353 SEND_COMPLETE_HANDLER SendCompleteHandler; \
354 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \
355 RECEIVE_HANDLER ReceiveHandler; \
356 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \
357 WAN_RECEIVE_HANDLER WanReceiveHandler; \
358 REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \
359 RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
360 SEND_PACKETS_HANDLER SendPacketsHandler; \
361 RESET_HANDLER ResetHandler; \
362 REQUEST_HANDLER RequestHandler; \
363 RESET_COMPLETE_HANDLER ResetCompleteHandler; \
364 STATUS_HANDLER StatusHandler; \
365 STATUS_COMPLETE_HANDLER StatusCompleteHandler; \
366 NDIS_COMMON_OPEN_BLOCK_WRAPPER_S
368 typedef struct _NDIS_COMMON_OPEN_BLOCK
{
369 NDIS_COMMON_OPEN_BLOCK_S
370 } NDIS_COMMON_OPEN_BLOCK
;
372 struct _NDIS_OPEN_BLOCK
375 NDIS_COMMON_OPEN_BLOCK NdisCommonOpenBlock
;
377 NDIS_COMMON_OPEN_BLOCK_S
379 #if defined(NDIS_WRAPPER)
382 struct _NDIS_CO_AF_BLOCK
* NextAf
;
383 W_CO_CREATE_VC_HANDLER MiniportCoCreateVcHandler
;
384 W_CO_REQUEST_HANDLER MiniportCoRequestHandler
;
385 CO_CREATE_VC_HANDLER CoCreateVcHandler
;
386 CO_DELETE_VC_HANDLER CoDeleteVcHandler
;
387 PVOID CmActivateVcCompleteHandler
;
388 PVOID CmDeactivateVcCompleteHandler
;
389 PVOID CoRequestCompleteHandler
;
390 LIST_ENTRY ActiveVcHead
;
391 LIST_ENTRY InactiveVcHead
;
392 LONG PendingAfNotifications
;
393 PKEVENT AfNotifyCompleteEvent
;
398 #define NDIS30_PROTOCOL_CHARACTERISTICS_S \
399 UCHAR MajorNdisVersion; \
400 UCHAR MinorNdisVersion; \
406 OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler; \
407 CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler; \
409 SEND_COMPLETE_HANDLER SendCompleteHandler; \
410 WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler; \
413 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \
414 WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler; \
416 RESET_COMPLETE_HANDLER ResetCompleteHandler; \
417 REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \
419 RECEIVE_HANDLER ReceiveHandler; \
420 WAN_RECEIVE_HANDLER WanReceiveHandler; \
422 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \
423 STATUS_HANDLER StatusHandler; \
424 STATUS_COMPLETE_HANDLER StatusCompleteHandler; \
427 typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS
{
428 NDIS30_PROTOCOL_CHARACTERISTICS_S
429 } NDIS30_PROTOCOL_CHARACTERISTICS
, *PNDIS30_PROTOCOL_CHARACTERISTICS
;
431 #define NDIS30_MINIPORT_CHARACTERISTICS_S \
432 UCHAR MajorNdisVersion; \
433 UCHAR MinorNdisVersion; \
436 W_CHECK_FOR_HANG_HANDLER CheckForHangHandler; \
437 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler; \
438 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler; \
439 W_HALT_HANDLER HaltHandler; \
440 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler; \
441 W_INITIALIZE_HANDLER InitializeHandler; \
442 W_ISR_HANDLER ISRHandler; \
443 W_QUERY_INFORMATION_HANDLER QueryInformationHandler; \
444 W_RECONFIGURE_HANDLER ReconfigureHandler; \
445 W_RESET_HANDLER ResetHandler; \
447 W_SEND_HANDLER SendHandler; \
448 WM_SEND_HANDLER WanSendHandler; \
450 W_SET_INFORMATION_HANDLER SetInformationHandler; \
452 W_TRANSFER_DATA_HANDLER TransferDataHandler; \
453 WM_TRANSFER_DATA_HANDLER WanTransferDataHandler; \
456 typedef struct _NDIS30_MINIPORT_CHARACTERISTICS
{
457 NDIS30_MINIPORT_CHARACTERISTICS_S
458 } NDIS30_MINIPORT_CHARACTERISTICS
, *PSNDIS30_MINIPORT_CHARACTERISTICS
;
462 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
463 NDIS30_MINIPORT_CHARACTERISTICS Ndis30Chars; \
464 W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
465 W_SEND_PACKETS_HANDLER SendPacketsHandler; \
466 W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
468 #else /* !__cplusplus */
470 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
471 NDIS30_MINIPORT_CHARACTERISTICS_S \
472 W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
473 W_SEND_PACKETS_HANDLER SendPacketsHandler; \
474 W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
476 #endif /* !__cplusplus */
478 typedef struct _NDIS40_MINIPORT_CHARACTERISTICS
{
479 NDIS40_MINIPORT_CHARACTERISTICS_S
480 } NDIS40_MINIPORT_CHARACTERISTICS
, *PNDIS40_MINIPORT_CHARACTERISTICS
;
484 #include "miniport.h"
485 #include "protocol.h"
489 /* Exported functions */
494 #define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
495 #define NDIS_TAG 0x4e4d4953
497 #define MIN(value1, value2) \
498 ((value1 < value2)? value1 : value2)
500 #define MAX(value1, value2) \
501 ((value1 > value2)? value1 : value2)
503 #define ExInterlockedRemoveEntryList(_List,_Lock) \
505 KeAcquireSpinLock(_Lock, &OldIrql); \
506 RemoveEntryList(_List); \
507 KeReleaseSpinLock(_Lock, OldIrql); \
510 #endif /* __NDISSYS_H */