mirror of
https://github.com/reactos/reactos.git
synced 2024-07-12 07:35:10 +00:00
- Only call MiniportISR if the miniport driver called NdisMRegisterInterrupt with RequestIsr TRUE
- If RequestIsr is FALSE call the MiniportDisableInterrupt handler svn path=/branches/aicom-network-fixes/; revision=36620
This commit is contained in:
parent
769eadf101
commit
2e295e7d36
|
@ -60,22 +60,31 @@ BOOLEAN NTAPI ServiceRoutine(
|
|||
* TRUE if a miniport controlled device generated the interrupt
|
||||
*/
|
||||
{
|
||||
BOOLEAN InterruptRecognized;
|
||||
BOOLEAN QueueMiniportHandleInterrupt;
|
||||
BOOLEAN InterruptRecognized = FALSE;
|
||||
BOOLEAN QueueMiniportHandleInterrupt = FALSE;
|
||||
PLOGICAL_ADAPTER Adapter = ServiceContext;
|
||||
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Called. Adapter (0x%X)\n", Adapter));
|
||||
|
||||
(*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.ISRHandler)(
|
||||
&InterruptRecognized,
|
||||
&QueueMiniportHandleInterrupt,
|
||||
Adapter->NdisMiniportBlock.MiniportAdapterContext);
|
||||
if (Adapter->NdisMiniportBlock.Interrupt->IsrRequested) {
|
||||
(*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.ISRHandler)(
|
||||
&InterruptRecognized,
|
||||
&QueueMiniportHandleInterrupt,
|
||||
Adapter->NdisMiniportBlock.MiniportAdapterContext);
|
||||
|
||||
} else if (Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.DisableInterruptHandler) {
|
||||
(*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.DisableInterruptHandler)(
|
||||
Adapter->NdisMiniportBlock.MiniportAdapterContext);
|
||||
QueueMiniportHandleInterrupt = TRUE;
|
||||
InterruptRecognized = TRUE;
|
||||
}
|
||||
|
||||
|
||||
if (QueueMiniportHandleInterrupt)
|
||||
{
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Queueing DPC.\n"));
|
||||
{
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Queuing DPC.\n"));
|
||||
KeInsertQueueDpc(&Adapter->NdisMiniportBlock.Interrupt->InterruptDpc, NULL, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Leaving.\n"));
|
||||
|
||||
|
@ -767,6 +776,7 @@ NdisMRegisterInterrupt(
|
|||
KeInitializeEvent(&Interrupt->DpcsCompletedEvent, NotificationEvent, FALSE);
|
||||
|
||||
Interrupt->SharedInterrupt = SharedInterrupt;
|
||||
Interrupt->IsrRequested = RequestIsr;
|
||||
|
||||
Adapter->NdisMiniportBlock.Interrupt = Interrupt;
|
||||
|
||||
|
|
Loading…
Reference in a new issue