Zero-Copy Gigabit Ethernet Driver for Windows NT
Project Summer 1999
Supervisors: Christian Kurmann, Prof. T. Stricker
Institute for Computer Systems, ETH Zürich
Shared Memory, Message Passing, Networking
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
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
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
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
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 <firstname.lastname@example.org>