Problem with NDIS MINIPORT Driver for WinCE 6.0



Hi All,

We are implementing a NDIS driver for our 10/100 Mbps ethernet. Our
core is ARM1176 with internal Ethernet MAC and external PHY.

If we specify the MajorNdisVersion as 5 and MinorNdisVersion as 1, the
send packet works fine. When the phy recieves a packet an interrupt is
raised. ndisMIsr handler is getting executed which raises an exception
before our ISR handler is called. If we step through the disassembly
(as source code NDIS driver in WinCE in unavialable) it seems that the
"interrupt" is loaded into r3 register of ARM and 0x3C is substraced
from it. Result of this is a 0x01 in r3. Then the content of address
pointed by r3 is loaded, this is the point where we are getting
exception. The contents of r3 are incorrect as it reffers to 0x01
address but what is the intent of this operation? what is the
expectation of ndisMIsr function? What exactly is ndisMIsr trying to
do with Interrupt? what else do we need to do specify in
ndisregisterinterrupt or ndisinitialisewrapper?

If we change MinorNdisVersion to 0, there are no exceptions. Our ISR
is getting called.

Why is this behaviour for just differnet MinorNdisVersions? Is there
any help available in this world on this topic? We have tried
searching through all of msdn and internet but there is no clue or
source of NDIS 5.1 implementation of Microsoft. How is a customer/user/
developer expected to implement a driver without any documentation,
help or source sharing? Sorry if I harsh, but its really frustrating
to develop Windows CE drivers.

Regards,
-NG
.