14#ifndef TDX_VIRTUAL_MEMORY_
15#define TDX_VIRTUAL_MEMORY_
24#define SYS_CODE64_SEL 0x38
38 UINT64 UserSupervisor : 1;
39 UINT64 WriteThrough : 1;
41 UINT64 CacheDisabled : 1;
45 UINT64 MustBeZero : 2;
47 UINT64 PageTableBaseAddress : 40;
48 UINT64 AvabilableHigh : 11;
62 UINT64 UserSupervisor : 1;
63 UINT64 WriteThrough : 1;
65 UINT64 CacheDisabled : 1;
74 UINT64 PageTableBaseAddress : 40;
75 UINT64 AvabilableHigh : 11;
90 UINT64 UserSupervisor : 1;
91 UINT64 WriteThrough : 1;
93 UINT64 CacheDisabled : 1;
101 UINT64 Available : 3;
103 UINT64 MustBeZero : 8;
104 UINT64 PageTableBaseAddress : 31;
105 UINT64 AvabilableHigh : 11;
119 UINT64 ReadWrite : 1;
120 UINT64 UserSupervisor : 1;
121 UINT64 WriteThrough : 1;
123 UINT64 CacheDisabled : 1;
131 UINT64 Available : 3;
133 UINT64 MustBeZero : 17;
134 UINT64 PageTableBaseAddress : 22;
135 UINT64 AvabilableHigh : 11;
144#define IA32_PG_P BIT0
145#define IA32_PG_RW BIT1
146#define IA32_PG_PS BIT7
148#define PAGING_PAE_INDEX_MASK 0x1FF
150#define PAGING_4K_ADDRESS_MASK_64 0x000FFFFFFFFFF000ull
151#define PAGING_2M_ADDRESS_MASK_64 0x000FFFFFFFE00000ull
152#define PAGING_1G_ADDRESS_MASK_64 0x000FFFFFC0000000ull
154#define PAGING_L1_ADDRESS_SHIFT 12
155#define PAGING_L2_ADDRESS_SHIFT 21
156#define PAGING_L3_ADDRESS_SHIFT 30
157#define PAGING_L4_ADDRESS_SHIFT 39
159#define PAGING_PML4E_NUMBER 4
161#define PAGETABLE_ENTRY_MASK ((1UL << 9) - 1)
162#define PML4_OFFSET(x) ( (x >> 39) & PAGETABLE_ENTRY_MASK)
163#define PDP_OFFSET(x) ( (x >> 30) & PAGETABLE_ENTRY_MASK)
164#define PDE_OFFSET(x) ( (x >> 21) & PAGETABLE_ENTRY_MASK)
165#define PTE_OFFSET(x) ( (x >> 12) & PAGETABLE_ENTRY_MASK)
166#define PAGING_1G_ADDRESS_MASK_64 0x000FFFFFC0000000ull
168#define PAGE_TABLE_POOL_ALIGNMENT BASE_2MB
169#define PAGE_TABLE_POOL_UNIT_SIZE SIZE_2MB
170#define PAGE_TABLE_POOL_UNIT_PAGES \
171 EFI_SIZE_TO_PAGES (PAGE_TABLE_POOL_UNIT_SIZE)
172#define PAGE_TABLE_POOL_ALIGN_MASK \
173 (~(EFI_PHYSICAL_ADDRESS)(PAGE_TABLE_POOL_ALIGNMENT - 1))
VOID EFIAPI FreePages(IN VOID *Buffer, IN UINTN Pages)