diff --git a/reactos/drivers/net/ndis/include/ndissys.h b/reactos/drivers/net/ndis/include/ndissys.h index 548e1fc02f3..7556f232d1d 100644 --- a/reactos/drivers/net/ndis/include/ndissys.h +++ b/reactos/drivers/net/ndis/include/ndissys.h @@ -39,6 +39,7 @@ typedef struct _ATM_ADDRESS *PATM_ADDRESS; #define EXPORT STDCALL #endif +#define NDIS_TAG 0x4e4d4953 #ifdef DBG diff --git a/reactos/drivers/net/ndis/ndis/main.c b/reactos/drivers/net/ndis/ndis/main.c index fcceb512267..ab3c4bff531 100644 --- a/reactos/drivers/net/ndis/ndis/main.c +++ b/reactos/drivers/net/ndis/ndis/main.c @@ -19,6 +19,7 @@ /* See debug.h for debug/trace constants */ DWORD DebugTraceLevel = MIN_TRACE; +//DWORD DebugTraceLevel = DEBUG_ULTRA; #endif /* DBG */ diff --git a/reactos/drivers/net/ndis/ndis/miniport.c b/reactos/drivers/net/ndis/ndis/miniport.c index b1d774fae13..6922fe429c7 100644 --- a/reactos/drivers/net/ndis/ndis/miniport.c +++ b/reactos/drivers/net/ndis/ndis/miniport.c @@ -18,6 +18,14 @@ #include #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 @@ VOID STDCALL MiniportDpc( */ (*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 @@ VOID STDCALL MiniportDpc( 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 @@ NdisMResetComplete( MiniResetComplete(MiniportAdapterHandle, Status, AddressingReset); } -#undef NdisMSendComplete - /* * @implemented diff --git a/reactos/drivers/net/ndis/ndis/protocol.c b/reactos/drivers/net/ndis/ndis/protocol.c index ff96b9ee839..93495e3e068 100644 --- a/reactos/drivers/net/ndis/ndis/protocol.c +++ b/reactos/drivers/net/ndis/ndis/protocol.c @@ -13,6 +13,13 @@ #include "ndissys.h" #include +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 @@ ProSend( 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 @@ NdisRegisterProtocol( 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 @@ NdisRegisterProtocol( 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 @@ NdisRegisterProtocol( 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;