]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/drivers/mmio_register_block.h
update
[l4.git] / kernel / fiasco / src / drivers / mmio_register_block.h
1 // vi:ft=cpp
2
3 #pragma once
4
5 #include "types.h"
6
7 class Mmio_register_block
8 {
9 public:
10   Mmio_register_block() {}
11   explicit Mmio_register_block(Address base) : _base(base) {}
12
13   template< typename T >
14   void write(T t, Address reg) const
15   { *reinterpret_cast<T volatile *>(_base + reg) = t; }
16
17   template< typename T >
18   T read(Address reg) const
19   { return *reinterpret_cast<T volatile const *>(_base + reg); }
20
21   template< typename T >
22   void modify(T enable, T disable, Address reg) const
23   {
24     Mword tmp = read<T>(reg);
25     tmp &= ~disable;
26     tmp |= enable;
27     write<T>(tmp, reg);
28   }
29
30   Address get_mmio_base() const { return _base; }
31   void set_mmio_base(Address base) { _base = base; }
32
33 private:
34   Address _base;
35 };