]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/sparc/kmem.cpp
update
[l4.git] / kernel / fiasco / src / kern / sparc / kmem.cpp
1 INTERFACE [sparc]:
2
3 #include "paging.h"
4
5 class Page_table;
6
7 class Kmem : public Mem_layout
8 {
9 public:
10   static Pdir *kdir();
11   static Pdir *dir();
12
13   static Mword *kernel_sp();
14   static void kernel_sp(Mword *);
15
16   static Mword is_kmem_page_fault( Mword pfa, Mword error );
17   static Mword is_io_bitmap_page_fault( Mword pfa );
18
19   static Address virt_to_phys(const void *addr);
20 private:
21   static Pdir *_kdir;
22   static Mword *_sp;
23 };
24
25 //---------------------------------------------------------------------------
26 IMPLEMENTATION [sparc]:
27
28 #include "paging.h"
29 #include "panic.h"
30
31 char kernel_page_directory[sizeof(Pdir)];
32 Pdir *Kmem::_kdir = (Pdir *)&kernel_page_directory;
33 Mword *Kmem::_sp = 0;
34
35 IMPLEMENT inline
36 Pdir *Kmem::kdir()
37 { return _kdir; }
38
39 IMPLEMENT inline
40 Pdir *Kmem::dir()
41 { return _kdir; }
42
43 IMPLEMENT inline
44 Mword *Kmem::kernel_sp()
45 { return _sp;}
46
47 IMPLEMENT inline
48 void Kmem::kernel_sp(Mword *sp)
49 { _sp = sp; }
50
51 IMPLEMENT inline NEEDS["paging.h"]
52 Address Kmem::virt_to_phys(const void *addr)
53 {
54   Address a = reinterpret_cast<Address>(addr);
55   return kdir()->virt_to_phys(a);
56 }
57
58 IMPLEMENT inline
59 Mword Kmem::is_kmem_page_fault(Mword pfa, Mword /*error*/)
60 {
61   return in_kernel(pfa);
62 }
63
64 IMPLEMENT inline
65 Mword Kmem::is_io_bitmap_page_fault( Mword /*pfa*/ )
66 {
67   return 0;
68 }