mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-08-30 04:13:33 +00:00
- Use timers so the code is much more simple and works better
svn path=/branches/aicom-network-fixes/; revision=36442
This commit is contained in:
@@ -635,24 +635,20 @@ MiniReset(
|
||||
}
|
||||
|
||||
VOID STDCALL
|
||||
HangTimer( PVOID Context )
|
||||
MiniportHangDpc(
|
||||
PKDPC Dpc,
|
||||
PVOID DeferredContext,
|
||||
PVOID SystemArgument1,
|
||||
PVOID SystemArgument2)
|
||||
{
|
||||
PLOGICAL_ADAPTER Adapter = Context;
|
||||
BOOLEAN AddressingReset;
|
||||
PLOGICAL_ADAPTER Adapter = DeferredContext;
|
||||
BOOLEAN AddressingReset = FALSE;
|
||||
|
||||
while (Adapter->NdisMiniportBlock.PnPDeviceState == NdisPnPDeviceStarted)
|
||||
{
|
||||
AddressingReset = FALSE;
|
||||
|
||||
NdisMSleep(Adapter->NdisMiniportBlock.CheckForHangSeconds * 1000000);
|
||||
if (MiniCheckForHang(Adapter))
|
||||
MiniReset(Adapter, &AddressingReset);
|
||||
|
||||
if (MiniCheckForHang(Adapter))
|
||||
MiniReset(Adapter, &AddressingReset);
|
||||
|
||||
/* FIXME: We should call MiniportSetInformation if AddressingReset is TRUE */
|
||||
}
|
||||
|
||||
PsTerminateSystemThread(STATUS_SUCCESS);
|
||||
/* FIXME: We should call MiniportSetInformation if AddressingReset is TRUE */
|
||||
}
|
||||
|
||||
|
||||
@@ -1442,9 +1438,8 @@ NdisIPnPStartDevice(
|
||||
PNDIS_CONFIGURATION_PARAMETER ConfigParam;
|
||||
NDIS_HANDLE ConfigHandle;
|
||||
ULONG Size;
|
||||
HANDLE HangTimerHandle;
|
||||
|
||||
/* FIXME - KIRQL OldIrql; */
|
||||
LARGE_INTEGER Timeout;
|
||||
/* FIXME - KIRQL OldIrql; */
|
||||
|
||||
/*
|
||||
* Prepare wrapper context used by HW and configuration routines.
|
||||
@@ -1663,9 +1658,10 @@ NdisIPnPStartDevice(
|
||||
Adapter->NdisMiniportBlock.OldPnPDeviceState = Adapter->NdisMiniportBlock.PnPDeviceState;
|
||||
Adapter->NdisMiniportBlock.PnPDeviceState = NdisPnPDeviceStarted;
|
||||
|
||||
PsCreateSystemThread(&HangTimerHandle, THREAD_ALL_ACCESS, 0, 0, 0,
|
||||
HangTimer, Adapter);
|
||||
ZwClose(HangTimerHandle);
|
||||
Timeout.QuadPart = (LONGLONG)Adapter->NdisMiniportBlock.CheckForHangSeconds * -1000000;
|
||||
KeSetTimerEx(&Adapter->NdisMiniportBlock.WakeUpDpcTimer.Timer, Timeout,
|
||||
Adapter->NdisMiniportBlock.CheckForHangSeconds * 1000,
|
||||
&Adapter->NdisMiniportBlock.WakeUpDpcTimer.Dpc);
|
||||
|
||||
/* Put adapter in adapter list for this miniport */
|
||||
ExInterlockedInsertTailList(&Adapter->NdisMiniportBlock.DriverHandle->DeviceList, &Adapter->MiniportListEntry, &Adapter->NdisMiniportBlock.DriverHandle->Lock);
|
||||
@@ -1722,6 +1718,8 @@ NdisIPnPStopDevice(
|
||||
Adapter->NdisMiniportBlock.OldPnPDeviceState = Adapter->NdisMiniportBlock.PnPDeviceState;
|
||||
Adapter->NdisMiniportBlock.PnPDeviceState = NdisPnPDeviceStopped;
|
||||
|
||||
KeCancelTimer(&Adapter->NdisMiniportBlock.WakeUpDpcTimer.Timer);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -1908,7 +1906,9 @@ NdisIAddDevice(
|
||||
Adapter->NdisMiniportBlock.OldPnPDeviceState = 0;
|
||||
Adapter->NdisMiniportBlock.PnPDeviceState = NdisPnPDeviceAdded;
|
||||
|
||||
KeInitializeDpc(&Adapter->NdisMiniportBlock.DeferredDpc, MiniportDpc, (PVOID)Adapter);
|
||||
KeInitializeTimer(&Adapter->NdisMiniportBlock.WakeUpDpcTimer.Timer);
|
||||
KeInitializeDpc(&Adapter->NdisMiniportBlock.WakeUpDpcTimer.Dpc, MiniportHangDpc, Adapter);
|
||||
KeInitializeDpc(&Adapter->NdisMiniportBlock.DeferredDpc, MiniportDpc, Adapter);
|
||||
|
||||
DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user