]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/Library/MtrrLib/MtrrLib.c
UefiCpuPkg: Apply uncrustify changes
[mirror_edk2.git] / UefiCpuPkg / Library / MtrrLib / MtrrLib.c
index ddf90e2a8c0fea3e035a642958549f5020d16889..e5c862c83d61cb76bcb485d7008051fc55c7b82f 100644 (file)
@@ -1,24 +1,18 @@
 /** @file\r
   MTRR setting library\r
 \r
-  @par Note: \r
+  @par Note:\r
     Most of services in this library instance are suggested to be invoked by BSP only,\r
     except for MtrrSetAllMtrrs() which is used to sync BSP's MTRR setting to APs.\r
 \r
-  Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>\r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  Copyright (c) 2008 - 2020, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
 #include <Uefi.h>\r
-#include <Register/Cpuid.h>\r
-#include <Register/Msr.h>\r
+#include <Register/Intel/Cpuid.h>\r
+#include <Register/Intel/Msr.h>\r
 \r
 #include <Library/MtrrLib.h>\r
 #include <Library/BaseLib.h>\r
 #include <Library/BaseMemoryLib.h>\r
 #include <Library/DebugLib.h>\r
 \r
-#define OR_SEED      0x0101010101010101ull\r
-#define CLEAR_SEED   0xFFFFFFFFFFFFFFFFull\r
-#define MAX_WEIGHT   MAX_UINT8\r
-#define SCRATCH_BUFFER_SIZE           (4 * SIZE_4KB)\r
-#define MTRR_LIB_ASSERT_ALIGNED(B, L) ASSERT ((B & ~(L - 1)) == B);\r
+#define OR_SEED              0x0101010101010101ull\r
+#define CLEAR_SEED           0xFFFFFFFFFFFFFFFFull\r
+#define MAX_WEIGHT           MAX_UINT8\r
+#define SCRATCH_BUFFER_SIZE  (4 * SIZE_4KB)\r
+#define MTRR_LIB_ASSERT_ALIGNED(B, L)  ASSERT ((B & ~(L - 1)) == B);\r
 \r
-#define M(x,y) ((x) * VectorCount + (y))\r
-#define O(x,y) ((y) * VectorCount + (x))\r
+#define M(x, y)  ((x) * VertexCount + (y))\r
+#define O(x, y)  ((y) * VertexCount + (x))\r
 \r
 //\r
 // Context to save and restore when MTRRs are programmed\r
 //\r
 typedef struct {\r
-  UINTN    Cr4;\r
-  BOOLEAN  InterruptState;\r
+  UINTN      Cr4;\r
+  BOOLEAN    InterruptState;\r
 } MTRR_CONTEXT;\r
 \r
 typedef struct {\r
-  UINT64                 Address;\r
-  UINT64                 Alignment;\r
-  UINT64                 Length;\r
-  UINT8                  Type : 7;\r
+  UINT64                    Address;\r
+  UINT64                    Alignment;\r
+  UINT64                    Length;\r
+  MTRR_MEMORY_CACHE_TYPE    Type    : 7;\r
 \r
   //\r
   // Temprary use for calculating the best MTRR settings.\r
   //\r
-  BOOLEAN                Visited : 1;\r
-  UINT8                  Weight;\r
-  UINT16                 Previous;\r
+  BOOLEAN                   Visited : 1;\r
+  UINT8                     Weight;\r
+  UINT16                    Previous;\r
 } MTRR_LIB_ADDRESS;\r
 \r
 //\r
@@ -121,7 +115,7 @@ CONST FIXED_MTRR  mMtrrLibFixedMtrrTable[] = {
 //\r
 // Lookup table used to print MTRRs\r
 //\r
-GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *mMtrrMemoryCacheTypeShortName[] = {\r
+GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8  *mMtrrMemoryCacheTypeShortName[] = {\r
   "UC",  // CacheUncacheable\r
   "WC",  // CacheWriteCombining\r
   "R*",  // Invalid\r
@@ -132,7 +126,6 @@ GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *mMtrrMemoryCacheTypeShortName[] = {
   "R*"   // Invalid\r
 };\r
 \r
-\r
 /**\r
   Worker function prints all MTRRs for debugging.\r
 \r
@@ -144,7 +137,7 @@ GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *mMtrrMemoryCacheTypeShortName[] = {
 **/\r
 VOID\r
 MtrrDebugPrintAllMtrrsWorker (\r
-  IN MTRR_SETTINGS    *MtrrSetting\r
+  IN MTRR_SETTINGS  *MtrrSetting\r
   );\r
 \r
 /**\r
@@ -158,10 +151,10 @@ GetVariableMtrrCountWorker (
   VOID\r
   )\r
 {\r
-  MSR_IA32_MTRRCAP_REGISTER MtrrCap;\r
+  MSR_IA32_MTRRCAP_REGISTER  MtrrCap;\r
 \r
   MtrrCap.Uint64 = AsmReadMsr64 (MSR_IA32_MTRRCAP);\r
-  ASSERT (MtrrCap.Bits.VCNT <= ARRAY_SIZE (((MTRR_VARIABLE_SETTINGS *) 0)->Mtrr));\r
+  ASSERT (MtrrCap.Bits.VCNT <= ARRAY_SIZE (((MTRR_VARIABLE_SETTINGS *)0)->Mtrr));\r
   return MtrrCap.Bits.VCNT;\r
 }\r
 \r
@@ -180,6 +173,7 @@ GetVariableMtrrCount (
   if (!IsMtrrSupported ()) {\r
     return 0;\r
   }\r
+\r
   return GetVariableMtrrCountWorker ();\r
 }\r
 \r
@@ -197,7 +191,7 @@ GetFirmwareVariableMtrrCountWorker (
   UINT32  VariableMtrrCount;\r
   UINT32  ReservedMtrrNumber;\r
 \r
-  VariableMtrrCount = GetVariableMtrrCountWorker ();\r
+  VariableMtrrCount  = GetVariableMtrrCountWorker ();\r
   ReservedMtrrNumber = PcdGet32 (PcdCpuNumberOfReservedVariableMtrrs);\r
   if (VariableMtrrCount < ReservedMtrrNumber) {\r
     return 0;\r
@@ -221,6 +215,7 @@ GetFirmwareVariableMtrrCount (
   if (!IsMtrrSupported ()) {\r
     return 0;\r
   }\r
+\r
   return GetFirmwareVariableMtrrCountWorker ();\r
 }\r
 \r
@@ -238,10 +233,10 @@ GetFirmwareVariableMtrrCount (
 **/\r
 MTRR_MEMORY_CACHE_TYPE\r
 MtrrGetDefaultMemoryTypeWorker (\r
-  IN MTRR_SETTINGS      *MtrrSetting\r
+  IN MTRR_SETTINGS  *MtrrSetting\r
   )\r
 {\r
-  MSR_IA32_MTRR_DEF_TYPE_REGISTER DefType;\r
+  MSR_IA32_MTRR_DEF_TYPE_REGISTER  DefType;\r
 \r
   if (MtrrSetting == NULL) {\r
     DefType.Uint64 = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);\r
@@ -249,10 +244,9 @@ MtrrGetDefaultMemoryTypeWorker (
     DefType.Uint64 = MtrrSetting->MtrrDefType;\r
   }\r
 \r
-  return (MTRR_MEMORY_CACHE_TYPE) DefType.Bits.Type;\r
+  return (MTRR_MEMORY_CACHE_TYPE)DefType.Bits.Type;\r
 }\r
 \r
-\r
 /**\r
   Returns the default MTRR cache type for the system.\r
 \r
@@ -268,6 +262,7 @@ MtrrGetDefaultMemoryType (
   if (!IsMtrrSupported ()) {\r
     return CacheUncacheable;\r
   }\r
+\r
   return MtrrGetDefaultMemoryTypeWorker (NULL);\r
 }\r
 \r
@@ -286,10 +281,11 @@ MtrrLibPreMtrrChange (
   )\r
 {\r
   MSR_IA32_MTRR_DEF_TYPE_REGISTER  DefType;\r
+\r
   //\r
   // Disable interrupts and save current interrupt state\r
   //\r
-  MtrrContext->InterruptState = SaveAndDisableInterrupts();\r
+  MtrrContext->InterruptState = SaveAndDisableInterrupts ();\r
 \r
   //\r
   // Enter no fill cache mode, CD=1(Bit30), NW=0 (Bit29)\r
@@ -365,11 +361,12 @@ MtrrLibPostMtrrChange (
   )\r
 {\r
   MSR_IA32_MTRR_DEF_TYPE_REGISTER  DefType;\r
+\r
   //\r
   // Enable Cache MTRR\r
   //\r
-  DefType.Uint64 = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);\r
-  DefType.Bits.E = 1;\r
+  DefType.Uint64  = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);\r
+  DefType.Bits.E  = 1;\r
   DefType.Bits.FE = 1;\r
   AsmWriteMsr64 (MSR_IA32_MTRR_DEF_TYPE, DefType.Uint64);\r
 \r
@@ -384,22 +381,21 @@ MtrrLibPostMtrrChange (
   @retval The pointer of FixedSettings\r
 \r
 **/\r
-MTRR_FIXED_SETTINGS*\r
+MTRR_FIXED_SETTINGS *\r
 MtrrGetFixedMtrrWorker (\r
-  OUT MTRR_FIXED_SETTINGS         *FixedSettings\r
+  OUT MTRR_FIXED_SETTINGS  *FixedSettings\r
   )\r
 {\r
   UINT32  Index;\r
 \r
   for (Index = 0; Index < MTRR_NUMBER_OF_FIXED_MTRR; Index++) {\r
-      FixedSettings->Mtrr[Index] =\r
-        AsmReadMsr64 (mMtrrLibFixedMtrrTable[Index].Msr);\r
+    FixedSettings->Mtrr[Index] =\r
+      AsmReadMsr64 (mMtrrLibFixedMtrrTable[Index].Msr);\r
   }\r
 \r
   return FixedSettings;\r
 }\r
 \r
-\r
 /**\r
   This function gets the content in fixed MTRRs\r
 \r
@@ -408,10 +404,10 @@ MtrrGetFixedMtrrWorker (
   @retval The pointer of FixedSettings\r
 \r
 **/\r
