Hey Martin, looks great. I also had in mind that the generic part from Mmio should be separated as Mmio is already a specialisation of IO access.
So, how do we proceed. Do you want to do the refactoring yourself and I add the I2c implementation afterwards? Cheers Johannes On Fri, 9 Dec 2016 09:42:04 +0100 Martin Stein <martin.st...@genode-labs.com> wrote: > Hey Johannes, > > I could not get it out of my mind. What do you think of the following > solution scheme: > > ~~~util/io_space.h~~~ > > template <typename IO> > class Io_space > { > .. > public: > > Io_space(IO &io) .. > > template .. struct Register ..; > template .. struct Register_array ..; > > template .. read(..) { .. _io._read(..); .. } > template .. write(..) { .. _io._write(..); .. } > .. > }; > > ~~~util/mmio.h~~~ > > class Mmio : public Io_space<Mmio> > { > friend class Io_space<Mmio>; > > private: > > template .. _read(..) { .. } > template .. _write(..) { .. } > > public: > > Mmio_b(addr_t base) : Io_space<Mmio_accessor>(*this) .. > }; > > ~~~i2c_io.h~~~ > > class I2c_io : public Io_space<I2c_io> { .. }; > > ~~~~~~ > > This would keep the back-end hidden and enable diversification. > > Cheers, > Martin > > Am 08.12.2016 um 15:37 schrieb Martin Stein: > > Hi Johannes, > > > > We actually had an internal discussion about such an approach. As far as > > I remember, it was in the context of the Zynq drivers. I absolutely like > > the idea of using the Mmio framework with different back-ends. I think > > you would have to exchange merely the two raw-access methods of the > > framework: > > > > ! template <typename _ACCESS_T> > > ! void Mmio::_write(off_t const, _ACCESS_T const)' > > ! > > ! template <typename _ACCESS_T> > > ! _ACCESS_T Mmio::_read(off_t const) const > > > > The read<>() and write<>() methods you mention should not contain any > > code that depends on the way of accessing registers but only the bit and > > offset logic that could be reused. > > > > I'm curious about the outcome of your idea and help willingly if you > > have further questions. > > > > Cheers, > > Martin > > > > Am 07.12.2016 um 18:26 schrieb Johannes Schlatow: > >> Hi, > >> > >> I really like Genode's Register API as it makes accessing memory mapped > >> hardware registers quite clean and simple. > >> > >> However, I recently encountered the need to access a rather complex I2C > >> slave device. The I2C controller itself is accessible via MMIO. Yet, the > >> slave device itself has a notion of registers. Basically, you first send > >> the register address to the I2C slave and, in a second transaction, you > >> can read/write the register's value. > >> > >> Being used to the clean appearance of MMIO in Genode, I was wondering > >> whether the access to I2C slave registers could be wrapped in a similar > >> way. My intuition is that it might simply suffice to inherit from the Mmio > >> class and modify the write<>() and read<>() functions but haven't checked > >> the code in detail. Any suggestions/ideas? > >> > >> Cheers > >> Johannes > >> > >> ------------------------------------------------------------------------------ > >> Developer Access Program for Intel Xeon Phi Processors > >> Access to Intel Xeon Phi processor-based developer platforms. > >> With one year of Intel Parallel Studio XE. > >> Training and support from Colfax. > >> Order your platform today.http://sdm.link/xeonphi > >> _______________________________________________ > >> genode-main mailing list > >> genode-main@lists.sourceforge.net > >> https://lists.sourceforge.net/lists/listinfo/genode-main > >> > > > > ------------------------------------------------------------------------------ > > Developer Access Program for Intel Xeon Phi Processors > > Access to Intel Xeon Phi processor-based developer platforms. > > With one year of Intel Parallel Studio XE. > > Training and support from Colfax. > > Order your platform today.http://sdm.link/xeonphi > > _______________________________________________ > > genode-main mailing list > > genode-main@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/genode-main > > > > > ------------------------------------------------------------------------------ > Developer Access Program for Intel Xeon Phi Processors > Access to Intel Xeon Phi processor-based developer platforms. > With one year of Intel Parallel Studio XE. > Training and support from Colfax. > Order your platform today.http://sdm.link/xeonphi > _______________________________________________ > genode-main mailing list > genode-main@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/genode-main -- Johannes Schlatow, M.Sc. IDA, Institute of Computer and Network Engineering Technische Universität Braunschweig Hans-Sommer-Str. 66 38106 Braunschweig - Germany Phone +49 531 391 - 9668 www.ida.ing.tu-bs.de schla...@ida.ing.tu-bs.de ------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today.http://sdm.link/xeonphi _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main