On 09/19/2011 04:55 PM, Gerd Hoffmann wrote:
If the register access is trivial then you don't need to call into the
driver at all ...
You can have a look at hw/intel-hda.c which actually implements
something like this, with some commonly needed features:
* The "offset" field already mentioned by avi is there, so trivial
reads/writes can be handled by the core.
* A "wmask" field to specify which bits are guest writable.
* A "wclear" field to specify which bits have write-one-to-clear
semantics.
* A "reset" field which specified the value this field has after
device reset. Also serves as value for read-only registers.
* read/write handlers of course. The write handler is called after
the core applied sanity checks and calculated the new register
value (using wmask+wclear).
* A "name" field (for debug logging).
It's pretty nice, alot more readable that a big switch, forces you to
think which bits the guest can set (not specifying a wmask gives you a
read-only register ;).
Also no bloat. With this moving to memory core the all the handlers
will gain a line with a container_of(), but that isn't too bad too IMHO.
It's also more secure. Move as much as possible into the core, and
review (and fuzz) that like hell.
--
error compiling committee.c: too many arguments to function