mirror of
https://github.com/reactos/reactos.git
synced 2024-08-03 10:00:56 +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
|
* TRUE if a miniport controlled device generated the interrupt
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
BOOLEAN InterruptRecognized;
|
BOOLEAN InterruptRecognized = FALSE;
|
||||||
BOOLEAN QueueMiniportHandleInterrupt;
|
BOOLEAN QueueMiniportHandleInterrupt = FALSE;
|
||||||
PLOGICAL_ADAPTER Adapter = ServiceContext;
|
PLOGICAL_ADAPTER Adapter = ServiceContext;
|
||||||
|
|
||||||
NDIS_DbgPrint(MAX_TRACE, ("Called. Adapter (0x%X)\n", Adapter));
|
NDIS_DbgPrint(MAX_TRACE, ("Called. Adapter (0x%X)\n", Adapter));
|
||||||
|
|
||||||
(*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.ISRHandler)(
|
if (Adapter->NdisMiniportBlock.Interrupt->IsrRequested) {
|
||||||
&InterruptRecognized,
|
(*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.ISRHandler)(
|
||||||
&QueueMiniportHandleInterrupt,
|
&InterruptRecognized,
|
||||||
Adapter->NdisMiniportBlock.MiniportAdapterContext);
|
&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)
|
if (QueueMiniportHandleInterrupt)
|
||||||
{
|
{
|
||||||
NDIS_DbgPrint(MAX_TRACE, ("Queueing DPC.\n"));
|
NDIS_DbgPrint(MAX_TRACE, ("Queuing DPC.\n"));
|
||||||
KeInsertQueueDpc(&Adapter->NdisMiniportBlock.Interrupt->InterruptDpc, NULL, NULL);
|
KeInsertQueueDpc(&Adapter->NdisMiniportBlock.Interrupt->InterruptDpc, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
NDIS_DbgPrint(MAX_TRACE, ("Leaving.\n"));
|
NDIS_DbgPrint(MAX_TRACE, ("Leaving.\n"));
|
||||||
|
|
||||||
|
@ -767,6 +776,7 @@ NdisMRegisterInterrupt(
|
||||||
KeInitializeEvent(&Interrupt->DpcsCompletedEvent, NotificationEvent, FALSE);
|
KeInitializeEvent(&Interrupt->DpcsCompletedEvent, NotificationEvent, FALSE);
|
||||||
|
|
||||||
Interrupt->SharedInterrupt = SharedInterrupt;
|
Interrupt->SharedInterrupt = SharedInterrupt;
|
||||||
|
Interrupt->IsrRequested = RequestIsr;
|
||||||
|
|
||||||
Adapter->NdisMiniportBlock.Interrupt = Interrupt;
|
Adapter->NdisMiniportBlock.Interrupt = Interrupt;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue