[ros-diffs] [cgutman] 36620: - Only call MiniportISR if the miniport driver called NdisMRegisterInterrupt with RequestIsr TRUE - If RequestIsr is FALSE call the MiniportDisableInterrupt handler

cgutman at svn.reactos.org cgutman at svn.reactos.org
Thu Oct 2 04:04:58 CEST 2008


Author: cgutman
Date: Wed Oct  1 21:04:57 2008
New Revision: 36620

URL: http://svn.reactos.org/svn/reactos?rev=36620&view=rev
Log:
 - Only call MiniportISR if the miniport driver called NdisMRegisterInterrupt with RequestIsr TRUE
 - If RequestIsr is FALSE call the MiniportDisableInterrupt handler

Modified:
    branches/aicom-network-fixes/drivers/network/ndis/ndis/io.c

Modified: branches/aicom-network-fixes/drivers/network/ndis/ndis/io.c
URL: http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/network/ndis/ndis/io.c?rev=36620&r1=36619&r2=36620&view=diff
==============================================================================
--- branches/aicom-network-fixes/drivers/network/ndis/ndis/io.c [iso-8859-1] (original)
+++ branches/aicom-network-fixes/drivers/network/ndis/ndis/io.c [iso-8859-1] Wed Oct  1 21:04:57 2008
@@ -60,22 +60,31 @@
  *     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 @@
   KeInitializeEvent(&Interrupt->DpcsCompletedEvent, NotificationEvent, FALSE);
 
   Interrupt->SharedInterrupt = SharedInterrupt;
+  Interrupt->IsrRequested = RequestIsr;
 
   Adapter->NdisMiniportBlock.Interrupt = Interrupt;
 



More information about the Ros-diffs mailing list