Amd64/misc 64bit fixes (#236)
[reactos.git] / drivers / network / ndis / ndis / protocol.c
index 61513ab..c32bfd4 100644 (file)
@@ -185,7 +185,6 @@ NdisIPnPCancelStopDevice(
   return ProSendAndFreePnPEvent(Adapter, PnPEvent, Irp);
 }
 
-\f
 /*
  * @implemented
  */
@@ -240,7 +239,6 @@ NdisCompleteUnbindAdapter(
   ExInterlockedRemoveEntryList(&Protocol->ListEntry, &ProtocolListLock);
 }
 
-\f
 NDIS_STATUS
 ProIndicatePacket(
     PLOGICAL_ADAPTER Adapter,
@@ -267,19 +265,18 @@ ProIndicatePacket(
   MiniDisplayPacket(Packet);
 #endif
 
-  LookaheadBuffer = ExAllocatePool(NonPagedPool, Adapter->NdisMiniportBlock.CurrentLookahead + Adapter->MediumHeaderSize);
+  NdisQueryPacket(Packet, NULL, NULL, NULL, &PacketLength);
+
+  LookaheadBuffer = ExAllocatePool(NonPagedPool, PacketLength);
   if (!LookaheadBuffer) {
       NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources\n"));
       return NDIS_STATUS_RESOURCES;
   }
 
-  NdisQueryPacket(Packet, NULL, NULL, NULL, &PacketLength);
-
   NDIS_DbgPrint(MAX_TRACE, ("acquiring miniport block lock\n"));
   KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
     {
-      BufferedLength = CopyPacketToBuffer(LookaheadBuffer, Packet, 0, Adapter->NdisMiniportBlock.CurrentLookahead +
-                                                                      Adapter->MediumHeaderSize);
+      BufferedLength = CopyPacketToBuffer(LookaheadBuffer, Packet, 0, PacketLength);
       Adapter->NdisMiniportBlock.IndicatedPacket[KeGetCurrentProcessorNumber()] = Packet;
     }
   KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
@@ -307,7 +304,6 @@ ProIndicatePacket(
   return NDIS_STATUS_SUCCESS;
 }
 
-\f
 NDIS_STATUS NTAPI
 ProRequest(
     IN  NDIS_HANDLE     MacBindingHandle,
@@ -429,6 +425,10 @@ proSendPacketToMiniport(PLOGICAL_ADAPTER Adapter, PNDIS_PACKET Packet)
             }
         }
 
+        if (NdisStatus != NDIS_STATUS_PENDING) {
+            MiniWorkItemComplete(Adapter, NdisWorkItemSend);
+        }
+
         return NdisStatus;
    } else {
         if(Adapter->NdisMiniportBlock.Flags & NDIS_ATTRIBUTE_DESERIALIZE)
@@ -452,12 +452,15 @@ proSendPacketToMiniport(PLOGICAL_ADAPTER Adapter, PNDIS_PACKET Packet)
             }
         }
 
+        if (NdisStatus != NDIS_STATUS_PENDING) {
+            MiniWorkItemComplete(Adapter, NdisWorkItemSend);
+        }
+
         return NdisStatus;
    }
 #endif
 }
 
-\f
 NDIS_STATUS NTAPI
 ProSend(
     IN  NDIS_HANDLE     MacBindingHandle,
@@ -562,7 +565,6 @@ ProSend(
     }
 }
 
