Amd64/misc 64bit fixes (#236)
[reactos.git] / drivers / network / ndis / ndis / io.c
index 50bf5aa..1775716 100644 (file)
@@ -62,11 +62,16 @@ BOOLEAN NTAPI ServiceRoutine(
   BOOLEAN QueueMiniportHandleInterrupt = FALSE;
   PNDIS_MINIPORT_INTERRUPT NdisInterrupt = ServiceContext;
   PNDIS_MINIPORT_BLOCK NdisMiniportBlock = NdisInterrupt->Miniport;
+  BOOLEAN Initializing;
 
   NDIS_DbgPrint(MAX_TRACE, ("Called. Interrupt (0x%X)\n", NdisInterrupt));
 
-  /* FIXME: This probably isn't the right check for MiniportInitialize, but we need to see what Windows uses here */
-  if ((NdisMiniportBlock->PnPDeviceState != NdisPnPDeviceStarted) || (NdisInterrupt->IsrRequested)) {
+  /* Certain behavior differs if MiniportInitialize is executing when the interrupt is generated */
+  Initializing = (NdisMiniportBlock->PnPDeviceState != NdisPnPDeviceStarted);
+  NDIS_DbgPrint(MAX_TRACE, ("MiniportInitialize executing: %s\n", (Initializing ? "yes" : "no")));
+
+  /* MiniportISR is always called for interrupts during MiniportInitialize */
+  if ((Initializing) || (NdisInterrupt->IsrRequested) || (NdisInterrupt->SharedInterrupt)) {
       NDIS_DbgPrint(MAX_TRACE, ("Calling MiniportISR\n"));
       (*NdisMiniportBlock->DriverHandle->MiniportCharacteristics.ISRHandler)(
           &InterruptRecognized,
@@ -81,7 +86,8 @@ BOOLEAN NTAPI ServiceRoutine(
        InterruptRecognized = TRUE;
   }
 
-
+  /* TODO: Figure out if we should call this or not if Initializing is true. It appears
+   * that calling it fixes some NICs, but documentation is contradictory on it.  */
   if (QueueMiniportHandleInterrupt)
   {
       NDIS_DbgPrint(MAX_TRACE, ("Queuing DPC.\n"));
@@ -185,7 +191,7 @@ IO_ALLOCATION_ACTION NTAPI NdisSubordinateMapRegisterCallback (
 /*
  * FUNCTION: Called back during reservation of map registers
  * ARGUMENTS:
- *     DeviceObject: Device object of the deivce setting up DMA
+ *     DeviceObject: Device object of the device setting up DMA
  *     Irp: Reserved; must be ignored
  *     MapRegisterBase: Map registers assigned for transfer
  *     Context: LOGICAL_ADAPTER object of the requesting miniport
@@ -215,7 +221,7 @@ IO_ALLOCATION_ACTION NTAPI NdisBusMasterMapRegisterCallback (
 /*
  * FUNCTION: Called back during reservation of map registers
  * ARGUMENTS:
- *     DeviceObject: Device object of the deivce setting up DMA
+ *     DeviceObject: Device object of the device setting up DMA
  *     Irp: Reserved; must be ignored
  *     MapRegisterBase: Map registers assigned for transfer
  *     Context: LOGICAL_ADAPTER object of the requesting miniport
@@ -410,7 +416,7 @@ NdisMAllocateMapRegisters(
 
       NDIS_DbgPrint(MAX_TRACE, ("resetting event\n"));
 
-      KeResetEvent(&AllocationEvent);
+      KeClearEvent(&AllocationEvent);
     }
 
   NDIS_DbgPrint(MAX_TRACE, ("returning success\n"));
@@ -589,7 +595,7 @@ NdisMStartBufferPhysicalMapping(
  * NOTES:
  *     - Must be called at IRQL <= DISPATCH_LEVEL
  *     - The basic idea:  call IoMapTransfer() in a loop as many times as it takes
- *       in order to map all of the virtual memory to physical memoroy readable
+ *       in order to map all of the virtual memory to physical memory readable
  *       by the device
  *     - The caller supplies storage for the physical address array.
  */
@@ -644,7 +650,7 @@ NdisMCompleteBufferPhysicalMapping(
  * ARGUMENTS:
  *     - MiniportAdapterHandle: handle originally input to MiniportInitialize
  *     - Buffer: NDIS_BUFFER to complete the mapping on
- *     - PhyscialMapRegister: the chosen map register
+ *     - PhysicalMapRegister: the chosen map register
  * NOTES:
  *     - May be called at IRQL <= DISPATCH_LEVEL
  */
@@ -1187,7 +1193,7 @@ NdisMInitializeScatterGatherDma(
     DeviceDesc.Version = DEVICE_DESCRIPTION_VERSION;
     DeviceDesc.Master = TRUE;
     DeviceDesc.ScatterGather = TRUE;
-    DeviceDesc.Dma32BitAddresses = !Dma64BitAddresses;
+    DeviceDesc.Dma32BitAddresses = TRUE; // All callers support 32-bit addresses
     DeviceDesc.Dma64BitAddresses = Dma64BitAddresses;
     DeviceDesc.BusNumber = Adapter->NdisMiniportBlock.BusNumber;
     DeviceDesc.InterfaceType = Adapter->NdisMiniportBlock.BusType;
@@ -1251,4 +1257,3 @@ NdisFreeDmaChannel(
 
 
 /* EOF */
-