]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.c
OvmfPkg: Apply uncrustify changes
[mirror_edk2.git] / OvmfPkg / QemuFlashFvbServicesRuntimeDxe / FwBlockService.c
index c542482c3aa189cc53d953e931ad717e11af74c6..b34298faf82b72ae5470930b17f6e137a5627eed 100644 (file)
@@ -2,13 +2,7 @@
 \r
   Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>\r
 \r
-  This program and the accompanying materials are licensed and made available\r
-  under the terms and conditions of the BSD License which accompanies this\r
-  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
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
   Module Name:\r
 \r
 **/\r
 \r
 //\r
-// The package level header files this module uses\r
-//\r
-#include <PiDxe.h>\r
-\r
-//\r
-// The protocols, PPI and GUID defintions for this module\r
+// The protocols, PPI and GUID definitions for this module\r
 //\r
-#include <Guid/EventGroup.h>\r
-#include <Protocol/FirmwareVolumeBlock.h>\r
 #include <Protocol/DevicePath.h>\r
+#include <Protocol/FirmwareVolumeBlock.h>\r
 \r
 //\r
 // The Library classes this module consumes\r
 //\r
-#include <Library/UefiLib.h>\r
-#include <Library/UefiDriverEntryPoint.h>\r
 #include <Library/BaseLib.h>\r
-#include <Library/DxeServicesTableLib.h>\r
-#include <Library/UefiRuntimeLib.h>\r
-#include <Library/DebugLib.h>\r
 #include <Library/BaseMemoryLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/DevicePathLib.h>\r
+#include <Library/DxeServicesTableLib.h>\r
 #include <Library/MemoryAllocationLib.h>\r
 #include <Library/UefiBootServicesTableLib.h>\r
-#include <Library/DevicePathLib.h>\r
 \r
 #include "FwBlockService.h"\r
 #include "QemuFlash.h"\r
@@ -52,9 +37,9 @@
 #define EFI_FVB2_STATUS \\r
           (EFI_FVB2_READ_STATUS | EFI_FVB2_WRITE_STATUS | EFI_FVB2_LOCK_STATUS)\r
 \r
-ESAL_FWB_GLOBAL         *mFvbModuleGlobal;\r
+ESAL_FWB_GLOBAL  *mFvbModuleGlobal;\r
 \r
