Commit in reactos/drivers/net/ndis on MAIN
include/ndissys.h+11.8 -> 1.9
ndis/main.c+11.20 -> 1.21
    /miniport.c+13-31.47 -> 1.48
    /protocol.c+15-51.24 -> 1.25
+30-8
4 modified files
Filip and I have hopefully fixed the ndis completion problem on sends.
After calls to delayed miniport send routines, we check status and if not
pending, do NdisMSendComplete and set the miniport busy flag off.

reactos/drivers/net/ndis/include
ndissys.h 1.8 -> 1.9
diff -u -r1.8 -r1.9
--- ndissys.h	23 Nov 2004 18:58:46 -0000	1.8
+++ ndissys.h	18 Dec 2004 19:32:36 -0000	1.9
@@ -39,6 +39,7 @@
 #define EXPORT STDCALL
 #endif
 
+#define NDIS_TAG  0x4e4d4953
 
 #ifdef DBG
 

reactos/drivers/net/ndis/ndis
main.c 1.20 -> 1.21
diff -u -r1.20 -r1.21
--- main.c	28 Nov 2004 21:21:11 -0000	1.20
+++ main.c	18 Dec 2004 19:32:40 -0000	1.21
@@ -19,6 +19,7 @@
 
 /* See debug.h for debug/trace constants */
 DWORD DebugTraceLevel = MIN_TRACE;
+//DWORD DebugTraceLevel = DEBUG_ULTRA;
 
 #endif /* DBG */
 

reactos/drivers/net/ndis/ndis
miniport.c 1.47 -> 1.48
diff -u -r1.47 -r1.48
--- miniport.c	13 Dec 2004 17:16:36 -0000	1.47
+++ miniport.c	18 Dec 2004 19:32:40 -0000	1.48
@@ -18,6 +18,14 @@
 #include <buffer.h>
 #endif /* DBG */
 
+#undef NdisMSendComplete
+VOID
+EXPORT
+NdisMSendComplete(
+    IN  NDIS_HANDLE     MiniportAdapterHandle,
+    IN  PNDIS_PACKET    Packet,
+    IN  NDIS_STATUS     Status);
+
 /* Root of the scm database */
 #define SERVICES_ROOT L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\"
 
@@ -819,6 +827,8 @@
                  */
                 (*Adapter->Miniport->Chars.SendPacketsHandler)(
                     Adapter->NdisMiniportBlock.MiniportAdapterContext, (PPNDIS_PACKET)&WorkItemContext, 1);
+		NdisStatus = 
+		    NDIS_GET_PACKET_STATUS((PNDIS_PACKET)WorkItemContext);
 
                 NDIS_DbgPrint(MAX_TRACE, ("back from miniport's SendPackets handler\n"));
               }
@@ -831,7 +841,9 @@
 
                 NDIS_DbgPrint(MAX_TRACE, ("back from miniport's Send handler\n"));
               }
-
+	    NdisMSendComplete
+		( Adapter, (PNDIS_PACKET)WorkItemContext, NdisStatus );
+	    Adapter->MiniportBusy = FALSE;
             break;
 
           case NdisWorkItemSendLoopback:
@@ -1831,8 +1843,6 @@
   MiniResetComplete(MiniportAdapterHandle, Status, AddressingReset);
 }
 
-#undef NdisMSendComplete
-
 
 /*
  * @implemented

reactos/drivers/net/ndis/ndis
protocol.c 1.24 -> 1.25
diff -u -r1.24 -r1.25
--- protocol.c	13 Dec 2004 20:09:26 -0000	1.24
+++ protocol.c	18 Dec 2004 19:32:40 -0000	1.25
@@ -13,6 +13,13 @@
 #include "ndissys.h"
 #include <buffer.h>
 
+VOID
+EXPORT
+NdisMSendComplete(
+    IN  NDIS_HANDLE     MiniportAdapterHandle,
+    IN  PNDIS_PACKET    Packet,
+    IN  NDIS_STATUS     Status);
+
 #define SERVICES_KEY L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\"
 #define LINKAGE_KEY  L"\\Linkage"
 #define PARAMETERS_KEY L"\\Parameters\\"
@@ -359,11 +366,14 @@
           NDIS_DbgPrint(MAX_TRACE, ("Calling miniport's Send handler\n"));
           NdisStatus = (*Adapter->Miniport->Chars.SendHandler)(Adapter->NdisMiniportBlock.MiniportAdapterContext, Packet, 0);
           NDIS_DbgPrint(MAX_TRACE, ("back from miniport's send handler\n"));
-
+	  if( NdisStatus != NDIS_STATUS_PENDING ) {
+	      NdisMSendComplete( Adapter, Packet, NdisStatus );
+	      Adapter->MiniportBusy = FALSE;
+	  }
           KeLowerIrql(RaiseOldIrql);
         }
     }
-
+  
   /* XXX why the hell do we do this? */
   NDIS_DbgPrint(MAX_TRACE, ("acquiring miniport block lock\n"));
   KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &SpinOldIrql);
@@ -736,7 +746,7 @@
     UNICODE_STRING RegistryPath;
     WCHAR *RegistryPathStr;
 
-    RegistryPathStr = ExAllocatePool(PagedPool, sizeof(SERVICES_KEY) + ProtocolCharacteristics->Name.Length + sizeof(LINKAGE_KEY));
+    RegistryPathStr = ExAllocatePoolWithTag(PagedPool, sizeof(SERVICES_KEY) + ProtocolCharacteristics->Name.Length + sizeof(LINKAGE_KEY), NDIS_TAG + __LINE__);
     if(!RegistryPathStr)
       {
         NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
@@ -785,7 +795,7 @@
         return;
       }
 
-    KeyInformation = ExAllocatePool(PagedPool, sizeof(KEY_VALUE_PARTIAL_INFORMATION) + ResultLength);
+    KeyInformation = ExAllocatePoolWithTag(PagedPool, sizeof(KEY_VALUE_PARTIAL_INFORMATION) + ResultLength, NDIS_TAG + __LINE__);
     if(!KeyInformation)
       {
         NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
@@ -856,7 +866,7 @@
 
       NDIS_DbgPrint(MAX_TRACE, ("Calling protocol's BindAdapter handler with DeviceName %wZ and RegistryPath %wZ\n",
           &DeviceName, &RegistryPath));
-
+      
       /* XXX SD must do something with bind context */
       *NdisProtocolHandle = Protocol;
 
CVSspam 0.2.8