Author: cgutman Date: Sat Sep 27 13:00:08 2008 New Revision: 36551
URL: http://svn.reactos.org/svn/reactos?rev=36551&view=rev Log: - Queue a work item in MiniReset if the adapter is currently busy - Handle NdisWorkItemResetRequested in MiniportWorker - Remove a fixme
Modified: branches/aicom-network-fixes/drivers/network/ndis/ndis/miniport.c
Modified: branches/aicom-network-fixes/drivers/network/ndis/ndis/miniport.c URL: http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/netw... ============================================================================== --- branches/aicom-network-fixes/drivers/network/ndis/ndis/miniport.c [iso-8859-1] (original) +++ branches/aicom-network-fixes/drivers/network/ndis/ndis/miniport.c [iso-8859-1] Sat Sep 27 13:00:08 2008 @@ -619,14 +619,18 @@ * Status of the operation */ { - NDIS_STATUS Status = NDIS_STATUS_FAILURE; + NDIS_STATUS Status; KIRQL OldIrql;
- /* FIXME: What should we return if there isn't a reset handler? */ + if (Adapter->MiniportBusy) { + KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql); + MiniQueueWorkItem(Adapter, NdisWorkItemResetRequested, NULL); + KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql); + return NDIS_STATUS_PENDING; + }
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); - if (Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.ResetHandler) - Status = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.ResetHandler)( + Status = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.ResetHandler)( Adapter->NdisMiniportBlock.MiniportAdapterContext, AddressingReset); KeLowerIrql(OldIrql); @@ -841,6 +845,7 @@ NDIS_STATUS NdisStatus; PVOID WorkItemContext; NDIS_WORK_ITEM_TYPE WorkItemType; + BOOLEAN AddressingReset;
KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
@@ -938,6 +943,12 @@ break;
case NdisWorkItemResetRequested: + NdisStatus = MiniReset(Adapter, &AddressingReset); + + if (NdisStatus == NDIS_STATUS_PENDING) + break; + + MiniResetComplete(Adapter, NdisStatus, AddressingReset); break;
case NdisWorkItemResetInProgress: