You are better off defining a series of macros that do proper bus_space_readN/bus_space_writeN for each of the fields in the register set. This will ensure that your driver works unaltered on other architectures.
Directly accessing memory mapped devices is a bad idea. While it works on i386, there are some platforms that have special alignment constraints that the underlying hardware doesn't always follow. Also, the temptation to bcopy the structure does not arise (which can break, even on i386 due to how bcopy is optimized). I often have a simplified macro interface that lets me get/set any register in the device that I am using. It also makes clear that you are going to the hardware for the items, which a magic register does not. I've had to mop up a couple of drivers in the tree that did direct memory accesses that failed on some machines for mysterious reasons. Warner To Unsubscribe: send mail to [EMAIL PROTECTED] with "unsubscribe freebsd-hackers" in the body of the message