18 Valid = 0x00000001, ///< Valid
19 Writable = 0x00000002, ///< Writable
20 User = 0x00000004, ///< User accessible
21 Write_through = 0x00000008, ///< Write through
22 Cacheable = 0x00000000, ///< Cache is enabled
23 Noncacheable = 0x00000010, ///< Caching is off
24 Referenced = 0x00000020, ///< Page was referenced
25 Dirty = 0x00000040, ///< Page was modified
26 Pse_bit = 0x00000080, ///< Indicates a super page
27 Cpu_global = 0x00000100, ///< pinned in the TLB
28 L4_global = 0x00000200, ///< pinned in the TLB
29 Pfn = 0xfffff000, ///< page frame number
32 Mword addr() const { return _raw & Pfn; }
38 static Unsigned32 _cpu_global;
41 class Pt_entry : public Pte_base
44 enum { Page_shift = Config::PAGE_SHIFT };
45 Mword leaf() const { return true; }
46 void set(Address p, bool intermed, bool present, unsigned long attrs = 0)
48 _raw = (p & Pfn) | (present ? 1 : 0)
49 | (intermed ? (Writable | User | Cacheable) : 0) | attrs;
53 class Pd_entry : public Pte_base
56 enum { Page_shift = Config::SUPERPAGE_SHIFT };
57 Mword leaf() const { return _raw & Pse_bit; }
58 void set(Address p, bool intermed, bool present, unsigned long attrs = 0)
60 _raw = (p & Pfn) | (present ? 1 : 0)
61 | (intermed ? (Writable | User | Cacheable) : Pse_bit) | attrs;
67 typedef Ptab::List< Ptab::Traits<Pd_entry, 22, 10, true, false>,
68 Ptab::Traits<Pt_entry, 12, 10, true> > Ptab_traits;
70 typedef Ptab::Shift<Ptab_traits, Virt_addr::Shift>::List Ptab_traits_vpn;
71 typedef Ptab::Page_addr_wrap<Page_number, Virt_addr::Shift> Ptab_va_vpn;