MSR_IA32_EFER_REGISTER MsrEfer;\r
IA32_CR4 Cr4;\r
IA32_CR0 Cr0;\r
+ UINT32 *Attributes;\r
+ UINTN *PageTableBase;\r
\r
//\r
// Don't retrieve current paging context from processor if in SMM mode.\r
mPagingContext.MachineType = IMAGE_FILE_MACHINE_I386;\r
}\r
\r
+ GetPagingDetails (&mPagingContext.ContextData, &PageTableBase, &Attributes);\r
+\r
Cr0.UintN = AsmReadCr0 ();\r
Cr4.UintN = AsmReadCr4 ();\r
\r
if (Cr0.Bits.PG != 0) {\r
- mPagingContext.ContextData.X64.PageTableBase = (AsmReadCr3 () & PAGING_4K_ADDRESS_MASK_64);\r
+ *PageTableBase = (AsmReadCr3 () & PAGING_4K_ADDRESS_MASK_64);\r
} else {\r
- mPagingContext.ContextData.X64.PageTableBase = 0;\r
+ *PageTableBase = 0;\r
}\r
if (Cr0.Bits.WP != 0) {\r
- mPagingContext.ContextData.Ia32.Attributes |= PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_WP_ENABLE;\r
+ *Attributes |= PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_WP_ENABLE;\r
}\r
if (Cr4.Bits.PSE != 0) {\r
- mPagingContext.ContextData.Ia32.Attributes |= PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PSE;\r
+ *Attributes |= PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PSE;\r
}\r
if (Cr4.Bits.PAE != 0) {\r
- mPagingContext.ContextData.Ia32.Attributes |= PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PAE;\r
+ *Attributes |= PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PAE;\r
}\r
if (Cr4.Bits.LA57 != 0) {\r
- mPagingContext.ContextData.Ia32.Attributes |= PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_5_LEVEL;\r
+ *Attributes |= PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_5_LEVEL;\r
}\r
\r
AsmCpuid (CPUID_EXTENDED_FUNCTION, &RegEax, NULL, NULL, NULL);\r
MsrEfer.Uint64 = AsmReadMsr64(MSR_CORE_IA32_EFER);\r
if (MsrEfer.Bits.NXE != 0) {\r
// XD activated\r
- mPagingContext.ContextData.Ia32.Attributes |= PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_XD_ACTIVATED;\r
+ *Attributes |= PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_XD_ACTIVATED;\r
}\r
}\r
\r
if (RegEdx.Bits.Page1GB != 0) {\r
- mPagingContext.ContextData.Ia32.Attributes |= PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PAGE_1G_SUPPORT;\r
+ *Attributes |= PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PAGE_1G_SUPPORT;\r
}\r
}\r
}\r
{\r
UINT64 CurrentPageEntry;\r
UINT64 NewPageEntry;\r
+ UINT32 *PageAttributes;\r
\r
CurrentPageEntry = *PageEntry;\r
NewPageEntry = CurrentPageEntry;\r
break;\r
}\r
}\r
- if ((PagingContext->ContextData.Ia32.Attributes & PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_XD_ACTIVATED) != 0) {\r
+\r
+ GetPagingDetails (&PagingContext->ContextData, NULL, &PageAttributes);\r
+\r
+ if ((*PageAttributes & PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_XD_ACTIVATED) != 0) {\r
if ((Attributes & EFI_MEMORY_XP) != 0) {\r
switch (PageAction) {\r
case PageActionAssign:\r
)\r
{\r
PAGE_TABLE_LIB_PAGING_CONTEXT CurrentPagingContext;\r
+ UINT32 *Attributes;\r
+ UINTN *PageTableBase;\r
\r
GetCurrentPagingContext (&CurrentPagingContext);\r
\r
+ GetPagingDetails (&CurrentPagingContext.ContextData, &PageTableBase, &Attributes);\r
+\r
//\r
// Reserve memory of page tables for future uses, if paging is enabled.\r
//\r
- if (CurrentPagingContext.ContextData.X64.PageTableBase != 0 &&\r
- (CurrentPagingContext.ContextData.Ia32.Attributes &\r
- PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PAE) != 0) {\r
+ if ((*PageTableBase != 0) &&\r
+ (*Attributes & PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PAE) != 0) {\r
DisableReadOnlyPageWriteProtect ();\r
InitializePageTablePool (1);\r
EnableReadOnlyPageWriteProtect ();\r
ASSERT (mLastPFEntryPointer != NULL);\r
}\r
\r
- DEBUG ((DEBUG_INFO, "CurrentPagingContext:\n", CurrentPagingContext.MachineType));\r
+ DEBUG ((DEBUG_INFO, "CurrentPagingContext:\n"));\r
DEBUG ((DEBUG_INFO, " MachineType - 0x%x\n", CurrentPagingContext.MachineType));\r
- DEBUG ((DEBUG_INFO, " PageTableBase - 0x%x\n", CurrentPagingContext.ContextData.X64.PageTableBase));\r
- DEBUG ((DEBUG_INFO, " Attributes - 0x%x\n", CurrentPagingContext.ContextData.X64.Attributes));\r
+ DEBUG ((DEBUG_INFO, " PageTableBase - 0x%Lx\n", (UINT64)*PageTableBase));\r
+ DEBUG ((DEBUG_INFO, " Attributes - 0x%x\n", *Attributes));\r
\r
return ;\r
}\r