Author: cgutman
Date: Mon Apr 13 07:11:42 2009
New Revision: 40475

URL: http://svn.reactos.org/svn/reactos?rev=40475&view=rev
Log:
 - Implement the rest of MiniIndicateReceivePacket
 - rtl8139 partially works now
 - It gets an IP address and can ping other computers but attempting to 
download something results in a page fault during the download

Modified:
    trunk/reactos/drivers/network/ndis/ndis/miniport.c

Modified: trunk/reactos/drivers/network/ndis/ndis/miniport.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/ndis/ndis/miniport.c?rev=40475&r1=40474&r2=40475&view=diff
==============================================================================
--- trunk/reactos/drivers/network/ndis/ndis/miniport.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/ndis/ndis/miniport.c [iso-8859-1] Mon Apr 13 
07:11:42 2009
@@ -297,6 +297,60 @@
               (*AdapterBinding->ProtocolBinding->Chars.ReceivePacketHandler)(
                AdapterBinding->NdisOpenBlock.ProtocolBindingContext,
                PacketArray[i]);
+          }
+      }
+      else
+      {
+          for (i = 0; i < NumberOfPackets; i++)
+          {
+              UINT FirstBufferLength, TotalBufferLength, LookAheadSize, 
HeaderSize;
+              PNDIS_BUFFER NdisBuffer;
+              PVOID NdisBufferVA, LookAheadBuffer;
+              NDIS_STATUS NdisStatus;
+
+
+              NdisGetFirstBufferFromPacket(PacketArray[i],
+                                           &NdisBuffer,
+                                           &NdisBufferVA,
+                                           &FirstBufferLength,
+                                           &TotalBufferLength);
+
+              HeaderSize = NDIS_GET_PACKET_HEADER_SIZE(PacketArray[i]);
+
+              if (Adapter->NdisMiniportBlock.CurrentLookahead < 
(TotalBufferLength - HeaderSize))
+              {
+                  LookAheadSize = Adapter->NdisMiniportBlock.CurrentLookahead;
+              }
+              else
+              {
+                  LookAheadSize = TotalBufferLength - HeaderSize;
+              }
+
+
+              LookAheadBuffer = ExAllocatePool(NonPagedPool, LookAheadSize);
+              if (!LookAheadSize)
+              {
+                  NDIS_DbgPrint(MIN_TRACE, ("Failed to allocate lookahead 
buffer!\n"));
+                  return;
+              }
+
+              CopyBufferChainToBuffer(LookAheadBuffer,
+                                      NdisBuffer,
+                                      HeaderSize,
+                                      LookAheadSize);
+
+              NdisStatus = 
(*AdapterBinding->ProtocolBinding->Chars.ReceiveHandler)(
+                            
AdapterBinding->NdisOpenBlock.ProtocolBindingContext,
+                            AdapterBinding->NdisOpenBlock.MacHandle,
+                            NdisBufferVA,
+                            HeaderSize,
+                            LookAheadBuffer,
+                            LookAheadSize,
+                            TotalBufferLength - HeaderSize);
+
+              NDIS_SET_PACKET_STATUS(PacketArray[i], NdisStatus);
+
+              ExFreePool(LookAheadBuffer);
           }
       }
 

Reply via email to