Zero-Copy Gigabit Ethernet Driver for Windows NT

Thomas Tschudin

Project Summer 1999
Supervisors: Christian Kurmann, Prof. T. Stricker
Institute for Computer Systems, ETH Zürich


Shared Memory, Message Passing, Networking

System Software

For the parallel computing there will be needed a suitable highspeed connecting structure for a high-end-pc-network under Windows NT. In addition to the message passing model of the parallel computing, which got accepted as an efficient an well understood paradigm for the parallel programming, there is also distributed shared memory, which also is a starting point for the solution.

Based on a masters thesis and a linux reference driver, there should be implemented a zero copy driver for packet enginges G-NIC II gigabit ethernet adapter under Windows NT. There is now the possibility to use the existing zero copy communication layer that works for myrinet and supports as DSM as also MP.

-    Implementation of a simple device driver for the PacketEngines G-NIC II gigabit ethernet adapter.
-    Implementation of a simple flow control mechanism.(If there is time left to do)


The first two weeks I studied the book "The Windows NT Device Driver Book" from Art Baker to get a feeling for my following work of implementing an NT device driver. I got a first overview of the several kernel objects of Windows NT. I also got first impressions of the basic structure of a driver.
After a few weeks I felt ready to implement the first lines of code for my solution. After a successful installation of Microsofts Visual Studio 6.0 and of the MSDN Library I tried to compile a few example drivers of the book mentioned above. After a few trials, I realized that I would have to use another tool for further programming: Microsofts Driver Development Kit DDK. Another important device I needed was the Software Development Kit SDK. After many other innumerable trials I was able to generate the driver file.
In a next step I tried to install and start an example driver within the NT environment. A good possibility for this project was a parallel port driver also from the Windows NT Device Driver book. I went on with making efforts and then installed the polling version. Finally, I then got a correct output from the printer. The "HowTo.txt" file from the diskette (included in the book) was a big help for the installation of the example driver.
After having completed the first part of my job, I then could start implementing  my own code. As I had chosen the single computer solution, (there is also a two computer solution to develop a driver, one computer controls the other via the serial port) I therefore had another possibility of debugging my code. Here was the possibility to use the event log mechanism from Windows NT. In the book mentioned above, there was a very good introduction with text and code examples in chapter 13.
The first code fragment I implemented was the "DriverEntry" routine. The main goal in the DriverEntry routine is to contact the real network interface card and to initialize it. As there was no example in the NT device driver book for a PCI card, I found an example driver for another network card developed by the same departement (the driver was for a PCI switcherland card).
At the end of the semester, I could only communicate with the configuration area of the PCI card but not with the memory area. And this would be the most important thing to initialize and start the network card. So I wrote down all my experiences in detail to help my successor with further development of this work.

[ CS-Department | Up ]
ETH Zürich: Department of Computer Science

Comments to Christian Kurmann <>
Okt 99