Basically mapping the device registers into user space and doing exactly what the kernel would do, but without the syscall overhead.
Some researchers made a big splash at OSDI by doing this securely:
http://people.inf.ethz.ch/troscoe/pubs/peter-arrakis-osdi14....