Hello Genodians
What's the best way to handle multiple sets of identical registers on a hardware device?
In my current use case the device offers multiple DMA engines each of which has a complex set of registers to set up. Each register is located at base device address + base engine address + register offset so uniform handling should be easy.
I handle the device itself and the shared registers using Platform::Device::Mmio.
For the registers associated with each DMA engine I have tried:
a) A template class providing a base offset as the template parameter. This is unsatisfactory however, as there is no common base class providing access to the registers for the software to be agnostic to which engine it handles.
b) A separate class derived from Genode::Mmio. This looks promising, but the Platform::Device::Mmio unfortunatly offers no public accessor to the device base address so I cannot provide the base device address + base engine address to my engine mmio class.
Any suggestions?
Kind regards Stefan