I double-checked with John Baldwin on this and it looks like the FreeBSD kernel is still missing required functionality. For example,
pmap_change_attr() doesn't break down large pages (the direct mapping, etc.) and the
mmap() interface hasn't been updated to allow character drivers to specify memory types for mappings, etc.. For a detailed list of feature requests, please see:
http://marc.info/?l=freebsd-hackers&...7983106569&w=2; unfortunately, the status data appear to be mostly unchanged.
An exception is the per-open instance data feature request: the FreeBSD kernel provides some support for this via cloning devices; the NVIDIA FreeBSD graphics driver used this interface for a while, but bugs/limitations and differences between kernel versions made it necessary to revert to regular device nodes.