]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/Library/BaseMemEncryptSevLib/X64/VirtualMemory.h
OvmfPkg/BaseMemEncryptSevLib: Enable protection for newly added page table
[mirror_edk2.git] / OvmfPkg / Library / BaseMemEncryptSevLib / X64 / VirtualMemory.h
index 70cd2187a32662daa3a0413aef85bd08e963f062..e7b5634b45c19abf3616eee7e6d2c5d67fdf3f23 100644 (file)
@@ -128,6 +128,20 @@ typedef union {
 \r
 #define IA32_PG_P                   BIT0\r
 #define IA32_PG_RW                  BIT1\r
+#define IA32_PG_PS                  BIT7\r
+\r
+#define PAGING_PAE_INDEX_MASK       0x1FF\r
+\r
+#define PAGING_4K_ADDRESS_MASK_64   0x000FFFFFFFFFF000ull\r
+#define PAGING_2M_ADDRESS_MASK_64   0x000FFFFFFFE00000ull\r
+#define PAGING_1G_ADDRESS_MASK_64   0x000FFFFFC0000000ull\r
+\r
+#define PAGING_L1_ADDRESS_SHIFT     12\r
+#define PAGING_L2_ADDRESS_SHIFT     21\r
+#define PAGING_L3_ADDRESS_SHIFT     30\r
+#define PAGING_L4_ADDRESS_SHIFT     39\r
+\r
+#define PAGING_PML4E_NUMBER         4\r
 \r
 #define PAGETABLE_ENTRY_MASK        ((1UL << 9) - 1)\r
 #define PML4_OFFSET(x)              ( (x >> 39) & PAGETABLE_ENTRY_MASK)\r
@@ -136,6 +150,20 @@ typedef union {
 #define PTE_OFFSET(x)               ( (x >> 12) & PAGETABLE_ENTRY_MASK)\r
 #define PAGING_1G_ADDRESS_MASK_64   0x000FFFFFC0000000ull\r
 \r
+#define PAGE_TABLE_POOL_ALIGNMENT   BASE_2MB\r
+#define PAGE_TABLE_POOL_UNIT_SIZE   SIZE_2MB\r
+#define PAGE_TABLE_POOL_UNIT_PAGES  EFI_SIZE_TO_PAGES (PAGE_TABLE_POOL_UNIT_SIZE)\r
+#define PAGE_TABLE_POOL_ALIGN_MASK  \\r
+  (~(EFI_PHYSICAL_ADDRESS)(PAGE_TABLE_POOL_ALIGNMENT - 1))\r
+\r
+typedef struct {\r
+  VOID            *NextPool;\r
+  UINTN           Offset;\r
+  UINTN           FreePages;\r
+} PAGE_TABLE_POOL;\r
+\r
+\r
+\r
 /**\r
   This function clears memory encryption bit for the memory region specified by PhysicalAddress\r
   and length from the current page table context.\r