]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/ia32/64/paging-ia32-64.cpp
Some minor fixes.
[l4.git] / kernel / fiasco / src / kern / ia32 / 64 / paging-ia32-64.cpp
1 INTERFACE[amd64]:
2
3 #include <cassert>
4 #include "types.h"
5 #include "config.h"
6 #include "mem_layout.h"
7 #include "ptab_base.h"
8
9 class PF {};
10 class Page {};
11
12
13 class Pt_entry
14 {
15 public:
16   enum
17   {
18     Super_level   = 2,
19     Valid         = 0x00000001LL, ///< Valid
20     Writable      = 0x00000002LL, ///< Writable
21     User          = 0x00000004LL, ///< User accessible
22     Write_through = 0x00000008LL, ///< Write through
23     Cacheable     = 0x00000000LL, ///< Cache is enabled
24     Noncacheable  = 0x00000010LL, ///< Caching is off
25     Referenced    = 0x00000020LL, ///< Page was referenced
26     Dirty         = 0x00000040LL, ///< Page was modified
27     Pse_bit       = 0x00000080LL, ///< Indicates a super page
28     Cpu_global    = 0x00000100LL, ///< pinned in the TLB
29     L4_global     = 0x00000200LL, ///< pinned in the TLB
30     XD            = 0x8000000000000000ULL,
31     ATTRIBS_MASK  = 0x8000000000000006ULL
32   };
33 };
34
35 class Pte_ptr
36 {
37 public:
38   Pte_ptr(void *pte, unsigned char level) : pte((Mword*)pte), level(level) {}
39   Pte_ptr() = default;
40
41   typedef Mword Entry;
42   Entry *pte;
43   unsigned char level;
44 };
45
46 typedef Ptab::Tupel< Ptab::Traits<Unsigned64, 39, 9, false>,
47                      Ptab::Traits<Unsigned64, 30, 9, true>,
48                      Ptab::Traits<Unsigned64,  21, 9, true>,
49                      Ptab::Traits<Unsigned64,  12, 9, true> >::List Ptab_traits;
50
51 typedef Ptab::Shift<Ptab_traits, Virt_addr::Shift>::List Ptab_traits_vpn;
52 typedef Ptab::Page_addr_wrap<Page_number, Virt_addr::Shift> Ptab_va_vpn;