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()
42 class PageTableHelper32(PageTableHelperBase):
44 def translation_level(level = -1):
48 def translation_shift_bits(level):
49 return [9, 0][level] + 12
52 def mapping_present(pte):
57 return bool(pte & (1 << 7))
73 def other_attributes(level, pte):
83 if PageTableHelper32.translation_level(level) == 1 and pte & (1 << 8):
88 def same_kind(pte1, pte2):
89 attr_mask = 0x19f # P, R/W, U/S, PWT, PCD, PS, G
90 return (pte1 & attr_mask) == (pte2 & attr_mask)
93 def physical_pfn(pte):
100 class PageTableHelper64(PageTableHelperBase):