- Only call the ProtocolReceivePacket handler if the protocol registered one

- Remove some unneeded code
 - Immediately send the loopback packet if possible

svn path=/branches/aicom-network-fixes/; revision=36649
This commit is contained in:
Cameron Gutman 2008-10-04 21:55:01 +00:00
parent 38d2e13461
commit 30f8dc548c
2 changed files with 16 additions and 29 deletions

View file

@ -182,26 +182,6 @@ MiniIndicateData(
AdapterBinding = CONTAINING_RECORD(CurrentEntry, ADAPTER_BINDING, AdapterListEntry);
NDIS_DbgPrint(DEBUG_MINIPORT, ("AdapterBinding = %x\n", AdapterBinding));
#ifdef DBG
if(!AdapterBinding)
{
NDIS_DbgPrint(MIN_TRACE, ("AdapterBinding was null\n"));
break;
}
if(!AdapterBinding->ProtocolBinding)
{
NDIS_DbgPrint(MIN_TRACE, ("AdapterBinding->ProtocolBinding was null\n"));
break;
}
if(!AdapterBinding->ProtocolBinding->Chars.ReceiveHandler)
{
NDIS_DbgPrint(MIN_TRACE, ("AdapterBinding->ProtocolBinding->Chars.ReceiveHandler was null\n"));
break;
}
#endif
NDIS_DbgPrint
(MID_TRACE,
("XXX (%x) %x %x %x %x %x %x %x XXX\n",
@ -261,11 +241,14 @@ MiniIndicateReceivePacket(
{
AdapterBinding = CONTAINING_RECORD(CurrentEntry, ADAPTER_BINDING, AdapterListEntry);
for (i = 0; i < NumberOfPackets; i++)
if (AdapterBinding->ProtocolBinding->Chars.ReceivePacketHandler)
{
(*AdapterBinding->ProtocolBinding->Chars.ReceivePacketHandler)(
AdapterBinding->NdisOpenBlock.ProtocolBindingContext,
PacketArray[i]);
for (i = 0; i < NumberOfPackets; i++)
{
(*AdapterBinding->ProtocolBinding->Chars.ReceivePacketHandler)(
AdapterBinding->NdisOpenBlock.ProtocolBindingContext,
PacketArray[i]);
}
}
CurrentEntry = CurrentEntry->Flink;

View file

@ -215,14 +215,18 @@ ProSend(
if ((Adapter->NdisMiniportBlock.MacOptions & NDIS_MAC_OPTION_NO_LOOPBACK) &&
MiniAdapterHasAddress(Adapter, Packet))
{
NDIS_DbgPrint(MID_TRACE, ("Queuing packet.\n"));
if(Adapter->MiniportBusy) {
MiniQueueWorkItem(Adapter, NdisWorkItemSendLoopback, Packet);
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, SpinOldIrql);
return NDIS_STATUS_PENDING;
}
MiniQueueWorkItem(Adapter, NdisWorkItemSendLoopback, (PVOID)Packet);
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, SpinOldIrql);
return NDIS_STATUS_PENDING;
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, SpinOldIrql);
return ProIndicatePacket(Adapter, Packet);
} else {
if(Adapter->MiniportBusy) {
MiniQueueWorkItem(Adapter, NdisWorkItemSend, (PVOID)Packet);
MiniQueueWorkItem(Adapter, NdisWorkItemSend, Packet);
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, SpinOldIrql);
return NDIS_STATUS_PENDING;
}