 |
Tuesday, February 24, 2004 |
Had successful tests with the 3 main cards I targeted with the driver: ADMtek 985, PNIC, and DEC 21143.
However, had some trouble when the driver loaded to run more than one
of these at a time. After some investigation I narrowed it down to a
pretty simple call in my _stopAdapter method:
if ( workLoop) workLoop->disableAllInterrupts();
This call was disabling the delivery of *all* interrupts to multiple
cards. This behavior confuses me since they all have different
IOPCIDevice providers and I
think they have different interrupt lines. Apparently I was incorrect
on that second point. Removing all calls to disable interrupts has
cured the problem.
I'm okay with this change. The IOFilterInterruptEventSource running in
the driver will process all interrupts and decide if a secondary
interrupt should be scheduled on the workloop. If a given interface is
disabled, the filter will be smart enough to throw away that event.
I think I'm done now. Time to put the final packages together, import
the sources into a new project at opendarwin.org, and call it a day.
I'm due a break!
9:10:03 PM
|
|
© Copyright 2004 Chuck Remes.
|
|
|