diff --git a/reactos/drivers/network/ndis/ndis.rbuild b/reactos/drivers/network/ndis/ndis.rbuild index 0a71cd309e3..4044d76b036 100644 --- a/reactos/drivers/network/ndis/ndis.rbuild +++ b/reactos/drivers/network/ndis/ndis.rbuild @@ -18,8 +18,9 @@ ndissys.h - 40gone.c - 50gone.c + 30stubs.c + 40stubs.c + 50stubs.c buffer.c cl.c cm.c @@ -32,9 +33,9 @@ main.c memory.c miniport.c + misc.c protocol.c string.c - stubs.c time.c ndis.rc diff --git a/reactos/drivers/network/ndis/ndis/40gone.c b/reactos/drivers/network/ndis/ndis/30stubs.c similarity index 82% rename from reactos/drivers/network/ndis/ndis/40gone.c rename to reactos/drivers/network/ndis/ndis/30stubs.c index 7d5b9666cb7..d217ec4008d 100644 --- a/reactos/drivers/network/ndis/ndis/40gone.c +++ b/reactos/drivers/network/ndis/ndis/30stubs.c @@ -1,8 +1,8 @@ /* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS NDIS library - * FILE: ndis/40gone.c - * PURPOSE: Obsoleted functions in NDIS 4.0 + * FILE: ndis/30stubs.c + * PURPOSE: NDIS 3.0 Stubs * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net) * REVISIONS: * CSH 01/08-2000 Created @@ -102,27 +102,6 @@ NdisAllocateDmaChannel( UNIMPLEMENTED } - -/* - * @implemented - */ -VOID -EXPORT -NdisAllocateSharedMemory( - IN NDIS_HANDLE NdisAdapterHandle, - IN ULONG Length, - IN BOOLEAN Cached, - OUT PVOID *VirtualAddress, - OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) -{ - NdisMAllocateSharedMemory(NdisAdapterHandle, - Length, - Cached, - VirtualAddress, - PhysicalAddress); -} - - /* * @unimplemented */ diff --git a/reactos/drivers/network/ndis/ndis/50gone.c b/reactos/drivers/network/ndis/ndis/40stubs.c similarity index 72% rename from reactos/drivers/network/ndis/ndis/50gone.c rename to reactos/drivers/network/ndis/ndis/40stubs.c index 21818580fed..0057b6018e3 100644 --- a/reactos/drivers/network/ndis/ndis/50gone.c +++ b/reactos/drivers/network/ndis/ndis/40stubs.c @@ -1,8 +1,8 @@ /* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS NDIS library - * FILE: ndis/50gone.c - * PURPOSE: Obsoleted functions in NDIS 5.0 + * FILE: ndis/40stubs.c + * PURPOSE: NDIS 4.0 stubs * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net) * REVISIONS: * CSH 01/08-2000 Created @@ -70,24 +70,6 @@ NdisDeregisterAdapter( } -/* - * @implemented - */ -VOID -EXPORT -NdisDeregisterAdapterShutdownHandler( - IN NDIS_HANDLE NdisAdapterHandle) -/* - * FUNCTION: - * ARGUMENTS: - * NOTES: - * NDIS 4.0 - */ -{ - NdisMDeregisterAdapterShutdownHandler(NdisAdapterHandle); -} - - /* * @unimplemented */ @@ -125,32 +107,6 @@ NdisFreeDmaChannel( } -/* - * @implemented - */ -VOID -EXPORT -NdisFreeSharedMemory( - IN NDIS_HANDLE NdisAdapterHandle, - IN ULONG Length, - IN BOOLEAN Cached, - IN PVOID VirtualAddress, - IN NDIS_PHYSICAL_ADDRESS PhysicalAddress) -/* - * FUNCTION: - * ARGUMENTS: - * NOTES: - * NDIS 4.0 - */ -{ - NdisMFreeSharedMemory(NdisAdapterHandle, - Length, - Cached, - VirtualAddress, - PhysicalAddress); -} - - /* * @unimplemented */ @@ -213,31 +169,6 @@ NdisIMSwitchToMiniport( } -/* - * @implemented - */ -VOID -EXPORT -NdisMapIoSpace( - OUT PNDIS_STATUS Status, - OUT PVOID *VirtualAddress, - IN NDIS_HANDLE NdisAdapterHandle, - IN NDIS_PHYSICAL_ADDRESS PhysicalAddress, - IN UINT Length) -/* - * FUNCTION: - * ARGUMENTS: - * NOTES: - * NDIS 4.0 - */ -{ - *Status = NdisMMapIoSpace(VirtualAddress, - NdisAdapterHandle, - PhysicalAddress, - Length); -} - - /* * @unimplemented */ @@ -330,28 +261,6 @@ NdisRegisterAdapter( } -/* - * @implemented - */ -VOID -EXPORT -NdisRegisterAdapterShutdownHandler( - IN NDIS_HANDLE NdisAdapterHandle, - IN PVOID ShutdownContext, - IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler) -/* - * FUNCTION: - * ARGUMENTS: - * NOTES: - * NDIS 4.0 - */ -{ - NdisMRegisterAdapterShutdownHandler(NdisAdapterHandle, - ShutdownContext, - ShutdownHandler); -} - - /* * @unimplemented */ @@ -414,4 +323,66 @@ NdisUpdateSharedMemory( /* No-op. */ } + +/* + * @unimplemented + */ +VOID +EXPORT +NdisImmediateReadSharedMemory( + IN NDIS_HANDLE WrapperConfigurationContext, + IN ULONG SharedMemoryAddress, + OUT PUCHAR Buffer, + IN ULONG Length) +{ + UNIMPLEMENTED +} + + +/* + * @unimplemented + */ +VOID +EXPORT +NdisImmediateWriteSharedMemory( + IN NDIS_HANDLE WrapperConfigurationContext, + IN ULONG SharedMemoryAddress, + IN PUCHAR Buffer, + IN ULONG Length) +{ + UNIMPLEMENTED +} + + + +/* + * @unimplemented + */ +VOID +EXPORT +NdisReadEisaSlotInformation( + OUT PNDIS_STATUS Status, + IN NDIS_HANDLE WrapperConfigurationContext, + OUT PUINT SlotNumber, + OUT PNDIS_EISA_FUNCTION_INFORMATION EisaData) +{ + UNIMPLEMENTED +} + + +/* + * @unimplemented + */ +VOID +EXPORT +NdisReadEisaSlotInformationEx( + OUT PNDIS_STATUS Status, + IN NDIS_HANDLE WrapperConfigurationContext, + OUT PUINT SlotNumber, + OUT PNDIS_EISA_FUNCTION_INFORMATION *EisaData, + OUT PUINT NumberOfFunctions) +{ + UNIMPLEMENTED +} + /* EOF */ diff --git a/reactos/drivers/network/ndis/ndis/stubs.c b/reactos/drivers/network/ndis/ndis/50stubs.c similarity index 52% rename from reactos/drivers/network/ndis/ndis/stubs.c rename to reactos/drivers/network/ndis/ndis/50stubs.c index 35572ad89ea..8e283579dc3 100644 --- a/reactos/drivers/network/ndis/ndis/stubs.c +++ b/reactos/drivers/network/ndis/ndis/50stubs.c @@ -1,8 +1,8 @@ /* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS NDIS library - * FILE: ndis/stubs.c - * PURPOSE: Stubs + * FILE: ndis/50stubs.c + * PURPOSE: NDIS 5.0 Stubs * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net) * REVISIONS: * CSH 01/08-2000 Created @@ -24,147 +24,6 @@ NdisCompleteQueryStatistics( } -/* - * @implemented - */ -#undef NdisInterlockedAddUlong -VOID -EXPORT -NdisInterlockedAddUlong ( - IN PULONG Addend, - IN ULONG Increment, - IN PNDIS_SPIN_LOCK SpinLock) -{ - ExInterlockedAddUlong ( Addend, Increment, (PKSPIN_LOCK)SpinLock ); -} - - -/* - * @implemented - */ -#undef NdisInterlockedInsertHeadList -PLIST_ENTRY -EXPORT -NdisInterlockedInsertHeadList( - IN PLIST_ENTRY ListHead, - IN PLIST_ENTRY ListEntry, - IN PNDIS_SPIN_LOCK SpinLock) -{ - return ExInterlockedInsertHeadList ( ListHead, ListEntry, (PKSPIN_LOCK)SpinLock ); -} - - -/* - * @implemented - */ -#undef NdisInterlockedInsertTailList -PLIST_ENTRY -EXPORT -NdisInterlockedInsertTailList( - IN PLIST_ENTRY ListHead, - IN PLIST_ENTRY ListEntry, - IN PNDIS_SPIN_LOCK SpinLock) -{ - return ExInterlockedInsertTailList ( ListHead, ListEntry, (PKSPIN_LOCK)SpinLock ); -} - - -/* - * @implemented - */ -#undef NdisInterlockedRemoveHeadList -PLIST_ENTRY -EXPORT -NdisInterlockedRemoveHeadList( - IN PLIST_ENTRY ListHead, - IN PNDIS_SPIN_LOCK SpinLock) -{ - return ExInterlockedRemoveHeadList ( ListHead, (PKSPIN_LOCK)SpinLock ); -} - -typedef struct _NDIS_HANDLE_OBJECT -{ - HANDLE FileHandle; - BOOLEAN Mapped; - ULONG FileLength; - PVOID MapBuffer; -} NDIS_HANDLE_OBJECT, *PNDIS_HANDLE_OBJECT; - -__inline -PNDIS_HANDLE_OBJECT -NDIS_HANDLE_TO_POBJECT ( NDIS_HANDLE handle ) -{ - return (PNDIS_HANDLE_OBJECT)handle; -} - -__inline -NDIS_HANDLE -NDIS_POBJECT_TO_HANDLE ( PNDIS_HANDLE_OBJECT obj ) -{ - return (NDIS_HANDLE)obj; -} - -const WCHAR* NDIS_FILE_FOLDER = L"\\SystemRoot\\System32\\Drivers\\"; - -/* - * @implemented - */ -VOID -EXPORT -NdisMapFile( - OUT PNDIS_STATUS Status, - OUT PVOID *MappedBuffer, - IN NDIS_HANDLE FileHandle) -{ - PNDIS_HANDLE_OBJECT HandleObject = (PNDIS_HANDLE_OBJECT) FileHandle; - - NDIS_DbgPrint(MAX_TRACE, ("called: FileHandle 0x%x\n", FileHandle)); - - if (HandleObject->Mapped) - { - /* If a file already mapped we will return an error code */ - *Status = NDIS_STATUS_ALREADY_MAPPED; - return; - } - - HandleObject->Mapped = TRUE; - *MappedBuffer = HandleObject->MapBuffer; - - /* Set returned status */ - *Status = STATUS_SUCCESS; -} - -/* - * @implemented - */ -VOID -EXPORT -NdisCloseFile( - IN NDIS_HANDLE FileHandle) -{ - PNDIS_HANDLE_OBJECT FileHandleObject; - - ASSERT_IRQL(PASSIVE_LEVEL); - - ASSERT ( FileHandle ); - - FileHandleObject = NDIS_HANDLE_TO_POBJECT(FileHandle); - - ASSERT ( FileHandleObject->FileHandle ); - - /* - if ( FileHandleObject->Mapped ) - NdisUnmapFile ( FileHandle ); - */ - - ZwClose ( FileHandleObject->FileHandle ); - - memset ( FileHandleObject, 0, sizeof(NDIS_HANDLE_OBJECT) ); - - ExFreePool ( FileHandleObject ); -} - - /* * @unimplemented */ @@ -257,101 +116,6 @@ NdisMWanSendComplete( } -/* - * @unimplemented - */ -VOID -EXPORT -NdisOpenFile( - OUT PNDIS_STATUS Status, - OUT PNDIS_HANDLE FileHandle, - OUT PUINT FileLength, - IN PNDIS_STRING FileName, - IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress) -{ - NDIS_STRING FullFileName; - OBJECT_ATTRIBUTES ObjectAttributes; - PNDIS_HANDLE_OBJECT FileHandleObject = NULL; - IO_STATUS_BLOCK IoStatusBlock; - - ASSERT_IRQL(PASSIVE_LEVEL); - - *Status = NDIS_STATUS_SUCCESS; - FullFileName.Buffer = NULL; - - ASSERT ( Status && FileName ); - - FullFileName.Length = sizeof(NDIS_FILE_FOLDER); - FullFileName.MaximumLength = FileName->MaximumLength + sizeof(NDIS_FILE_FOLDER); - FullFileName.Buffer = ExAllocatePool ( NonPagedPool, FullFileName.MaximumLength ); - - if ( !FullFileName.Buffer ) - { - *Status = NDIS_STATUS_RESOURCES; - goto cleanup; - } - - FileHandleObject = ExAllocatePool ( NonPagedPool, sizeof(NDIS_HANDLE_OBJECT) ); - if ( !FileHandleObject ) - { - *Status = NDIS_STATUS_RESOURCES; - goto cleanup; - } - memset ( FileHandleObject, 0, sizeof(NDIS_HANDLE_OBJECT) ); - - memmove ( FullFileName.Buffer, NDIS_FILE_FOLDER, FullFileName.Length ); - *Status = RtlAppendUnicodeStringToString ( &FullFileName, FileName ); - if ( !NT_SUCCESS(*Status) ) - { - *Status = NDIS_STATUS_FAILURE; - goto cleanup; - } - - InitializeObjectAttributes ( &ObjectAttributes, - &FullFileName, - OBJ_CASE_INSENSITIVE, - NULL, - NULL ); - - *Status = ZwCreateFile ( - &FileHandleObject->FileHandle, - FILE_READ_DATA|SYNCHRONIZE, - &ObjectAttributes, - &IoStatusBlock, - NULL, // PLARGE_INTEGER AllocationSize - 0, // ULONG FileAttributes - FILE_SHARE_READ, // ULONG ShareAccess - FILE_CREATE, // ULONG CreateDisposition - FILE_SYNCHRONOUS_IO_NONALERT, // ULONG CreateOptions - 0, // PVOID EaBuffer - 0 ); // ULONG EaLength - - if ( !NT_SUCCESS(*Status) ) - { - *Status = NDIS_STATUS_FAILURE; - } - -cleanup: - if ( FullFileName.Buffer != NULL ) - { - ExFreePool ( FullFileName.Buffer ); - FullFileName.Buffer = NULL; - } - if ( !NT_SUCCESS(*Status) ) - { - if( FileHandleObject ) { - ExFreePool ( FileHandleObject ); - FileHandleObject = NULL; - } - *FileHandle = NULL; - } - else - *FileHandle = NDIS_POBJECT_TO_HANDLE(FileHandleObject); - - return; -} - - /* NdisOpenGlobalConfiguration */ @@ -390,32 +154,6 @@ NdisSetProtocolFilter( #endif -/* - * @implemented - */ -CCHAR -EXPORT -NdisSystemProcessorCount( - VOID) -{ - return (CCHAR)KeNumberProcessors; -} - - -/* - * @implemented - */ -VOID -EXPORT -NdisUnmapFile( - IN NDIS_HANDLE FileHandle) -{ - PNDIS_HANDLE_OBJECT HandleObject = (PNDIS_HANDLE_OBJECT) FileHandle; - - HandleObject->Mapped = FALSE; -} - - /* NdisUpcaseUnicodeString NdisUpdateSharedMemory@4 @@ -427,9 +165,6 @@ NdisWriteEventLogEntry */ - -/* NDIS 5.0 extensions */ - /* * @unimplemented */ @@ -470,53 +205,6 @@ NdisConvertStringToAtmAddress( } -/* - * @implemented - */ -VOID -EXPORT -NdisGetCurrentProcessorCounts( - OUT PULONG pIdleCount, - OUT PULONG pKernelAndUser, - OUT PULONG pIndex) -/* - * FUNCTION: - * ARGUMENTS: - * NOTES: - * NDIS 5.0 - */ -{ - ExGetCurrentProcessorCounts( (PULONG) pIdleCount, (PULONG) pKernelAndUser, (PULONG) pIndex); -} - - -/* - * @implemented - */ -VOID -EXPORT -NdisGetDriverHandle( - IN PNDIS_HANDLE NdisBindingHandle, - OUT PNDIS_HANDLE NdisDriverHandle) -/* - * FUNCTION: - * ARGUMENTS: - * NOTES: - * NDIS 5.0 - */ -{ - PADAPTER_BINDING Binding = (PADAPTER_BINDING)NdisBindingHandle; - - if (!Binding) - { - *NdisDriverHandle = NULL; - return; - } - - *NdisDriverHandle = Binding->Adapter->NdisMiniportBlock.DriverHandle; -} - - /* * @unimplemented */ @@ -538,106 +226,6 @@ NdisGetReceivedPacket( } -/* - * @implemented - */ -VOID -EXPORT -NdisGetSystemUpTime(OUT PULONG pSystemUpTime) -{ - ULONG Increment; - LARGE_INTEGER TickCount; - - /* Get the increment and current tick count */ - Increment = KeQueryTimeIncrement(); - KeQueryTickCount(&TickCount); - - /* Convert to milliseconds and return */ - TickCount.QuadPart *= Increment; - TickCount.QuadPart /= (10 * 1000); - *pSystemUpTime = TickCount.LowPart; -} - - -/* - * @implemented - */ -#undef NdisInterlockedDecrement -LONG -EXPORT -NdisInterlockedDecrement( - IN PLONG Addend) -/* - * FUNCTION: - * ARGUMENTS: - * NOTES: - * NDIS 5.0 - */ -{ - return InterlockedDecrement ( Addend ); -} - - -/* - * @implemented - */ -#undef NdisInterlockedIncrement -LONG -EXPORT -NdisInterlockedIncrement( - IN PLONG Addend) -/* - * FUNCTION: - * ARGUMENTS: - * NOTES: - * NDIS 5.0 - */ -{ - return InterlockedIncrement ( Addend ); -} - - -/* - * @implemented - */ -#undef NdisInterlockedPopEntrySList -PSINGLE_LIST_ENTRY -EXPORT -NdisInterlockedPopEntrySList( - IN PSLIST_HEADER ListHead, - IN PKSPIN_LOCK Lock) -/* - * FUNCTION: - * ARGUMENTS: - * NOTES: - * NDIS 5.0 - */ -{ - return ExInterlockedPopEntrySList ( ListHead, Lock ); -} - - -/* - * @implemented - */ -#undef NdisInterlockedPushEntrySList -PSINGLE_LIST_ENTRY -EXPORT -NdisInterlockedPushEntrySList( - IN PSLIST_HEADER ListHead, - IN PSINGLE_LIST_ENTRY ListEntry, - IN PKSPIN_LOCK Lock) -/* - * FUNCTION: - * ARGUMENTS: - * NOTES: - * NDIS 5.0 - */ -{ - return ExInterlockedPushEntrySList ( ListHead, ListEntry, Lock ); -} - - /* * @unimplemented */ @@ -854,8 +442,6 @@ NdisWritePcmciaAttributeMemory( } -/* NDIS 5.0 extensions for intermediate drivers */ - /* * @unimplemented */ @@ -1014,22 +600,123 @@ NdisIMInitializeDeviceInstanceEx( } - +/* + * @unimplemented + */ VOID -NTAPI -ndisProcWorkItemHandler(PVOID pContext) +EXPORT +NdisReturnPackets( + IN PNDIS_PACKET *PacketsToReturn, + IN UINT NumberOfPackets) +/* + * FUNCTION: Releases ownership of one or more packets + * ARGUMENTS: + * PacketsToReturn = Pointer to an array of pointers to packet descriptors + * NumberOfPackets = Number of pointers in descriptor pointer array + */ { - PNDIS_WORK_ITEM pNdisItem = (PNDIS_WORK_ITEM)pContext; - pNdisItem->Routine(pNdisItem, pNdisItem->Context); + UNIMPLEMENTED } + +/* + * @unimplemented + */ +UINT EXPORT -NDIS_STATUS -NdisScheduleWorkItem( - IN PNDIS_WORK_ITEM pWorkItem) +NdisPacketPoolUsage( + IN NDIS_HANDLE PoolHandle) +/* + * FUNCTION: + * ARGUMENTS: + * NOTES: + * NDIS 5.0 + */ { - PWORK_QUEUE_ITEM pntWorkItem = (PWORK_QUEUE_ITEM)pWorkItem->WrapperReserved; - ExInitializeWorkItem(pntWorkItem, ndisProcWorkItemHandler, pWorkItem); - ExQueueWorkItem(pntWorkItem, CriticalWorkQueue); - return NDIS_STATUS_SUCCESS; + UNIMPLEMENTED + + return 0; +} + + +/* + * @unimplemented + */ +VOID +EXPORT +NdisMDeregisterIoPortRange( + IN NDIS_HANDLE MiniportAdapterHandle, + IN UINT InitialPort, + IN UINT NumberOfPorts, + IN PVOID PortOffset) +/* + * FUNCTION: Releases a register mapping to I/O ports + * ARGUMENTS: + * MiniportAdapterHandle = Specifies handle input to MiniportInitialize + * InitialPort = Bus-relative base port address of a range to be mapped + * NumberOfPorts = Specifies number of ports to be mapped + * PortOffset = Pointer to mapped base port address + */ +{ + UNIMPLEMENTED +} + + +/* + * @unimplemented + */ +NDIS_STATUS +EXPORT +NdisMAllocateSharedMemoryAsync( + IN NDIS_HANDLE MiniportAdapterHandle, + IN ULONG Length, + IN BOOLEAN Cached, + IN PVOID Context) +{ + UNIMPLEMENTED + + return NDIS_STATUS_FAILURE; +} + +/* + * @unimplemented + */ +VOID +EXPORT +NdisCopyBuffer( + OUT PNDIS_STATUS Status, + OUT PNDIS_BUFFER *Buffer, + IN NDIS_HANDLE PoolHandle, + IN PVOID MemoryDescriptor, + IN UINT Offset, + IN UINT Length) +/* + * FUNCTION: Returns a new buffer descriptor for a (partial) buffer + * ARGUMENTS: + * Status = Address of a buffer to place status of operation + * Buffer = Address of a buffer to place new buffer descriptor + * PoolHandle = Handle returned by NdisAllocateBufferPool + * MemoryDescriptor = Pointer to a memory descriptor (possibly NDIS_BUFFER) + * Offset = Offset in buffer to start copying + * Length = Number of bytes to copy + */ +{ + *Status = NDIS_STATUS_FAILURE; +} + + +/* + * @unimplemented + */ +VOID +EXPORT +NdisGetCurrentProcessorCpuUsage( + PULONG pCpuUsage) +/* + * FUNCTION: Returns how busy the current processor is as a percentage + * ARGUMENTS: + * pCpuUsage = Pointer to a buffer to place CPU usage + */ +{ + UNIMPLEMENTED } diff --git a/reactos/drivers/network/ndis/ndis/buffer.c b/reactos/drivers/network/ndis/ndis/buffer.c index a690bf862aa..e5caccee517 100644 --- a/reactos/drivers/network/ndis/ndis/buffer.c +++ b/reactos/drivers/network/ndis/ndis/buffer.c @@ -581,33 +581,6 @@ NdisBufferVirtualAddress( } -/* - * @unimplemented - */ -VOID -EXPORT -NdisCopyBuffer( - OUT PNDIS_STATUS Status, - OUT PNDIS_BUFFER *Buffer, - IN NDIS_HANDLE PoolHandle, - IN PVOID MemoryDescriptor, - IN UINT Offset, - IN UINT Length) -/* - * FUNCTION: Returns a new buffer descriptor for a (partial) buffer - * ARGUMENTS: - * Status = Address of a buffer to place status of operation - * Buffer = Address of a buffer to place new buffer descriptor - * PoolHandle = Handle returned by NdisAllocateBufferPool - * MemoryDescriptor = Pointer to a memory descriptor (possibly NDIS_BUFFER) - * Offset = Offset in buffer to start copying - * Length = Number of bytes to copy - */ -{ - *Status = NDIS_STATUS_FAILURE; -} - - /* * @implemented */ @@ -975,45 +948,6 @@ NdisGetFirstBufferFromPacket( } -/* - * @unimplemented - */ -VOID -EXPORT -NdisReturnPackets( - IN PNDIS_PACKET *PacketsToReturn, - IN UINT NumberOfPackets) -/* - * FUNCTION: Releases ownership of one or more packets - * ARGUMENTS: - * PacketsToReturn = Pointer to an array of pointers to packet descriptors - * NumberOfPackets = Number of pointers in descriptor pointer array - */ -{ - UNIMPLEMENTED -} - - -/* - * @unimplemented - */ -UINT -EXPORT -NdisPacketPoolUsage( - IN NDIS_HANDLE PoolHandle) -/* - * FUNCTION: - * ARGUMENTS: - * NOTES: - * NDIS 5.0 - */ -{ - UNIMPLEMENTED - - return 0; -} - - /* * @implemented */ diff --git a/reactos/drivers/network/ndis/ndis/control.c b/reactos/drivers/network/ndis/ndis/control.c index 50139895ecd..e95b29e6a80 100644 --- a/reactos/drivers/network/ndis/ndis/control.c +++ b/reactos/drivers/network/ndis/ndis/control.c @@ -218,23 +218,6 @@ NdisFreeSpinLock( /* Nothing to do here! */ } - -/* - * @unimplemented - */ -VOID -EXPORT -NdisGetCurrentProcessorCpuUsage( - PULONG pCpuUsage) -/* - * FUNCTION: Returns how busy the current processor is as a percentage - * ARGUMENTS: - * pCpuUsage = Pointer to a buffer to place CPU usage - */ -{ - UNIMPLEMENTED -} - /* * @implemented diff --git a/reactos/drivers/network/ndis/ndis/hardware.c b/reactos/drivers/network/ndis/ndis/hardware.c index ff2a3bef864..f711f2a38ac 100644 --- a/reactos/drivers/network/ndis/ndis/hardware.c +++ b/reactos/drivers/network/ndis/ndis/hardware.c @@ -152,37 +152,6 @@ NdisQueryMapRegisterCount( return NDIS_STATUS_NOT_SUPPORTED; } - -/* - * @unimplemented - */ -VOID -EXPORT -NdisReadEisaSlotInformation( - OUT PNDIS_STATUS Status, - IN NDIS_HANDLE WrapperConfigurationContext, - OUT PUINT SlotNumber, - OUT PNDIS_EISA_FUNCTION_INFORMATION EisaData) -{ - UNIMPLEMENTED -} - - -/* - * @unimplemented - */ -VOID -EXPORT -NdisReadEisaSlotInformationEx( - OUT PNDIS_STATUS Status, - IN NDIS_HANDLE WrapperConfigurationContext, - OUT PUINT SlotNumber, - OUT PNDIS_EISA_FUNCTION_INFORMATION *EisaData, - OUT PUINT NumberOfFunctions) -{ - UNIMPLEMENTED -} - /* * @implemented diff --git a/reactos/drivers/network/ndis/ndis/io.c b/reactos/drivers/network/ndis/ndis/io.c index e658f5a0647..1a99a67411d 100644 --- a/reactos/drivers/network/ndis/ndis/io.c +++ b/reactos/drivers/network/ndis/ndis/io.c @@ -525,29 +525,6 @@ NdisMDeregisterInterrupt( Interrupt->Miniport->Interrupt = NULL; } - -/* - * @unimplemented - */ -VOID -EXPORT -NdisMDeregisterIoPortRange( - IN NDIS_HANDLE MiniportAdapterHandle, - IN UINT InitialPort, - IN UINT NumberOfPorts, - IN PVOID PortOffset) -/* - * FUNCTION: Releases a register mapping to I/O ports - * ARGUMENTS: - * MiniportAdapterHandle = Specifies handle input to MiniportInitialize - * InitialPort = Bus-relative base port address of a range to be mapped - * NumberOfPorts = Specifies number of ports to be mapped - * PortOffset = Pointer to mapped base port address - */ -{ - NDIS_DbgPrint(MAX_TRACE, ("called - IMPLEMENT ME.\n")); -} - /* * @implemented @@ -971,5 +948,31 @@ NdisMInitializeScatterGatherDma( return NDIS_STATUS_SUCCESS; } + +/* + * @implemented + */ +VOID +EXPORT +NdisMapIoSpace( + OUT PNDIS_STATUS Status, + OUT PVOID *VirtualAddress, + IN NDIS_HANDLE NdisAdapterHandle, + IN NDIS_PHYSICAL_ADDRESS PhysicalAddress, + IN UINT Length) +/* + * FUNCTION: + * ARGUMENTS: + * NOTES: + * NDIS 4.0 + */ +{ + *Status = NdisMMapIoSpace(VirtualAddress, + NdisAdapterHandle, + PhysicalAddress, + Length); +} + + /* EOF */ diff --git a/reactos/drivers/network/ndis/ndis/memory.c b/reactos/drivers/network/ndis/ndis/memory.c index 22fe324e828..d6586912d04 100644 --- a/reactos/drivers/network/ndis/ndis/memory.c +++ b/reactos/drivers/network/ndis/ndis/memory.c @@ -135,36 +135,6 @@ NdisFreeMemory( ExFreePool(VirtualAddress); } - -/* - * @unimplemented - */ -VOID -EXPORT -NdisImmediateReadSharedMemory( - IN NDIS_HANDLE WrapperConfigurationContext, - IN ULONG SharedMemoryAddress, - OUT PUCHAR Buffer, - IN ULONG Length) -{ - UNIMPLEMENTED -} - - -/* - * @unimplemented - */ -VOID -EXPORT -NdisImmediateWriteSharedMemory( - IN NDIS_HANDLE WrapperConfigurationContext, - IN ULONG SharedMemoryAddress, - IN PUCHAR Buffer, - IN ULONG Length) -{ - UNIMPLEMENTED -} - /* * @implemented @@ -197,24 +167,6 @@ NdisMAllocateSharedMemory( Adapter->NdisMiniportBlock.SystemAdapterObject, Length, PhysicalAddress, Cached); } - -/* - * @unimplemented - */ -NDIS_STATUS -EXPORT -NdisMAllocateSharedMemoryAsync( - IN NDIS_HANDLE MiniportAdapterHandle, - IN ULONG Length, - IN BOOLEAN Cached, - IN PVOID Context) -{ - NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); - UNIMPLEMENTED - - return NDIS_STATUS_FAILURE; -} - VOID NTAPI @@ -293,5 +245,52 @@ NdisMFreeSharedMemory( ZwClose(ThreadHandle); } + +/* + * @implemented + */ +VOID +EXPORT +NdisAllocateSharedMemory( + IN NDIS_HANDLE NdisAdapterHandle, + IN ULONG Length, + IN BOOLEAN Cached, + OUT PVOID *VirtualAddress, + OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) +{ + NdisMAllocateSharedMemory(NdisAdapterHandle, + Length, + Cached, + VirtualAddress, + PhysicalAddress); +} + + +/* + * @implemented + */ +VOID +EXPORT +NdisFreeSharedMemory( + IN NDIS_HANDLE NdisAdapterHandle, + IN ULONG Length, + IN BOOLEAN Cached, + IN PVOID VirtualAddress, + IN NDIS_PHYSICAL_ADDRESS PhysicalAddress) +/* + * FUNCTION: + * ARGUMENTS: + * NOTES: + * NDIS 4.0 + */ +{ + NdisMFreeSharedMemory(NdisAdapterHandle, + Length, + Cached, + VirtualAddress, + PhysicalAddress); +} + + /* EOF */ diff --git a/reactos/drivers/network/ndis/ndis/miniport.c b/reactos/drivers/network/ndis/ndis/miniport.c index 7d5108d5eaf..fba9bd28f19 100644 --- a/reactos/drivers/network/ndis/ndis/miniport.c +++ b/reactos/drivers/network/ndis/ndis/miniport.c @@ -2491,5 +2491,44 @@ NdisMQueryAdapterInstanceName( return NDIS_STATUS_SUCCESS; } +/* + * @implemented + */ +VOID +EXPORT +NdisDeregisterAdapterShutdownHandler( + IN NDIS_HANDLE NdisAdapterHandle) +/* + * FUNCTION: + * ARGUMENTS: + * NOTES: + * NDIS 4.0 + */ +{ + NdisMDeregisterAdapterShutdownHandler(NdisAdapterHandle); +} + + +/* + * @implemented + */ +VOID +EXPORT +NdisRegisterAdapterShutdownHandler( + IN NDIS_HANDLE NdisAdapterHandle, + IN PVOID ShutdownContext, + IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler) +/* + * FUNCTION: + * ARGUMENTS: + * NOTES: + * NDIS 4.0 + */ +{ + NdisMRegisterAdapterShutdownHandler(NdisAdapterHandle, + ShutdownContext, + ShutdownHandler); +} + /* EOF */ diff --git a/reactos/drivers/network/ndis/ndis/misc.c b/reactos/drivers/network/ndis/ndis/misc.c new file mode 100644 index 00000000000..8abd29e147f --- /dev/null +++ b/reactos/drivers/network/ndis/ndis/misc.c @@ -0,0 +1,408 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS NDIS library + * FILE: ndis/misc.c + */ + +#include "ndissys.h" + +/* + * @implemented + */ +#undef NdisInterlockedAddUlong +VOID +EXPORT +NdisInterlockedAddUlong ( + IN PULONG Addend, + IN ULONG Increment, + IN PNDIS_SPIN_LOCK SpinLock) +{ + ExInterlockedAddUlong ( Addend, Increment, (PKSPIN_LOCK)SpinLock ); +} + + +/* + * @implemented + */ +#undef NdisInterlockedInsertHeadList +PLIST_ENTRY +EXPORT +NdisInterlockedInsertHeadList( + IN PLIST_ENTRY ListHead, + IN PLIST_ENTRY ListEntry, + IN PNDIS_SPIN_LOCK SpinLock) +{ + return ExInterlockedInsertHeadList ( ListHead, ListEntry, (PKSPIN_LOCK)SpinLock ); +} + + +/* + * @implemented + */ +#undef NdisInterlockedInsertTailList +PLIST_ENTRY +EXPORT +NdisInterlockedInsertTailList( + IN PLIST_ENTRY ListHead, + IN PLIST_ENTRY ListEntry, + IN PNDIS_SPIN_LOCK SpinLock) +{ + return ExInterlockedInsertTailList ( ListHead, ListEntry, (PKSPIN_LOCK)SpinLock ); +} + + +/* + * @implemented + */ +#undef NdisInterlockedRemoveHeadList +PLIST_ENTRY +EXPORT +NdisInterlockedRemoveHeadList( + IN PLIST_ENTRY ListHead, + IN PNDIS_SPIN_LOCK SpinLock) +{ + return ExInterlockedRemoveHeadList ( ListHead, (PKSPIN_LOCK)SpinLock ); +} + +typedef struct _NDIS_HANDLE_OBJECT +{ + HANDLE FileHandle; + BOOLEAN Mapped; + ULONG FileLength; + PVOID MapBuffer; +} NDIS_HANDLE_OBJECT, *PNDIS_HANDLE_OBJECT; + +__inline +PNDIS_HANDLE_OBJECT +NDIS_HANDLE_TO_POBJECT ( NDIS_HANDLE handle ) +{ + return (PNDIS_HANDLE_OBJECT)handle; +} + +__inline +NDIS_HANDLE +NDIS_POBJECT_TO_HANDLE ( PNDIS_HANDLE_OBJECT obj ) +{ + return (NDIS_HANDLE)obj; +} + +const WCHAR* NDIS_FILE_FOLDER = L"\\SystemRoot\\System32\\Drivers\\"; + +/* + * @implemented + */ +VOID +EXPORT +NdisMapFile( + OUT PNDIS_STATUS Status, + OUT PVOID *MappedBuffer, + IN NDIS_HANDLE FileHandle) +{ + PNDIS_HANDLE_OBJECT HandleObject = (PNDIS_HANDLE_OBJECT) FileHandle; + + NDIS_DbgPrint(MAX_TRACE, ("called: FileHandle 0x%x\n", FileHandle)); + + if (HandleObject->Mapped) + { + /* If a file already mapped we will return an error code */ + *Status = NDIS_STATUS_ALREADY_MAPPED; + return; + } + + HandleObject->Mapped = TRUE; + *MappedBuffer = HandleObject->MapBuffer; + + /* Set returned status */ + *Status = STATUS_SUCCESS; +} + +/* + * @implemented + */ +VOID +EXPORT +NdisCloseFile( + IN NDIS_HANDLE FileHandle) +{ + PNDIS_HANDLE_OBJECT FileHandleObject; + + ASSERT_IRQL(PASSIVE_LEVEL); + + ASSERT ( FileHandle ); + + FileHandleObject = NDIS_HANDLE_TO_POBJECT(FileHandle); + + ASSERT ( FileHandleObject->FileHandle ); + + /* + if ( FileHandleObject->Mapped ) + NdisUnmapFile ( FileHandle ); + */ + + ZwClose ( FileHandleObject->FileHandle ); + + memset ( FileHandleObject, 0, sizeof(NDIS_HANDLE_OBJECT) ); + + ExFreePool ( FileHandleObject ); +} + + +/* + * @implemented + */ +VOID +EXPORT +NdisOpenFile( + OUT PNDIS_STATUS Status, + OUT PNDIS_HANDLE FileHandle, + OUT PUINT FileLength, + IN PNDIS_STRING FileName, + IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress) +{ + NDIS_STRING FullFileName; + OBJECT_ATTRIBUTES ObjectAttributes; + PNDIS_HANDLE_OBJECT FileHandleObject = NULL; + IO_STATUS_BLOCK IoStatusBlock; + + ASSERT_IRQL(PASSIVE_LEVEL); + + *Status = NDIS_STATUS_SUCCESS; + FullFileName.Buffer = NULL; + + ASSERT ( Status && FileName ); + + FullFileName.Length = sizeof(NDIS_FILE_FOLDER); + FullFileName.MaximumLength = FileName->MaximumLength + sizeof(NDIS_FILE_FOLDER); + FullFileName.Buffer = ExAllocatePool ( NonPagedPool, FullFileName.MaximumLength ); + + if ( !FullFileName.Buffer ) + { + *Status = NDIS_STATUS_RESOURCES; + goto cleanup; + } + + FileHandleObject = ExAllocatePool ( NonPagedPool, sizeof(NDIS_HANDLE_OBJECT) ); + if ( !FileHandleObject ) + { + *Status = NDIS_STATUS_RESOURCES; + goto cleanup; + } + memset ( FileHandleObject, 0, sizeof(NDIS_HANDLE_OBJECT) ); + + memmove ( FullFileName.Buffer, NDIS_FILE_FOLDER, FullFileName.Length ); + *Status = RtlAppendUnicodeStringToString ( &FullFileName, FileName ); + if ( !NT_SUCCESS(*Status) ) + { + *Status = NDIS_STATUS_FAILURE; + goto cleanup; + } + + InitializeObjectAttributes ( &ObjectAttributes, + &FullFileName, + OBJ_CASE_INSENSITIVE, + NULL, + NULL ); + + *Status = ZwCreateFile ( + &FileHandleObject->FileHandle, + FILE_READ_DATA|SYNCHRONIZE, + &ObjectAttributes, + &IoStatusBlock, + NULL, // PLARGE_INTEGER AllocationSize + 0, // ULONG FileAttributes + FILE_SHARE_READ, // ULONG ShareAccess + FILE_CREATE, // ULONG CreateDisposition + FILE_SYNCHRONOUS_IO_NONALERT, // ULONG CreateOptions + 0, // PVOID EaBuffer + 0 ); // ULONG EaLength + + if ( !NT_SUCCESS(*Status) ) + { + *Status = NDIS_STATUS_FAILURE; + } + +cleanup: + if ( FullFileName.Buffer != NULL ) + { + ExFreePool ( FullFileName.Buffer ); + FullFileName.Buffer = NULL; + } + if ( !NT_SUCCESS(*Status) ) + { + if( FileHandleObject ) { + ExFreePool ( FileHandleObject ); + FileHandleObject = NULL; + } + *FileHandle = NULL; + } + else + *FileHandle = NDIS_POBJECT_TO_HANDLE(FileHandleObject); + + return; +} + +/* + * @implemented + */ +CCHAR +EXPORT +NdisSystemProcessorCount( + VOID) +{ + return (CCHAR)KeNumberProcessors; +} + + +/* + * @implemented + */ +VOID +EXPORT +NdisUnmapFile( + IN NDIS_HANDLE FileHandle) +{ + PNDIS_HANDLE_OBJECT HandleObject = (PNDIS_HANDLE_OBJECT) FileHandle; + + HandleObject->Mapped = FALSE; +} + + +/* + * @implemented + */ +VOID +EXPORT +NdisGetCurrentProcessorCounts( + OUT PULONG pIdleCount, + OUT PULONG pKernelAndUser, + OUT PULONG pIndex) +/* + * FUNCTION: + * ARGUMENTS: + * NOTES: + * NDIS 5.0 + */ +{ + ExGetCurrentProcessorCounts( (PULONG) pIdleCount, (PULONG) pKernelAndUser, (PULONG) pIndex); +} + + +/* + * @implemented + */ +VOID +EXPORT +NdisGetSystemUpTime(OUT PULONG pSystemUpTime) +{ + ULONG Increment; + LARGE_INTEGER TickCount; + + /* Get the increment and current tick count */ + Increment = KeQueryTimeIncrement(); + KeQueryTickCount(&TickCount); + + /* Convert to milliseconds and return */ + TickCount.QuadPart *= Increment; + TickCount.QuadPart /= (10 * 1000); + *pSystemUpTime = TickCount.LowPart; +} + +/* + * @implemented + */ +#undef NdisInterlockedDecrement +LONG +EXPORT +NdisInterlockedDecrement( + IN PLONG Addend) +/* + * FUNCTION: + * ARGUMENTS: + * NOTES: + * NDIS 5.0 + */ +{ + return InterlockedDecrement ( Addend ); +} + + +/* + * @implemented + */ +#undef NdisInterlockedIncrement +LONG +EXPORT +NdisInterlockedIncrement( + IN PLONG Addend) +/* + * FUNCTION: + * ARGUMENTS: + * NOTES: + * NDIS 5.0 + */ +{ + return InterlockedIncrement ( Addend ); +} + + +/* + * @implemented + */ +#undef NdisInterlockedPopEntrySList +PSINGLE_LIST_ENTRY +EXPORT +NdisInterlockedPopEntrySList( + IN PSLIST_HEADER ListHead, + IN PKSPIN_LOCK Lock) +/* + * FUNCTION: + * ARGUMENTS: + * NOTES: + * NDIS 5.0 + */ +{ + return ExInterlockedPopEntrySList ( ListHead, Lock ); +} + + +/* + * @implemented + */ +#undef NdisInterlockedPushEntrySList +PSINGLE_LIST_ENTRY +EXPORT +NdisInterlockedPushEntrySList( + IN PSLIST_HEADER ListHead, + IN PSINGLE_LIST_ENTRY ListEntry, + IN PKSPIN_LOCK Lock) +/* + * FUNCTION: + * ARGUMENTS: + * NOTES: + * NDIS 5.0 + */ +{ + return ExInterlockedPushEntrySList ( ListHead, ListEntry, Lock ); +} + + +VOID +NTAPI +ndisProcWorkItemHandler(PVOID pContext) +{ + PNDIS_WORK_ITEM pNdisItem = (PNDIS_WORK_ITEM)pContext; + pNdisItem->Routine(pNdisItem, pNdisItem->Context); +} + +EXPORT +NDIS_STATUS +NdisScheduleWorkItem( + IN PNDIS_WORK_ITEM pWorkItem) +{ + PWORK_QUEUE_ITEM pntWorkItem = (PWORK_QUEUE_ITEM)pWorkItem->WrapperReserved; + ExInitializeWorkItem(pntWorkItem, ndisProcWorkItemHandler, pWorkItem); + ExQueueWorkItem(pntWorkItem, CriticalWorkQueue); + return NDIS_STATUS_SUCCESS; +} + +/* EOF */ diff --git a/reactos/drivers/network/ndis/ndis/protocol.c b/reactos/drivers/network/ndis/ndis/protocol.c index a64168280a4..ff1895aed93 100644 --- a/reactos/drivers/network/ndis/ndis/protocol.c +++ b/reactos/drivers/network/ndis/ndis/protocol.c @@ -980,4 +980,31 @@ NdisReEnumerateProtocolBindings(IN NDIS_HANDLE NdisProtocolHandle) ndisBindMiniportsToProtocol(&NdisStatus, &Protocol->Chars); } + +/* + * @implemented + */ +VOID +EXPORT +NdisGetDriverHandle( + IN PNDIS_HANDLE NdisBindingHandle, + OUT PNDIS_HANDLE NdisDriverHandle) +/* + * FUNCTION: + * ARGUMENTS: + * NOTES: + * NDIS 5.0 + */ +{ + PADAPTER_BINDING Binding = (PADAPTER_BINDING)NdisBindingHandle; + + if (!Binding) + { + *NdisDriverHandle = NULL; + return; + } + + *NdisDriverHandle = Binding->Adapter->NdisMiniportBlock.DriverHandle; +} + /* EOF */