]> git.proxmox.com Git - mirror_edk2.git/commitdiff
UefiCpuPkg/CpuDxe: Remove unnecessary macros
authorNi, Ray <ray.ni@intel.com>
Thu, 1 Aug 2019 09:58:25 +0000 (17:58 +0800)
committerEric Dong <eric.dong@intel.com>
Fri, 9 Aug 2019 00:52:08 +0000 (08:52 +0800)
Today's code defines macros like CR0_PG, CR0_WP, CR4_PSE, CR4_PAE
when checking whether individual bits are set in CR0 or CR4 register.

The patch changes the code to use IA32_CR0 and IA32_CR4 structure
defined in MdePkg/Include/Library/BaseLib.h so that the module
local macros can be removed.

There is no functionality impact to this change.

Cc: Jiewen Yao <jiewen.yao@intel.com>
Signed-off-by: Ray Ni <ray.ni@intel.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>
Regression-tested-by: Laszlo Ersek <lersek@redhat.com>
Signed-off-by: Eric Dong <eric.dong@intel.com>
UefiCpuPkg/CpuDxe/CpuPageTable.c

index c369b44f128e70a3e49e94adf5b484782fecdfb9..16a2528b550f28adaf0dfd36ae6c0526bf72dfca 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Page table management support.\r
 \r
-  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>\r
   Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>\r
 \r
   SPDX-License-Identifier: BSD-2-Clause-Patent\r
 #include "CpuDxe.h"\r
 #include "CpuPageTable.h"\r
 \r
-///\r
-/// Paging registers\r
-///\r
-#define CR0_WP                      BIT16\r
-#define CR0_PG                      BIT31\r
-#define CR4_PSE                     BIT4\r
-#define CR4_PAE                     BIT5\r
-\r
 ///\r
 /// Page Table Entry\r
 ///\r
@@ -161,6 +153,8 @@ GetCurrentPagingContext (
   UINT32                          RegEax;\r
   CPUID_EXTENDED_CPU_SIG_EDX      RegEdx;\r
   MSR_IA32_EFER_REGISTER          MsrEfer;\r
+  IA32_CR4                        Cr4;\r
+  IA32_CR0                        Cr0;\r
 \r
   //\r
   // Don't retrieve current paging context from processor if in SMM mode.\r
@@ -172,21 +166,24 @@ GetCurrentPagingContext (
     } else {\r
       mPagingContext.MachineType = IMAGE_FILE_MACHINE_I386;\r
     }\r
-    if ((AsmReadCr0 () & CR0_PG) != 0) {\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
     } else {\r
       mPagingContext.ContextData.X64.PageTableBase = 0;\r
     }\r
-\r
-    if ((AsmReadCr4 () & CR4_PSE) != 0) {\r
+    if (Cr0.Bits.WP  != 0) {\r
+      mPagingContext.ContextData.Ia32.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
     }\r
-    if ((AsmReadCr4 () & CR4_PAE) != 0) {\r
+    if (Cr4.Bits.PAE != 0) {\r
       mPagingContext.ContextData.Ia32.Attributes |= PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PAE;\r
     }\r
-    if ((AsmReadCr0 () & CR0_WP) != 0) {\r
-      mPagingContext.ContextData.Ia32.Attributes |= PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_WP_ENABLE;\r
-    }\r
 \r
     AsmCpuid (CPUID_EXTENDED_FUNCTION, &RegEax, NULL, NULL, NULL);\r
     if (RegEax >= CPUID_EXTENDED_CPU_SIG) {\r
@@ -581,12 +578,14 @@ IsReadOnlyPageWriteProtected (
   VOID\r
   )\r
 {\r
+  IA32_CR0  Cr0;\r
   //\r
   // To avoid unforseen consequences, don't touch paging settings in SMM mode\r
   // in this driver.\r
   //\r
   if (!IsInSmm ()) {\r
-    return ((AsmReadCr0 () & CR0_WP) != 0);\r
+    Cr0.UintN = AsmReadCr0 ();\r
+    return (BOOLEAN) (Cr0.Bits.WP != 0);\r
   }\r
   return FALSE;\r
 }\r
@@ -599,12 +598,15 @@ DisableReadOnlyPageWriteProtect (
   VOID\r
   )\r
 {\r
+  IA32_CR0  Cr0;\r
   //\r
   // To avoid unforseen consequences, don't touch paging settings in SMM mode\r
   // in this driver.\r
   //\r
   if (!IsInSmm ()) {\r
-    AsmWriteCr0 (AsmReadCr0 () & ~CR0_WP);\r
+    Cr0.UintN = AsmReadCr0 ();\r
+    Cr0.Bits.WP = 0;\r
+    AsmWriteCr0 (Cr0.UintN);\r
   }\r
 }\r
 \r
@@ -616,12 +618,15 @@ EnableReadOnlyPageWriteProtect (
   VOID\r
   )\r
 {\r
+  IA32_CR0  Cr0;\r
   //\r
   // To avoid unforseen consequences, don't touch paging settings in SMM mode\r
   // in this driver.\r
   //\r
   if (!IsInSmm ()) {\r
-    AsmWriteCr0 (AsmReadCr0 () | CR0_WP);\r
+    Cr0.UintN = AsmReadCr0 ();\r
+    Cr0.Bits.WP = 1;\r
+    AsmWriteCr0 (Cr0.UintN);\r
   }\r
 }\r
 \r