1 class PageTableHelperBase:
7 def translation_level(level=-1):
8 raise NotImplementedError()
11 def translation_shift_bits(level):
12 raise NotImplementedError()
15 def mapping_present(pte):
16 raise NotImplementedError()
20 raise NotImplementedError()
24 raise NotImplementedError()
27 def other_attributes(level, pte):
28 raise NotImplementedError()
31 def same_kind(pte1, pte2):
32 raise NotImplementedError()
35 def physical_pfn(pte):
36 raise NotImplementedError()
40 raise NotImplementedError()
44 raise NotImplementedError()
46 class PageTableHelper32(PageTableHelperBase):
48 def translation_level(level = -1):
56 def translation_shift_bits(level):
57 return [10, 0][level] + 12
60 def mapping_present(pte):
64 def huge_page(pte, po):
65 return bool(pte & (1 << 7)) and po
81 def other_attributes(level, pte):
91 if PageTableHelper32.translation_level(level) == 1 and pte & (1 << 8):
96 def same_kind(pte1, pte2):
97 attr_mask = 0x19f # P, R/W, U/S, PWT, PCD, PS, G
98 return (pte1 & attr_mask) == (pte2 & attr_mask)
101 def physical_pfn(pte):
112 class PageTableHelper64(PageTableHelperBase):