From b0e7e05ba24bd2ab36e7d88f478a88b9851d351e Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 3 Oct 2008 21:44:12 +0000 Subject: [PATCH] - Send NDIS_STATUS_RESET_START to all bound protocols before we reset - Send NDIS_STATUS_RESET_END to all bound protocols after we reset - Set MiniportBusy to TRUE if the MiniportReset handler returned NDIS_STATUS_PENDING svn path=/branches/aicom-network-fixes/; revision=36635 --- drivers/network/ndis/ndis/miniport.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/drivers/network/ndis/ndis/miniport.c b/drivers/network/ndis/ndis/miniport.c index 392390433e1..6e283e5e978 100644 --- a/drivers/network/ndis/ndis/miniport.c +++ b/drivers/network/ndis/ndis/miniport.c @@ -298,7 +298,13 @@ MiniResetComplete( IN NDIS_STATUS Status, IN BOOLEAN AddressingReset) { - UNIMPLEMENTED + PLOGICAL_ADAPTER Adapter = MiniportAdapterHandle; + KIRQL OldIrql; + NDIS_DbgPrint(MIN_TRACE, ("FIXME: MiniResetComplete is partially implemented\n")); + NdisMIndicateStatus(Adapter, NDIS_STATUS_RESET_END, NULL, 0); + KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql); + Adapter->MiniportBusy = FALSE; + KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql); } @@ -631,12 +637,24 @@ MiniReset( return NDIS_STATUS_PENDING; } + NdisMIndicateStatus(Adapter, NDIS_STATUS_RESET_START, NULL, 0); + NdisMIndicateStatusComplete(Adapter); + KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); Status = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.ResetHandler)( Adapter->NdisMiniportBlock.MiniportAdapterContext, AddressingReset); KeLowerIrql(OldIrql); + if (Status != NDIS_STATUS_PENDING) { + NdisMIndicateStatus(Adapter, NDIS_STATUS_RESET_END, NULL, 0); + NdisMIndicateStatusComplete(Adapter); + } else { + KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql); + Adapter->MiniportBusy = TRUE; + KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql); + } + return Status; } @@ -953,6 +971,9 @@ VOID NTAPI MiniportWorker(IN PVOID WorkItem) break; case NdisWorkItemResetRequested: + NdisMIndicateStatus(Adapter, NDIS_STATUS_RESET_START, NULL, 0); + NdisMIndicateStatusComplete(Adapter); + KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); NdisStatus = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.ResetHandler)( Adapter->NdisMiniportBlock.MiniportAdapterContext,