you don't want to follow the EFI path of a separate API for each device type. That's pre-unix thinking. It's also a path we're on, because coreboot was never intended to have drivers, and now we're getting them, and we have not really thought it out.
You do want to create a reasonable abstraction layer. I'd suggest looking at one of the embedded OSes that don't have user mode (Inferno being my favorite) to see how they did it.
ron