]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/drivers/mem.cpp
Inital import
[l4.git] / kernel / fiasco / src / drivers / mem.cpp
1 INTERFACE:
2
3 class Mem
4 {
5 public:
6   /**
7    * Memory barriers.
8    */
9   static void barrier() { __asm__ __volatile__ ("" : : : "memory"); }
10
11   static void mb();
12   static void rmb();
13   static void wmb();
14
15   static void mp_mb();
16   static void mp_rmb();
17   static void mp_wmb();
18
19
20   /**
21    * Memory operations.
22    */
23   static void memcpy_mwords(void *dst, void const *src, unsigned long nr_of_mwords);
24   static void memcpy_bytes (void *dst, void const *src, unsigned long nr_of_bytes);
25   static void memset_mwords(void *dst, const unsigned long val, unsigned long nr_of_mwords);
26 };
27
28 //---------------------------------------------------------------------------
29 IMPLEMENTATION[!mp]:
30
31 IMPLEMENT inline static void Mem::mb() { barrier(); }
32 IMPLEMENT inline static void Mem::rmb() { barrier(); }
33 IMPLEMENT inline static void Mem::wmb() { barrier(); }
34
35 IMPLEMENT inline static void Mem::mp_mb() { barrier(); }
36 IMPLEMENT inline static void Mem::mp_rmb() { barrier(); }
37 IMPLEMENT inline static void Mem::mp_wmb() { barrier(); }