[ros-kernel] Ndid/Miniport.C - Function unimplemented
Filip Navara
xnavara at volny.cz
Sat Jul 17 17:28:32 CEST 2004
Gge wrote:
> The Dlink DFE530TX ( VIA chipset) fails to initialize with fetnd5.sys
> driver ( rename to pcnet.sys) as per debug messages below.
> The "Adapter Type" parameter setup in registry is "5"
>
> Any suggestion ?
Try the attached patch. (Note: I know next to nothing about NDIS, so it
can be plainly wrong, but I think it's worth trying. ;-)
Regards,
Filip
-------------- next part --------------
Index: ndis/ndis/protocol.c
===================================================================
--- ndis/ndis/protocol.c (revision 1)
+++ ndis/ndis/protocol.c (working copy)
@@ -321,53 +321,60 @@
*/
if(Adapter->Miniport->Chars.SendPacketsHandler)
{
- /* TODO: support deserialized miniports by checking for attributes */
- /* SendPackets is called at DISPATCH_LEVEL for all serialized miniports */
- KeRaiseIrql(DISPATCH_LEVEL, &RaiseOldIrql);
+ if(Adapter->NdisMiniportBlock.Flags & NDIS_ATTRIBUTE_DESERIALIZE)
{
NDIS_DbgPrint(MAX_TRACE, ("Calling miniport's SendPackets handler\n"));
(*Adapter->Miniport->Chars.SendPacketsHandler)(Adapter->NdisMiniportBlock.MiniportAdapterContext, &Packet, 1);
}
- KeLowerIrql(RaiseOldIrql);
-
- /* XXX why the hell do we do this? */
- NDIS_DbgPrint(MAX_TRACE, ("acquiring miniport block lock\n"));
- KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &SpinOldIrql);
+ else
{
- if (Adapter->WorkQueueHead)
- KeInsertQueueDpc(&Adapter->MiniportDpc, NULL, NULL);
+ /* SendPackets is called at DISPATCH_LEVEL for all serialized miniports */
+ KeRaiseIrql(DISPATCH_LEVEL, &RaiseOldIrql);
+ {
+ NDIS_DbgPrint(MAX_TRACE, ("Calling miniport's SendPackets handler\n"));
+ (*Adapter->Miniport->Chars.SendPacketsHandler)(Adapter->NdisMiniportBlock.MiniportAdapterContext, &Packet, 1);
+ }
+ KeLowerIrql(RaiseOldIrql);
}
- KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, SpinOldIrql);
- NDIS_DbgPrint(MAX_TRACE, ("MiniportDpc queued; returning NDIS_STATUS_SCUCESS\n"));
-
/* SendPackets handlers return void - they always "succeed" */
NdisStatus = NDIS_STATUS_SUCCESS;
}
else
{
- /* Send handlers always run at DISPATCH_LEVEL so we raise here */
- KeRaiseIrql(DISPATCH_LEVEL, &RaiseOldIrql);
+ /* XXX FIXME THIS IS WRONG */
+ /* uh oh... forgot why i thought that... */
+ if(Adapter->NdisMiniportBlock.Flags & NDIS_ATTRIBUTE_DESERIALIZE)
{
- /* XXX FIXME THIS IS WRONG */
- /* uh oh... forgot why i thought that... */
+ NDIS_DbgPrint(MAX_TRACE, ("Calling miniport's Send handler\n"));
+ NdisStatus = (*Adapter->Miniport->Chars.u1.SendHandler)(Adapter->NdisMiniportBlock.MiniportAdapterContext, Packet, 0);
+ NDIS_DbgPrint(MAX_TRACE, ("back from miniport's send handler\n"));
+ }
+ else
+ {
+ /* Send handlers always run at DISPATCH_LEVEL so we raise here */
+ KeRaiseIrql(DISPATCH_LEVEL, &RaiseOldIrql);
NDIS_DbgPrint(MAX_TRACE, ("Calling miniport's Send handler\n"));
NdisStatus = (*Adapter->Miniport->Chars.u1.SendHandler)(Adapter->NdisMiniportBlock.MiniportAdapterContext, Packet, 0);
NDIS_DbgPrint(MAX_TRACE, ("back from miniport's send handler\n"));
- /* XXX why the hell do we do this? */
- NDIS_DbgPrint(MAX_TRACE, ("acquiring miniport block lock\n"));
- KeAcquireSpinLockAtDpcLevel(&Adapter->NdisMiniportBlock.Lock);
- {
- if (Adapter->WorkQueueHead)
- KeInsertQueueDpc(&Adapter->MiniportDpc, NULL, NULL);
- }
- KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
+ KeLowerIrql(RaiseOldIrql);
}
- KeLowerIrql(RaiseOldIrql);
}
+ /* XXX why the hell do we do this? */
+ NDIS_DbgPrint(MAX_TRACE, ("acquiring miniport block lock\n"));
+ KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &SpinOldIrql);
+ {
+ if (Adapter->WorkQueueHead)
+ {
+ KeInsertQueueDpc(&Adapter->MiniportDpc, NULL, NULL);
+ NDIS_DbgPrint(MAX_TRACE, ("MiniportDpc queued; returning NDIS_STATUS_SUCCESS\n"));
+ }
+ }
+ KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, SpinOldIrql);
+
NDIS_DbgPrint(MAX_TRACE, ("returning 0x%x\n", NdisStatus));
return NdisStatus;
}
Index: ndis/ndis/miniport.c
===================================================================
--- ndis/ndis/miniport.c (revision 1)
+++ ndis/ndis/miniport.c (working copy)
@@ -1912,13 +1912,6 @@
Adapter->NdisMiniportBlock.AdapterType = AdapterType;
Adapter->AttributesSet = TRUE;
-
- if(AttributeFlags & NDIS_ATTRIBUTE_DESERIALIZE)
- {
- NDIS_DbgPrint(MIN_TRACE, ("Deserialized miniport - UNIMPLEMENTED\n"));
- /* XXX when this is implemented, be sure to fix ProSend() to not nail the irql up to dispatch_level */
- ASSERT(0);
- }
}
Index: ndis/ndis/io.c
===================================================================
--- ndis/ndis/io.c (revision 1)
+++ ndis/ndis/io.c (working copy)
@@ -332,7 +332,7 @@
/* only bus masters may call this routine */
ASSERT(Adapter->NdisMiniportBlock.Flags & NDIS_ATTRIBUTE_BUS_MASTER);
- if(!Adapter->NdisMiniportBlock.Flags & NDIS_ATTRIBUTE_BUS_MASTER)
+ if(!(Adapter->NdisMiniportBlock.Flags & NDIS_ATTRIBUTE_BUS_MASTER))
return NDIS_STATUS_SUCCESS;
DeviceObject = Adapter->NdisMiniportBlock.DeviceObject;
@@ -660,7 +660,7 @@
/* only bus masters may call this routine */
ASSERT(Adapter->NdisMiniportBlock.Flags & NDIS_ATTRIBUTE_BUS_MASTER);
- if(!Adapter->NdisMiniportBlock.Flags & NDIS_ATTRIBUTE_BUS_MASTER)
+ if(!(Adapter->NdisMiniportBlock.Flags & NDIS_ATTRIBUTE_BUS_MASTER))
return;
MapRegistersPerBaseRegister = ((Adapter->NdisMiniportBlock.MaximumPhysicalMapping - 2) / PAGE_SIZE) + 2;
More information about the Ros-kernel
mailing list