While I am fairly new to the Linux kernel, I have been developing in various kernels for a number of years. I am currently developing an API that is to be used by a network driver that resides in the Linux kernel. My API is to provide an abstraction layer in Linux to our hardware so that if changes are made underneath the hood the core network driver we are contracting out for, can remain the same. Not realizing that the network driver would be in the kernel my initial cut provided an interface to user mode. My requirements are to provide physical addresses to my device and some non-blocking routines for use by the network driver as well as the ability for the network driver to register call back functions in a worker queue and hard IRQ context. The first cut API provided function calls that were wrapped around ioctl calls to my device. Interrupts were handled by waiting on events. I am hoping someone can nudge me in the right direction for modifying the API I already have to be used by a kernel mode network driver so that I can leverage the work I have already done.