I am developing a Miniport device driver for an 82574l based NIC on Windows CE 5.0, using NDIS 5.1. Transmission setup works OK and the NIC transmits OK. I setup receive as the documentation dictates:
- Allocated a region of memory for legacy receive descriptor list using NdisMAllocateSharedMemory and setup a descriptor ring.
- Setup receive buffers of appropriate size and allocated and pointers to these buffers and stored these in each descriptor in the descriptor ring.
- Programed the descriptor base address with the address of the descriptor ring.
- Set the length register to the size of the descriptor ring.
However the when I process receive related interrupts the memory buffers pointed to by the memory allocations I got from NDIS point to regions filled with 0s. Using the diagnostic registers it shows that data was received and the Receive Data FIFO Packet Count register indicates how many packets were received and analyzing the RX FIFO PBM region seems good. So I must be doing something really bad when setting up my RX registers to not be able to handle RX packets. I will gladly provide my code to anybody who can help me.
Further checking on this, the WinCE5 is an old OS and is no longer supported by Microsoft* https://support.microsoft.com/en-us/lifecycle?p1=3100. We will not be fixing anything as this is already an OS that is EOS, what we can do is to try to find additional information which could be of help if you can provide me the driver name, version, date and time. Thanks.
While the final target would be WinCE 5 device I am doing the development on WinCE 6. I was provided with the source code for the E1x51CE6 (x = K|Q|R) driver from Intel but the sources I was provided with are not buildable. I was using these to reference my understanding of the hardware itself more than anything else, but for some reason as I posted in my original post I cannot get the allocated shared memory for the hardware descriptors to point to the right shared buffers allocated to the receive buffers. I'd really appreciate any help I can get.
I got the approved source code pull from Intel in Israel, The following is the contents of the pull.bat (file dated April 15 2010)
The driver name is as mentioned above E1Q51CE6 (as defined in the module definition file for WinCE) for the E1Q driver family (to be honest, I could not find out the the difference between E1Q51CE6, E1K51CE6 and E1R51CE6).
Further checking Win CE extended support ends on 10/14/2014 as per https://http://support.microsoft.com/en-us/lifecycle?p1=3100 support.microsoft.com/en-us/lifecycle?p1=3100. We have not received any further feedback, do you still want to pursue on this? Please feel free to update us. Thank you.
I am aware of it, but NIC drivers for Windows (all systems and versions) are really NDIS drivers. While there are minute differences, between Win CE and Win NT versions, the most obvious ones being a DLL in Win CE and and different interrupt initialization and some handling, most of it is quite similar. My main problem was that the sources in the source code pull I got, I was unable to build, and therefore could not compare to my code, so I could figure out what I was doing wrong. Basically I could send data with no problem but for some reason I could not setup the Rx Descriptor Base Address regs, RX descriptor length regs and RX descriptor list head offset regs correctly or else I would have obtained the received data. Interrupts worked OK TX works OK and all seems OK but for the RX buffers being empty even after setting them up. Checking the diagnostic regs the indication is that data is coming in. To be honest if I only could build the sources I would probably figure out what I am doing wrong.