-MTRR_FIXED_SETTINGS*\r
+MTRR_FIXED_SETTINGS *\r
 EFIAPI\r
 MtrrGetFixedMtrr (\r
-  OUT MTRR_FIXED_SETTINGS         *FixedSettings\r
+  OUT MTRR_FIXED_SETTINGS  *FixedSettings\r
   )\r
 {\r
   if (!IsMtrrSupported ()) {\r
@@ -421,7 +417,6 @@ MtrrGetFixedMtrr (
   return MtrrGetFixedMtrrWorker (FixedSettings);\r
 }\r
 \r
-\r
 /**\r
   Worker function will get the raw value in variable MTRRs\r
 \r
@@ -436,7 +431,7 @@ MtrrGetFixedMtrr (
   @return The VariableSettings input pointer\r
 \r
 **/\r
-MTRR_VARIABLE_SETTINGS*\r
+MTRR_VARIABLE_SETTINGS *\r
 MtrrGetVariableMtrrWorker (\r
   IN  MTRR_SETTINGS           *MtrrSetting,\r
   IN  UINT32                  VariableMtrrCount,\r
@@ -449,45 +444,17 @@ MtrrGetVariableMtrrWorker (
 \r
   for (Index = 0; Index < VariableMtrrCount; Index++) {\r
     if (MtrrSetting == NULL) {\r
-      VariableSettings->Mtrr[Index].Mask = AsmReadMsr64 (MSR_IA32_MTRR_PHYSMASK0 + (Index << 1));\r
-      //\r
-      // Skip to read the Base MSR when the Mask.V is not set.\r
-      //\r
-      if (((MSR_IA32_MTRR_PHYSMASK_REGISTER *)&VariableSettings->Mtrr[Index].Mask)->Bits.V != 0) {\r
-        VariableSettings->Mtrr[Index].Base = AsmReadMsr64 (MSR_IA32_MTRR_PHYSBASE0 + (Index << 1));\r
-      }\r
+      VariableSettings->Mtrr[Index].Base =\r
+        AsmReadMsr64 (MSR_IA32_MTRR_PHYSBASE0 + (Index << 1));\r
+      VariableSettings->Mtrr[Index].Mask =\r
+        AsmReadMsr64 (MSR_IA32_MTRR_PHYSMASK0 + (Index << 1));\r
     } else {\r
       VariableSettings->Mtrr[Index].Base = MtrrSetting->Variables.Mtrr[Index].Base;\r
       VariableSettings->Mtrr[Index].Mask = MtrrSetting->Variables.Mtrr[Index].Mask;\r
     }\r
   }\r
 \r
-  return  VariableSettings;\r
-}\r
-\r
-/**\r
-  This function will get the raw value in variable MTRRs\r
-\r
-  @param[out]  VariableSettings   A buffer to hold variable MTRRs content.\r
-\r
-  @return The VariableSettings input pointer\r
-\r
-**/\r
-MTRR_VARIABLE_SETTINGS*\r
-EFIAPI\r
-MtrrGetVariableMtrr (\r
-  OUT MTRR_VARIABLE_SETTINGS         *VariableSettings\r
-  )\r
-{\r
-  if (!IsMtrrSupported ()) {\r
-    return VariableSettings;\r
-  }\r
-\r
-  return MtrrGetVariableMtrrWorker (\r
-           NULL,\r
-           GetVariableMtrrCountWorker (),\r
-           VariableSettings\r
-           );\r
+  return VariableSettings;\r
 }\r
 \r
 /**\r
@@ -527,12 +494,13 @@ MtrrLibProgramFixedMtrr (
   for (MsrIndex = *LastMsrIndex + 1; MsrIndex < ARRAY_SIZE (mMtrrLibFixedMtrrTable); MsrIndex++) {\r
     if ((*Base >= mMtrrLibFixedMtrrTable[MsrIndex].BaseAddress) &&\r
         (*Base <\r
-            (\r
-              mMtrrLibFixedMtrrTable[MsrIndex].BaseAddress +\r
-              (8 * mMtrrLibFixedMtrrTable[MsrIndex].Length)\r
-            )\r
-          )\r
-        ) {\r
+         (\r
+          mMtrrLibFixedMtrrTable[MsrIndex].BaseAddress +\r
+          (8 * mMtrrLibFixedMtrrTable[MsrIndex].Length)\r
+         )\r
+        )\r
+        )\r
+    {\r
       break;\r
     }\r
   }\r
@@ -548,6 +516,7 @@ MtrrLibProgramFixedMtrr (
     //\r
     return RETURN_UNSUPPORTED;\r
   }\r
+\r
   LeftByteShift = ((UINT32)*Base - mMtrrLibFixedMtrrTable[MsrIndex].BaseAddress) / mMtrrLibFixedMtrrTable[MsrIndex].Length;\r
   ASSERT (LeftByteShift < 8);\r
 \r
@@ -564,6 +533,7 @@ MtrrLibProgramFixedMtrr (
       //\r
       return RETURN_UNSUPPORTED;\r
     }\r
+\r
     RightByteShift = 8 - LeftByteShift - (UINT32)(*Length) / mMtrrLibFixedMtrrTable[MsrIndex].Length;\r
     //\r
     // Update SubLength by actual length\r
@@ -572,14 +542,14 @@ MtrrLibProgramFixedMtrr (
   }\r
 \r
   *ClearMask = CLEAR_SEED;\r
-  *OrMask    = MultU64x32 (OR_SEED, (UINT32) Type);\r
+  *OrMask    = MultU64x32 (OR_SEED, (UINT32)Type);\r
 \r
   if (LeftByteShift != 0) {\r
     //\r
     // Clear the low bits by LeftByteShift\r
     //\r
     *ClearMask &= LShiftU64 (*ClearMask, LeftByteShift * 8);\r
-    *OrMask    &= LShiftU64 (*OrMask,    LeftByteShift * 8);\r
+    *OrMask    &= LShiftU64 (*OrMask, LeftByteShift * 8);\r
   }\r
 \r
   if (RightByteShift != 0) {\r
@@ -587,18 +557,17 @@ MtrrLibProgramFixedMtrr (
     // Clear the high bits by RightByteShift\r
     //\r
     *ClearMask &= RShiftU64 (*ClearMask, RightByteShift * 8);\r
-    *OrMask    &= RShiftU64 (*OrMask,    RightByteShift * 8);\r
+    *OrMask    &= RShiftU64 (*OrMask, RightByteShift * 8);\r
   }\r
 \r
   *Length -= SubLength;\r
   *Base   += SubLength;\r
 \r
-  *LastMsrIndex    = MsrIndex;\r
+  *LastMsrIndex = MsrIndex;\r
 \r
   return RETURN_SUCCESS;\r
 }\r
 \r
-\r
 /**\r
   Worker function gets the attribute of variable MTRRs.\r
 \r
@@ -628,17 +597,18 @@ MtrrGetMemoryAttributeInVariableMtrrWorker (
 \r
   ZeroMem (VariableMtrr, sizeof (VARIABLE_MTRR) * ARRAY_SIZE (VariableSettings->Mtrr));\r
   for (Index = 0, UsedMtrr = 0; Index < VariableMtrrCount; Index++) {\r
-    if (((MSR_IA32_MTRR_PHYSMASK_REGISTER *) &VariableSettings->Mtrr[Index].Mask)->Bits.V != 0) {\r
+    if (((MSR_IA32_MTRR_PHYSMASK_REGISTER *)&VariableSettings->Mtrr[Index].Mask)->Bits.V != 0) {\r
       VariableMtrr[Index].Msr         = (UINT32)Index;\r
       VariableMtrr[Index].BaseAddress = (VariableSettings->Mtrr[Index].Base & MtrrValidAddressMask);\r
       VariableMtrr[Index].Length      =\r
         ((~(VariableSettings->Mtrr[Index].Mask & MtrrValidAddressMask)) & MtrrValidBitsMask) + 1;\r
-      VariableMtrr[Index].Type        = (VariableSettings->Mtrr[Index].Base & 0x0ff);\r
-      VariableMtrr[Index].Valid       = TRUE;\r
-      VariableMtrr[Index].Used        = TRUE;\r
+      VariableMtrr[Index].Type  = (VariableSettings->Mtrr[Index].Base & 0x0ff);\r
+      VariableMtrr[Index].Valid = TRUE;\r
+      VariableMtrr[Index].Used  = TRUE;\r
       UsedMtrr++;\r
     }\r
   }\r
+\r
   return UsedMtrr;\r
 }\r
 \r
@@ -670,14 +640,15 @@ MtrrLibGetRawVariableRanges (
 \r
   ZeroMem (VariableMtrr, sizeof (MTRR_MEMORY_RANGE) * ARRAY_SIZE (VariableSettings->Mtrr));\r
   for (Index = 0, UsedMtrr = 0; Index < VariableMtrrCount; Index++) {\r
-    if (((MSR_IA32_MTRR_PHYSMASK_REGISTER *) &VariableSettings->Mtrr[Index].Mask)->Bits.V != 0) {\r
+    if (((MSR_IA32_MTRR_PHYSMASK_REGISTER *)&VariableSettings->Mtrr[Index].Mask)->Bits.V != 0) {\r
       VariableMtrr[Index].BaseAddress = (VariableSettings->Mtrr[Index].Base & MtrrValidAddressMask);\r
       VariableMtrr[Index].Length      =\r
         ((~(VariableSettings->Mtrr[Index].Mask & MtrrValidAddressMask)) & MtrrValidBitsMask) + 1;\r
-      VariableMtrr[Index].Type        = (MTRR_MEMORY_CACHE_TYPE)(VariableSettings->Mtrr[Index].Base & 0x0ff);\r
+      VariableMtrr[Index].Type = (MTRR_MEMORY_CACHE_TYPE)(VariableSettings->Mtrr[Index].Base & 0x0ff);\r
       UsedMtrr++;\r
     }\r
   }\r
+\r
   return UsedMtrr;\r
 }\r
 \r
@@ -698,9 +669,9 @@ MtrrLibGetRawVariableRanges (
 UINT32\r
 EFIAPI\r
 MtrrGetMemoryAttributeInVariableMtrr (\r
-  IN  UINT64                    MtrrValidBitsMask,\r
-  IN  UINT64                    MtrrValidAddressMask,\r
-  OUT VARIABLE_MTRR             *VariableMtrr\r
+  IN  UINT64         MtrrValidBitsMask,\r
+  IN  UINT64         MtrrValidAddressMask,\r
+  OUT VARIABLE_MTRR  *VariableMtrr\r
   )\r
 {\r
   MTRR_VARIABLE_SETTINGS  VariableSettings;\r
@@ -735,9 +706,9 @@ MtrrGetMemoryAttributeInVariableMtrr (
 **/\r
 UINT64\r
 MtrrLibBiggestAlignment (\r
-  UINT64    Address,\r
-  UINT64    Alignment0\r
-)\r
+  UINT64  Address,\r
+  UINT64  Alignment0\r
+  )\r
 {\r
   if (Address == 0) {\r
     return Alignment0;\r
@@ -765,9 +736,9 @@ BOOLEAN
 MtrrLibTypeLeftPrecedeRight (\r
   IN MTRR_MEMORY_CACHE_TYPE  Left,\r
   IN MTRR_MEMORY_CACHE_TYPE  Right\r
-)\r
+  )\r
 {\r
-  return (BOOLEAN) (Left == CacheUncacheable || (Left == CacheWriteThrough && Right == CacheWriteBack));\r
+  return (BOOLEAN)(Left == CacheUncacheable || (Left == CacheWriteThrough && Right == CacheWriteBack));\r
 }\r
 \r
 /**\r
@@ -781,14 +752,13 @@ MtrrLibTypeLeftPrecedeRight (
 **/\r
 VOID\r
 MtrrLibInitializeMtrrMask (\r
-  OUT UINT64 *MtrrValidBitsMask,\r
-  OUT UINT64 *MtrrValidAddressMask\r
+  OUT UINT64  *MtrrValidBitsMask,\r
+  OUT UINT64  *MtrrValidAddressMask\r
   )\r
 {\r
   UINT32                          MaxExtendedFunction;\r
   CPUID_VIR_PHY_ADDRESS_SIZE_EAX  VirPhyAddressSize;\r
 \r
-\r
   AsmCpuid (CPUID_EXTENDED_FUNCTION, &MaxExtendedFunction, NULL, NULL, NULL);\r
 \r
   if (MaxExtendedFunction >= CPUID_VIR_PHY_ADDRESS_SIZE) {\r
@@ -797,11 +767,10 @@ MtrrLibInitializeMtrrMask (
     VirPhyAddressSize.Bits.PhysicalAddressBits = 36;\r
   }\r
 \r
-  *MtrrValidBitsMask = LShiftU64 (1, VirPhyAddressSize.Bits.PhysicalAddressBits) - 1;\r
+  *MtrrValidBitsMask    = LShiftU64 (1, VirPhyAddressSize.Bits.PhysicalAddressBits) - 1;\r
   *MtrrValidAddressMask = *MtrrValidBitsMask & 0xfffffffffffff000ULL;\r
 }\r
 \r
-\r
 /**\r
   Determines the real attribute of a memory range.\r
 \r
@@ -816,8 +785,8 @@ MtrrLibInitializeMtrrMask (
 **/\r
 MTRR_MEMORY_CACHE_TYPE\r
 MtrrLibPrecedence (\r
-  IN MTRR_MEMORY_CACHE_TYPE    MtrrType1,\r
-  IN MTRR_MEMORY_CACHE_TYPE    MtrrType2\r
+  IN MTRR_MEMORY_CACHE_TYPE  MtrrType1,\r
+  IN MTRR_MEMORY_CACHE_TYPE  MtrrType2\r
   )\r
 {\r
   if (MtrrType1 == MtrrType2) {\r
@@ -827,7 +796,7 @@ MtrrLibPrecedence (
   ASSERT (\r
     MtrrLibTypeLeftPrecedeRight (MtrrType1, MtrrType2) ||\r
     MtrrLibTypeLeftPrecedeRight (MtrrType2, MtrrType1)\r
-  );\r
+    );\r
 \r
   if (MtrrLibTypeLeftPrecedeRight (MtrrType1, MtrrType2)) {\r
     return MtrrType1;\r
@@ -851,20 +820,20 @@ MtrrLibPrecedence (
 **/\r
 MTRR_MEMORY_CACHE_TYPE\r
 MtrrGetMemoryAttributeByAddressWorker (\r
-  IN MTRR_SETTINGS      *MtrrSetting,\r
-  IN PHYSICAL_ADDRESS   Address\r
+  IN MTRR_SETTINGS     *MtrrSetting,\r
+  IN PHYSICAL_ADDRESS  Address\r
   )\r
 {\r
-  MSR_IA32_MTRR_DEF_TYPE_REGISTER DefType;\r
-  UINT64                          FixedMtrr;\r
-  UINTN                           Index;\r
-  UINTN                           SubIndex;\r
-  MTRR_MEMORY_CACHE_TYPE          MtrrType;\r
-  MTRR_MEMORY_RANGE               VariableMtrr[ARRAY_SIZE (MtrrSetting->Variables.Mtrr)];\r
-  UINT64                          MtrrValidBitsMask;\r
-  UINT64                          MtrrValidAddressMask;\r
-  UINT32                          VariableMtrrCount;\r
-  MTRR_VARIABLE_SETTINGS          VariableSettings;\r
+  MSR_IA32_MTRR_DEF_TYPE_REGISTER  DefType;\r
+  UINT64                           FixedMtrr;\r
+  UINTN                            Index;\r
+  UINTN                            SubIndex;\r
+  MTRR_MEMORY_CACHE_TYPE           MtrrType;\r
+  MTRR_MEMORY_RANGE                VariableMtrr[ARRAY_SIZE (MtrrSetting->Variables.Mtrr)];\r
+  UINT64                           MtrrValidBitsMask;\r
+  UINT64                           MtrrValidAddressMask;\r
+  UINT32                           VariableMtrrCount;\r
+  MTRR_VARIABLE_SETTINGS           VariableSettings;\r
 \r
   //\r
   // Check if MTRR is enabled, if not, return UC as attribute\r
@@ -888,18 +857,20 @@ MtrrGetMemoryAttributeByAddressWorker (
       // Go through the fixed MTRR\r
       //\r
       for (Index = 0; Index < MTRR_NUMBER_OF_FIXED_MTRR; Index++) {\r
-        if (Address >= mMtrrLibFixedMtrrTable[Index].BaseAddress &&\r
-            Address < mMtrrLibFixedMtrrTable[Index].BaseAddress +\r
-            (mMtrrLibFixedMtrrTable[Index].Length * 8)) {\r
+        if ((Address >= mMtrrLibFixedMtrrTable[Index].BaseAddress) &&\r
+            (Address < mMtrrLibFixedMtrrTable[Index].BaseAddress +\r
+             (mMtrrLibFixedMtrrTable[Index].Length * 8)))\r
+        {\r
           SubIndex =\r
-            ((UINTN) Address - mMtrrLibFixedMtrrTable[Index].BaseAddress) /\r
+            ((UINTN)Address - mMtrrLibFixedMtrrTable[Index].BaseAddress) /\r
             mMtrrLibFixedMtrrTable[Index].Length;\r
           if (MtrrSetting == NULL) {\r
             FixedMtrr = AsmReadMsr64 (mMtrrLibFixedMtrrTable[Index].Msr);\r
           } else {\r
             FixedMtrr = MtrrSetting->Fixed.Mtrr[Index];\r
           }\r
-          return (MTRR_MEMORY_CACHE_TYPE) (RShiftU64 (FixedMtrr, SubIndex * 8) & 0xFF);\r
+\r
+          return (MTRR_MEMORY_CACHE_TYPE)(RShiftU64 (FixedMtrr, SubIndex * 8) & 0xFF);\r
         }\r
       }\r
     }\r
@@ -916,7 +887,7 @@ MtrrGetMemoryAttributeByAddressWorker (
     MtrrValidBitsMask,\r
     MtrrValidAddressMask,\r
     VariableMtrr\r
-  );\r
+    );\r
 \r
   //\r
   // Go through the variable MTRR\r
@@ -924,12 +895,13 @@ MtrrGetMemoryAttributeByAddressWorker (
   MtrrType = CacheInvalid;\r
   for (Index = 0; Index < VariableMtrrCount; Index++) {\r
     if (VariableMtrr[Index].Length != 0) {\r
-      if (Address >= VariableMtrr[Index].BaseAddress &&\r
-          Address < VariableMtrr[Index].BaseAddress + VariableMtrr[Index].Length) {\r
+      if ((Address >= VariableMtrr[Index].BaseAddress) &&\r
+          (Address < VariableMtrr[Index].BaseAddress + VariableMtrr[Index].Length))\r
+      {\r
         if (MtrrType == CacheInvalid) {\r
-          MtrrType = (MTRR_MEMORY_CACHE_TYPE) VariableMtrr[Index].Type;\r
+          MtrrType = (MTRR_MEMORY_CACHE_TYPE)VariableMtrr[Index].Type;\r
         } else {\r
-          MtrrType = MtrrLibPrecedence (MtrrType, (MTRR_MEMORY_CACHE_TYPE) VariableMtrr[Index].Type);\r
+          MtrrType = MtrrLibPrecedence (MtrrType, (MTRR_MEMORY_CACHE_TYPE)VariableMtrr[Index].Type);\r
         }\r
       }\r
     }\r
@@ -939,13 +911,12 @@ MtrrGetMemoryAttributeByAddressWorker (
   // If there is no MTRR which covers the Address, use the default MTRR type.\r
   //\r
   if (MtrrType == CacheInvalid) {\r
-    MtrrType = (MTRR_MEMORY_CACHE_TYPE) DefType.Bits.Type;\r
+    MtrrType = (MTRR_MEMORY_CACHE_TYPE)DefType.Bits.Type;\r
   }\r
 \r
   return MtrrType;\r
 }\r
 \r
-\r
 /**\r
   This function will get the memory cache type of the specific address.\r
 \r
@@ -959,7 +930,7 @@ MtrrGetMemoryAttributeByAddressWorker (
 MTRR_MEMORY_CACHE_TYPE\r
 EFIAPI\r
 MtrrGetMemoryAttribute (\r
-  IN PHYSICAL_ADDRESS   Address\r
+  IN PHYSICAL_ADDRESS  Address\r
   )\r
 {\r
   if (!IsMtrrSupported ()) {\r
@@ -989,46 +960,48 @@ MtrrGetMemoryAttribute (
 **/\r
 RETURN_STATUS\r
 MtrrLibSetMemoryType (\r
-  IN MTRR_MEMORY_RANGE             *Ranges,\r
-  IN UINTN                         Capacity,\r
-  IN OUT UINTN                     *Count,\r
-  IN UINT64                        BaseAddress,\r
-  IN UINT64                        Length,\r
-  IN MTRR_MEMORY_CACHE_TYPE        Type\r
+  IN MTRR_MEMORY_RANGE       *Ranges,\r
+  IN UINTN                   Capacity,\r
+  IN OUT UINTN               *Count,\r
+  IN UINT64                  BaseAddress,\r
+  IN UINT64                  Length,\r
+  IN MTRR_MEMORY_CACHE_TYPE  Type\r
   )\r
 {\r
-  UINTN                            Index;\r
-  UINT64                           Limit;\r
-  UINT64                           LengthLeft;\r
-  UINT64                           LengthRight;\r
-  UINTN                            StartIndex;\r
-  UINTN                            EndIndex;\r
-  UINTN                            DeltaCount;\r
+  UINTN   Index;\r
+  UINT64  Limit;\r
+  UINT64  LengthLeft;\r
+  UINT64  LengthRight;\r
+  UINTN   StartIndex;\r
+  UINTN   EndIndex;\r
+  UINTN   DeltaCount;\r
 \r
   LengthRight = 0;\r
   LengthLeft  = 0;\r
-  Limit = BaseAddress + Length;\r
-  StartIndex = *Count;\r
-  EndIndex = *Count;\r
+  Limit       = BaseAddress + Length;\r
+  StartIndex  = *Count;\r
+  EndIndex    = *Count;\r
   for (Index = 0; Index < *Count; Index++) {\r
     if ((StartIndex == *Count) &&\r
         (Ranges[Index].BaseAddress <= BaseAddress) &&\r
-        (BaseAddress < Ranges[Index].BaseAddress + Ranges[Index].Length)) {\r
+        (BaseAddress < Ranges[Index].BaseAddress + Ranges[Index].Length))\r
+    {\r
       StartIndex = Index;\r
       LengthLeft = BaseAddress - Ranges[Index].BaseAddress;\r
     }\r
 \r
     if ((EndIndex == *Count) &&\r
         (Ranges[Index].BaseAddress < Limit) &&\r
-        (Limit <= Ranges[Index].BaseAddress + Ranges[Index].Length)) {\r
-      EndIndex = Index;\r
+        (Limit <= Ranges[Index].BaseAddress + Ranges[Index].Length))\r
+    {\r
+      EndIndex    = Index;\r
       LengthRight = Ranges[Index].BaseAddress + Ranges[Index].Length - Limit;\r
       break;\r
     }\r
   }\r
 \r
   ASSERT (StartIndex != *Count && EndIndex != *Count);\r
-  if (StartIndex == EndIndex && Ranges[StartIndex].Type == Type) {\r
+  if ((StartIndex == EndIndex) && (Ranges[StartIndex].Type == Type)) {\r
     return RETURN_ALREADY_STARTED;\r
   }\r
 \r
@@ -1038,14 +1011,15 @@ MtrrLibSetMemoryType (
   // logic doesn't need to consider merging.\r
   //\r
   if (StartIndex != 0) {\r
-    if (LengthLeft == 0 && Ranges[StartIndex - 1].Type == Type) {\r
+    if ((LengthLeft == 0) && (Ranges[StartIndex - 1].Type == Type)) {\r
       StartIndex--;\r
-      Length += Ranges[StartIndex].Length;\r
+      Length      += Ranges[StartIndex].Length;\r
       BaseAddress -= Ranges[StartIndex].Length;\r
     }\r
   }\r
+\r
   if (EndIndex != (*Count) - 1) {\r
-    if (LengthRight == 0 && Ranges[EndIndex + 1].Type == Type) {\r
+    if ((LengthRight == 0) && (Ranges[EndIndex + 1].Type == Type)) {\r
       EndIndex++;\r
       Length += Ranges[EndIndex].Length;\r
     }\r
@@ -1063,9 +1037,11 @@ MtrrLibSetMemoryType (
   if (LengthLeft == 0) {\r
     DeltaCount++;\r
   }\r
+\r
   if (LengthRight == 0) {\r
     DeltaCount++;\r
   }\r
+\r
   if (*Count - DeltaCount > Capacity) {\r
     return RETURN_OUT_OF_RESOURCES;\r
   }\r
@@ -1080,14 +1056,16 @@ MtrrLibSetMemoryType (
     Ranges[StartIndex].Length = LengthLeft;\r
     StartIndex++;\r
   }\r
+\r
   if (LengthRight != 0) {\r
     Ranges[EndIndex - DeltaCount].BaseAddress = BaseAddress + Length;\r
-    Ranges[EndIndex - DeltaCount].Length = LengthRight;\r
-    Ranges[EndIndex - DeltaCount].Type = Ranges[EndIndex].Type;\r
+    Ranges[EndIndex - DeltaCount].Length      = LengthRight;\r
+    Ranges[EndIndex - DeltaCount].Type        = Ranges[EndIndex].Type;\r
   }\r
+\r
   Ranges[StartIndex].BaseAddress = BaseAddress;\r
-  Ranges[StartIndex].Length = Length;\r
-  Ranges[StartIndex].Type = Type;\r
+  Ranges[StartIndex].Length      = Length;\r
+  Ranges[StartIndex].Type        = Type;\r
   return RETURN_SUCCESS;\r
 }\r
 \r
@@ -1104,30 +1082,31 @@ MtrrLibSetMemoryType (
 **/\r
 UINT8\r
 MtrrLibGetNumberOfTypes (\r
-  IN CONST MTRR_MEMORY_RANGE     *Ranges,\r
-  IN UINTN                       RangeCount,\r
-  IN UINT64                      BaseAddress,\r
-  IN UINT64                      Length,\r
-  IN OUT UINT8                   *Types  OPTIONAL\r
+  IN CONST MTRR_MEMORY_RANGE  *Ranges,\r
+  IN UINTN                    RangeCount,\r
+  IN UINT64                   BaseAddress,\r
+  IN UINT64                   Length,\r
+  IN OUT UINT8                *Types  OPTIONAL\r
   )\r
 {\r
-  UINTN                          Index;\r
-  UINT8                          TypeCount;\r
-  UINT8                          LocalTypes;\r
+  UINTN  Index;\r
+  UINT8  TypeCount;\r
+  UINT8  LocalTypes;\r
 \r
-  TypeCount = 0;\r
+  TypeCount  = 0;\r
   LocalTypes = 0;\r
   for (Index = 0; Index < RangeCount; Index++) {\r
     if ((Ranges[Index].BaseAddress <= BaseAddress) &&\r
         (BaseAddress < Ranges[Index].BaseAddress + Ranges[Index].Length)\r
-        ) {\r
+        )\r
+    {\r
       if ((LocalTypes & (1 << Ranges[Index].Type)) == 0) {\r
         LocalTypes |= (UINT8)(1 << Ranges[Index].Type);\r
         TypeCount++;\r
       }\r
 \r
       if (BaseAddress + Length > Ranges[Index].BaseAddress + Ranges[Index].Length) {\r
-        Length -= Ranges[Index].BaseAddress + Ranges[Index].Length - BaseAddress;\r
+        Length     -= Ranges[Index].BaseAddress + Ranges[Index].Length - BaseAddress;\r
         BaseAddress = Ranges[Index].BaseAddress + Ranges[Index].Length;\r
       } else {\r
         break;\r
@@ -1138,84 +1117,84 @@ MtrrLibGetNumberOfTypes (
   if (Types != NULL) {\r
     *Types = LocalTypes;\r
   }\r
+\r
   return TypeCount;\r
 }\r
 \r
 /**\r
-  Calculate the least MTRR number from vector Start to Stop and update\r
-  the Previous of all vectors from Start to Stop is updated to reflect\r
+  Calculate the least MTRR number from vertex Start to Stop and update\r
+  the Previous of all vertices from Start to Stop is updated to reflect\r
   how the memory range is covered by MTRR.\r
 \r
-  @param VectorCount     The count of vectors in the graph.\r
-  @param Vector          Array holding all vectors.\r
-  @param Weight          2-dimention array holding weights between vectors.\r
-  @param Start           Start vector.\r
-  @param Stop            Stop vector.\r
+  @param VertexCount     The count of vertices in the graph.\r
+  @param Vertices        Array holding all vertices.\r
+  @param Weight          2-dimention array holding weights between vertices.\r
+  @param Start           Start vertex.\r
+  @param Stop            Stop vertex.\r
   @param IncludeOptional TRUE to count the optional weight.\r
 **/\r
 VOID\r
 MtrrLibCalculateLeastMtrrs (\r
-  IN UINT16                      VectorCount,\r
-  IN MTRR_LIB_ADDRESS            *Vector,\r
-  IN OUT CONST UINT8             *Weight,\r
-  IN UINT16                      Start,\r
-  IN UINT16                      Stop,\r
-  IN BOOLEAN                     IncludeOptional\r
+  IN UINT16            VertexCount,\r
+  IN MTRR_LIB_ADDRESS  *Vertices,\r
+  IN OUT CONST UINT8   *Weight,\r
+  IN UINT16            Start,\r
+  IN UINT16            Stop,\r
+  IN BOOLEAN           IncludeOptional\r
   )\r
 {\r
-  UINT16                         Index;\r
-  UINT8                          MinWeight;\r
-  UINT16                         MinI;\r
-  UINT8                          Mandatory;\r
-  UINT8                          Optional;\r
+  UINT16  Index;\r
+  UINT8   MinWeight;\r
+  UINT16  MinI;\r
+  UINT8   Mandatory;\r
+  UINT8   Optional;\r
 \r
   for (Index = Start; Index <= Stop; Index++) {\r
-    Vector[Index].Visited = FALSE;\r
-    Vector[Index].Previous = VectorCount;\r
-    Mandatory = Weight[M(Start,Index)];\r
-    Vector[Index].Weight = Mandatory;\r
+    Vertices[Index].Visited = FALSE;\r
+    Mandatory               = Weight[M (Start, Index)];\r
+    Vertices[Index].Weight  = Mandatory;\r
     if (Mandatory != MAX_WEIGHT) {\r
-      Optional = IncludeOptional ? Weight[O(Start, Index)] : 0;\r
-      Vector[Index].Weight += Optional;\r
-      ASSERT (Vector[Index].Weight >= Optional);\r
+      Optional                = IncludeOptional ? Weight[O (Start, Index)] : 0;\r
+      Vertices[Index].Weight += Optional;\r
+      ASSERT (Vertices[Index].Weight >= Optional);\r
     }\r
   }\r
 \r
-  MinI = Start;\r
+  MinI      = Start;\r
   MinWeight = 0;\r
-  while (!Vector[Stop].Visited) {\r
+  while (!Vertices[Stop].Visited) {\r
     //\r
-    // Update the weight from the shortest vector to other unvisited vectors\r
+    // Update the weight from the shortest vertex to other unvisited vertices\r
     //\r
     for (Index = Start + 1; Index <= Stop; Index++) {\r
-      if (!Vector[Index].Visited) {\r
-        Mandatory = Weight[M(MinI, Index)];\r
+      if (!Vertices[Index].Visited) {\r
+        Mandatory = Weight[M (MinI, Index)];\r
         if (Mandatory != MAX_WEIGHT) {\r
-          Optional = IncludeOptional ? Weight[O(MinI, Index)] : 0;\r
-          if (MinWeight + Mandatory + Optional <= Vector[Index].Weight) {\r
-            Vector[Index].Weight   = MinWeight + Mandatory + Optional;\r
-            Vector[Index].Previous = MinI; // Previous is Start based.\r
+          Optional = IncludeOptional ? Weight[O (MinI, Index)] : 0;\r
+          if (MinWeight + Mandatory + Optional <= Vertices[Index].Weight) {\r
+            Vertices[Index].Weight   = MinWeight + Mandatory + Optional;\r
+            Vertices[Index].Previous = MinI; // Previous is Start based.\r
           }\r
         }\r
       }\r
     }\r
 \r
     //\r
-    // Find the shortest vector from Start\r
+    // Find the shortest vertex from Start\r
     //\r
-    MinI      = VectorCount;\r
+    MinI      = VertexCount;\r
     MinWeight = MAX_WEIGHT;\r
     for (Index = Start + 1; Index <= Stop; Index++) {\r
-      if (!Vector[Index].Visited && MinWeight > Vector[Index].Weight) {\r
+      if (!Vertices[Index].Visited && (MinWeight > Vertices[Index].Weight)) {\r
         MinI      = Index;\r
-        MinWeight = Vector[Index].Weight;\r
+        MinWeight = Vertices[Index].Weight;\r
       }\r
     }\r
 \r
     //\r
-    // Mark the shortest vector from Start as visited\r
+    // Mark the shortest vertex from Start as visited\r
     //\r
-    Vector[MinI].Visited = TRUE;\r
+    Vertices[MinI].Visited = TRUE;\r
   }\r
 }\r
 \r
@@ -1262,13 +1241,15 @@ MtrrLibAppendVariableMtrr (
 **/\r
 MTRR_MEMORY_CACHE_TYPE\r
 MtrrLibLowestType (\r
-  IN      UINT8                    TypeBits\r
-)\r
+  IN      UINT8  TypeBits\r
+  )\r
 {\r
-  INT8                             Type;\r
+  INT8  Type;\r
 \r
   ASSERT (TypeBits != 0);\r
-  for (Type = 7; (INT8)TypeBits > 0; Type--, TypeBits <<= 1);\r
+  for (Type = 7; (INT8)TypeBits > 0; Type--, TypeBits <<= 1) {\r
+  }\r
+\r
   return (MTRR_MEMORY_CACHE_TYPE)Type;\r
 }\r
 \r
@@ -1280,25 +1261,25 @@ MtrrLibLowestType (
 **/\r
 BOOLEAN\r
 MtrrLibIsPowerOfTwo (\r
-  IN     UINT64                  Operand\r
-)\r
+  IN     UINT64  Operand\r
+  )\r
 {\r
   ASSERT (Operand != 0);\r
-  return (BOOLEAN) ((Operand & (Operand - 1)) == 0);\r
+  return (BOOLEAN)((Operand & (Operand - 1)) == 0);\r
 }\r
 \r
 /**\r
-  Calculate the subtractive path from vector Start to Stop.\r
+  Calculate the subtractive path from vertex Start to Stop.\r
 \r
   @param DefaultType  Default memory type.\r
   @param A0           Alignment to use when base address is 0.\r
   @param Ranges       Array holding memory type settings for all memory regions.\r
   @param RangeCount   The count of memory ranges the array holds.\r
-  @param VectorCount  The count of vectors in the graph.\r
-  @param Vector       Array holding all vectors.\r
-  @param Weight       2-dimention array holding weights between vectors.\r
-  @param Start        Start vector.\r
-  @param Stop         Stop vector.\r
+  @param VertexCount  The count of vertices in the graph.\r
+  @param Vertices     Array holding all vertices.\r
+  @param Weight       2-dimention array holding weights between vertices.\r
+  @param Start        Start vertex.\r
+  @param Stop         Stop vertex.\r
   @param Types        Type bit mask of memory range from Start to Stop.\r
   @param TypeCount    Number of different memory types from Start to Stop.\r
   @param Mtrrs        Array holding all MTRR settings.\r
@@ -1311,60 +1292,61 @@ MtrrLibIsPowerOfTwo (
 **/\r
 RETURN_STATUS\r
 MtrrLibCalculateSubtractivePath (\r
-  IN MTRR_MEMORY_CACHE_TYPE      DefaultType,\r
-  IN UINT64                      A0,\r
-  IN CONST MTRR_MEMORY_RANGE     *Ranges,\r
-  IN UINTN                       RangeCount,\r
-  IN UINT16                      VectorCount,\r
-  IN MTRR_LIB_ADDRESS            *Vector,\r
-  IN OUT UINT8                   *Weight,\r
-  IN UINT16                      Start,\r
-  IN UINT16                      Stop,\r
-  IN UINT8                       Types,\r
-  IN UINT8                       TypeCount,\r
-  IN OUT MTRR_MEMORY_RANGE       *Mtrrs,       OPTIONAL\r
-  IN UINT32                      MtrrCapacity, OPTIONAL\r
-  IN OUT UINT32                  *MtrrCount    OPTIONAL\r
+  IN MTRR_MEMORY_CACHE_TYPE   DefaultType,\r
+  IN UINT64                   A0,\r
+  IN CONST MTRR_MEMORY_RANGE  *Ranges,\r
+  IN UINTN                    RangeCount,\r
+  IN UINT16                   VertexCount,\r
+  IN MTRR_LIB_ADDRESS         *Vertices,\r
+  IN OUT UINT8                *Weight,\r
+  IN UINT16                   Start,\r
+  IN UINT16                   Stop,\r
+  IN UINT8                    Types,\r
+  IN UINT8                    TypeCount,\r
+  IN OUT MTRR_MEMORY_RANGE    *Mtrrs        OPTIONAL,\r
+  IN UINT32                   MtrrCapacity  OPTIONAL,\r
+  IN OUT UINT32               *MtrrCount    OPTIONAL\r
   )\r
 {\r
-  RETURN_STATUS                  Status;\r
-  UINT64                         Base;\r
-  UINT64                         Length;\r
-  UINT8                          PrecedentTypes;\r
-  UINTN                          Index;\r
-  UINT64                         HBase;\r
-  UINT64                         HLength;\r
-  UINT64                         SubLength;\r
-  UINT16                         SubStart;\r
-  UINT16                         SubStop;\r
-  UINT16                         Cur;\r
-  UINT16                         Pre;\r
-  MTRR_MEMORY_CACHE_TYPE         LowestType;\r
-  MTRR_MEMORY_CACHE_TYPE         LowestPrecedentType;\r
-\r
-  Base   = Vector[Start].Address;\r
-  Length = Vector[Stop].Address - Base;\r
+  RETURN_STATUS           Status;\r
+  UINT64                  Base;\r
+  UINT64                  Length;\r
+  UINT8                   PrecedentTypes;\r
+  UINTN                   Index;\r
+  UINT64                  HBase;\r
+  UINT64                  HLength;\r
+  UINT64                  SubLength;\r
+  UINT16                  SubStart;\r
+  UINT16                  SubStop;\r
+  UINT16                  Cur;\r
+  UINT16                  Pre;\r
+  MTRR_MEMORY_CACHE_TYPE  LowestType;\r
+  MTRR_MEMORY_CACHE_TYPE  LowestPrecedentType;\r
+\r
+  Base   = Vertices[Start].Address;\r
+  Length = Vertices[Stop].Address - Base;\r
 \r
   LowestType = MtrrLibLowestType (Types);\r
 \r
   //\r
   // Clear the lowest type (highest bit) to get the precedent types\r
   //\r
-  PrecedentTypes = ~(1 << LowestType) & Types;\r
+  PrecedentTypes      = ~(1 << LowestType) & Types;\r
   LowestPrecedentType = MtrrLibLowestType (PrecedentTypes);\r
 \r
   if (Mtrrs == NULL) {\r
-    Weight[M(Start, Stop)] = ((LowestType == DefaultType) ? 0 : 1);\r
-    Weight[O(Start, Stop)] = ((LowestType == DefaultType) ? 1 : 0);\r
+    Weight[M (Start, Stop)] = ((LowestType == DefaultType) ? 0 : 1);\r
+    Weight[O (Start, Stop)] = ((LowestType == DefaultType) ? 1 : 0);\r
   }\r
 \r
   // Add all high level ranges\r
-  HBase = MAX_UINT64;\r
+  HBase   = MAX_UINT64;\r
   HLength = 0;\r
   for (Index = 0; Index < RangeCount; Index++) {\r
     if (Length == 0) {\r
       break;\r
     }\r
+\r
     if ((Base < Ranges[Index].BaseAddress) || (Ranges[Index].BaseAddress + Ranges[Index].Length <= Base)) {\r
       continue;\r
     }\r
@@ -1377,6 +1359,7 @@ MtrrLibCalculateSubtractivePath (
     } else {\r
       SubLength = Length;\r
     }\r
+\r
     if (((1 << Ranges[Index].Type) & PrecedentTypes) != 0) {\r
       //\r
       // Meet a range whose types take precedence.\r
@@ -1386,17 +1369,19 @@ MtrrLibCalculateSubtractivePath (
       if (HBase == MAX_UINT64) {\r
         HBase = Base;\r
       }\r
+\r
       HLength += SubLength;\r
     }\r
 \r
-    Base += SubLength;\r
+    Base   += SubLength;\r
     Length -= SubLength;\r
 \r
     if (HLength == 0) {\r
       continue;\r
     }\r
 \r
-    if ((Ranges[Index].Type == LowestType) || (Length == 0)) { // meet low type or end\r
+    if ((Ranges[Index].Type == LowestType) || (Length == 0)) {\r
+      // meet low type or end\r
 \r
       //\r
       // Add the MTRRs for each high priority type range\r
@@ -1404,18 +1389,19 @@ MtrrLibCalculateSubtractivePath (
       // We might use positive or subtractive, depending on which way uses less MTRR\r
       //\r
       for (SubStart = Start; SubStart <= Stop; SubStart++) {\r
-        if (Vector[SubStart].Address == HBase) {\r
+        if (Vertices[SubStart].Address == HBase) {\r
           break;\r
         }\r
       }\r
 \r
       for (SubStop = SubStart; SubStop <= Stop; SubStop++) {\r
-        if (Vector[SubStop].Address == HBase + HLength) {\r
+        if (Vertices[SubStop].Address == HBase + HLength) {\r
           break;\r
         }\r
       }\r
-      ASSERT (Vector[SubStart].Address == HBase);\r
-      ASSERT (Vector[SubStop].Address == HBase + HLength);\r
+\r
+      ASSERT (Vertices[SubStart].Address == HBase);\r
+      ASSERT (Vertices[SubStop].Address == HBase + HLength);\r
 \r
       if ((TypeCount == 2) || (SubStart == SubStop - 1)) {\r
         //\r
@@ -1428,60 +1414,80 @@ MtrrLibCalculateSubtractivePath (
         } else {\r
           while (SubStart != SubStop) {\r
             Status = MtrrLibAppendVariableMtrr (\r
-              Mtrrs, MtrrCapacity, MtrrCount,\r
-              Vector[SubStart].Address, Vector[SubStart].Length, (MTRR_MEMORY_CACHE_TYPE) Vector[SubStart].Type\r
-            );\r
+                       Mtrrs,\r
+                       MtrrCapacity,\r
+                       MtrrCount,\r
+                       Vertices[SubStart].Address,\r
+                       Vertices[SubStart].Length,\r
+                       Vertices[SubStart].Type\r
+                       );\r
             if (RETURN_ERROR (Status)) {\r
               return Status;\r
             }\r
+\r
             SubStart++;\r
           }\r
         }\r
       } else {\r
         ASSERT (TypeCount == 3);\r
-        MtrrLibCalculateLeastMtrrs (VectorCount, Vector, Weight, SubStart, SubStop, TRUE);\r
+        MtrrLibCalculateLeastMtrrs (VertexCount, Vertices, Weight, SubStart, SubStop, TRUE);\r
 \r
         if (Mtrrs == NULL) {\r
-          Weight[M (Start, Stop)] += Vector[SubStop].Weight;\r
+          Weight[M (Start, Stop)] += Vertices[SubStop].Weight;\r
         } else {\r
           // When we need to collect the optimal path from SubStart to SubStop\r
           while (SubStop != SubStart) {\r
-            Cur = SubStop;\r
-            Pre = Vector[Cur].Previous;\r
+            Cur     = SubStop;\r
+            Pre     = Vertices[Cur].Previous;\r
             SubStop = Pre;\r
 \r
-            if (Weight[M (Pre, Cur)] != 0) {\r
+            if (Weight[M (Pre, Cur)] + Weight[O (Pre, Cur)] != 0) {\r
               Status = MtrrLibAppendVariableMtrr (\r
-                Mtrrs, MtrrCapacity, MtrrCount,\r
-                Vector[Pre].Address, Vector[Cur].Address - Vector[Pre].Address, LowestPrecedentType\r
-              );\r
+                         Mtrrs,\r
+                         MtrrCapacity,\r
+                         MtrrCount,\r
+                         Vertices[Pre].Address,\r
+                         Vertices[Cur].Address - Vertices[Pre].Address,\r
+                         (Pre != Cur - 1) ? LowestPrecedentType : Vertices[Pre].Type\r
+                         );\r
               if (RETURN_ERROR (Status)) {\r
                 return Status;\r
               }\r
             }\r
+\r
             if (Pre != Cur - 1) {\r
               Status = MtrrLibCalculateSubtractivePath (\r
-                DefaultType, A0,\r
-                Ranges, RangeCount,\r
-                VectorCount, Vector, Weight,\r
-                Pre, Cur, PrecedentTypes, 2,\r
-                Mtrrs, MtrrCapacity, MtrrCount\r
-              );\r
+                         DefaultType,\r
+                         A0,\r
+                         Ranges,\r
+                         RangeCount,\r
+                         VertexCount,\r
+                         Vertices,\r
+                         Weight,\r
+                         Pre,\r
+                         Cur,\r
+                         PrecedentTypes,\r
+                         2,\r
+                         Mtrrs,\r
+                         MtrrCapacity,\r
+                         MtrrCount\r
+                         );\r
               if (RETURN_ERROR (Status)) {\r
                 return Status;\r
               }\r
             }\r
           }\r
         }\r
-\r
       }\r
+\r
       //\r
       // Reset HBase, HLength\r
       //\r
-      HBase = MAX_UINT64;\r
+      HBase   = MAX_UINT64;\r
       HLength = 0;\r
     }\r
   }\r
+\r
   return RETURN_SUCCESS;\r
 }\r
 \r
@@ -1508,45 +1514,45 @@ MtrrLibCalculateSubtractivePath (
 **/\r
 RETURN_STATUS\r
 MtrrLibCalculateMtrrs (\r
-  IN MTRR_MEMORY_CACHE_TYPE  DefaultType,\r
-  IN UINT64                  A0,\r
-  IN CONST MTRR_MEMORY_RANGE *Ranges,\r
-  IN UINTN                   RangeCount,\r
-  IN VOID                    *Scratch,\r
-  IN OUT UINTN               *ScratchSize,\r
-  IN OUT MTRR_MEMORY_RANGE   *Mtrrs,\r
-  IN UINT32                  MtrrCapacity,\r
-  IN OUT UINT32              *MtrrCount\r
+  IN MTRR_MEMORY_CACHE_TYPE   DefaultType,\r
+  IN UINT64                   A0,\r
+  IN CONST MTRR_MEMORY_RANGE  *Ranges,\r
+  IN UINTN                    RangeCount,\r
+  IN VOID                     *Scratch,\r
+  IN OUT UINTN                *ScratchSize,\r
+  IN OUT MTRR_MEMORY_RANGE    *Mtrrs,\r
+  IN UINT32                   MtrrCapacity,\r
+  IN OUT UINT32               *MtrrCount\r
   )\r
 {\r
-  UINT64                    Base0;\r
-  UINT64                    Base1;\r
-  UINTN                     Index;\r
-  UINT64                    Base;\r
-  UINT64                    Length;\r
-  UINT64                    Alignment;\r
-  UINT64                    SubLength;\r
-  MTRR_LIB_ADDRESS          *Vector;\r
-  UINT8                     *Weight;\r
-  UINT32                    VectorIndex;\r
-  UINT32                    VectorCount;\r
-  UINTN                     RequiredScratchSize;\r
-  UINT8                     TypeCount;\r
-  UINT16                    Start;\r
-  UINT16                    Stop;\r
-  UINT8                     Type;\r
-  RETURN_STATUS             Status;\r
+  UINT64            Base0;\r
+  UINT64            Base1;\r
+  UINTN             Index;\r
+  UINT64            Base;\r
+  UINT64            Length;\r
+  UINT64            Alignment;\r
+  UINT64            SubLength;\r
+  MTRR_LIB_ADDRESS  *Vertices;\r
+  UINT8             *Weight;\r
+  UINT32            VertexIndex;\r
+  UINT32            VertexCount;\r
+  UINTN             RequiredScratchSize;\r
+  UINT8             TypeCount;\r
+  UINT16            Start;\r
+  UINT16            Stop;\r
+  UINT8             Type;\r
+  RETURN_STATUS     Status;\r
 \r
   Base0 = Ranges[0].BaseAddress;\r
   Base1 = Ranges[RangeCount - 1].BaseAddress + Ranges[RangeCount - 1].Length;\r
   MTRR_LIB_ASSERT_ALIGNED (Base0, Base1 - Base0);\r
 \r
   //\r
-  // Count the number of vectors.\r
+  // Count the number of vertices.\r
   //\r
-  Vector = (MTRR_LIB_ADDRESS*)Scratch;\r
-  for (VectorIndex = 0, Index = 0; Index < RangeCount; Index++) {\r
-    Base = Ranges[Index].BaseAddress;\r
+  Vertices = (MTRR_LIB_ADDRESS *)Scratch;\r
+  for (VertexIndex = 0, Index = 0; Index < RangeCount; Index++) {\r
+    Base   = Ranges[Index].BaseAddress;\r
     Length = Ranges[Index].Length;\r
     while (Length != 0) {\r
       Alignment = MtrrLibBiggestAlignment (Base, A0);\r
@@ -1554,76 +1560,111 @@ MtrrLibCalculateMtrrs (
       if (SubLength > Length) {\r
         SubLength = GetPowerOfTwo64 (Length);\r
       }\r
-      if (VectorIndex < *ScratchSize / sizeof (*Vector)) {\r
-        Vector[VectorIndex].Address   = Base;\r
-        Vector[VectorIndex].Alignment = Alignment;\r
-        Vector[VectorIndex].Type      = Ranges[Index].Type;\r
-        Vector[VectorIndex].Length    = SubLength;\r
+\r
+      if (VertexIndex < *ScratchSize / sizeof (*Vertices)) {\r
+        Vertices[VertexIndex].Address   = Base;\r
+        Vertices[VertexIndex].Alignment = Alignment;\r
+        Vertices[VertexIndex].Type      = Ranges[Index].Type;\r
+        Vertices[VertexIndex].Length    = SubLength;\r
       }\r
+\r
       Base   += SubLength;\r
       Length -= SubLength;\r
-      VectorIndex++;\r
+      VertexIndex++;\r
     }\r
   }\r
+\r
   //\r
-  // Vector[VectorIndex] = Base1, so whole vector count is (VectorIndex + 1).\r
+  // Vertices[VertexIndex] = Base1, so whole vertex count is (VertexIndex + 1).\r
   //\r
-  VectorCount = VectorIndex + 1;\r
+  VertexCount = VertexIndex + 1;\r
   DEBUG ((\r
-    DEBUG_CACHE, "  VectorCount (%016lx - %016lx) = %d\n",\r
-    Ranges[0].BaseAddress, Ranges[RangeCount - 1].BaseAddress + Ranges[RangeCount - 1].Length, VectorCount\r
+    DEBUG_CACHE,\r
+    "  Count of vertices (%016llx - %016llx) = %d\n",\r
+    Ranges[0].BaseAddress,\r
+    Ranges[RangeCount - 1].BaseAddress + Ranges[RangeCount - 1].Length,\r
+    VertexCount\r
     ));\r
-  ASSERT (VectorCount < MAX_UINT16);\r
+  ASSERT (VertexCount < MAX_UINT16);\r
 \r
-  RequiredScratchSize = VectorCount * sizeof (*Vector) + VectorCount * VectorCount * sizeof (*Weight);\r
+  RequiredScratchSize = VertexCount * sizeof (*Vertices) + VertexCount * VertexCount * sizeof (*Weight);\r
   if (*ScratchSize < RequiredScratchSize) {\r
     *ScratchSize = RequiredScratchSize;\r
     return RETURN_BUFFER_TOO_SMALL;\r
   }\r
-  Vector[VectorCount - 1].Address = Base1;\r
 \r
-  Weight = (UINT8 *) &Vector[VectorCount];\r
+  Vertices[VertexCount - 1].Address = Base1;\r
+\r
+  Weight = (UINT8 *)&Vertices[VertexCount];\r
+  for (VertexIndex = 0; VertexIndex < VertexCount; VertexIndex++) {\r
+    //\r
+    // Set optional weight between vertices and self->self to 0\r
+    //\r
+    SetMem (&Weight[M (VertexIndex, 0)], VertexIndex + 1, 0);\r
+    //\r
+    // Set mandatory weight between vertices to MAX_WEIGHT\r
+    //\r
+    SetMem (&Weight[M (VertexIndex, VertexIndex + 1)], VertexCount - VertexIndex - 1, MAX_WEIGHT);\r
+\r
+    // Final result looks like:\r
+    //   00 FF FF FF\r
+    //   00 00 FF FF\r
+    //   00 00 00 FF\r
+    //   00 00 00 00\r
+  }\r
+\r
   //\r
-  // Set mandatory weight between any vector to max\r
-  // Set optional weight and between any vector and self->self to 0\r
-  // E.g.:\r
-  //   00 FF FF FF\r
-  //   00 00 FF FF\r
-  //   00 00 00 FF\r
-  //   00 00 00 00\r
+  // Set mandatory weight and optional weight for adjacent vertices\r
   //\r
-  for (VectorIndex = 0; VectorIndex < VectorCount; VectorIndex++) {\r
-    SetMem (&Weight[M(VectorIndex, 0)], VectorIndex + 1, 0);\r
-    if (VectorIndex != VectorCount - 1) {\r
-      Weight[M (VectorIndex, VectorIndex + 1)] = (DefaultType == Vector[VectorIndex].Type) ? 0 : 1;\r
-      SetMem (&Weight[M (VectorIndex, VectorIndex + 2)], VectorCount - VectorIndex - 2, MAX_WEIGHT);\r
+  for (VertexIndex = 0; VertexIndex < VertexCount - 1; VertexIndex++) {\r
+    if (Vertices[VertexIndex].Type != DefaultType) {\r
+      Weight[M (VertexIndex, VertexIndex + 1)] = 1;\r
+      Weight[O (VertexIndex, VertexIndex + 1)] = 0;\r
+    } else {\r
+      Weight[M (VertexIndex, VertexIndex + 1)] = 0;\r
+      Weight[O (VertexIndex, VertexIndex + 1)] = 1;\r
     }\r
   }\r
 \r
   for (TypeCount = 2; TypeCount <= 3; TypeCount++) {\r
-    for (Start = 0; Start < VectorCount; Start++) {\r
-      for (Stop = Start + 2; Stop < VectorCount; Stop++) {\r
-        ASSERT (Vector[Stop].Address > Vector[Start].Address);\r
-        Length = Vector[Stop].Address - Vector[Start].Address;\r
-        if (Length > Vector[Start].Alignment) {\r
+    for (Start = 0; Start < VertexCount; Start++) {\r
+      for (Stop = Start + 2; Stop < VertexCount; Stop++) {\r
+        ASSERT (Vertices[Stop].Address > Vertices[Start].Address);\r
+        Length = Vertices[Stop].Address - Vertices[Start].Address;\r
+        if (Length > Vertices[Start].Alignment) {\r
           //\r
           // Pickup a new Start when [Start, Stop) cannot be described by one MTRR.\r
           //\r
           break;\r
         }\r
-        if ((Weight[M(Start, Stop)] == MAX_WEIGHT) && MtrrLibIsPowerOfTwo (Length)) {\r
+\r
+        if ((Weight[M (Start, Stop)] == MAX_WEIGHT) && MtrrLibIsPowerOfTwo (Length)) {\r
           if (MtrrLibGetNumberOfTypes (\r
-                Ranges, RangeCount, Vector[Start].Address, Vector[Stop].Address - Vector[Start].Address, &Type\r
-                ) == TypeCount) {\r
+                Ranges,\r
+                RangeCount,\r
+                Vertices[Start].Address,\r
+                Vertices[Stop].Address - Vertices[Start].Address,\r
+                &Type\r
+                ) == TypeCount)\r
+          {\r
             //\r
             // Update the Weight[Start, Stop] using subtractive path.\r
             //\r
             MtrrLibCalculateSubtractivePath (\r
-              DefaultType, A0,\r
-              Ranges, RangeCount,\r
-              (UINT16)VectorCount, Vector, Weight,\r
-              Start, Stop, Type, TypeCount,\r
-              NULL, 0, NULL\r
+              DefaultType,\r
+              A0,\r
+              Ranges,\r
+              RangeCount,\r
+              (UINT16)VertexCount,\r
+              Vertices,\r
+              Weight,\r
+              Start,\r
+              Stop,\r
+              Type,\r
+              TypeCount,\r
+              NULL,\r
+              0,\r
+              NULL\r
               );\r
           } else if (TypeCount == 2) {\r
             //\r
@@ -1638,19 +1679,22 @@ MtrrLibCalculateMtrrs (
   }\r
 \r
   Status = RETURN_SUCCESS;\r
-  MtrrLibCalculateLeastMtrrs ((UINT16) VectorCount, Vector, Weight, 0, (UINT16) VectorCount - 1, FALSE);\r
-  Stop = (UINT16) VectorCount - 1;\r
+  MtrrLibCalculateLeastMtrrs ((UINT16)VertexCount, Vertices, Weight, 0, (UINT16)VertexCount - 1, FALSE);\r
+  Stop = (UINT16)VertexCount - 1;\r
   while (Stop != 0) {\r
-    Start = Vector[Stop].Previous;\r
+    Start     = Vertices[Stop].Previous;\r
     TypeCount = MAX_UINT8;\r
-    Type = 0;\r
-    if (Weight[M(Start, Stop)] != 0) {\r
-      TypeCount = MtrrLibGetNumberOfTypes (Ranges, RangeCount, Vector[Start].Address, Vector[Stop].Address - Vector[Start].Address, &Type);\r
-      Status = MtrrLibAppendVariableMtrr (\r
-        Mtrrs, MtrrCapacity, MtrrCount,\r
-        Vector[Start].Address, Vector[Stop].Address - Vector[Start].Address, \r
-        MtrrLibLowestType (Type)\r
-        );\r
+    Type      = 0;\r
+    if (Weight[M (Start, Stop)] != 0) {\r
+      TypeCount = MtrrLibGetNumberOfTypes (Ranges, RangeCount, Vertices[Start].Address, Vertices[Stop].Address - Vertices[Start].Address, &Type);\r
+      Status    = MtrrLibAppendVariableMtrr (\r
+                    Mtrrs,\r
+                    MtrrCapacity,\r
+                    MtrrCount,\r
+                    Vertices[Start].Address,\r
+                    Vertices[Stop].Address - Vertices[Start].Address,\r
+                    MtrrLibLowestType (Type)\r
+                    );\r
       if (RETURN_ERROR (Status)) {\r
         break;\r
       }\r
@@ -1662,26 +1706,41 @@ MtrrLibCalculateMtrrs (
       //\r
       if (TypeCount == MAX_UINT8) {\r
         TypeCount = MtrrLibGetNumberOfTypes (\r
-                      Ranges, RangeCount, Vector[Start].Address, Vector[Stop].Address - Vector[Start].Address, &Type\r
+                      Ranges,\r
+                      RangeCount,\r
+                      Vertices[Start].Address,\r
+                      Vertices[Stop].Address - Vertices[Start].Address,\r
+                      &Type\r
                       );\r
       }\r
+\r
       Status = MtrrLibCalculateSubtractivePath (\r
-                 DefaultType, A0,\r
-                 Ranges, RangeCount,\r
-                 (UINT16) VectorCount, Vector, Weight, Start, Stop,\r
-                 Type, TypeCount,\r
-                 Mtrrs, MtrrCapacity, MtrrCount\r
+                 DefaultType,\r
+                 A0,\r
+                 Ranges,\r
+                 RangeCount,\r
+                 (UINT16)VertexCount,\r
+                 Vertices,\r
+                 Weight,\r
+                 Start,\r
+                 Stop,\r
+                 Type,\r
+                 TypeCount,\r
+                 Mtrrs,\r
+                 MtrrCapacity,\r
+                 MtrrCount\r
                  );\r
       if (RETURN_ERROR (Status)) {\r
         break;\r
       }\r
     }\r
+\r
     Stop = Start;\r
   }\r
+\r
   return Status;\r
 }\r
 \r
-\r
 /**\r
   Apply the fixed MTRR settings to memory range array.\r
 \r
@@ -1702,26 +1761,33 @@ MtrrLibApplyFixedMtrrs (
   IN OUT UINTN                *RangeCount\r
   )\r
 {\r
-  RETURN_STATUS               Status;\r
-  UINTN                       MsrIndex;\r
-  UINTN                       Index;\r
-  MTRR_MEMORY_CACHE_TYPE      MemoryType;\r
-  UINT64                      Base;\r
+  RETURN_STATUS           Status;\r
+  UINTN                   MsrIndex;\r
+  UINTN                   Index;\r
+  MTRR_MEMORY_CACHE_TYPE  MemoryType;\r
+  UINT64                  Base;\r
 \r
   Base = 0;\r
   for (MsrIndex = 0; MsrIndex < ARRAY_SIZE (mMtrrLibFixedMtrrTable); MsrIndex++) {\r
     ASSERT (Base == mMtrrLibFixedMtrrTable[MsrIndex].BaseAddress);\r
     for (Index = 0; Index < sizeof (UINT64); Index++) {\r
       MemoryType = (MTRR_MEMORY_CACHE_TYPE)((UINT8 *)(&Fixed->Mtrr[MsrIndex]))[Index];\r
-      Status = MtrrLibSetMemoryType (\r
-                 Ranges, RangeCapacity, RangeCount, Base, mMtrrLibFixedMtrrTable[MsrIndex].Length, MemoryType\r
-                 );\r
+      Status     = MtrrLibSetMemoryType (\r
+                     Ranges,\r
+                     RangeCapacity,\r
+                     RangeCount,\r
+                     Base,\r
+                     mMtrrLibFixedMtrrTable[MsrIndex].Length,\r
+                     MemoryType\r
+                     );\r
       if (Status == RETURN_OUT_OF_RESOURCES) {\r
         return Status;\r
       }\r
+\r
       Base += mMtrrLibFixedMtrrTable[MsrIndex].Length;\r
     }\r
   }\r
+\r
   ASSERT (Base == BASE_1MB);\r
   return RETURN_SUCCESS;\r
 }\r
@@ -1740,15 +1806,15 @@ MtrrLibApplyFixedMtrrs (
 **/\r
 RETURN_STATUS\r
 MtrrLibApplyVariableMtrrs (\r
-  IN     CONST MTRR_MEMORY_RANGE *VariableMtrr,\r
-  IN     UINT32                  VariableMtrrCount,\r
-  IN OUT MTRR_MEMORY_RANGE       *Ranges,\r
-  IN     UINTN                   RangeCapacity,\r
-  IN OUT UINTN                   *RangeCount\r
+  IN     CONST MTRR_MEMORY_RANGE  *VariableMtrr,\r
+  IN     UINT32                   VariableMtrrCount,\r
+  IN OUT MTRR_MEMORY_RANGE        *Ranges,\r
+  IN     UINTN                    RangeCapacity,\r
+  IN OUT UINTN                    *RangeCount\r
   )\r
 {\r
-  RETURN_STATUS                  Status;\r
-  UINTN                          Index;\r
+  RETURN_STATUS  Status;\r
+  UINTN          Index;\r
 \r
   //\r
   // WT > WB\r
@@ -1762,9 +1828,13 @@ MtrrLibApplyVariableMtrrs (
   for (Index = 0; Index < VariableMtrrCount; Index++) {\r
     if ((VariableMtrr[Index].Length != 0) && (VariableMtrr[Index].Type == CacheWriteBack)) {\r
       Status = MtrrLibSetMemoryType (\r
-        Ranges, RangeCapacity, RangeCount,\r
-        VariableMtrr[Index].BaseAddress, VariableMtrr[Index].Length, VariableMtrr[Index].Type\r
-      );\r
+                 Ranges,\r
+                 RangeCapacity,\r
+                 RangeCount,\r
+                 VariableMtrr[Index].BaseAddress,\r
+                 VariableMtrr[Index].Length,\r
+                 VariableMtrr[Index].Type\r
+                 );\r
       if (Status == RETURN_OUT_OF_RESOURCES) {\r
         return Status;\r
       }\r
@@ -1775,11 +1845,16 @@ MtrrLibApplyVariableMtrrs (
   // 2. Set other types than WB or UC\r
   //\r
   for (Index = 0; Index < VariableMtrrCount; Index++) {\r
-    if ((VariableMtrr[Index].Length != 0) && \r
-        (VariableMtrr[Index].Type != CacheWriteBack) && (VariableMtrr[Index].Type != CacheUncacheable)) {\r
+    if ((VariableMtrr[Index].Length != 0) &&\r
+        (VariableMtrr[Index].Type != CacheWriteBack) && (VariableMtrr[Index].Type != CacheUncacheable))\r
+    {\r
       Status = MtrrLibSetMemoryType (\r
-                 Ranges, RangeCapacity, RangeCount,\r
-                 VariableMtrr[Index].BaseAddress, VariableMtrr[Index].Length, VariableMtrr[Index].Type\r
+                 Ranges,\r
+                 RangeCapacity,\r
+                 RangeCount,\r
+                 VariableMtrr[Index].BaseAddress,\r
+                 VariableMtrr[Index].Length,\r
+                 VariableMtrr[Index].Type\r
                  );\r
       if (Status == RETURN_OUT_OF_RESOURCES) {\r
         return Status;\r
@@ -1791,16 +1866,21 @@ MtrrLibApplyVariableMtrrs (
   // 3. Set UC\r
   //\r
   for (Index = 0; Index < VariableMtrrCount; Index++) {\r
-    if (VariableMtrr[Index].Length != 0 && VariableMtrr[Index].Type == CacheUncacheable) {\r
+    if ((VariableMtrr[Index].Length != 0) && (VariableMtrr[Index].Type == CacheUncacheable)) {\r
       Status = MtrrLibSetMemoryType (\r
-                 Ranges, RangeCapacity, RangeCount,\r
-                 VariableMtrr[Index].BaseAddress, VariableMtrr[Index].Length, VariableMtrr[Index].Type\r
+                 Ranges,\r
+                 RangeCapacity,\r
+                 RangeCount,\r
+                 VariableMtrr[Index].BaseAddress,\r
+                 VariableMtrr[Index].Length,\r
+                 VariableMtrr[Index].Type\r
                  );\r
       if (Status == RETURN_OUT_OF_RESOURCES) {\r
         return Status;\r
       }\r
     }\r
   }\r
+\r
   return RETURN_SUCCESS;\r
 }\r
 \r
@@ -1815,35 +1895,37 @@ MtrrLibApplyVariableMtrrs (
 **/\r
 UINT8\r
 MtrrLibGetCompatibleTypes (\r
-  IN CONST MTRR_MEMORY_RANGE *Ranges,\r
-  IN UINTN                   RangeCount\r
+  IN CONST MTRR_MEMORY_RANGE  *Ranges,\r
+  IN UINTN                    RangeCount\r
   )\r
 {\r
   ASSERT (RangeCount != 0);\r
 \r
   switch (Ranges[0].Type) {\r
-  case CacheWriteBack:\r
-  case CacheWriteThrough:\r
-    return (1 << CacheWriteBack) | (1 << CacheWriteThrough) | (1 << CacheUncacheable);\r
-    break;\r
-\r
-  case CacheWriteCombining:\r
-  case CacheWriteProtected:\r
-    return (1 << Ranges[0].Type) | (1 << CacheUncacheable);\r
-    break;\r
-\r
-  case CacheUncacheable:\r
-    if (RangeCount == 1) {\r
-      return (1 << CacheUncacheable);\r
-    }\r
-    return MtrrLibGetCompatibleTypes (&Ranges[1], RangeCount - 1);\r
-    break;\r
+    case CacheWriteBack:\r
+    case CacheWriteThrough:\r
+      return (1 << CacheWriteBack) | (1 << CacheWriteThrough) | (1 << CacheUncacheable);\r
+      break;\r
+\r
+    case CacheWriteCombining:\r
+    case CacheWriteProtected:\r
+      return (1 << Ranges[0].Type) | (1 << CacheUncacheable);\r
+      break;\r
+\r
+    case CacheUncacheable:\r
+      if (RangeCount == 1) {\r
+        return (1 << CacheUncacheable);\r
+      }\r
 \r
-  case CacheInvalid:\r
-  default:\r
-    ASSERT (FALSE);\r
-    break;\r
+      return MtrrLibGetCompatibleTypes (&Ranges[1], RangeCount - 1);\r
+      break;\r
+\r
+    case CacheInvalid:\r
+    default:\r
+      ASSERT (FALSE);\r
+      break;\r
   }\r
+\r
   return 0;\r
 }\r
 \r
@@ -1860,15 +1942,15 @@ MtrrLibGetCompatibleTypes (
 **/\r
 VOID\r
 MtrrLibMergeVariableMtrr (\r
-  MTRR_MEMORY_RANGE *DstMtrrs,\r
-  UINT32            DstMtrrCount,\r
-  MTRR_MEMORY_RANGE *SrcMtrrs,\r
-  UINT32            SrcMtrrCount,\r
-  BOOLEAN           *Modified\r
+  MTRR_MEMORY_RANGE  *DstMtrrs,\r
+  UINT32             DstMtrrCount,\r
+  MTRR_MEMORY_RANGE  *SrcMtrrs,\r
+  UINT32             SrcMtrrCount,\r
+  BOOLEAN            *Modified\r
   )\r
 {\r
-  UINT32          DstIndex;\r
-  UINT32          SrcIndex;\r
+  UINT32  DstIndex;\r
+  UINT32  SrcIndex;\r
 \r
   ASSERT (SrcMtrrCount <= DstMtrrCount);\r
 \r
@@ -1878,10 +1960,12 @@ MtrrLibMergeVariableMtrr (
     if (DstMtrrs[DstIndex].Length == 0) {\r
       continue;\r
     }\r
+\r
     for (SrcIndex = 0; SrcIndex < SrcMtrrCount; SrcIndex++) {\r
-      if (DstMtrrs[DstIndex].BaseAddress == SrcMtrrs[SrcIndex].BaseAddress &&\r
-        DstMtrrs[DstIndex].Length == SrcMtrrs[SrcIndex].Length &&\r
-        DstMtrrs[DstIndex].Type == SrcMtrrs[SrcIndex].Type) {\r
+      if ((DstMtrrs[DstIndex].BaseAddress == SrcMtrrs[SrcIndex].BaseAddress) &&\r
+          (DstMtrrs[DstIndex].Length == SrcMtrrs[SrcIndex].Length) &&\r
+          (DstMtrrs[DstIndex].Type == SrcMtrrs[SrcIndex].Type))\r
+      {\r
         break;\r
       }\r
     }\r
@@ -1891,7 +1975,7 @@ MtrrLibMergeVariableMtrr (
       // Remove the one from DstMtrrs which is not in SrcMtrrs\r
       //\r
       DstMtrrs[DstIndex].Length = 0;\r
-      Modified[DstIndex] = TRUE;\r
+      Modified[DstIndex]        = TRUE;\r
     } else {\r
       //\r
       // Remove the one from SrcMtrrs which is also in DstMtrrs\r
@@ -1907,7 +1991,6 @@ MtrrLibMergeVariableMtrr (
   DstIndex = 0;\r
   for (SrcIndex = 0; SrcIndex < SrcMtrrCount; SrcIndex++) {\r
     if (SrcMtrrs[SrcIndex].Length != 0) {\r
-\r
       //\r
       // Find the empty slot in DstMtrrs\r
       //\r
@@ -1915,8 +1998,10 @@ MtrrLibMergeVariableMtrr (
         if (DstMtrrs[DstIndex].Length == 0) {\r
           break;\r
         }\r
+\r
         DstIndex++;\r
       }\r
+\r
       ASSERT (DstIndex < DstMtrrCount);\r
       CopyMem (&DstMtrrs[DstIndex], &SrcMtrrs[SrcIndex], sizeof (SrcMtrrs[0]));\r
       Modified[DstIndex] = TRUE;\r
@@ -1945,30 +2030,30 @@ MtrrLibMergeVariableMtrr (
 **/\r
 RETURN_STATUS\r
 MtrrLibSetMemoryRanges (\r
-  IN MTRR_MEMORY_CACHE_TYPE DefaultType,\r
-  IN UINT64                 A0,\r
-  IN MTRR_MEMORY_RANGE      *Ranges,\r
-  IN UINTN                  RangeCount,\r
-  IN VOID                   *Scratch,\r
-  IN OUT UINTN              *ScratchSize,\r
-  OUT MTRR_MEMORY_RANGE     *VariableMtrr,\r
-  IN UINT32                 VariableMtrrCapacity,\r
-  OUT UINT32                *VariableMtrrCount\r
+  IN MTRR_MEMORY_CACHE_TYPE  DefaultType,\r
+  IN UINT64                  A0,\r
+  IN MTRR_MEMORY_RANGE       *Ranges,\r
+  IN UINTN                   RangeCount,\r
+  IN VOID                    *Scratch,\r
+  IN OUT UINTN               *ScratchSize,\r
+  OUT MTRR_MEMORY_RANGE      *VariableMtrr,\r
+  IN UINT32                  VariableMtrrCapacity,\r
+  OUT UINT32                 *VariableMtrrCount\r
   )\r
 {\r
-  RETURN_STATUS             Status;\r
-  UINT32                    Index;\r
-  UINT64                    Base0;\r
-  UINT64                    Base1;\r
-  UINT64                    Alignment;\r
-  UINT8                     CompatibleTypes;\r
-  UINT64                    Length;\r
-  UINT32                    End;\r
-  UINTN                     ActualScratchSize;\r
-  UINTN                     BiggestScratchSize;\r
+  RETURN_STATUS  Status;\r
+  UINT32         Index;\r
+  UINT64         Base0;\r
+  UINT64         Base1;\r
+  UINT64         Alignment;\r
+  UINT8          CompatibleTypes;\r
+  UINT64         Length;\r
+  UINT32         End;\r
+  UINTN          ActualScratchSize;\r
+  UINTN          BiggestScratchSize;\r
 \r
   *VariableMtrrCount = 0;\r
-  \r
+\r
   //\r
   // Since the whole ranges need multiple calls of MtrrLibCalculateMtrrs().\r
   // Each call needs different scratch buffer size.\r
@@ -1990,21 +2075,26 @@ MtrrLibSetMemoryRanges (
       while (Base0 + Alignment <= Ranges[Index].BaseAddress + Ranges[Index].Length) {\r
         if ((BiggestScratchSize <= *ScratchSize) && (Ranges[Index].Type != DefaultType)) {\r
           Status = MtrrLibAppendVariableMtrr (\r
-            VariableMtrr, VariableMtrrCapacity, VariableMtrrCount,\r
-            Base0, Alignment, Ranges[Index].Type\r
-            );\r
+                     VariableMtrr,\r
+                     VariableMtrrCapacity,\r
+                     VariableMtrrCount,\r
+                     Base0,\r
+                     Alignment,\r
+                     Ranges[Index].Type\r
+                     );\r
           if (RETURN_ERROR (Status)) {\r
             return Status;\r
           }\r
         }\r
-        Base0 += Alignment;\r
+\r
+        Base0    += Alignment;\r
         Alignment = MtrrLibBiggestAlignment (Base0, A0);\r
       }\r
 \r
       //\r
       // Remove the above range from Ranges[Index]\r
       //\r
-      Ranges[Index].Length -= Base0 - Ranges[Index].BaseAddress;\r
+      Ranges[Index].Length     -= Base0 - Ranges[Index].BaseAddress;\r
       Ranges[Index].BaseAddress = Base0;\r
       if (Ranges[Index].Length != 0) {\r
         break;\r
@@ -2031,8 +2121,10 @@ MtrrLibSetMemoryRanges (
       if (((1 << Ranges[End + 1].Type) & CompatibleTypes) == 0) {\r
         break;\r
       }\r
+\r
       End++;\r
     }\r
+\r
     Alignment = MtrrLibBiggestAlignment (Base0, A0);\r
     Length    = GetPowerOfTwo64 (Ranges[End].BaseAddress + Ranges[End].Length - Base0);\r
     Base1     = Base0 + MIN (Alignment, Length);\r
@@ -2045,18 +2137,24 @@ MtrrLibSetMemoryRanges (
       if (Base1 <= Ranges[End + 1].BaseAddress) {\r
         break;\r
       }\r
+\r
       End++;\r
     }\r
 \r
-    Length = Ranges[End].Length;\r
+    Length             = Ranges[End].Length;\r
     Ranges[End].Length = Base1 - Ranges[End].BaseAddress;\r
     ActualScratchSize  = *ScratchSize;\r
-    Status = MtrrLibCalculateMtrrs (\r
-               DefaultType, A0,\r
-               &Ranges[Index], End + 1 - Index,\r
-               Scratch, &ActualScratchSize,\r
-               VariableMtrr, VariableMtrrCapacity, VariableMtrrCount\r
-               );\r
+    Status             = MtrrLibCalculateMtrrs (\r
+                           DefaultType,\r
+                           A0,\r
+                           &Ranges[Index],\r
+                           End + 1 - Index,\r
+                           Scratch,\r
+                           &ActualScratchSize,\r
+                           VariableMtrr,\r
+                           VariableMtrrCapacity,\r
+                           VariableMtrrCount\r
+                           );\r
     if (Status == RETURN_BUFFER_TOO_SMALL) {\r
       BiggestScratchSize = MAX (BiggestScratchSize, ActualScratchSize);\r
       //\r
@@ -2065,14 +2163,15 @@ MtrrLibSetMemoryRanges (
       //\r
       Status = RETURN_SUCCESS;\r
     }\r
+\r
     if (RETURN_ERROR (Status)) {\r
       return Status;\r
     }\r
 \r
     if (Length != Ranges[End].Length) {\r
       Ranges[End].BaseAddress = Base1;\r
-      Ranges[End].Length = Length - Ranges[End].Length;\r
-      Index = End;\r
+      Ranges[End].Length      = Length - Ranges[End].Length;\r
+      Index                   = End;\r
     } else {\r
       Index = End + 1;\r
     }\r
@@ -2082,6 +2181,7 @@ MtrrLibSetMemoryRanges (
     *ScratchSize = BiggestScratchSize;\r
     return RETURN_BUFFER_TOO_SMALL;\r
   }\r
+\r
   return RETURN_SUCCESS;\r
 }\r
 \r
@@ -2089,8 +2189,8 @@ MtrrLibSetMemoryRanges (
   Set the below-1MB memory attribute to fixed MTRR buffer.\r
   Modified flag array indicates which fixed MTRR is modified.\r
 \r
-  @param [in, out] FixedSettings Fixed MTRR buffer.\r
-  @param [out]     Modified      Flag array indicating which MTRR is modified.\r
+  @param [in, out] ClearMasks    The bits (when set) to clear in the fixed MTRR MSR.\r
+  @param [in, out] OrMasks       The bits to set in the fixed MTRR MSR.\r
   @param [in]      BaseAddress   Base address.\r
   @param [in]      Length        Length.\r
   @param [in]      Type          Memory type.\r
@@ -2101,48 +2201,31 @@ MtrrLibSetMemoryRanges (
 **/\r
 RETURN_STATUS\r
 MtrrLibSetBelow1MBMemoryAttribute (\r
-  IN OUT MTRR_FIXED_SETTINGS     *FixedSettings,\r
-  OUT BOOLEAN                    *Modified,\r
-  IN PHYSICAL_ADDRESS            BaseAddress,\r
-  IN UINT64                      Length,\r
-  IN MTRR_MEMORY_CACHE_TYPE      Type\r
+  IN OUT UINT64              *ClearMasks,\r
+  IN OUT UINT64              *OrMasks,\r
+  IN PHYSICAL_ADDRESS        BaseAddress,\r
+  IN UINT64                  Length,\r
+  IN MTRR_MEMORY_CACHE_TYPE  Type\r
   )\r
 {\r
-  RETURN_STATUS             Status;\r
-  UINT32                    MsrIndex;\r
-  UINT64                    ClearMask;\r
-  UINT64                    OrMask;\r
-  UINT64                    ClearMasks[ARRAY_SIZE (mMtrrLibFixedMtrrTable)];\r
-  UINT64                    OrMasks[ARRAY_SIZE (mMtrrLibFixedMtrrTable)];\r
-  BOOLEAN                   LocalModified[ARRAY_SIZE (mMtrrLibFixedMtrrTable)];\r
+  RETURN_STATUS  Status;\r
+  UINT32         MsrIndex;\r
+  UINT64         ClearMask;\r
+  UINT64         OrMask;\r
 \r
   ASSERT (BaseAddress < BASE_1MB);\r
 \r
-  SetMem (LocalModified, sizeof (LocalModified), FALSE);\r
-\r
-  //\r
-  // (Value & ~0 | 0) still equals to (Value)\r
-  //\r
-  SetMem (ClearMasks, sizeof (ClearMasks), 0);\r
-  SetMem (OrMasks, sizeof (OrMasks), 0);\r
-\r
   MsrIndex = (UINT32)-1;\r
   while ((BaseAddress < BASE_1MB) && (Length != 0)) {\r
     Status = MtrrLibProgramFixedMtrr (Type, &BaseAddress, &Length, &MsrIndex, &ClearMask, &OrMask);\r
     if (RETURN_ERROR (Status)) {\r
       return Status;\r
     }\r
-    ClearMasks[MsrIndex]    = ClearMask;\r
-    OrMasks[MsrIndex]       = OrMask;\r
-    Modified[MsrIndex]      = TRUE;\r
-    LocalModified[MsrIndex] = TRUE;\r
-  }\r
 \r
-  for (MsrIndex = 0; MsrIndex < ARRAY_SIZE (mMtrrLibFixedMtrrTable); MsrIndex++) {\r
-    if (LocalModified[MsrIndex]) {\r
-      FixedSettings->Mtrr[MsrIndex] = (FixedSettings->Mtrr[MsrIndex] & ~ClearMasks[MsrIndex]) | OrMasks[MsrIndex];\r
-    }\r
+    ClearMasks[MsrIndex] = ClearMasks[MsrIndex] | ClearMask;\r
+    OrMasks[MsrIndex]    = (OrMasks[MsrIndex] & ~ClearMask) | OrMask;\r
   }\r
+\r
   return RETURN_SUCCESS;\r
 }\r
 \r
@@ -2175,39 +2258,39 @@ MtrrLibSetBelow1MBMemoryAttribute (
 RETURN_STATUS\r
 EFIAPI\r
 MtrrSetMemoryAttributesInMtrrSettings (\r
-  IN OUT MTRR_SETTINGS           *MtrrSetting,\r
-  IN     VOID                    *Scratch,\r
-  IN OUT UINTN                   *ScratchSize,\r
-  IN     CONST MTRR_MEMORY_RANGE *Ranges,\r
-  IN     UINTN                   RangeCount\r
+  IN OUT MTRR_SETTINGS            *MtrrSetting,\r
+  IN     VOID                     *Scratch,\r
+  IN OUT UINTN                    *ScratchSize,\r
+  IN     CONST MTRR_MEMORY_RANGE  *Ranges,\r
+  IN     UINTN                    RangeCount\r
   )\r
 {\r
-  RETURN_STATUS             Status;\r
-  UINT32                    Index;\r
-  UINT64                    BaseAddress;\r
-  UINT64                    Length;\r
-  BOOLEAN                   Above1MbExist;\r
-\r
-  UINT64                    MtrrValidBitsMask;\r
-  UINT64                    MtrrValidAddressMask;\r
-  MTRR_MEMORY_CACHE_TYPE    DefaultType;\r
-  MTRR_VARIABLE_SETTINGS    VariableSettings;\r
-  MTRR_MEMORY_RANGE         WorkingRanges[2 * ARRAY_SIZE (MtrrSetting->Variables.Mtrr) + 2];\r
-  UINTN                     WorkingRangeCount;\r
-  BOOLEAN                   Modified;\r
-  MTRR_VARIABLE_SETTING     VariableSetting;\r
-  UINT32                    OriginalVariableMtrrCount;\r
-  UINT32                    FirmwareVariableMtrrCount;\r
-  UINT32                    WorkingVariableMtrrCount;\r
-  MTRR_MEMORY_RANGE         OriginalVariableMtrr[ARRAY_SIZE (MtrrSetting->Variables.Mtrr)];\r
-  MTRR_MEMORY_RANGE         WorkingVariableMtrr[ARRAY_SIZE (MtrrSetting->Variables.Mtrr)];\r
-  BOOLEAN                   VariableSettingModified[ARRAY_SIZE (MtrrSetting->Variables.Mtrr)];\r
-\r
-  BOOLEAN                   FixedSettingsModified[ARRAY_SIZE (mMtrrLibFixedMtrrTable)];\r
-  MTRR_FIXED_SETTINGS       WorkingFixedSettings;\r
-\r
-  MTRR_CONTEXT              MtrrContext;\r
-  BOOLEAN                   MtrrContextValid;\r
+  RETURN_STATUS  Status;\r
+  UINT32         Index;\r
+  UINT64         BaseAddress;\r
+  UINT64         Length;\r
+  BOOLEAN        Above1MbExist;\r
+\r
+  UINT64                  MtrrValidBitsMask;\r
+  UINT64                  MtrrValidAddressMask;\r
+  MTRR_MEMORY_CACHE_TYPE  DefaultType;\r
+  MTRR_VARIABLE_SETTINGS  VariableSettings;\r
+  MTRR_MEMORY_RANGE       WorkingRanges[2 * ARRAY_SIZE (MtrrSetting->Variables.Mtrr) + 2];\r
+  UINTN                   WorkingRangeCount;\r
+  BOOLEAN                 Modified;\r
+  MTRR_VARIABLE_SETTING   VariableSetting;\r
+  UINT32                  OriginalVariableMtrrCount;\r
+  UINT32                  FirmwareVariableMtrrCount;\r
+  UINT32                  WorkingVariableMtrrCount;\r
+  MTRR_MEMORY_RANGE       OriginalVariableMtrr[ARRAY_SIZE (MtrrSetting->Variables.Mtrr)];\r
+  MTRR_MEMORY_RANGE       WorkingVariableMtrr[ARRAY_SIZE (MtrrSetting->Variables.Mtrr)];\r
+  BOOLEAN                 VariableSettingModified[ARRAY_SIZE (MtrrSetting->Variables.Mtrr)];\r
+\r
+  UINT64  ClearMasks[ARRAY_SIZE (mMtrrLibFixedMtrrTable)];\r
+  UINT64  OrMasks[ARRAY_SIZE (mMtrrLibFixedMtrrTable)];\r
+\r
+  MTRR_CONTEXT  MtrrContext;\r
+  BOOLEAN       MtrrContextValid;\r
 \r
   Status = RETURN_SUCCESS;\r
   MtrrLibInitializeMtrrMask (&MtrrValidBitsMask, &MtrrValidAddressMask);\r
@@ -2216,10 +2299,6 @@ MtrrSetMemoryAttributesInMtrrSettings (
   // TRUE indicating the accordingly Variable setting needs modificaiton in OriginalVariableMtrr.\r
   //\r
   SetMem (VariableSettingModified, ARRAY_SIZE (VariableSettingModified), FALSE);\r
-  //\r
-  // TRUE indicating the accordingly Fixed setting needs modification in WorkingFixedSettings.\r
-  //\r
-  SetMem (FixedSettingsModified, ARRAY_SIZE (FixedSettingsModified), FALSE);\r
 \r
   //\r
   // TRUE indicating the caller requests to set variable MTRRs.\r
@@ -2230,18 +2309,25 @@ MtrrSetMemoryAttributesInMtrrSettings (
   //\r
   // 0. Dump the requests.\r
   //\r
-  DEBUG_CODE (\r
-    DEBUG ((DEBUG_CACHE, "Mtrr: Set Mem Attribute to %a, ScratchSize = %x%a",\r
-            (MtrrSetting == NULL) ? "Hardware" : "Buffer", *ScratchSize,\r
-            (RangeCount <= 1) ? "," : "\n"\r
-            ));\r
-    for (Index = 0; Index < RangeCount; Index++) {\r
-      DEBUG ((DEBUG_CACHE, " %a: [%016lx, %016lx)\n",\r
-              mMtrrMemoryCacheTypeShortName[MIN (Ranges[Index].Type, CacheInvalid)],\r
-              Ranges[Index].BaseAddress, Ranges[Index].BaseAddress + Ranges[Index].Length\r
-              ));\r
-    }\r
-  );\r
+  DEBUG_CODE_BEGIN ();\r
+  DEBUG ((\r
+    DEBUG_CACHE,\r
+    "Mtrr: Set Mem Attribute to %a, ScratchSize = %x%a",\r
+    (MtrrSetting == NULL) ? "Hardware" : "Buffer",\r
+    *ScratchSize,\r
+    (RangeCount <= 1) ? "," : "\n"\r
+    ));\r
+  for (Index = 0; Index < RangeCount; Index++) {\r
+    DEBUG ((\r
+      DEBUG_CACHE,\r
+      " %a: [%016lx, %016lx)\n",\r
+      mMtrrMemoryCacheTypeShortName[MIN (Ranges[Index].Type, CacheInvalid)],\r
+      Ranges[Index].BaseAddress,\r
+      Ranges[Index].BaseAddress + Ranges[Index].Length\r
+      ));\r
+  }\r
+\r
+  DEBUG_CODE_END ();\r
 \r
   //\r
   // 1. Validate the parameters.\r
@@ -2256,20 +2342,30 @@ MtrrSetMemoryAttributesInMtrrSettings (
       Status = RETURN_INVALID_PARAMETER;\r
       goto Exit;\r
     }\r
+\r
     if (((Ranges[Index].BaseAddress & ~MtrrValidAddressMask) != 0) ||\r
-        ((Ranges[Index].Length & ~MtrrValidAddressMask) != 0)\r
-        ) {\r
+        ((((Ranges[Index].BaseAddress + Ranges[Index].Length) & ~MtrrValidAddressMask) != 0) &&\r
+         ((Ranges[Index].BaseAddress + Ranges[Index].Length) != MtrrValidBitsMask + 1))\r
+        )\r
+    {\r
+      //\r
+      // Either the BaseAddress or the Limit doesn't follow the alignment requirement.\r
+      // Note: It's still valid if Limit doesn't follow the alignment requirement but equals to MAX Address.\r
+      //\r
       Status = RETURN_UNSUPPORTED;\r
       goto Exit;\r
     }\r
+\r
     if ((Ranges[Index].Type != CacheUncacheable) &&\r
         (Ranges[Index].Type != CacheWriteCombining) &&\r
         (Ranges[Index].Type != CacheWriteThrough) &&\r
         (Ranges[Index].Type != CacheWriteProtected) &&\r
-        (Ranges[Index].Type != CacheWriteBack)) {\r
+        (Ranges[Index].Type != CacheWriteBack))\r
+    {\r
       Status = RETURN_INVALID_PARAMETER;\r
       goto Exit;\r
     }\r
+\r
     if (Ranges[Index].BaseAddress + Ranges[Index].Length > BASE_1MB) {\r
       Above1MbExist = TRUE;\r
     }\r
@@ -2285,19 +2381,26 @@ MtrrSetMemoryAttributesInMtrrSettings (
     OriginalVariableMtrrCount = GetVariableMtrrCountWorker ();\r
     MtrrGetVariableMtrrWorker (MtrrSetting, OriginalVariableMtrrCount, &VariableSettings);\r
     MtrrLibGetRawVariableRanges (\r
-      &VariableSettings, OriginalVariableMtrrCount,\r
-      MtrrValidBitsMask, MtrrValidAddressMask, OriginalVariableMtrr\r
+      &VariableSettings,\r
+      OriginalVariableMtrrCount,\r
+      MtrrValidBitsMask,\r
+      MtrrValidAddressMask,\r
+      OriginalVariableMtrr\r
       );\r
 \r
-    DefaultType = MtrrGetDefaultMemoryTypeWorker (MtrrSetting);\r
-    WorkingRangeCount = 1;\r
+    DefaultType                  = MtrrGetDefaultMemoryTypeWorker (MtrrSetting);\r
+    WorkingRangeCount            = 1;\r
     WorkingRanges[0].BaseAddress = 0;\r
     WorkingRanges[0].Length      = MtrrValidBitsMask + 1;\r
     WorkingRanges[0].Type        = DefaultType;\r
 \r
     Status = MtrrLibApplyVariableMtrrs (\r
-               OriginalVariableMtrr, OriginalVariableMtrrCount,\r
-               WorkingRanges, ARRAY_SIZE (WorkingRanges), &WorkingRangeCount);\r
+               OriginalVariableMtrr,\r
+               OriginalVariableMtrrCount,\r
+               WorkingRanges,\r
+               ARRAY_SIZE (WorkingRanges),\r
+               &WorkingRangeCount\r
+               );\r
     ASSERT_RETURN_ERROR (Status);\r
 \r
     ASSERT (OriginalVariableMtrrCount >= PcdGet32 (PcdCpuNumberOfReservedVariableMtrrs));\r
@@ -2308,8 +2411,12 @@ MtrrSetMemoryAttributesInMtrrSettings (
     // 2.2. Force [0, 1M) to UC, so that it doesn't impact subtraction algorithm.\r
     //\r
     Status = MtrrLibSetMemoryType (\r
-               WorkingRanges, ARRAY_SIZE (WorkingRanges), &WorkingRangeCount,\r
-               0, SIZE_1MB, CacheUncacheable\r
+               WorkingRanges,\r
+               ARRAY_SIZE (WorkingRanges),\r
+               &WorkingRangeCount,\r
+               0,\r
+               SIZE_1MB,\r
+               CacheUncacheable\r
                );\r
     ASSERT (Status != RETURN_OUT_OF_RESOURCES);\r
 \r
@@ -2319,17 +2426,23 @@ MtrrSetMemoryAttributesInMtrrSettings (
     Modified = FALSE;\r
     for (Index = 0; Index < RangeCount; Index++) {\r
       BaseAddress = Ranges[Index].BaseAddress;\r
-      Length = Ranges[Index].Length;\r
+      Length      = Ranges[Index].Length;\r
       if (BaseAddress < BASE_1MB) {\r
         if (Length <= BASE_1MB - BaseAddress) {\r
           continue;\r
         }\r
-        Length -= BASE_1MB - BaseAddress;\r
+\r
+        Length     -= BASE_1MB - BaseAddress;\r
         BaseAddress = BASE_1MB;\r
       }\r
+\r
       Status = MtrrLibSetMemoryType (\r
-                 WorkingRanges, ARRAY_SIZE (WorkingRanges), &WorkingRangeCount,\r
-                 BaseAddress, Length, Ranges[Index].Type\r
+                 WorkingRanges,\r
+                 ARRAY_SIZE (WorkingRanges),\r
+                 &WorkingRangeCount,\r
+                 BaseAddress,\r
+                 Length,\r
+                 Ranges[Index].Type\r
                  );\r
       if (Status == RETURN_ALREADY_STARTED) {\r
         Status = RETURN_SUCCESS;\r
@@ -2347,9 +2460,15 @@ MtrrSetMemoryAttributesInMtrrSettings (
       //      Buffer Too Small may be returned if the scratch buffer size is insufficient.\r
       //\r
       Status = MtrrLibSetMemoryRanges (\r
-                 DefaultType, LShiftU64 (1, (UINTN)HighBitSet64 (MtrrValidBitsMask)), WorkingRanges, WorkingRangeCount,\r
-                 Scratch, ScratchSize,\r
-                 WorkingVariableMtrr, FirmwareVariableMtrrCount + 1, &WorkingVariableMtrrCount\r
+                 DefaultType,\r
+                 LShiftU64 (1, (UINTN)HighBitSet64 (MtrrValidBitsMask)),\r
+                 WorkingRanges,\r
+                 WorkingRangeCount,\r
+                 Scratch,\r
+                 ScratchSize,\r
+                 WorkingVariableMtrr,\r
+                 FirmwareVariableMtrrCount + 1,\r
+                 &WorkingVariableMtrrCount\r
                  );\r
       if (RETURN_ERROR (Status)) {\r
         goto Exit;\r
@@ -2359,11 +2478,12 @@ MtrrSetMemoryAttributesInMtrrSettings (
       // 2.5. Remove the [0, 1MB) MTRR if it still exists (not merged with other range)\r
       //\r
       for (Index = 0; Index < WorkingVariableMtrrCount; Index++) {\r
-        if (WorkingVariableMtrr[Index].BaseAddress == 0 && WorkingVariableMtrr[Index].Length == SIZE_1MB) {\r
+        if ((WorkingVariableMtrr[Index].BaseAddress == 0) && (WorkingVariableMtrr[Index].Length == SIZE_1MB)) {\r
           ASSERT (WorkingVariableMtrr[Index].Type == CacheUncacheable);\r
           WorkingVariableMtrrCount--;\r
           CopyMem (\r
-            &WorkingVariableMtrr[Index], &WorkingVariableMtrr[Index + 1],\r
+            &WorkingVariableMtrr[Index],\r
+            &WorkingVariableMtrr[Index + 1],\r
             (WorkingVariableMtrrCount - Index) * sizeof (WorkingVariableMtrr[0])\r
             );\r
           break;\r
@@ -2380,25 +2500,33 @@ MtrrSetMemoryAttributesInMtrrSettings (
       //      Make sure least modification is made to OriginalVariableMtrr.\r
       //\r
       MtrrLibMergeVariableMtrr (\r
-        OriginalVariableMtrr, OriginalVariableMtrrCount,\r
-        WorkingVariableMtrr, WorkingVariableMtrrCount,\r
+        OriginalVariableMtrr,\r
+        OriginalVariableMtrrCount,\r
+        WorkingVariableMtrr,\r
+        WorkingVariableMtrrCount,\r
         VariableSettingModified\r
-      );\r
+        );\r
     }\r
   }\r
 \r
   //\r
   // 3. Apply the below-1MB memory attribute settings.\r
   //\r
-  ZeroMem (WorkingFixedSettings.Mtrr, sizeof (WorkingFixedSettings.Mtrr));\r
+  // (Value & ~0 | 0) still equals to (Value)\r
+  //\r
+  ZeroMem (ClearMasks, sizeof (ClearMasks));\r
+  ZeroMem (OrMasks, sizeof (OrMasks));\r
   for (Index = 0; Index < RangeCount; Index++) {\r
     if (Ranges[Index].BaseAddress >= BASE_1MB) {\r
       continue;\r
     }\r
 \r
     Status = MtrrLibSetBelow1MBMemoryAttribute (\r
-               &WorkingFixedSettings, FixedSettingsModified,\r
-               Ranges[Index].BaseAddress, Ranges[Index].Length, Ranges[Index].Type\r
+               ClearMasks,\r
+               OrMasks,\r
+               Ranges[Index].BaseAddress,\r
+               Ranges[Index].Length,\r
+               Ranges[Index].Type\r
                );\r
     if (RETURN_ERROR (Status)) {\r
       goto Exit;\r
@@ -2409,19 +2537,17 @@ MtrrSetMemoryAttributesInMtrrSettings (
   //\r
   // 4. Write fixed MTRRs that have been modified\r
   //\r
-  for (Index = 0; Index < ARRAY_SIZE (FixedSettingsModified); Index++) {\r
-    if (FixedSettingsModified[Index]) {\r
+  for (Index = 0; Index < ARRAY_SIZE (ClearMasks); Index++) {\r
+    if (ClearMasks[Index] != 0) {\r
       if (MtrrSetting != NULL) {\r
-        MtrrSetting->Fixed.Mtrr[Index] = WorkingFixedSettings.Mtrr[Index];\r
+        MtrrSetting->Fixed.Mtrr[Index] = (MtrrSetting->Fixed.Mtrr[Index] & ~ClearMasks[Index]) | OrMasks[Index];\r
       } else {\r
         if (!MtrrContextValid) {\r
           MtrrLibPreMtrrChange (&MtrrContext);\r
           MtrrContextValid = TRUE;\r
         }\r
-        AsmWriteMsr64 (\r
-          mMtrrLibFixedMtrrTable[Index].Msr,\r
-          WorkingFixedSettings.Mtrr[Index]\r
-        );\r
+\r
+        AsmMsrAndThenOr64 (mMtrrLibFixedMtrrTable[Index].Msr, ~ClearMasks[Index], OrMasks[Index]);\r
       }\r
     }\r
   }\r
@@ -2433,12 +2559,13 @@ MtrrSetMemoryAttributesInMtrrSettings (
     if (VariableSettingModified[Index]) {\r
       if (OriginalVariableMtrr[Index].Length != 0) {\r
         VariableSetting.Base = (OriginalVariableMtrr[Index].BaseAddress & MtrrValidAddressMask)\r
-                             | (UINT8)OriginalVariableMtrr[Index].Type;\r
+                               | (UINT8)OriginalVariableMtrr[Index].Type;\r
         VariableSetting.Mask = ((~(OriginalVariableMtrr[Index].Length - 1)) & MtrrValidAddressMask) | BIT11;\r
       } else {\r
         VariableSetting.Base = 0;\r
         VariableSetting.Mask = 0;\r
       }\r
+\r
       if (MtrrSetting != NULL) {\r
         CopyMem (&MtrrSetting->Variables.Mtrr[Index], &VariableSetting, sizeof (VariableSetting));\r
       } else {\r
@@ -2446,20 +2573,21 @@ MtrrSetMemoryAttributesInMtrrSettings (
           MtrrLibPreMtrrChange (&MtrrContext);\r
           MtrrContextValid = TRUE;\r
         }\r
+\r
         AsmWriteMsr64 (\r
           MSR_IA32_MTRR_PHYSBASE0 + (Index << 1),\r
           VariableSetting.Base\r
-        );\r
+          );\r
         AsmWriteMsr64 (\r
           MSR_IA32_MTRR_PHYSMASK0 + (Index << 1),\r
           VariableSetting.Mask\r
-        );\r
+          );\r
       }\r
     }\r
   }\r
 \r
   if (MtrrSetting != NULL) {\r
-    ((MSR_IA32_MTRR_DEF_TYPE_REGISTER *)&MtrrSetting->MtrrDefType)->Bits.E = 1;\r
+    ((MSR_IA32_MTRR_DEF_TYPE_REGISTER *)&MtrrSetting->MtrrDefType)->Bits.E  = 1;\r
     ((MSR_IA32_MTRR_DEF_TYPE_REGISTER *)&MtrrSetting->MtrrDefType)->Bits.FE = 1;\r
   } else {\r
     if (MtrrContextValid) {\r
@@ -2472,6 +2600,7 @@ Exit:
   if (!RETURN_ERROR (Status)) {\r
     MtrrDebugPrintAllMtrrsWorker (MtrrSetting);\r
   }\r
+\r
   return Status;\r
 }\r
 \r
@@ -2495,7 +2624,14 @@ Exit:
                                     BaseAddress and Length cannot be modified.\r
   @retval RETURN_OUT_OF_RESOURCES   There are not enough system resources to modify the attributes of\r
                                     the memory resource range.\r
-  @retval RETURN_BUFFER_TOO_SMALL   The scratch buffer is too small for MTRR calculation.\r
+                                    Multiple memory range attributes setting by calling this API multiple\r
+                                    times may fail with status RETURN_OUT_OF_RESOURCES. It may not mean\r
+                                    the number of CPU MTRRs are too small to set such memory attributes.\r
+                                    Pass the multiple memory range attributes to one call of\r
+                                    MtrrSetMemoryAttributesInMtrrSettings() may succeed.\r
+  @retval RETURN_BUFFER_TOO_SMALL   The fixed internal scratch buffer is too small for MTRR calculation.\r
+                                    Caller should use MtrrSetMemoryAttributesInMtrrSettings() to specify\r
+                                    external scratch buffer.\r
 **/\r
 RETURN_STATUS\r
 EFIAPI\r
@@ -2506,14 +2642,14 @@ MtrrSetMemoryAttributeInMtrrSettings (
   IN MTRR_MEMORY_CACHE_TYPE  Attribute\r
   )\r
 {\r
-  UINT8                      Scratch[SCRATCH_BUFFER_SIZE];\r
-  UINTN                      ScratchSize;\r
-  MTRR_MEMORY_RANGE          Range;\r
+  UINT8              Scratch[SCRATCH_BUFFER_SIZE];\r
+  UINTN              ScratchSize;\r
+  MTRR_MEMORY_RANGE  Range;\r
 \r
   Range.BaseAddress = BaseAddress;\r
   Range.Length      = Length;\r
   Range.Type        = Attribute;\r
-  ScratchSize = sizeof (Scratch);\r
+  ScratchSize       = sizeof (Scratch);\r
   return MtrrSetMemoryAttributesInMtrrSettings (MtrrSetting, Scratch, &ScratchSize, &Range, 1);\r
 }\r
 \r
@@ -2541,7 +2677,14 @@ MtrrSetMemoryAttributeInMtrrSettings (
   @retval RETURN_OUT_OF_RESOURCES   There are not enough system resources to\r
                                     modify the attributes of the memory\r
                                     resource range.\r
-  @retval RETURN_BUFFER_TOO_SMALL   The scratch buffer is too small for MTRR calculation.\r
+                                    Multiple memory range attributes setting by calling this API multiple\r
+                                    times may fail with status RETURN_OUT_OF_RESOURCES. It may not mean\r
+                                    the number of CPU MTRRs are too small to set such memory attributes.\r
+                                    Pass the multiple memory range attributes to one call of\r
+                                    MtrrSetMemoryAttributesInMtrrSettings() may succeed.\r
+  @retval RETURN_BUFFER_TOO_SMALL   The fixed internal scratch buffer is too small for MTRR calculation.\r
+                                    Caller should use MtrrSetMemoryAttributesInMtrrSettings() to specify\r
+                                    external scratch buffer.\r
 **/\r
 RETURN_STATUS\r
 EFIAPI\r
@@ -2562,7 +2705,7 @@ MtrrSetMemoryAttribute (
 **/\r
 VOID\r
 MtrrSetVariableMtrrWorker (\r
-  IN MTRR_VARIABLE_SETTINGS         *VariableSettings\r
+  IN MTRR_VARIABLE_SETTINGS  *VariableSettings\r
   )\r
 {\r
   UINT32  Index;\r
@@ -2572,44 +2715,15 @@ MtrrSetVariableMtrrWorker (
   ASSERT (VariableMtrrCount <= ARRAY_SIZE (VariableSettings->Mtrr));\r
 \r
   for (Index = 0; Index < VariableMtrrCount; Index++) {\r
-    //\r
-    // Mask MSR is always updated since caller might need to invalidate the MSR pair.\r
-    // Base MSR is skipped when Mask.V is not set.\r
-    //\r
-    AsmWriteMsr64 (MSR_IA32_MTRR_PHYSMASK0 + (Index << 1), VariableSettings->Mtrr[Index].Mask);\r
-    if (((MSR_IA32_MTRR_PHYSMASK_REGISTER *)&VariableSettings->Mtrr[Index].Mask)->Bits.V != 0) {\r
-      AsmWriteMsr64 (MSR_IA32_MTRR_PHYSBASE0 + (Index << 1), VariableSettings->Mtrr[Index].Base);\r
-    }\r
-  }\r
-}\r
-\r
-\r
-/**\r
-  This function sets variable MTRRs\r
-\r
-  @param[in]  VariableSettings   A buffer to hold variable MTRRs content.\r
-\r
-  @return The pointer of VariableSettings\r
-\r
-**/\r
-MTRR_VARIABLE_SETTINGS*\r
-EFIAPI\r
-MtrrSetVariableMtrr (\r
-  IN MTRR_VARIABLE_SETTINGS         *VariableSettings\r
-  )\r
-{\r
-  MTRR_CONTEXT  MtrrContext;\r
-\r
-  if (!IsMtrrSupported ()) {\r
-    return VariableSettings;\r
+    AsmWriteMsr64 (\r
+      MSR_IA32_MTRR_PHYSBASE0 + (Index << 1),\r
+      VariableSettings->Mtrr[Index].Base\r
+      );\r
+    AsmWriteMsr64 (\r
+      MSR_IA32_MTRR_PHYSMASK0 + (Index << 1),\r
+      VariableSettings->Mtrr[Index].Mask\r
+      );\r
   }\r
-\r
-  MtrrLibPreMtrrChange (&MtrrContext);\r
-  MtrrSetVariableMtrrWorker (VariableSettings);\r
-  MtrrLibPostMtrrChange (&MtrrContext);\r
-  MtrrDebugPrintAllMtrrs ();\r
-\r
-  return  VariableSettings;\r
 }\r
 \r
 /**\r
@@ -2620,49 +2734,19 @@ MtrrSetVariableMtrr (
 **/\r
 VOID\r
 MtrrSetFixedMtrrWorker (\r
-  IN MTRR_FIXED_SETTINGS          *FixedSettings\r
+  IN MTRR_FIXED_SETTINGS  *FixedSettings\r
   )\r
 {\r
   UINT32  Index;\r
 \r
   for (Index = 0; Index < MTRR_NUMBER_OF_FIXED_MTRR; Index++) {\r
-     AsmWriteMsr64 (\r
-       mMtrrLibFixedMtrrTable[Index].Msr,\r
-       FixedSettings->Mtrr[Index]\r
-       );\r
-  }\r
-}\r
-\r
-\r
-/**\r
-  This function sets fixed MTRRs\r
-\r
-  @param[in]  FixedSettings  A buffer to hold fixed MTRRs content.\r
-\r
-  @retval The pointer of FixedSettings\r
-\r
-**/\r
-MTRR_FIXED_SETTINGS*\r
-EFIAPI\r
-MtrrSetFixedMtrr (\r
-  IN MTRR_FIXED_SETTINGS          *FixedSettings\r
-  )\r
-{\r
-  MTRR_CONTEXT  MtrrContext;\r
-\r
-  if (!IsMtrrSupported ()) {\r
-    return FixedSettings;\r
+    AsmWriteMsr64 (\r
+      mMtrrLibFixedMtrrTable[Index].Msr,\r
+      FixedSettings->Mtrr[Index]\r
+      );\r
   }\r
-\r
-  MtrrLibPreMtrrChange (&MtrrContext);\r
-  MtrrSetFixedMtrrWorker (FixedSettings);\r
-  MtrrLibPostMtrrChange (&MtrrContext);\r
-  MtrrDebugPrintAllMtrrs ();\r
-\r
-  return FixedSettings;\r
 }\r
 \r
-\r
 /**\r
   This function gets the content in all MTRRs (variable and fixed)\r
 \r
@@ -2674,7 +2758,7 @@ MtrrSetFixedMtrr (
 MTRR_SETTINGS *\r
 EFIAPI\r
 MtrrGetAllMtrrs (\r
-  OUT MTRR_SETTINGS                *MtrrSetting\r
+  OUT MTRR_SETTINGS  *MtrrSetting\r
   )\r
 {\r
   if (!IsMtrrSupported ()) {\r
@@ -2703,7 +2787,6 @@ MtrrGetAllMtrrs (
   return MtrrSetting;\r
 }\r
 \r
-\r
 /**\r
   This function sets all MTRRs (variable and fixed)\r
 \r
@@ -2715,7 +2798,7 @@ MtrrGetAllMtrrs (
 MTRR_SETTINGS *\r
 EFIAPI\r
 MtrrSetAllMtrrs (\r
-  IN MTRR_SETTINGS                *MtrrSetting\r
+  IN MTRR_SETTINGS  *MtrrSetting\r
   )\r
 {\r
   MTRR_CONTEXT  MtrrContext;\r
@@ -2746,7 +2829,6 @@ MtrrSetAllMtrrs (
   return MtrrSetting;\r
 }\r
 \r
-\r
 /**\r
   Checks if MTRR is supported.\r
 \r
@@ -2760,8 +2842,8 @@ IsMtrrSupported (
   VOID\r
   )\r
 {\r
-  CPUID_VERSION_INFO_EDX    Edx;\r
-  MSR_IA32_MTRRCAP_REGISTER MtrrCap;\r
+  CPUID_VERSION_INFO_EDX     Edx;\r
+  MSR_IA32_MTRRCAP_REGISTER  MtrrCap;\r
 \r
   //\r
   // Check CPUID(1).EDX[12] for MTRR capability\r
@@ -2780,10 +2862,10 @@ IsMtrrSupported (
   if ((MtrrCap.Bits.VCNT == 0) || (MtrrCap.Bits.FIX == 0)) {\r
     return FALSE;\r
   }\r
+\r
   return TRUE;\r
 }\r
 \r
-\r
 /**\r
   Worker function prints all MTRRs for debugging.\r
 \r
@@ -2795,94 +2877,110 @@ IsMtrrSupported (
 **/\r
 VOID\r
 MtrrDebugPrintAllMtrrsWorker (\r
-  IN MTRR_SETTINGS    *MtrrSetting\r
+  IN MTRR_SETTINGS  *MtrrSetting\r
   )\r
 {\r
-  DEBUG_CODE (\r
-    MTRR_SETTINGS     LocalMtrrs;\r
-    MTRR_SETTINGS     *Mtrrs;\r
-    UINTN             Index;\r
-    UINTN             RangeCount;\r
-    UINT64            MtrrValidBitsMask;\r
-    UINT64            MtrrValidAddressMask;\r
-    UINT32            VariableMtrrCount;\r
-    BOOLEAN           ContainVariableMtrr;\r
-    MTRR_MEMORY_RANGE Ranges[\r
-      ARRAY_SIZE (mMtrrLibFixedMtrrTable) * sizeof (UINT64) + 2 * ARRAY_SIZE (Mtrrs->Variables.Mtrr) + 1\r
-      ];\r
-    MTRR_MEMORY_RANGE RawVariableRanges[ARRAY_SIZE (Mtrrs->Variables.Mtrr)];\r
-\r
-    if (!IsMtrrSupported ()) {\r
-      return;\r
-    }\r
+  DEBUG_CODE_BEGIN ();\r
+  MTRR_SETTINGS      LocalMtrrs;\r
+  MTRR_SETTINGS      *Mtrrs;\r
+  UINTN              Index;\r
+  UINTN              RangeCount;\r
+  UINT64             MtrrValidBitsMask;\r
+  UINT64             MtrrValidAddressMask;\r
+  UINT32             VariableMtrrCount;\r
+  BOOLEAN            ContainVariableMtrr;\r
+  MTRR_MEMORY_RANGE  Ranges[\r
+                            ARRAY_SIZE (mMtrrLibFixedMtrrTable) * sizeof (UINT64) + 2 * ARRAY_SIZE (Mtrrs->Variables.Mtrr) + 1\r
+  ];\r
+  MTRR_MEMORY_RANGE  RawVariableRanges[ARRAY_SIZE (Mtrrs->Variables.Mtrr)];\r
 \r
-    VariableMtrrCount = GetVariableMtrrCountWorker ();\r
+  if (!IsMtrrSupported ()) {\r
+    return;\r
+  }\r
 \r
-    if (MtrrSetting != NULL) {\r
-      Mtrrs = MtrrSetting;\r
-    } else {\r
-      MtrrGetAllMtrrs (&LocalMtrrs);\r
-      Mtrrs = &LocalMtrrs;\r
-    }\r
+  VariableMtrrCount = GetVariableMtrrCountWorker ();\r
 \r
-    //\r
-    // Dump RAW MTRR contents\r
-    //\r
-    DEBUG ((DEBUG_CACHE, "MTRR Settings:\n"));\r
-    DEBUG ((DEBUG_CACHE, "=============\n"));\r
-    DEBUG ((DEBUG_CACHE, "MTRR Default Type: %016lx\n", Mtrrs->MtrrDefType));\r
-    for (Index = 0; Index < ARRAY_SIZE (mMtrrLibFixedMtrrTable); Index++) {\r
-      DEBUG ((DEBUG_CACHE, "Fixed MTRR[%02d]   : %016lx\n", Index, Mtrrs->Fixed.Mtrr[Index]));\r
-    }\r
-    ContainVariableMtrr = FALSE;\r
-    for (Index = 0; Index < VariableMtrrCount; Index++) {\r
-      if (((MSR_IA32_MTRR_PHYSMASK_REGISTER *)&Mtrrs->Variables.Mtrr[Index].Mask)->Bits.V == 0) {\r
-        //\r
-        // If mask is not valid, then do not display range\r
-        //\r
-        continue;\r
-      }\r
-      ContainVariableMtrr = TRUE;\r
-      DEBUG ((DEBUG_CACHE, "Variable MTRR[%02d]: Base=%016lx Mask=%016lx\n",\r
-        Index,\r
-        Mtrrs->Variables.Mtrr[Index].Base,\r
-        Mtrrs->Variables.Mtrr[Index].Mask\r
-        ));\r
-    }\r
-    if (!ContainVariableMtrr) {\r
-      DEBUG ((DEBUG_CACHE, "Variable MTRR    : None.\n"));\r
+  if (MtrrSetting != NULL) {\r
+    Mtrrs = MtrrSetting;\r
+  } else {\r
+    MtrrGetAllMtrrs (&LocalMtrrs);\r
+    Mtrrs = &LocalMtrrs;\r
+  }\r
+\r
+  //\r
+  // Dump RAW MTRR contents\r
+  //\r
+  DEBUG ((DEBUG_CACHE, "MTRR Settings:\n"));\r
+  DEBUG ((DEBUG_CACHE, "=============\n"));\r
+  DEBUG ((DEBUG_CACHE, "MTRR Default Type: %016lx\n", Mtrrs->MtrrDefType));\r
+  for (Index = 0; Index < ARRAY_SIZE (mMtrrLibFixedMtrrTable); Index++) {\r
+    DEBUG ((DEBUG_CACHE, "Fixed MTRR[%02d]   : %016lx\n", Index, Mtrrs->Fixed.Mtrr[Index]));\r
+  }\r
+\r
+  ContainVariableMtrr = FALSE;\r
+  for (Index = 0; Index < VariableMtrrCount; Index++) {\r
+    if ((Mtrrs->Variables.Mtrr[Index].Mask & BIT11) == 0) {\r
+      //\r
+      // If mask is not valid, then do not display range\r
+      //\r
+      continue;\r
     }\r
-    DEBUG((DEBUG_CACHE, "\n"));\r
 \r
-    //\r
-    // Dump MTRR setting in ranges\r
-    //\r
-    DEBUG((DEBUG_CACHE, "Memory Ranges:\n"));\r
-    DEBUG((DEBUG_CACHE, "====================================\n"));\r
-    MtrrLibInitializeMtrrMask (&MtrrValidBitsMask, &MtrrValidAddressMask);\r
-    Ranges[0].BaseAddress = 0;\r
-    Ranges[0].Length      = MtrrValidBitsMask + 1;\r
-    Ranges[0].Type        = MtrrGetDefaultMemoryTypeWorker (Mtrrs);\r
-    RangeCount = 1;\r
+    ContainVariableMtrr = TRUE;\r
+    DEBUG ((\r
+      DEBUG_CACHE,\r
+      "Variable MTRR[%02d]: Base=%016lx Mask=%016lx\n",\r
+      Index,\r
+      Mtrrs->Variables.Mtrr[Index].Base,\r
+      Mtrrs->Variables.Mtrr[Index].Mask\r
+      ));\r
+  }\r
 \r
-    MtrrLibGetRawVariableRanges (\r
-      &Mtrrs->Variables, VariableMtrrCount,\r
-      MtrrValidBitsMask, MtrrValidAddressMask, RawVariableRanges\r
-      );\r
-    MtrrLibApplyVariableMtrrs (\r
-      RawVariableRanges, VariableMtrrCount,\r
-      Ranges, ARRAY_SIZE (Ranges), &RangeCount\r
-      );\r
+  if (!ContainVariableMtrr) {\r
+    DEBUG ((DEBUG_CACHE, "Variable MTRR    : None.\n"));\r
+  }\r
 \r
-    MtrrLibApplyFixedMtrrs (&Mtrrs->Fixed, Ranges, ARRAY_SIZE (Ranges), &RangeCount);\r
+  DEBUG ((DEBUG_CACHE, "\n"));\r
 \r
-    for (Index = 0; Index < RangeCount; Index++) {\r
-      DEBUG ((DEBUG_CACHE, "%a:%016lx-%016lx\n",\r
-        mMtrrMemoryCacheTypeShortName[Ranges[Index].Type],\r
-        Ranges[Index].BaseAddress, Ranges[Index].BaseAddress + Ranges[Index].Length - 1\r
-        ));\r
-    }\r
-  );\r
+  //\r
+  // Dump MTRR setting in ranges\r
+  //\r
+  DEBUG ((DEBUG_CACHE, "Memory Ranges:\n"));\r
+  DEBUG ((DEBUG_CACHE, "====================================\n"));\r
+  MtrrLibInitializeMtrrMask (&MtrrValidBitsMask, &MtrrValidAddressMask);\r
+  Ranges[0].BaseAddress = 0;\r
+  Ranges[0].Length      = MtrrValidBitsMask + 1;\r
+  Ranges[0].Type        = MtrrGetDefaultMemoryTypeWorker (Mtrrs);\r
+  RangeCount            = 1;\r
+\r
+  MtrrLibGetRawVariableRanges (\r
+    &Mtrrs->Variables,\r
+    VariableMtrrCount,\r
+    MtrrValidBitsMask,\r
+    MtrrValidAddressMask,\r
+    RawVariableRanges\r
+    );\r
+  MtrrLibApplyVariableMtrrs (\r
+    RawVariableRanges,\r
+    VariableMtrrCount,\r
+    Ranges,\r
+    ARRAY_SIZE (Ranges),\r
+    &RangeCount\r
+    );\r
+\r
+  MtrrLibApplyFixedMtrrs (&Mtrrs->Fixed, Ranges, ARRAY_SIZE (Ranges), &RangeCount);\r
+\r
+  for (Index = 0; Index < RangeCount; Index++) {\r
+    DEBUG ((\r
+      DEBUG_CACHE,\r
+      "%a:%016lx-%016lx\n",\r
+      mMtrrMemoryCacheTypeShortName[Ranges[Index].Type],\r
+      Ranges[Index].BaseAddress,\r
+      Ranges[Index].BaseAddress + Ranges[Index].Length - 1\r
+      ));\r
+  }\r
+\r
+  DEBUG_CODE_END ();\r
 }\r
 \r
 /**\r