-FV_MEMMAP_DEVICE_PATH mFvMemmapDevicePathTemplate = {\r
+FV_MEMMAP_DEVICE_PATH  mFvMemmapDevicePathTemplate = {\r
   {\r
     {\r
       HARDWARE_DEVICE_PATH,\r
@@ -65,8 +50,8 @@ FV_MEMMAP_DEVICE_PATH mFvMemmapDevicePathTemplate = {
       }\r
     },\r
     EfiMemoryMappedIO,\r
-    (EFI_PHYSICAL_ADDRESS) 0,\r
-    (EFI_PHYSICAL_ADDRESS) 0,\r
+    (EFI_PHYSICAL_ADDRESS)0,\r
+    (EFI_PHYSICAL_ADDRESS)0,\r
   },\r
   {\r
     END_DEVICE_PATH_TYPE,\r
@@ -78,7 +63,7 @@ FV_MEMMAP_DEVICE_PATH mFvMemmapDevicePathTemplate = {
   }\r
 };\r
 \r
-FV_PIWG_DEVICE_PATH mFvPIWGDevicePathTemplate = {\r
+FV_PIWG_DEVICE_PATH  mFvPIWGDevicePathTemplate = {\r
   {\r
     {\r
       MEDIA_DEVICE_PATH,\r
@@ -100,7 +85,7 @@ FV_PIWG_DEVICE_PATH mFvPIWGDevicePathTemplate = {
   }\r
 };\r
 \r
-EFI_FW_VOL_BLOCK_DEVICE mFvbDeviceTemplate = {\r
+EFI_FW_VOL_BLOCK_DEVICE  mFvbDeviceTemplate = {\r
   FVB_DEVICE_SIGNATURE,\r
   NULL,\r
   0,\r
@@ -116,72 +101,13 @@ EFI_FW_VOL_BLOCK_DEVICE mFvbDeviceTemplate = {
   }\r
 };\r
 \r
-\r
-\r
-VOID\r
-EFIAPI\r
-FvbVirtualddressChangeEvent (\r
-  IN EFI_EVENT        Event,\r
-  IN VOID             *Context\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-\r
-    Fixup internal data so that EFI and SAL can be call in virtual mode.\r
-    Call the passed in Child Notify event and convert the mFvbModuleGlobal\r
-    date items to there virtual address.\r
-\r
-    mFvbModuleGlobal->FvInstance[FVB_PHYSICAL]  - Physical copy of instance\r
-                                                  data\r
-    mFvbModuleGlobal->FvInstance[FVB_VIRTUAL]   - Virtual pointer to common\r
-                                                  instance data.\r
-\r
-  Arguments:\r
-\r
-    (Standard EFI notify event - EFI_EVENT_NOTIFY)\r
-\r
-  Returns:\r
-\r
-    None\r
-\r
---*/\r
-{\r
-  EFI_FW_VOL_INSTANCE *FwhInstance;\r
-  UINTN               Index;\r
-\r
-  EfiConvertPointer (0x0,\r
-    (VOID **) &mFvbModuleGlobal->FvInstance[FVB_VIRTUAL]);\r
-\r
-  //\r
-  // Convert the base address of all the instances\r
-  //\r
-  Index       = 0;\r
-  FwhInstance = mFvbModuleGlobal->FvInstance[FVB_PHYSICAL];\r
-  while (Index < mFvbModuleGlobal->NumFv) {\r
-    EfiConvertPointer (0x0, (VOID **) &FwhInstance->FvBase[FVB_VIRTUAL]);\r
-    FwhInstance = (EFI_FW_VOL_INSTANCE *)\r
-      (\r
-        (UINTN) ((UINT8 *) FwhInstance) +\r
-        FwhInstance->VolumeHeader.HeaderLength +\r
-        (sizeof (EFI_FW_VOL_INSTANCE) - sizeof (EFI_FIRMWARE_VOLUME_HEADER))\r
-      );\r
-    Index++;\r
-  }\r
-\r
-  EfiConvertPointer (0x0,\r
-    (VOID **) &mFvbModuleGlobal->FvbScratchSpace[FVB_VIRTUAL]);\r
-  EfiConvertPointer (0x0, (VOID **) &mFvbModuleGlobal);\r
-  QemuFlashConvertPointers ();\r
-}\r
-\r
 EFI_STATUS\r
 GetFvbInstance (\r
-  IN  UINTN                               Instance,\r
-  IN  ESAL_FWB_GLOBAL                     *Global,\r
-  OUT EFI_FW_VOL_INSTANCE                 **FwhInstance,\r
-  IN BOOLEAN                              Virtual\r
+  IN  UINTN                Instance,\r
+  IN  ESAL_FWB_GLOBAL      *Global,\r
+  OUT EFI_FW_VOL_INSTANCE  **FwhInstance\r
   )\r
+\r
 /*++\r
 \r
   Routine Description:\r
@@ -192,8 +118,7 @@ GetFvbInstance (
                             returned\r
     Global                - Pointer to ESAL_FWB_GLOBAL that contains all\r
                             instance data\r
-    FwhInstance           - The EFI_FW_VOL_INSTANCE fimrware instance structure\r
-    Virtual               - Whether CPU is in virtual or physical mode\r
+    FwhInstance           - The EFI_FW_VOL_INSTANCE firmware instance structure\r
 \r
   Returns:\r
     EFI_SUCCESS           - Successfully returns\r
@@ -201,22 +126,23 @@ GetFvbInstance (
 \r
 --*/\r
 {\r
-  EFI_FW_VOL_INSTANCE *FwhRecord;\r
+  EFI_FW_VOL_INSTANCE  *FwhRecord;\r
 \r
   *FwhInstance = NULL;\r
   if (Instance >= Global->NumFv) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
+\r
   //\r
   // Find the right instance of the FVB private data\r
   //\r
-  FwhRecord = Global->FvInstance[Virtual];\r
+  FwhRecord = Global->FvInstance;\r
   while (Instance > 0) {\r
     FwhRecord = (EFI_FW_VOL_INSTANCE *)\r
-      (\r
-        (UINTN) ((UINT8 *) FwhRecord) + FwhRecord->VolumeHeader.HeaderLength +\r
-          (sizeof (EFI_FW_VOL_INSTANCE) - sizeof (EFI_FIRMWARE_VOLUME_HEADER))\r
-      );\r
+                (\r
+                 (UINTN)((UINT8 *)FwhRecord) + FwhRecord->VolumeHeader.HeaderLength +\r
+                 (sizeof (EFI_FW_VOL_INSTANCE) - sizeof (EFI_FIRMWARE_VOLUME_HEADER))\r
+                );\r
     Instance--;\r
   }\r
 \r
@@ -227,11 +153,11 @@ GetFvbInstance (
 \r
 EFI_STATUS\r
 FvbGetPhysicalAddress (\r
-  IN UINTN                                Instance,\r
-  OUT EFI_PHYSICAL_ADDRESS                *Address,\r
-  IN ESAL_FWB_GLOBAL                      *Global,\r
-  IN BOOLEAN                              Virtual\r
+  IN UINTN                  Instance,\r
+  OUT EFI_PHYSICAL_ADDRESS  *Address,\r
+  IN ESAL_FWB_GLOBAL        *Global\r
   )\r
+\r
 /*++\r
 \r
   Routine Description:\r
@@ -245,7 +171,6 @@ FvbGetPhysicalAddress (
                             address of the firmware volume.\r
     Global                - Pointer to ESAL_FWB_GLOBAL that contains all\r
                             instance data\r
-    Virtual               - Whether CPU is in virtual or physical mode\r
 \r
   Returns:\r
     EFI_SUCCESS           - Successfully returns\r
@@ -253,26 +178,26 @@ FvbGetPhysicalAddress (
 \r
 --*/\r
 {\r
-  EFI_FW_VOL_INSTANCE *FwhInstance;\r
-  EFI_STATUS          Status;\r
+  EFI_FW_VOL_INSTANCE  *FwhInstance;\r
+  EFI_STATUS           Status;\r
 \r
   //\r
   // Find the right instance of the FVB private data\r
   //\r
-  Status = GetFvbInstance (Instance, Global, &FwhInstance, Virtual);\r
+  Status = GetFvbInstance (Instance, Global, &FwhInstance);\r
   ASSERT_EFI_ERROR (Status);\r
-  *Address = FwhInstance->FvBase[Virtual];\r
+  *Address = FwhInstance->FvBase;\r
 \r
   return EFI_SUCCESS;\r
 }\r
 \r
 EFI_STATUS\r
 FvbGetVolumeAttributes (\r
-  IN UINTN                                Instance,\r
-  OUT EFI_FVB_ATTRIBUTES_2                *Attributes,\r
-  IN ESAL_FWB_GLOBAL                      *Global,\r
-  IN BOOLEAN                              Virtual\r
+  IN UINTN                  Instance,\r
+  OUT EFI_FVB_ATTRIBUTES_2  *Attributes,\r
+  IN ESAL_FWB_GLOBAL        *Global\r
   )\r
+\r
 /*++\r
 \r
   Routine Description:\r
@@ -285,7 +210,6 @@ FvbGetVolumeAttributes (
     Attributes            - Output buffer which contains attributes\r
     Global                - Pointer to ESAL_FWB_GLOBAL that contains all\r
                             instance data\r
-    Virtual               - Whether CPU is in virtual or physical mode\r
 \r
   Returns:\r
     EFI_SUCCESS           - Successfully returns\r
@@ -293,13 +217,13 @@ FvbGetVolumeAttributes (
 \r
 --*/\r
 {\r
-  EFI_FW_VOL_INSTANCE *FwhInstance;\r
-  EFI_STATUS          Status;\r
+  EFI_FW_VOL_INSTANCE  *FwhInstance;\r
+  EFI_STATUS           Status;\r
 \r
   //\r
   // Find the right instance of the FVB private data\r
   //\r
-  Status = GetFvbInstance (Instance, Global, &FwhInstance, Virtual);\r
+  Status = GetFvbInstance (Instance, Global, &FwhInstance);\r
   ASSERT_EFI_ERROR (Status);\r
   *Attributes = FwhInstance->VolumeHeader.Attributes;\r
 \r
@@ -308,14 +232,14 @@ FvbGetVolumeAttributes (
 \r
 EFI_STATUS\r
 FvbGetLbaAddress (\r
-  IN  UINTN                               Instance,\r
-  IN  EFI_LBA                             Lba,\r
-  OUT UINTN                               *LbaAddress,\r
-  OUT UINTN                               *LbaLength,\r
-  OUT UINTN                               *NumOfBlocks,\r
-  IN  ESAL_FWB_GLOBAL                     *Global,\r
-  IN  BOOLEAN                             Virtual\r
+  IN  UINTN            Instance,\r
+  IN  EFI_LBA          Lba,\r
+  OUT UINTN            *LbaAddress,\r
+  OUT UINTN            *LbaLength,\r
+  OUT UINTN            *NumOfBlocks,\r
+  IN  ESAL_FWB_GLOBAL  *Global\r
   )\r
+\r
 /*++\r
 \r
   Routine Description:\r
@@ -333,7 +257,6 @@ FvbGetLbaAddress (
                             BlockSize\r
     Global                - Pointer to ESAL_FWB_GLOBAL that contains all\r
                             instance data\r
-    Virtual               - Whether CPU is in virtual or physical mode\r
 \r
   Returns:\r
     EFI_SUCCESS           - Successfully returns\r
@@ -353,12 +276,12 @@ FvbGetLbaAddress (
   //\r
   // Find the right instance of the FVB private data\r
   //\r
-  Status = GetFvbInstance (Instance, Global, &FwhInstance, Virtual);\r
+  Status = GetFvbInstance (Instance, Global, &FwhInstance);\r
   ASSERT_EFI_ERROR (Status);\r
 \r
-  StartLba  = 0;\r
-  Offset    = 0;\r
-  BlockMap  = &(FwhInstance->VolumeHeader.BlockMap[0]);\r
+  StartLba = 0;\r
+  Offset   = 0;\r
+  BlockMap = &(FwhInstance->VolumeHeader.BlockMap[0]);\r
 \r
   //\r
   // Parse the blockmap of the FV to find which map entry the Lba belongs to\r
@@ -367,7 +290,7 @@ FvbGetLbaAddress (
     NumBlocks   = BlockMap->NumBlocks;\r
     BlockLength = BlockMap->Length;\r
 \r
-    if (NumBlocks == 0 || BlockLength == 0) {\r
+    if ((NumBlocks == 0) || (BlockLength == 0)) {\r
       return EFI_INVALID_PARAMETER;\r
     }\r
 \r
@@ -376,10 +299,10 @@ FvbGetLbaAddress (
     //\r
     // The map entry found\r
     //\r
-    if (Lba >= StartLba && Lba < NextLba) {\r
-      Offset = Offset + (UINTN) MultU64x32 ((Lba - StartLba), BlockLength);\r
+    if ((Lba >= StartLba) && (Lba < NextLba)) {\r
+      Offset = Offset + (UINTN)MultU64x32 ((Lba - StartLba), BlockLength);\r
       if (LbaAddress != NULL) {\r
-        *LbaAddress = FwhInstance->FvBase[Virtual] + Offset;\r
+        *LbaAddress = FwhInstance->FvBase + Offset;\r
       }\r
 \r
       if (LbaLength != NULL) {\r
@@ -387,25 +310,25 @@ FvbGetLbaAddress (
       }\r
 \r
       if (NumOfBlocks != NULL) {\r
-        *NumOfBlocks = (UINTN) (NextLba - Lba);\r
+        *NumOfBlocks = (UINTN)(NextLba - Lba);\r
       }\r
 \r
       return EFI_SUCCESS;\r
     }\r
 \r
-    StartLba  = NextLba;\r
-    Offset    = Offset + NumBlocks * BlockLength;\r
+    StartLba = NextLba;\r
+    Offset   = Offset + NumBlocks * BlockLength;\r
     BlockMap++;\r
   }\r
 }\r
 \r
 EFI_STATUS\r
 FvbSetVolumeAttributes (\r
-  IN UINTN                                  Instance,\r
-  IN OUT EFI_FVB_ATTRIBUTES_2               *Attributes,\r
-  IN ESAL_FWB_GLOBAL                        *Global,\r
-  IN BOOLEAN                                Virtual\r
+  IN UINTN                     Instance,\r
+  IN OUT EFI_FVB_ATTRIBUTES_2  *Attributes,\r
+  IN ESAL_FWB_GLOBAL           *Global\r
   )\r
+\r
 /*++\r
 \r
   Routine Description:\r
@@ -421,7 +344,6 @@ FvbSetVolumeAttributes (
                             of the firmware volume\r
     Global                - Pointer to ESAL_FWB_GLOBAL that contains all\r
                             instance data\r
-    Virtual               - Whether CPU is in virtual or physical mode\r
 \r
   Returns:\r
     EFI_SUCCESS           - Successfully returns\r
@@ -444,11 +366,11 @@ FvbSetVolumeAttributes (
   //\r
   // Find the right instance of the FVB private data\r
   //\r
-  Status = GetFvbInstance (Instance, Global, &FwhInstance, Virtual);\r
+  Status = GetFvbInstance (Instance, Global, &FwhInstance);\r
   ASSERT_EFI_ERROR (Status);\r
 \r
-  AttribPtr     =\r
-    (EFI_FVB_ATTRIBUTES_2 *) &(FwhInstance->VolumeHeader.Attributes);\r
+  AttribPtr =\r
+    (EFI_FVB_ATTRIBUTES_2 *)&(FwhInstance->VolumeHeader.Attributes);\r
   OldAttributes = *AttribPtr;\r
   Capabilities  = OldAttributes & (EFI_FVB2_READ_DISABLED_CAP | \\r
                                    EFI_FVB2_READ_ENABLED_CAP | \\r
@@ -456,8 +378,8 @@ FvbSetVolumeAttributes (
                                    EFI_FVB2_WRITE_ENABLED_CAP | \\r
                                    EFI_FVB2_LOCK_CAP \\r
                                    );\r
-  OldStatus     = OldAttributes & EFI_FVB2_STATUS;\r
-  NewStatus     = *Attributes & EFI_FVB2_STATUS;\r
+  OldStatus = OldAttributes & EFI_FVB2_STATUS;\r
+  NewStatus = *Attributes & EFI_FVB2_STATUS;\r
 \r
   UnchangedAttributes = EFI_FVB2_READ_DISABLED_CAP  | \\r
                         EFI_FVB2_READ_ENABLED_CAP   | \\r
@@ -475,9 +397,11 @@ FvbSetVolumeAttributes (
   // Some attributes of FV is read only can *not* be set\r
   //\r
   if ((OldAttributes & UnchangedAttributes) ^\r
-      (*Attributes & UnchangedAttributes)) {\r
+      (*Attributes & UnchangedAttributes))\r
+  {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
+\r
   //\r
   // If firmware volume is locked, no status bit can be updated\r
   //\r
@@ -486,6 +410,7 @@ FvbSetVolumeAttributes (
       return EFI_ACCESS_DENIED;\r
     }\r
   }\r
+\r
   //\r
   // Test read disable\r
   //\r
@@ -494,6 +419,7 @@ FvbSetVolumeAttributes (
       return EFI_INVALID_PARAMETER;\r
     }\r
   }\r
+\r
   //\r
   // Test read enable\r
   //\r
@@ -502,6 +428,7 @@ FvbSetVolumeAttributes (
       return EFI_INVALID_PARAMETER;\r
     }\r
   }\r
+\r
   //\r
   // Test write disable\r
   //\r
@@ -510,6 +437,7 @@ FvbSetVolumeAttributes (
       return EFI_INVALID_PARAMETER;\r
     }\r
   }\r
+\r
   //\r
   // Test write enable\r
   //\r
@@ -518,6 +446,7 @@ FvbSetVolumeAttributes (
       return EFI_INVALID_PARAMETER;\r
     }\r
   }\r
+\r
   //\r
   // Test lock\r
   //\r
@@ -540,9 +469,10 @@ FvbSetVolumeAttributes (
 EFI_STATUS\r
 EFIAPI\r
 FvbProtocolGetPhysicalAddress (\r
-  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL           *This,\r
-  OUT EFI_PHYSICAL_ADDRESS                        *Address\r
+  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  *This,\r
+  OUT EFI_PHYSICAL_ADDRESS                     *Address\r
   )\r
+\r
 /*++\r
 \r
   Routine Description:\r
@@ -559,22 +489,26 @@ FvbProtocolGetPhysicalAddress (
 \r
 --*/\r
 {\r
-  EFI_FW_VOL_BLOCK_DEVICE *FvbDevice;\r
+  EFI_FW_VOL_BLOCK_DEVICE  *FvbDevice;\r
 \r
   FvbDevice = FVB_DEVICE_FROM_THIS (This);\r
 \r
-  return FvbGetPhysicalAddress (FvbDevice->Instance, Address,\r
-           mFvbModuleGlobal, EfiGoneVirtual ());\r
+  return FvbGetPhysicalAddress (\r
+           FvbDevice->Instance,\r
+           Address,\r
+           mFvbModuleGlobal\r
+           );\r
 }\r
 \r
 EFI_STATUS\r
 EFIAPI\r
 FvbProtocolGetBlockSize (\r
-  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL           *This,\r
-  IN CONST EFI_LBA                                     Lba,\r
-  OUT UINTN                                       *BlockSize,\r
-  OUT UINTN                                       *NumOfBlocks\r
+  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  *This,\r
+  IN CONST EFI_LBA                             Lba,\r
+  OUT UINTN                                    *BlockSize,\r
+  OUT UINTN                                    *NumOfBlocks\r
   )\r
+\r
 /*++\r
 \r
   Routine Description:\r
@@ -596,27 +530,27 @@ FvbProtocolGetBlockSize (
 \r
 --*/\r
 {\r
-  EFI_FW_VOL_BLOCK_DEVICE *FvbDevice;\r
+  EFI_FW_VOL_BLOCK_DEVICE  *FvbDevice;\r
 \r
   FvbDevice = FVB_DEVICE_FROM_THIS (This);\r
 \r
   return FvbGetLbaAddress (\r
-          FvbDevice->Instance,\r
-          Lba,\r
-          NULL,\r
-          BlockSize,\r
-          NumOfBlocks,\r
-          mFvbModuleGlobal,\r
-          EfiGoneVirtual ()\r
-          );\r
+           FvbDevice->Instance,\r
+           Lba,\r
+           NULL,\r
+           BlockSize,\r
+           NumOfBlocks,\r
+           mFvbModuleGlobal\r
+           );\r
 }\r
 \r
 EFI_STATUS\r
 EFIAPI\r
 FvbProtocolGetAttributes (\r
-  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL           *This,\r
-  OUT EFI_FVB_ATTRIBUTES_2                              *Attributes\r
+  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  *This,\r
+  OUT EFI_FVB_ATTRIBUTES_2                     *Attributes\r
   )\r
+\r
 /*++\r
 \r
   Routine Description:\r
@@ -631,20 +565,24 @@ FvbProtocolGetAttributes (
 \r
 --*/\r
 {\r
-  EFI_FW_VOL_BLOCK_DEVICE *FvbDevice;\r
+  EFI_FW_VOL_BLOCK_DEVICE  *FvbDevice;\r
 \r
   FvbDevice = FVB_DEVICE_FROM_THIS (This);\r
 \r
-  return FvbGetVolumeAttributes (FvbDevice->Instance, Attributes,\r
-           mFvbModuleGlobal, EfiGoneVirtual ());\r
+  return FvbGetVolumeAttributes (\r
+           FvbDevice->Instance,\r
+           Attributes,\r
+           mFvbModuleGlobal\r
+           );\r
 }\r
 \r
 EFI_STATUS\r
 EFIAPI\r
 FvbProtocolSetAttributes (\r
-  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL           *This,\r
-  IN OUT EFI_FVB_ATTRIBUTES_2                           *Attributes\r
+  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  *This,\r
+  IN OUT EFI_FVB_ATTRIBUTES_2                  *Attributes\r
   )\r
+\r
 /*++\r
 \r
   Routine Description:\r
@@ -659,20 +597,24 @@ FvbProtocolSetAttributes (
 \r
 --*/\r
 {\r
-  EFI_FW_VOL_BLOCK_DEVICE *FvbDevice;\r
+  EFI_FW_VOL_BLOCK_DEVICE  *FvbDevice;\r
 \r
   FvbDevice = FVB_DEVICE_FROM_THIS (This);\r
 \r
-  return FvbSetVolumeAttributes (FvbDevice->Instance, Attributes,\r
-           mFvbModuleGlobal, EfiGoneVirtual ());\r
+  return FvbSetVolumeAttributes (\r
+           FvbDevice->Instance,\r
+           Attributes,\r
+           mFvbModuleGlobal\r
+           );\r
 }\r
 \r
 EFI_STATUS\r
 EFIAPI\r
 FvbProtocolEraseBlocks (\r
-  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL    *This,\r
+  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  *This,\r
   ...\r
   )\r
+\r
 /*++\r
 \r
   Routine Description:\r
@@ -699,18 +641,21 @@ FvbProtocolEraseBlocks (
 \r
 --*/\r
 {\r
-  EFI_FW_VOL_BLOCK_DEVICE *FvbDevice;\r
-  EFI_FW_VOL_INSTANCE     *FwhInstance;\r
-  UINTN                   NumOfBlocks;\r
-  VA_LIST                 args;\r
-  EFI_LBA                 StartingLba;\r
-  UINTN                   NumOfLba;\r
-  EFI_STATUS              Status;\r
+  EFI_FW_VOL_BLOCK_DEVICE  *FvbDevice;\r
+  EFI_FW_VOL_INSTANCE      *FwhInstance;\r
+  UINTN                    NumOfBlocks;\r
+  VA_LIST                  args;\r
+  EFI_LBA                  StartingLba;\r
+  UINTN                    NumOfLba;\r
+  EFI_STATUS               Status;\r
 \r
   FvbDevice = FVB_DEVICE_FROM_THIS (This);\r
 \r
-  Status    = GetFvbInstance (FvbDevice->Instance, mFvbModuleGlobal,\r
-                &FwhInstance, EfiGoneVirtual ());\r
+  Status = GetFvbInstance (\r
+             FvbDevice->Instance,\r
+             mFvbModuleGlobal,\r
+             &FwhInstance\r
+             );\r
   ASSERT_EFI_ERROR (Status);\r
 \r
   NumOfBlocks = FwhInstance->NumOfBlocks;\r
@@ -723,7 +668,7 @@ FvbProtocolEraseBlocks (
       break;\r
     }\r
 \r
-    NumOfLba = VA_ARG (args, UINT32);\r
+    NumOfLba = VA_ARG (args, UINTN);\r
 \r
     //\r
     // Check input parameters\r
@@ -743,7 +688,7 @@ FvbProtocolEraseBlocks (
       break;\r
     }\r
 \r
-    NumOfLba = VA_ARG (args, UINT32);\r
+    NumOfLba = VA_ARG (args, UINTN);\r
 \r
     while (NumOfLba > 0) {\r
       Status = QemuFlashEraseBlock (StartingLba);\r
@@ -755,7 +700,6 @@ FvbProtocolEraseBlocks (
       StartingLba++;\r
       NumOfLba--;\r
     }\r
-\r
   } while (1);\r
 \r
   VA_END (args);\r
@@ -766,12 +710,13 @@ FvbProtocolEraseBlocks (
 EFI_STATUS\r
 EFIAPI\r
 FvbProtocolWrite (\r
-  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL           *This,\r
-  IN       EFI_LBA                                      Lba,\r
-  IN       UINTN                                        Offset,\r
-  IN OUT   UINTN                                    *NumBytes,\r
-  IN       UINT8                                        *Buffer\r
+  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  *This,\r
+  IN       EFI_LBA                             Lba,\r
+  IN       UINTN                               Offset,\r
+  IN OUT   UINTN                               *NumBytes,\r
+  IN       UINT8                               *Buffer\r
   )\r
+\r
 /*++\r
 \r
   Routine Description:\r
@@ -779,7 +724,7 @@ FvbProtocolWrite (
     Writes data beginning at Lba:Offset from FV. The write terminates either\r
     when *NumBytes of data have been written, or when a block boundary is\r
     reached.  *NumBytes is updated to reflect the actual number of bytes\r
-    written. The write opertion does not include erase. This routine will\r
+    written. The write operation does not include erase. This routine will\r
     attempt to write only the specified bytes. If the writes do not stick,\r
     it will return an error.\r
 \r
@@ -804,19 +749,24 @@ FvbProtocolWrite (
 \r
 --*/\r
 {\r
-  return QemuFlashWrite ((EFI_LBA)Lba, (UINTN)Offset, NumBytes,\r
-           (UINT8 *)Buffer);\r
+  return QemuFlashWrite (\r
+           (EFI_LBA)Lba,\r
+           (UINTN)Offset,\r
+           NumBytes,\r
+           (UINT8 *)Buffer\r
+           );\r
 }\r
 \r
 EFI_STATUS\r
 EFIAPI\r
 FvbProtocolRead (\r
-  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL           *This,\r
-  IN CONST EFI_LBA                                      Lba,\r
-  IN CONST UINTN                                        Offset,\r
-  IN OUT UINTN                                    *NumBytes,\r
-  IN UINT8                                        *Buffer\r
+  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  *This,\r
+  IN CONST EFI_LBA                             Lba,\r
+  IN CONST UINTN                               Offset,\r
+  IN OUT UINTN                                 *NumBytes,\r
+  IN UINT8                                     *Buffer\r
   )\r
+\r
 /*++\r
 \r
   Routine Description:\r
@@ -824,7 +774,7 @@ FvbProtocolRead (
     Reads data beginning at Lba:Offset from FV. The Read terminates either\r
     when *NumBytes of data have been read, or when a block boundary is\r
     reached.  *NumBytes is updated to reflect the actual number of bytes\r
-    written. The write opertion does not include erase. This routine will\r
+    written. The write operation does not include erase. This routine will\r
     attempt to write only the specified bytes. If the writes do not stick,\r
     it will return an error.\r
 \r
@@ -849,14 +799,19 @@ FvbProtocolRead (
 \r
 --*/\r
 {\r
-  return QemuFlashRead ((EFI_LBA)Lba, (UINTN)Offset, NumBytes,\r
-           (UINT8 *)Buffer);\r
+  return QemuFlashRead (\r
+           (EFI_LBA)Lba,\r
+           (UINTN)Offset,\r
+           NumBytes,\r
+           (UINT8 *)Buffer\r
+           );\r
 }\r
 \r
 EFI_STATUS\r
 ValidateFvHeader (\r
-  EFI_FIRMWARE_VOLUME_HEADER            *FwVolHeader\r
+  EFI_FIRMWARE_VOLUME_HEADER  *FwVolHeader\r
   )\r
+\r
 /*++\r
 \r
   Routine Description:\r
@@ -872,7 +827,7 @@ ValidateFvHeader (
 \r
 --*/\r
 {\r
-  UINT16 Checksum;\r
+  UINT16  Checksum;\r
 \r
   //\r
   // Verify the header revision, header signature, length\r
@@ -881,9 +836,10 @@ ValidateFvHeader (
   //\r
   if ((FwVolHeader->Revision != EFI_FVH_REVISION) ||\r
       (FwVolHeader->Signature != EFI_FVH_SIGNATURE) ||\r
-      (FwVolHeader->FvLength == ((UINTN) -1)) ||\r
+      (FwVolHeader->FvLength == ((UINTN)-1)) ||\r
       ((FwVolHeader->HeaderLength & 0x01) != 0)\r
-      ) {\r
+      )\r
+  {\r
     return EFI_NOT_FOUND;\r
   }\r
 \r
@@ -891,74 +847,45 @@ ValidateFvHeader (
   // Verify the header checksum\r
   //\r
 \r
-  Checksum = CalculateSum16 ((UINT16 *) FwVolHeader,\r
-               FwVolHeader->HeaderLength);\r
+  Checksum = CalculateSum16 (\r
+               (UINT16 *)FwVolHeader,\r
+               FwVolHeader->HeaderLength\r
+               );\r
   if (Checksum != 0) {\r
-    UINT16 Expected;\r
+    UINT16  Expected;\r
 \r
     Expected =\r
-      (UINT16) (((UINTN) FwVolHeader->Checksum + 0x10000 - Checksum) & 0xffff);\r
-\r
-    DEBUG ((EFI_D_INFO, "FV@%p Checksum is 0x%x, expected 0x%x\n",\r
-            FwVolHeader, FwVolHeader->Checksum, Expected));\r
+      (UINT16)(((UINTN)FwVolHeader->Checksum + 0x10000 - Checksum) & 0xffff);\r
+\r
+    DEBUG ((\r
+      DEBUG_INFO,\r
+      "FV@%p Checksum is 0x%x, expected 0x%x\n",\r
+      FwVolHeader,\r
+      FwVolHeader->Checksum,\r
+      Expected\r
+      ));\r
     return EFI_NOT_FOUND;\r
   }\r
 \r
   return EFI_SUCCESS;\r
 }\r
 \r
-STATIC\r
-EFI_STATUS\r
-MarkMemoryRangeForRuntimeAccess (\r
-  EFI_PHYSICAL_ADDRESS                BaseAddress,\r
-  UINTN                               Length\r
-  )\r
-{\r
-  EFI_STATUS                          Status;\r
-\r
-  //\r
-  // Mark flash region as runtime memory\r
-  //\r
-  Status = gDS->RemoveMemorySpace (\r
-                  BaseAddress,\r
-                  Length\r
-                  );\r
-\r
-  Status = gDS->AddMemorySpace (\r
-                  EfiGcdMemoryTypeSystemMemory,\r
-                  BaseAddress,\r
-                  Length,\r
-                  EFI_MEMORY_UC | EFI_MEMORY_RUNTIME\r
-                  );\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  Status = gBS->AllocatePages (\r
-                  AllocateAddress,\r
-                  EfiRuntimeServicesData,\r
-                  EFI_SIZE_TO_PAGES (Length),\r
-                  &BaseAddress\r
-                  );\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  return Status;\r
-}\r
-\r
 STATIC\r
 EFI_STATUS\r
 InitializeVariableFvHeader (\r
   VOID\r
   )\r
 {\r
-  EFI_STATUS                          Status;\r
-  EFI_FIRMWARE_VOLUME_HEADER          *GoodFwVolHeader;\r
-  EFI_FIRMWARE_VOLUME_HEADER          *FwVolHeader;\r
-  UINTN                               Length;\r
-  UINTN                               WriteLength;\r
-  UINTN                               BlockSize;\r
+  EFI_STATUS                  Status;\r
+  EFI_FIRMWARE_VOLUME_HEADER  *GoodFwVolHeader;\r
+  EFI_FIRMWARE_VOLUME_HEADER  *FwVolHeader;\r
+  UINTN                       Length;\r
+  UINTN                       WriteLength;\r
+  UINTN                       BlockSize;\r
 \r
   FwVolHeader =\r
-    (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN)\r
-      PcdGet32 (PcdOvmfFlashNvStorageVariableBase);\r
+    (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)\r
+    PcdGet32 (PcdOvmfFlashNvStorageVariableBase);\r
 \r
   Length =\r
     (FixedPcdGet32 (PcdFlashNvStorageVariableSize) +\r
@@ -968,19 +895,23 @@ InitializeVariableFvHeader (
 \r
   BlockSize = PcdGet32 (PcdOvmfFirmwareBlockSize);\r
 \r
-  Status      = ValidateFvHeader (FwVolHeader);\r
+  Status = ValidateFvHeader (FwVolHeader);\r
   if (!EFI_ERROR (Status)) {\r
-    if (FwVolHeader->FvLength != Length ||\r
-        FwVolHeader->BlockMap[0].Length != BlockSize) {\r
+    if ((FwVolHeader->FvLength != Length) ||\r
+        (FwVolHeader->BlockMap[0].Length != BlockSize))\r
+    {\r
       Status = EFI_VOLUME_CORRUPTED;\r
     }\r
   }\r
+\r
   if (EFI_ERROR (Status)) {\r
-    UINTN   Offset;\r
-    UINTN   Start;\r
+    UINTN  Offset;\r
+    UINTN  Start;\r
 \r
-    DEBUG ((EFI_D_INFO,\r
-      "Variable FV header is not valid. It will be reinitialized.\n"));\r
+    DEBUG ((\r
+      DEBUG_INFO,\r
+      "Variable FV header is not valid. It will be reinitialized.\n"\r
+      ));\r
 \r
     //\r
     // Get FvbInfo to provide in FwhInstance.\r
@@ -988,7 +919,7 @@ InitializeVariableFvHeader (
     Status = GetFvbInfo (Length, &GoodFwVolHeader);\r
     ASSERT (!EFI_ERROR (Status));\r
 \r
-    Start = (UINTN)(UINT8*) FwVolHeader - PcdGet32 (PcdOvmfFdBaseAddress);\r
+    Start = (UINTN)(UINT8 *)FwVolHeader - PcdGet32 (PcdOvmfFdBaseAddress);\r
     ASSERT (Start % BlockSize == 0 && Length % BlockSize == 0);\r
     ASSERT (GoodFwVolHeader->HeaderLength <= BlockSize);\r
 \r
@@ -1004,11 +935,12 @@ InitializeVariableFvHeader (
     // Write good FV header\r
     //\r
     WriteLength = GoodFwVolHeader->HeaderLength;\r
-    Status = QemuFlashWrite (\r
-               Start / BlockSize,\r
-               0,\r
-               &WriteLength,\r
-               (UINT8 *) GoodFwVolHeader);\r
+    Status      = QemuFlashWrite (\r
+                    Start / BlockSize,\r
+                    0,\r
+                    &WriteLength,\r
+                    (UINT8 *)GoodFwVolHeader\r
+                    );\r
     ASSERT_EFI_ERROR (Status);\r
     ASSERT (WriteLength == GoodFwVolHeader->HeaderLength);\r
   }\r
@@ -1019,9 +951,10 @@ InitializeVariableFvHeader (
 EFI_STATUS\r
 EFIAPI\r
 FvbInitialize (\r
-  IN EFI_HANDLE         ImageHandle,\r
-  IN EFI_SYSTEM_TABLE   *SystemTable\r
+  IN EFI_HANDLE        ImageHandle,\r
+  IN EFI_SYSTEM_TABLE  *SystemTable\r
   )\r
+\r
 /*++\r
 \r
   Routine Description:\r
@@ -1033,26 +966,26 @@ FvbInitialize (
 \r
 --*/\r
 {\r
-  EFI_STATUS                          Status;\r
-  EFI_FW_VOL_INSTANCE                 *FwhInstance;\r
-  EFI_FIRMWARE_VOLUME_HEADER          *FwVolHeader;\r
-  UINT32                              BufferSize;\r
-  EFI_FV_BLOCK_MAP_ENTRY              *PtrBlockMapEntry;\r
-  EFI_HANDLE                          FwbHandle;\r
-  EFI_FW_VOL_BLOCK_DEVICE             *FvbDevice;\r
-  EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  *OldFwbInterface;\r
-  UINT32                              MaxLbaSize;\r
-  EFI_PHYSICAL_ADDRESS                BaseAddress;\r
-  UINTN                               Length;\r
-  UINTN                               NumOfBlocks;\r
-  EFI_EVENT                           VirtualAddressChangeEvent;\r
+  EFI_STATUS                  Status;\r
+  EFI_FW_VOL_INSTANCE         *FwhInstance;\r
+  EFI_FIRMWARE_VOLUME_HEADER  *FwVolHeader;\r
+  UINT32                      BufferSize;\r
+  EFI_FV_BLOCK_MAP_ENTRY      *PtrBlockMapEntry;\r
+  EFI_FW_VOL_BLOCK_DEVICE     *FvbDevice;\r
+  UINT32                      MaxLbaSize;\r
+  EFI_PHYSICAL_ADDRESS        BaseAddress;\r
+  UINTN                       Length;\r
+  UINTN                       NumOfBlocks;\r
+  RETURN_STATUS               PcdStatus;\r
 \r
   if (EFI_ERROR (QemuFlashInitialize ())) {\r
     //\r
     // Return an error so image will be unloaded\r
     //\r
-    DEBUG ((EFI_D_INFO,\r
-      "QEMU flash was not detected. Writable FVB is not being installed.\n"));\r
+    DEBUG ((\r
+      DEBUG_INFO,\r
+      "QEMU flash was not detected. Writable FVB is not being installed.\n"\r
+      ));\r
     return EFI_WRITE_PROTECTED;\r
   }\r
 \r
@@ -1063,17 +996,19 @@ FvbInitialize (
   mFvbModuleGlobal = AllocateRuntimePool (sizeof (ESAL_FWB_GLOBAL));\r
   ASSERT (mFvbModuleGlobal != NULL);\r
 \r
-  BaseAddress = (UINTN) PcdGet32 (PcdOvmfFdBaseAddress);\r
-  Length = PcdGet32 (PcdOvmfFirmwareFdSize);\r
+  BaseAddress = (UINTN)PcdGet32 (PcdOvmfFdBaseAddress);\r
+  Length      = PcdGet32 (PcdOvmfFirmwareFdSize);\r
 \r
   Status = InitializeVariableFvHeader ();\r
   if (EFI_ERROR (Status)) {\r
-    DEBUG ((EFI_D_INFO,\r
-      "QEMU Flash: Unable to initialize variable FV header\n"));\r
+    DEBUG ((\r
+      DEBUG_INFO,\r
+      "QEMU Flash: Unable to initialize variable FV header\n"\r
+      ));\r
     return EFI_WRITE_PROTECTED;\r
   }\r
 \r
-  FwVolHeader = (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) BaseAddress;\r
+  FwVolHeader = (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)BaseAddress;\r
   Status      = ValidateFvHeader (FwVolHeader);\r
   if (EFI_ERROR (Status)) {\r
     //\r
@@ -1081,7 +1016,7 @@ FvbInitialize (
     //\r
     Status = GetFvbInfo (Length, &FwVolHeader);\r
     if (EFI_ERROR (Status)) {\r
-      DEBUG ((EFI_D_INFO, "EFI_ERROR (GetFvbInfo (Length, &FwVolHeader))\n"));\r
+      DEBUG ((DEBUG_INFO, "EFI_ERROR (GetFvbInfo (Length, &FwVolHeader))\n"));\r
       return EFI_WRITE_PROTECTED;\r
     }\r
   }\r
@@ -1090,42 +1025,33 @@ FvbInitialize (
                 FwVolHeader->HeaderLength -\r
                 sizeof (EFI_FIRMWARE_VOLUME_HEADER)\r
                 );\r
+  mFvbModuleGlobal->FvInstance = AllocateRuntimePool (BufferSize);\r
+  ASSERT (mFvbModuleGlobal->FvInstance != NULL);\r
 \r
-  //\r
-  // Only need to allocate once. There is only one copy of physical memory for\r
-  // the private data of each FV instance. But in virtual mode or in physical\r
-  // mode, the address of the the physical memory may be different.\r
-  //\r
-  mFvbModuleGlobal->FvInstance[FVB_PHYSICAL] = AllocateRuntimePool (\r
-                                                 BufferSize);\r
-  ASSERT (mFvbModuleGlobal->FvInstance[FVB_PHYSICAL] != NULL);\r
+  FwhInstance = mFvbModuleGlobal->FvInstance;\r
 \r
-  //\r
-  // Make a virtual copy of the FvInstance pointer.\r
-  //\r
-  FwhInstance = mFvbModuleGlobal->FvInstance[FVB_PHYSICAL];\r
-  mFvbModuleGlobal->FvInstance[FVB_VIRTUAL] = FwhInstance;\r
-\r
-  mFvbModuleGlobal->NumFv                   = 0;\r
-  MaxLbaSize = 0;\r
+  mFvbModuleGlobal->NumFv = 0;\r
+  MaxLbaSize              = 0;\r
 \r
   FwVolHeader =\r
-    (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN)\r
-      PcdGet32 (PcdOvmfFlashNvStorageVariableBase);\r
+    (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)\r
+    PcdGet32 (PcdOvmfFlashNvStorageVariableBase);\r
 \r
-  FwhInstance->FvBase[FVB_PHYSICAL] = (UINTN) BaseAddress;\r
-  FwhInstance->FvBase[FVB_VIRTUAL]  = (UINTN) BaseAddress;\r
+  FwhInstance->FvBase = (UINTN)BaseAddress;\r
 \r
-  CopyMem ((UINTN *) &(FwhInstance->VolumeHeader), (UINTN *) FwVolHeader,\r
-    FwVolHeader->HeaderLength);\r
+  CopyMem (\r
+    (UINTN *)&(FwhInstance->VolumeHeader),\r
+    (UINTN *)FwVolHeader,\r
+    FwVolHeader->HeaderLength\r
+    );\r
   FwVolHeader = &(FwhInstance->VolumeHeader);\r
-  EfiInitializeLock (&(FwhInstance->FvbDevLock), TPL_HIGH_LEVEL);\r
 \r
   NumOfBlocks = 0;\r
 \r
   for (PtrBlockMapEntry = FwVolHeader->BlockMap;\r
        PtrBlockMapEntry->NumBlocks != 0;\r
-       PtrBlockMapEntry++) {\r
+       PtrBlockMapEntry++)\r
+  {\r
     //\r
     // Get the maximum size of a block.\r
     //\r
@@ -1156,22 +1082,26 @@ FvbInitialize (
   // Set up the devicepath\r
   //\r
   if (FwVolHeader->ExtHeaderOffset == 0) {\r
-    FV_MEMMAP_DEVICE_PATH *FvMemmapDevicePath;\r
+    FV_MEMMAP_DEVICE_PATH  *FvMemmapDevicePath;\r
 \r
     //\r
     // FV does not contains extension header, then produce MEMMAP_DEVICE_PATH\r
     //\r
-    FvMemmapDevicePath = AllocateCopyPool (sizeof (FV_MEMMAP_DEVICE_PATH),\r
-                           &mFvMemmapDevicePathTemplate);\r
+    FvMemmapDevicePath = AllocateCopyPool (\r
+                           sizeof (FV_MEMMAP_DEVICE_PATH),\r
+                           &mFvMemmapDevicePathTemplate\r
+                           );\r
     FvMemmapDevicePath->MemMapDevPath.StartingAddress = BaseAddress;\r
     FvMemmapDevicePath->MemMapDevPath.EndingAddress   =\r
       BaseAddress + FwVolHeader->FvLength - 1;\r
     FvbDevice->DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)FvMemmapDevicePath;\r
   } else {\r
-    FV_PIWG_DEVICE_PATH *FvPiwgDevicePath;\r
+    FV_PIWG_DEVICE_PATH  *FvPiwgDevicePath;\r
 \r
-    FvPiwgDevicePath = AllocateCopyPool (sizeof (FV_PIWG_DEVICE_PATH),\r
-                         &mFvPIWGDevicePathTemplate);\r
+    FvPiwgDevicePath = AllocateCopyPool (\r
+                         sizeof (FV_PIWG_DEVICE_PATH),\r
+                         &mFvPIWGDevicePathTemplate\r
+                         );\r
     CopyGuid (\r
       &FvPiwgDevicePath->FvDevPath.FvName,\r
       (GUID *)(UINTN)(BaseAddress + FwVolHeader->ExtHeaderOffset)\r
@@ -1180,87 +1110,26 @@ FvbInitialize (
   }\r
 \r
   //\r
-  // Find a handle with a matching device path that has supports FW Block\r
-  // protocol\r
+  // Module type specific hook.\r
   //\r
-  Status = gBS->LocateDevicePath (&gEfiFirmwareVolumeBlockProtocolGuid,\r
-                  &FvbDevice->DevicePath, &FwbHandle);\r
-  if (EFI_ERROR (Status)) {\r
-    //\r
-    // LocateDevicePath fails so install a new interface and device path\r
-    //\r
-    FwbHandle = NULL;\r
-    DEBUG ((EFI_D_INFO, "Installing QEMU flash FVB\n"));\r
-    Status = gBS->InstallMultipleProtocolInterfaces (\r
-                    &FwbHandle,\r
-                    &gEfiFirmwareVolumeBlockProtocolGuid,\r
-                    &FvbDevice->FwVolBlockInstance,\r
-                    &gEfiDevicePathProtocolGuid,\r
-                    FvbDevice->DevicePath,\r
-                    NULL\r
-                    );\r
-    ASSERT_EFI_ERROR (Status);\r
-  } else if (IsDevicePathEnd (FvbDevice->DevicePath)) {\r
-    //\r
-    // Device already exists, so reinstall the FVB protocol\r
-    //\r
-    Status = gBS->HandleProtocol (\r
-                    FwbHandle,\r
-                    &gEfiFirmwareVolumeBlockProtocolGuid,\r
-                    (VOID**)&OldFwbInterface\r
-                    );\r
-    ASSERT_EFI_ERROR (Status);\r
+  InstallProtocolInterfaces (FvbDevice);\r
 \r
-    DEBUG ((EFI_D_INFO, "Reinstalling FVB for QEMU flash region\n"));\r
-    Status = gBS->ReinstallProtocolInterface (\r
-                    FwbHandle,\r
-                    &gEfiFirmwareVolumeBlockProtocolGuid,\r
-                    OldFwbInterface,\r
-                    &FvbDevice->FwVolBlockInstance\r
-                    );\r
-    ASSERT_EFI_ERROR (Status);\r
-  } else {\r
-    //\r
-    // There was a FVB protocol on an End Device Path node\r
-    //\r
-    ASSERT (FALSE);\r
-  }\r
-\r
-  MarkMemoryRangeForRuntimeAccess (BaseAddress, Length);\r
+  MarkIoMemoryRangeForRuntimeAccess (BaseAddress, Length);\r
 \r
-  //\r
-  // Set several PCD values to point to flash\r
-  //\r
-  PcdSet64 (\r
-    PcdFlashNvStorageVariableBase64,\r
-    (UINTN) PcdGet32 (PcdOvmfFlashNvStorageVariableBase)\r
-    );\r
-  PcdSet32 (\r
-    PcdFlashNvStorageFtwWorkingBase,\r
-    PcdGet32 (PcdOvmfFlashNvStorageFtwWorkingBase)\r
-    );\r
-  PcdSet32 (\r
-    PcdFlashNvStorageFtwSpareBase,\r
-    PcdGet32 (PcdOvmfFlashNvStorageFtwSpareBase)\r
-    );\r
+  SetPcdFlashNvStorageBaseAddresses ();\r
 \r
   FwhInstance = (EFI_FW_VOL_INSTANCE *)\r
-    (\r
-      (UINTN) ((UINT8 *) FwhInstance) + FwVolHeader->HeaderLength +\r
-      (sizeof (EFI_FW_VOL_INSTANCE) - sizeof (EFI_FIRMWARE_VOLUME_HEADER))\r
-    );\r
+                (\r
+                 (UINTN)((UINT8 *)FwhInstance) + FwVolHeader->HeaderLength +\r
+                 (sizeof (EFI_FW_VOL_INSTANCE) - sizeof (EFI_FIRMWARE_VOLUME_HEADER))\r
+                );\r
 \r
-  VirtualAddressChangeEvent = NULL;\r
-  Status = gBS->CreateEventEx (\r
-                  EVT_NOTIFY_SIGNAL,\r
-                  TPL_NOTIFY,\r
-                  FvbVirtualddressChangeEvent,\r
-                  NULL,\r
-                  &gEfiEventVirtualAddressChangeGuid,\r
-                  &VirtualAddressChangeEvent\r
-                  );\r
-  ASSERT_EFI_ERROR (Status);\r
+  //\r
+  // Module type specific hook.\r
+  //\r
+  InstallVirtualAddressChangeHandler ();\r
 \r
-  PcdSetBool (PcdOvmfFlashVariablesEnable, TRUE);\r
+  PcdStatus = PcdSetBoolS (PcdOvmfFlashVariablesEnable, TRUE);\r
+  ASSERT_RETURN_ERROR (PcdStatus);\r
   return EFI_SUCCESS;\r
 }\r