From cd9b7fd8a1948d6e20cb3c4d4ba47f88df31b06e Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 3 Oct 2008 18:51:33 +0000 Subject: [PATCH] - Merge aicom-network-fixes up to r36633 - tcpip's ProtocolStatus routine now gets called if a media status change occurs - This would fix a problem in which tcpip doesn't recognize the disconnect of an adapter but the ProtocolStatus handler in tcpip isn't implemented yet so the bug remains svn path=/trunk/; revision=36634 --- reactos/drivers/network/ndis/ndis/miniport.c | 53 +++++++++++++++++--- 1 file changed, 47 insertions(+), 6 deletions(-) diff --git a/reactos/drivers/network/ndis/ndis/miniport.c b/reactos/drivers/network/ndis/ndis/miniport.c index 005a35c3f7d..392390433e1 100644 --- a/reactos/drivers/network/ndis/ndis/miniport.c +++ b/reactos/drivers/network/ndis/ndis/miniport.c @@ -1052,7 +1052,29 @@ MiniStatus( IN PVOID StatusBuffer, IN UINT StatusBufferSize) { - UNIMPLEMENTED + PLOGICAL_ADAPTER Adapter = MiniportHandle; + PLIST_ENTRY CurrentEntry; + PADAPTER_BINDING AdapterBinding; + KIRQL OldIrql; + + KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql); + + CurrentEntry = Adapter->ProtocolListHead.Flink; + + while (CurrentEntry != &Adapter->ProtocolListHead) + { + AdapterBinding = CONTAINING_RECORD(CurrentEntry, ADAPTER_BINDING, AdapterListEntry); + + (*AdapterBinding->ProtocolBinding->Chars.StatusHandler)( + AdapterBinding->NdisOpenBlock.ProtocolBindingContext, + GeneralStatus, + StatusBuffer, + StatusBufferSize); + + CurrentEntry = CurrentEntry->Flink; + } + + KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql); } @@ -1061,7 +1083,26 @@ NTAPI MiniStatusComplete( IN NDIS_HANDLE MiniportAdapterHandle) { - UNIMPLEMENTED + PLOGICAL_ADAPTER Adapter = MiniportAdapterHandle; + PLIST_ENTRY CurrentEntry; + PADAPTER_BINDING AdapterBinding; + KIRQL OldIrql; + + KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql); + + CurrentEntry = Adapter->ProtocolListHead.Flink; + + while (CurrentEntry != &Adapter->ProtocolListHead) + { + AdapterBinding = CONTAINING_RECORD(CurrentEntry, ADAPTER_BINDING, AdapterListEntry); + + (*AdapterBinding->ProtocolBinding->Chars.StatusCompleteHandler)( + AdapterBinding->NdisOpenBlock.ProtocolBindingContext); + + CurrentEntry = CurrentEntry->Flink; + } + + KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql); } @@ -1126,7 +1167,7 @@ NdisMFlushLog( } /* - * @unimplemented + * @implemented */ #undef NdisMIndicateStatus VOID @@ -1137,11 +1178,11 @@ NdisMIndicateStatus( IN PVOID StatusBuffer, IN UINT StatusBufferSize) { - UNIMPLEMENTED + MiniStatus(MiniportAdapterHandle, GeneralStatus, StatusBuffer, StatusBufferSize); } /* - * @unimplemented + * @implemented */ #undef NdisMIndicateStatusComplete VOID @@ -1149,7 +1190,7 @@ EXPORT NdisMIndicateStatusComplete( IN NDIS_HANDLE MiniportAdapterHandle) { - UNIMPLEMENTED + MiniStatusComplete(MiniportAdapterHandle); }