2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS NDIS library
6 * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
8 * CSH 01/08-2000 Created
18 NdisCompleteQueryStatistics(
19 IN NDIS_HANDLE NdisAdapterHandle
,
20 IN PNDIS_REQUEST NdisRequest
,
21 IN NDIS_STATUS Status
)
32 NdisCompleteUnbindAdapter(
33 IN NDIS_HANDLE UnbindAdapterContext
,
34 IN NDIS_STATUS Status
)
43 #undef NdisInterlockedAddUlong
46 NdisInterlockedAddUlong (
49 IN PNDIS_SPIN_LOCK SpinLock
)
51 ExInterlockedAddUlong ( Addend
, Increment
, (PKSPIN_LOCK
)SpinLock
);
58 #undef NdisInterlockedInsertHeadList
61 NdisInterlockedInsertHeadList(
62 IN PLIST_ENTRY ListHead
,
63 IN PLIST_ENTRY ListEntry
,
64 IN PNDIS_SPIN_LOCK SpinLock
)
66 return ExInterlockedInsertHeadList ( ListHead
, ListEntry
, (PKSPIN_LOCK
)SpinLock
);
73 #undef NdisInterlockedInsertTailList
76 NdisInterlockedInsertTailList(
77 IN PLIST_ENTRY ListHead
,
78 IN PLIST_ENTRY ListEntry
,
79 IN PNDIS_SPIN_LOCK SpinLock
)
81 return ExInterlockedInsertTailList ( ListHead
, ListEntry
, (PKSPIN_LOCK
)SpinLock
);
88 #undef NdisInterlockedRemoveHeadList
91 NdisInterlockedRemoveHeadList(
92 IN PLIST_ENTRY ListHead
,
93 IN PNDIS_SPIN_LOCK SpinLock
)
95 return ExInterlockedRemoveHeadList ( ListHead
, (PKSPIN_LOCK
)SpinLock
);
105 OUT PNDIS_STATUS Status
,
106 OUT PVOID
* MappedBuffer
,
107 IN NDIS_HANDLE FileHandle
)
112 typedef struct _NDIS_HANDLE_OBJECT
118 } NDIS_HANDLE_OBJECT
, *PNDIS_HANDLE_OBJECT
;
122 NDIS_HANDLE_TO_POBJECT ( NDIS_HANDLE handle
)
124 return (PNDIS_HANDLE_OBJECT
)handle
;
129 NDIS_POBJECT_TO_HANDLE ( PNDIS_HANDLE_OBJECT obj
)
131 return (NDIS_HANDLE
)obj
;
134 const WCHAR
* NDIS_FILE_FOLDER
= L
"\\SystemRoot\\System32\\Drivers\\";
142 IN NDIS_HANDLE FileHandle
)
144 PNDIS_HANDLE_OBJECT FileHandleObject
;
146 ASSERT_IRQL(PASSIVE_LEVEL
);
148 ASSERT ( FileHandle
);
150 FileHandleObject
= NDIS_HANDLE_TO_POBJECT(FileHandle
);
152 ASSERT ( FileHandleObject
->FileHandle
);
155 if ( FileHandleObject->Mapped )
156 NdisUnmapFile ( FileHandle );
159 ZwClose ( FileHandleObject
->FileHandle
);
161 memset ( FileHandleObject
, 0, sizeof(NDIS_HANDLE_OBJECT
) );
163 ExFreePool ( FileHandleObject
);
172 NdisIMDeInitializeDeviceInstance(
173 IN NDIS_HANDLE NdisMiniportHandle
)
177 return NDIS_STATUS_FAILURE
;
184 #undef NdisIMInitializeDeviceInstance
187 NdisIMInitializeDeviceInstance(
188 IN NDIS_HANDLE DriverHandle
,
189 IN PNDIS_STRING DeviceInstance
)
193 return NDIS_STATUS_FAILURE
;
202 NdisIMRegisterLayeredMiniport(
203 IN NDIS_HANDLE NdisWrapperHandle
,
204 IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics
,
205 IN UINT CharacteristicsLength
,
206 OUT PNDIS_HANDLE DriverHandle
)
210 return NDIS_STATUS_FAILURE
;
217 #undef NdisMWanIndicateReceive
220 NdisMWanIndicateReceive(
221 OUT PNDIS_STATUS Status
,
222 IN NDIS_HANDLE MiniportAdapterHandle
,
223 IN NDIS_HANDLE NdisLinkContext
,
224 IN PUCHAR PacketBuffer
,
234 #undef NdisMWanIndicateReceiveComplete
237 NdisMWanIndicateReceiveComplete(
238 IN NDIS_HANDLE MiniportAdapterHandle
)
247 #undef NdisMWanSendComplete
250 NdisMWanSendComplete(
251 IN NDIS_HANDLE MiniportAdapterHandle
,
252 IN PNDIS_WAN_PACKET Packet
,
253 IN NDIS_STATUS Status
)
265 OUT PNDIS_STATUS Status
,
266 OUT PNDIS_HANDLE FileHandle
,
267 OUT PUINT FileLength
,
268 IN PNDIS_STRING FileName
,
269 IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress
)
271 NDIS_STRING FullFileName
;
272 OBJECT_ATTRIBUTES ObjectAttributes
;
273 PNDIS_HANDLE_OBJECT FileHandleObject
= NULL
;
274 IO_STATUS_BLOCK IoStatusBlock
;
276 ASSERT_IRQL(PASSIVE_LEVEL
);
278 *Status
= NDIS_STATUS_SUCCESS
;
279 FullFileName
.Buffer
= NULL
;
281 ASSERT ( Status
&& FileName
);
283 FullFileName
.Length
= sizeof(NDIS_FILE_FOLDER
);
284 FullFileName
.MaximumLength
= FileName
->MaximumLength
+ sizeof(NDIS_FILE_FOLDER
);
285 FullFileName
.Buffer
= ExAllocatePool ( NonPagedPool
, FullFileName
.MaximumLength
);
287 if ( !FullFileName
.Buffer
)
289 *Status
= NDIS_STATUS_RESOURCES
;
293 FileHandleObject
= ExAllocatePool ( NonPagedPool
, sizeof(NDIS_HANDLE_OBJECT
) );
294 if ( !FileHandleObject
)
296 *Status
= NDIS_STATUS_RESOURCES
;
299 memset ( FileHandleObject
, 0, sizeof(NDIS_HANDLE_OBJECT
) );
301 memmove ( FullFileName
.Buffer
, NDIS_FILE_FOLDER
, FullFileName
.Length
);
302 *Status
= RtlAppendUnicodeStringToString ( &FullFileName
, FileName
);
303 if ( !NT_SUCCESS(*Status
) )
305 *Status
= NDIS_STATUS_FAILURE
;
309 InitializeObjectAttributes ( &ObjectAttributes
,
311 OBJ_CASE_INSENSITIVE
,
315 *Status
= ZwCreateFile (
316 &FileHandleObject
->FileHandle
,
317 FILE_READ_DATA
|SYNCHRONIZE
,
320 NULL
, // PLARGE_INTEGER AllocationSize
321 0, // ULONG FileAttributes
322 FILE_SHARE_READ
, // ULONG ShareAccess
323 FILE_CREATE
, // ULONG CreateDisposition
324 FILE_SYNCHRONOUS_IO_NONALERT
, // ULONG CreateOptions
326 0 ); // ULONG EaLength
328 if ( !NT_SUCCESS(*Status
) )
330 *Status
= NDIS_STATUS_FAILURE
;
334 if ( FullFileName
.Buffer
!= NULL
)
336 ExFreePool ( FullFileName
.Buffer
);
337 FullFileName
.Buffer
= NULL
;
339 if ( !NT_SUCCESS(*Status
) )
341 if( FileHandleObject
) {
342 ExFreePool ( FileHandleObject
);
343 FileHandleObject
= NULL
;
348 *FileHandle
= NDIS_POBJECT_TO_HANDLE(FileHandleObject
);
355 NdisOpenGlobalConfiguration
361 NdisRegisterTdiCallBack(
362 IN TDI_REGISTER_CALLBACK RegsterCallback
)
377 NdisSetProtocolFilter(
378 OUT PNDIS_STATUS Status
,
379 IN NDIS_HANDLE NdisBindingHandle
,
380 IN RECEIVE_HANDLER ReceiveHandler
,
381 IN RECEIVE_PACKET_HANDLER ReceivePacketHandler
,
382 IN NDIS_MEDIUM Medium
,
397 NdisSystemProcessorCount(
400 return (CCHAR
)KeNumberProcessors
;
410 IN NDIS_HANDLE FileHandle
)
417 NdisUpcaseUnicodeString
418 NdisUpdateSharedMemory@4
423 NdisWriteEventLogEntry
428 /* NDIS 5.0 extensions */
435 NdisCompletePnPEvent(
436 IN NDIS_STATUS Status
,
437 IN NDIS_HANDLE NdisBindingHandle
,
438 IN PNET_PNP_EVENT NetPnPEvent
)
455 NdisConvertStringToAtmAddress(
456 OUT PNDIS_STATUS Status
,
457 IN PNDIS_STRING String
,
458 OUT PATM_ADDRESS AtmAddress
)
475 NdisGetCurrentProcessorCounts(
476 OUT PULONG pIdleCount
,
477 OUT PULONG pKernelAndUser
,
486 ExGetCurrentProcessorCounts( (PULONG
) pIdleCount
, (PULONG
) pKernelAndUser
, (PULONG
) pIndex
);
496 IN PNDIS_HANDLE NdisBindingHandle
,
497 OUT PNDIS_HANDLE NdisDriverHandle
)
514 NdisGetReceivedPacket(
515 IN PNDIS_HANDLE NdisBindingHandle
,
516 IN PNDIS_HANDLE MacContext
)
536 OUT PULONG pSystemUpTime
)
544 /* Get the uptime of the system in msec */
545 *pSystemUpTime
= ( (SharedUserData
->TickCountLowDeprecated
* SharedUserData
->TickCountMultiplier
) / 0x1000000);
552 #undef NdisInterlockedDecrement
555 NdisInterlockedDecrement(
564 return InterlockedDecrement ( Addend
);
571 #undef NdisInterlockedIncrement
574 NdisInterlockedIncrement(
583 return InterlockedIncrement ( Addend
);
590 #undef NdisInterlockedPopEntrySList
593 NdisInterlockedPopEntrySList(
594 IN PSLIST_HEADER ListHead
,
603 return ExInterlockedPopEntrySList ( ListHead
, Lock
);
610 #undef NdisInterlockedPushEntrySList
613 NdisInterlockedPushEntrySList(
614 IN PSLIST_HEADER ListHead
,
615 IN PSINGLE_LIST_ENTRY ListEntry
,
624 return ExInterlockedPushEntrySList ( ListHead
, ListEntry
, Lock
);
633 NdisMDeregisterDevice(
634 IN NDIS_HANDLE NdisDeviceHandle
)
644 return NDIS_STATUS_FAILURE
;
653 NdisMGetDeviceProperty(
654 IN NDIS_HANDLE MiniportAdapterHandle
,
655 IN OUT PDEVICE_OBJECT
*PhysicalDeviceObject OPTIONAL
,
656 IN OUT PDEVICE_OBJECT
*FunctionalDeviceObject OPTIONAL
,
657 IN OUT PDEVICE_OBJECT
*NextDeviceObject OPTIONAL
,
658 IN OUT PCM_RESOURCE_LIST
*AllocatedResources OPTIONAL
,
659 IN OUT PCM_RESOURCE_LIST
*AllocatedResourcesTranslated OPTIONAL
)
676 NdisMInitializeScatterGatherDma(
677 IN NDIS_HANDLE MiniportAdapterHandle
,
678 IN BOOLEAN Dma64BitAddresses
,
679 IN ULONG MaximumPhysicalMapping
)
689 return NDIS_STATUS_FAILURE
;
698 NdisMPromoteMiniport(
699 IN NDIS_HANDLE MiniportAdapterHandle
)
709 return NDIS_STATUS_FAILURE
;
718 NdisMQueryAdapterInstanceName(
719 OUT PNDIS_STRING AdapterInstanceName
,
720 IN NDIS_HANDLE MiniportAdapterHandle
)
730 return NDIS_STATUS_FAILURE
;
740 IN NDIS_HANDLE NdisWrapperHandle
,
741 IN PNDIS_STRING DeviceName
,
742 IN PNDIS_STRING SymbolicName
,
743 IN PDRIVER_DISPATCH MajorFunctions
[],
744 OUT PDEVICE_OBJECT
*pDeviceObject
,
745 OUT NDIS_HANDLE
*NdisDeviceHandle
)
755 return NDIS_STATUS_FAILURE
;
764 NdisMRegisterUnloadHandler(
765 IN NDIS_HANDLE NdisWrapperHandle
,
766 IN PDRIVER_UNLOAD UnloadHandler
)
784 IN NDIS_HANDLE MiniportAdapterHandle
)
794 return NDIS_STATUS_FAILURE
;
803 NdisMSetMiniportSecondary(
804 IN NDIS_HANDLE MiniportAdapterHandle
,
805 IN NDIS_HANDLE PrimaryMiniportAdapterHandle
)
815 return NDIS_STATUS_FAILURE
;
825 NdisQueryAdapterInstanceName(
826 OUT PNDIS_STRING AdapterInstanceName
,
827 IN NDIS_HANDLE NdisBindingHandle
)
837 return NDIS_STATUS_FAILURE
;
846 NdisReadPcmciaAttributeMemory(
847 IN NDIS_HANDLE NdisAdapterHandle
,
869 NdisWritePcmciaAttributeMemory(
870 IN NDIS_HANDLE NdisAdapterHandle
,
887 /* NDIS 5.0 extensions for intermediate drivers */
894 NdisIMAssociateMiniport(
895 IN NDIS_HANDLE DriverHandle
,
896 IN NDIS_HANDLE ProtocolHandle
)
913 NdisIMCancelInitializeDeviceInstance(
914 IN NDIS_HANDLE DriverHandle
,
915 IN PNDIS_STRING DeviceInstance
)
925 return NDIS_STATUS_FAILURE
;
934 NdisIMCopySendCompletePerPacketInfo(
935 IN PNDIS_PACKET DstPacket
,
936 IN PNDIS_PACKET SrcPacket
)
953 NdisIMCopySendPerPacketInfo(
954 IN PNDIS_PACKET DstPacket
,
955 IN PNDIS_PACKET SrcPacket
)
972 NdisIMDeregisterLayeredMiniport(
973 IN NDIS_HANDLE DriverHandle
)
990 NdisIMGetBindingContext(
991 IN NDIS_HANDLE NdisBindingHandle
)
1001 return (NDIS_HANDLE
)NULL
;
1010 NdisIMGetDeviceContext(
1011 IN NDIS_HANDLE MiniportAdapterHandle
)
1021 return (NDIS_HANDLE
)NULL
;
1030 NdisIMInitializeDeviceInstanceEx(
1031 IN NDIS_HANDLE DriverHandle
,
1032 IN PNDIS_STRING DriverInstance
,
1033 IN NDIS_HANDLE DeviceContext OPTIONAL
)
1043 return NDIS_STATUS_FAILURE
;
1050 ndisProcWorkItemHandler(PVOID pContext
)
1052 PNDIS_WORK_ITEM pNdisItem
= (PNDIS_WORK_ITEM
)pContext
;
1053 pNdisItem
->Routine(pNdisItem
, pNdisItem
->Context
);
1058 NdisScheduleWorkItem(
1059 IN PNDIS_WORK_ITEM pWorkItem
)
1061 PWORK_QUEUE_ITEM pntWorkItem
= (PWORK_QUEUE_ITEM
)pWorkItem
->WrapperReserved
;
1062 ExInitializeWorkItem(pntWorkItem
, ndisProcWorkItemHandler
, pWorkItem
);
1063 ExQueueWorkItem(pntWorkItem
, CriticalWorkQueue
);
1064 return NDIS_STATUS_SUCCESS
;