-\f
 VOID NTAPI
 ProSendPackets(
     IN  NDIS_HANDLE     NdisBindingHandle,
@@ -600,7 +602,7 @@ ProSendPackets(
      else
      {
        if(Adapter->NdisMiniportBlock.Flags & NDIS_ATTRIBUTE_DESERIALIZE)
-       {  
+       {
           for (i = 0; i < NumberOfPackets; i++)
           {
              NdisStatus = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendHandler)(
@@ -625,7 +627,6 @@ ProSendPackets(
      }
 }
 
-\f
 NDIS_STATUS NTAPI
 ProTransferData(
     IN  NDIS_HANDLE         MacBindingHandle,
@@ -774,7 +775,7 @@ NdisOpenAdapter(
  *     MediumArray            = Pointer to an array of NDIS_MEDIUMs called can support
  *     MediumArraySize        = Number of elements in MediumArray
  *     NdisProtocolHandle     = Handle returned by NdisRegisterProtocol
- *     ProtocolBindingContext = Pointer to caller suplied context area
+ *     ProtocolBindingContext = Pointer to caller supplied context area
  *     AdapterName            = Pointer to buffer with name of adapter
  *     OpenOptions            = Bitmask with flags passed to next-lower driver
  *     AddressingInformation  = Optional pointer to buffer with NIC specific information
@@ -932,7 +933,7 @@ ndisBindMiniportsToProtocol(OUT PNDIS_STATUS Status, IN PPROTOCOL_BINDING Protoc
     RtlInitUnicodeString(&RegistryPath, RegistryPathStr);
     NDIS_DbgPrint(MAX_TRACE, ("Opening configuration key: %wZ\n", &RegistryPath));
 
-    InitializeObjectAttributes(&ObjectAttributes, &RegistryPath, OBJ_CASE_INSENSITIVE, NULL, NULL);
+    InitializeObjectAttributes(&ObjectAttributes, &RegistryPath, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL);
     NtStatus = ZwOpenKey(&DriverKeyHandle, KEY_READ, &ObjectAttributes);
 
     ExFreePool(RegistryPathStr);
@@ -977,14 +978,14 @@ ndisBindMiniportsToProtocol(OUT PNDIS_STATUS Status, IN PPROTOCOL_BINDING Protoc
 
     if (!NT_SUCCESS(NtStatus))
     {
-        NDIS_DbgPrint(MIN_TRACE, ("Performing global bind for protocol '%wZ'\n", &ProtocolCharacteristics->Name));
+        NDIS_DbgPrint(MID_TRACE, ("Performing global bind for protocol '%wZ'\n", &ProtocolCharacteristics->Name));
         KeyInformation = NULL;
 
         CurrentEntry = AdapterListHead.Flink;
     }
     else
     {
-        NDIS_DbgPrint(MIN_TRACE, ("Performing standard bind for protocol '%wZ'\n", &ProtocolCharacteristics->Name));
+        NDIS_DbgPrint(MID_TRACE, ("Performing standard bind for protocol '%wZ'\n", &ProtocolCharacteristics->Name));
 
         DataPtr = (WCHAR*)KeyInformation->Data;
     }
@@ -1027,7 +1028,7 @@ ndisBindMiniportsToProtocol(OUT PNDIS_STATUS Status, IN PPROTOCOL_BINDING Protoc
             /* It wasn't in the global miniport list, so skip the bind entry */
             goto next;
         }
-        
+
         /* Make sure this device isn't already bound to this protocol */
         if (LocateAdapterBindingByName(Protocol, &DeviceName))
         {
@@ -1073,10 +1074,10 @@ ndisBindMiniportsToProtocol(OUT PNDIS_STATUS Status, IN PPROTOCOL_BINDING Protoc
             if(BindHandler)
             {
                 BindHandler(Status, BindContext, &DeviceName, &RegistryPath, 0);
-                NDIS_DbgPrint(MIN_TRACE, ("%wZ's BindAdapter handler returned 0x%x for %wZ\n", &ProtocolCharacteristics->Name, *Status, &DeviceName));
+                NDIS_DbgPrint(MID_TRACE, ("%wZ's BindAdapter handler returned 0x%x for %wZ\n", &ProtocolCharacteristics->Name, *Status, &DeviceName));
             }
             else
-                NDIS_DbgPrint(MIN_TRACE, ("No protocol bind handler specified\n"));
+                NDIS_DbgPrint(MID_TRACE, ("No protocol bind handler specified\n"));
         }
 
     next:
@@ -1189,7 +1190,7 @@ NdisRegisterProtocol(
 
   InitializeListHead(&Protocol->AdapterListHead);
 
-  /* We must set this before the call to ndisBindMiniportsToProtocol because the protocol's 
+  /* We must set this before the call to ndisBindMiniportsToProtocol because the protocol's
    * BindAdapter handler might need it */
 
   *NdisProtocolHandle = Protocol;
@@ -1222,7 +1223,6 @@ NdisRegisterProtocol(
   }
 }
 
-\f
 /*
  * @implemented
  */
@@ -1243,7 +1243,6 @@ NdisRequest(
     *Status = ProRequest(NdisBindingHandle, NdisRequest);
 }
 
-\f
 /*
  * @implemented
  */
@@ -1256,7 +1255,6 @@ NdisReset(
     *Status = ProReset(NdisBindingHandle);
 }
 
-\f
 /*
  * @implemented
  */
@@ -1278,7 +1276,6 @@ NdisSend(
     *Status = ProSend(NdisBindingHandle, Packet);
 }
 
-\f
 /*
  * @implemented
  */
@@ -1293,7 +1290,6 @@ NdisSendPackets(
     ProSendPackets(NdisBindingHandle, PacketArray, NumberOfPackets);
 }
 
-\f
 /*
  * @implemented
  */