]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/ia32/32/paging-ia32-32.cpp
update
[l4.git] / kernel / fiasco / src / kern / ia32 / 32 / paging-ia32-32.cpp
1 INTERFACE[ia32,ux]:
2
3 #include <cassert>
4 #include "types.h"
5 #include "config.h"
6 #include "ptab_base.h"
7
8 class PF {};
9 class Page {};
10
11 class Pt_entry
12 {
13 public:
14   enum
15   {
16     Super_level   = 0,
17     Valid         = 0x00000001, ///< Valid
18     Writable      = 0x00000002, ///< Writable
19     User          = 0x00000004, ///< User accessible
20     Write_through = 0x00000008, ///< Write through
21     Cacheable     = 0x00000000, ///< Cache is enabled
22     Noncacheable  = 0x00000010, ///< Caching is off
23     Referenced    = 0x00000020, ///< Page was referenced
24     Dirty         = 0x00000040, ///< Page was modified
25     Pse_bit       = 0x00000080, ///< Indicates a super page
26     Cpu_global    = 0x00000100, ///< pinned in the TLB
27     L4_global     = 0x00000200, ///< pinned in the TLB
28     XD            = 0,
29     ATTRIBS_MASK  = 0x06,
30   };
31 };
32
33 class Pte_ptr
34 {
35 public:
36   Pte_ptr(void *pte, unsigned char level) : pte((Mword*)pte), level(level) {}
37   Pte_ptr() = default;
38
39   Mword *pte;
40   unsigned char level;
41 };
42
43
44
45 typedef Ptab::List< Ptab::Traits<Unsigned32, 22, 10, true, false>,
46                     Ptab::Traits<Unsigned32, 12, 10, true> > Ptab_traits;
47
48 typedef Ptab::Shift<Ptab_traits, Virt_addr::Shift>::List Ptab_traits_vpn;
49 typedef Ptab::Page_addr_wrap<Page_number, Virt_addr::Shift> Ptab_va_vpn;