]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / OvmfPkg / Library / PlatformBootManagerLib / BdsPlatform.c
index 8af9b71f18a3df4e0bf5dd2ebf3678fbc515698e..98f6f07341ec27e54a7607d63f07bab742dd4d4d 100644 (file)
@@ -8,28 +8,31 @@
 \r
 #include "BdsPlatform.h"\r
 #include <Guid/RootBridgesConnectedEventGroup.h>\r
+#include <Guid/SerialPortLibVendor.h>\r
 #include <Protocol/FirmwareVolume2.h>\r
 #include <Library/PlatformBmPrintScLib.h>\r
 #include <Library/Tcg2PhysicalPresenceLib.h>\r
 #include <Library/XenPlatformLib.h>\r
 \r
-\r
 //\r
 // Global data\r
 //\r
 \r
-VOID          *mEfiDevPathNotifyReg;\r
-EFI_EVENT     mEfiDevPathEvent;\r
-VOID          *mEmuVariableEventReg;\r
-EFI_EVENT     mEmuVariableEvent;\r
-UINT16        mHostBridgeDevId;\r
+VOID       *mEfiDevPathNotifyReg;\r
+EFI_EVENT  mEfiDevPathEvent;\r
+VOID       *mEmuVariableEventReg;\r
+EFI_EVENT  mEmuVariableEvent;\r
+UINT16     mHostBridgeDevId;\r
 \r
 //\r
 // Table of host IRQs matching PCI IRQs A-D\r
 // (for configuring PCI Interrupt Line register)\r
 //\r
-CONST UINT8 PciHostIrqs[] = {\r
-  0x0a, 0x0a, 0x0b, 0x0b\r
+CONST UINT8  PciHostIrqs[] = {\r
+  0x0a, // LNKA, LNKE\r
+  0x0a, // LNKB, LNKF\r
+  0x0b, // LNKC, LNKG\r
+  0x0b  // LNKD, LNKH\r
 };\r
 \r
 //\r
@@ -57,7 +60,6 @@ EFI_STATUS
   IN PCI_TYPE00           *Pci\r
   );\r
 \r
-\r
 //\r
 // Function prototypes\r
 //\r
@@ -71,7 +73,7 @@ VisitAllInstancesOfProtocol (
 \r
 EFI_STATUS\r
 VisitAllPciInstancesOfProtocol (\r
-  IN VISIT_PCI_INSTANCE_CALLBACK CallBackFunction\r
+  IN VISIT_PCI_INSTANCE_CALLBACK  CallBackFunction\r
   );\r
 \r
 VOID\r
@@ -81,24 +83,24 @@ InstallDevicePathCallback (
 \r
 VOID\r
 PlatformRegisterFvBootOption (\r
-  EFI_GUID                         *FileGuid,\r
-  CHAR16                           *Description,\r
-  UINT32                           Attributes\r
+  EFI_GUID  *FileGuid,\r
+  CHAR16    *Description,\r
+  UINT32    Attributes\r
   )\r
 {\r
-  EFI_STATUS                        Status;\r
-  INTN                              OptionIndex;\r
-  EFI_BOOT_MANAGER_LOAD_OPTION      NewOption;\r
-  EFI_BOOT_MANAGER_LOAD_OPTION      *BootOptions;\r
-  UINTN                             BootOptionCount;\r
-  MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileNode;\r
-  EFI_LOADED_IMAGE_PROTOCOL         *LoadedImage;\r
-  EFI_DEVICE_PATH_PROTOCOL          *DevicePath;\r
+  EFI_STATUS                         Status;\r
+  INTN                               OptionIndex;\r
+  EFI_BOOT_MANAGER_LOAD_OPTION       NewOption;\r
+  EFI_BOOT_MANAGER_LOAD_OPTION       *BootOptions;\r
+  UINTN                              BootOptionCount;\r
+  MEDIA_FW_VOL_FILEPATH_DEVICE_PATH  FileNode;\r
+  EFI_LOADED_IMAGE_PROTOCOL          *LoadedImage;\r
+  EFI_DEVICE_PATH_PROTOCOL           *DevicePath;\r
 \r
   Status = gBS->HandleProtocol (\r
                   gImageHandle,\r
                   &gEfiLoadedImageProtocolGuid,\r
-                  (VOID **) &LoadedImage\r
+                  (VOID **)&LoadedImage\r
                   );\r
   ASSERT_EFI_ERROR (Status);\r
 \r
@@ -107,7 +109,7 @@ PlatformRegisterFvBootOption (
   ASSERT (DevicePath != NULL);\r
   DevicePath = AppendDevicePathNode (\r
                  DevicePath,\r
-                 (EFI_DEVICE_PATH_PROTOCOL *) &FileNode\r
+                 (EFI_DEVICE_PATH_PROTOCOL *)&FileNode\r
                  );\r
   ASSERT (DevicePath != NULL);\r
 \r
@@ -125,17 +127,21 @@ PlatformRegisterFvBootOption (
   FreePool (DevicePath);\r
 \r
   BootOptions = EfiBootManagerGetLoadOptions (\r
-                  &BootOptionCount, LoadOptionTypeBoot\r
+                  &BootOptionCount,\r
+                  LoadOptionTypeBoot\r
                   );\r
 \r
   OptionIndex = EfiBootManagerFindLoadOption (\r
-                  &NewOption, BootOptions, BootOptionCount\r
+                  &NewOption,\r
+                  BootOptions,\r
+                  BootOptionCount\r
                   );\r
 \r
   if (OptionIndex == -1) {\r
     Status = EfiBootManagerAddLoadOptionVariable (&NewOption, MAX_UINTN);\r
     ASSERT_EFI_ERROR (Status);\r
   }\r
+\r
   EfiBootManagerFreeLoadOption (&NewOption);\r
   EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount);\r
 }\r
@@ -159,27 +165,30 @@ RemoveStaleFvFileOptions (
   VOID\r
   )\r
 {\r
-  EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions;\r
-  UINTN                        BootOptionCount;\r
-  UINTN                        Index;\r
+  EFI_BOOT_MANAGER_LOAD_OPTION  *BootOptions;\r
+  UINTN                         BootOptionCount;\r
+  UINTN                         Index;\r
 \r
-  BootOptions = EfiBootManagerGetLoadOptions (&BootOptionCount,\r
-                  LoadOptionTypeBoot);\r
+  BootOptions = EfiBootManagerGetLoadOptions (\r
+                  &BootOptionCount,\r
+                  LoadOptionTypeBoot\r
+                  );\r
 \r
   for (Index = 0; Index < BootOptionCount; ++Index) {\r
-    EFI_DEVICE_PATH_PROTOCOL *Node1, *Node2, *SearchNode;\r
-    EFI_STATUS               Status;\r
-    EFI_HANDLE               FvHandle;\r
+    EFI_DEVICE_PATH_PROTOCOL  *Node1, *Node2, *SearchNode;\r
+    EFI_STATUS                Status;\r
+    EFI_HANDLE                FvHandle;\r
 \r
     //\r
     // If the device path starts with neither MemoryMapped(...) nor Fv(...),\r
     // then keep the boot option.\r
     //\r
     Node1 = BootOptions[Index].FilePath;\r
-    if (!(DevicePathType (Node1) == HARDWARE_DEVICE_PATH &&\r
-          DevicePathSubType (Node1) == HW_MEMMAP_DP) &&\r
-        !(DevicePathType (Node1) == MEDIA_DEVICE_PATH &&\r
-          DevicePathSubType (Node1) == MEDIA_PIWG_FW_VOL_DP)) {\r
+    if (!((DevicePathType (Node1) == HARDWARE_DEVICE_PATH) &&\r
+          (DevicePathSubType (Node1) == HW_MEMMAP_DP)) &&\r
+        !((DevicePathType (Node1) == MEDIA_DEVICE_PATH) &&\r
+          (DevicePathSubType (Node1) == MEDIA_PIWG_FW_VOL_DP)))\r
+    {\r
       continue;\r
     }\r
 \r
@@ -188,8 +197,9 @@ RemoveStaleFvFileOptions (
     // option.\r
     //\r
     Node2 = NextDevicePathNode (Node1);\r
-    if (DevicePathType (Node2) != MEDIA_DEVICE_PATH ||\r
-        DevicePathSubType (Node2) != MEDIA_PIWG_FW_FILE_DP) {\r
+    if ((DevicePathType (Node2) != MEDIA_DEVICE_PATH) ||\r
+        (DevicePathSubType (Node2) != MEDIA_PIWG_FW_FILE_DP))\r
+    {\r
       continue;\r
     }\r
 \r
@@ -200,23 +210,29 @@ RemoveStaleFvFileOptions (
     // boot option.\r
     //\r
     SearchNode = Node1;\r
-    Status = gBS->LocateDevicePath (&gEfiFirmwareVolume2ProtocolGuid,\r
-                    &SearchNode, &FvHandle);\r
+    Status     = gBS->LocateDevicePath (\r
+                        &gEfiFirmwareVolume2ProtocolGuid,\r
+                        &SearchNode,\r
+                        &FvHandle\r
+                        );\r
 \r
     if (!EFI_ERROR (Status)) {\r
       //\r
       // The firmware volume was found; now let's see if it contains the FvFile\r
       // identified by GUID.\r
       //\r
-      EFI_FIRMWARE_VOLUME2_PROTOCOL     *FvProtocol;\r
-      MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FvFileNode;\r
-      UINTN                             BufferSize;\r
-      EFI_FV_FILETYPE                   FoundType;\r
-      EFI_FV_FILE_ATTRIBUTES            FileAttributes;\r
-      UINT32                            AuthenticationStatus;\r
-\r
-      Status = gBS->HandleProtocol (FvHandle, &gEfiFirmwareVolume2ProtocolGuid,\r
-                      (VOID **)&FvProtocol);\r
+      EFI_FIRMWARE_VOLUME2_PROTOCOL      *FvProtocol;\r
+      MEDIA_FW_VOL_FILEPATH_DEVICE_PATH  *FvFileNode;\r
+      UINTN                              BufferSize;\r
+      EFI_FV_FILETYPE                    FoundType;\r
+      EFI_FV_FILE_ATTRIBUTES             FileAttributes;\r
+      UINT32                             AuthenticationStatus;\r
+\r
+      Status = gBS->HandleProtocol (\r
+                      FvHandle,\r
+                      &gEfiFirmwareVolume2ProtocolGuid,\r
+                      (VOID **)&FvProtocol\r
+                      );\r
       ASSERT_EFI_ERROR (Status);\r
 \r
       FvFileNode = (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)Node2;\r
@@ -245,24 +261,30 @@ RemoveStaleFvFileOptions (
     // Delete the boot option.\r
     //\r
     Status = EfiBootManagerDeleteLoadOptionVariable (\r
-               BootOptions[Index].OptionNumber, LoadOptionTypeBoot);\r
-    DEBUG_CODE (\r
-      CHAR16 *DevicePathString;\r
+               BootOptions[Index].OptionNumber,\r
+               LoadOptionTypeBoot\r
+               );\r
+    DEBUG_CODE_BEGIN ();\r
+    CHAR16  *DevicePathString;\r
+\r
+    DevicePathString = ConvertDevicePathToText (\r
+                         BootOptions[Index].FilePath,\r
+                         FALSE,\r
+                         FALSE\r
+                         );\r
+    DEBUG ((\r
+      EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_VERBOSE,\r
+      "%a: removing stale Boot#%04x %s: %r\n",\r
+      __FUNCTION__,\r
+      (UINT32)BootOptions[Index].OptionNumber,\r
+      DevicePathString == NULL ? L"<unavailable>" : DevicePathString,\r
+      Status\r
+      ));\r
+    if (DevicePathString != NULL) {\r
+      FreePool (DevicePathString);\r
+    }\r
 \r
-      DevicePathString = ConvertDevicePathToText(BootOptions[Index].FilePath,\r
-                           FALSE, FALSE);\r
-      DEBUG ((\r
-        EFI_ERROR (Status) ? EFI_D_WARN : EFI_D_VERBOSE,\r
-        "%a: removing stale Boot#%04x %s: %r\n",\r
-        __FUNCTION__,\r
-        (UINT32)BootOptions[Index].OptionNumber,\r
-        DevicePathString == NULL ? L"<unavailable>" : DevicePathString,\r
-        Status\r
-        ));\r
-      if (DevicePathString != NULL) {\r
-        FreePool (DevicePathString);\r
-      }\r
-      );\r
+    DEBUG_CODE_END ();\r
   }\r
 \r
   EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount);\r
@@ -273,18 +295,18 @@ PlatformRegisterOptionsAndKeys (
   VOID\r
   )\r
 {\r
-  EFI_STATUS                   Status;\r
-  EFI_INPUT_KEY                Enter;\r
-  EFI_INPUT_KEY                F2;\r
-  EFI_INPUT_KEY                Esc;\r
-  EFI_BOOT_MANAGER_LOAD_OPTION BootOption;\r
+  EFI_STATUS                    Status;\r
+  EFI_INPUT_KEY                 Enter;\r
+  EFI_INPUT_KEY                 F2;\r
+  EFI_INPUT_KEY                 Esc;\r
+  EFI_BOOT_MANAGER_LOAD_OPTION  BootOption;\r
 \r
   //\r
   // Register ENTER as CONTINUE key\r
   //\r
   Enter.ScanCode    = SCAN_NULL;\r
   Enter.UnicodeChar = CHAR_CARRIAGE_RETURN;\r
-  Status = EfiBootManagerRegisterContinueKeyOption (0, &Enter, NULL);\r
+  Status            = EfiBootManagerRegisterContinueKeyOption (0, &Enter, NULL);\r
   ASSERT_EFI_ERROR (Status);\r
 \r
   //\r
@@ -294,14 +316,22 @@ PlatformRegisterOptionsAndKeys (
   F2.UnicodeChar  = CHAR_NULL;\r
   Esc.ScanCode    = SCAN_ESC;\r
   Esc.UnicodeChar = CHAR_NULL;\r
-  Status = EfiBootManagerGetBootManagerMenu (&BootOption);\r
+  Status          = EfiBootManagerGetBootManagerMenu (&BootOption);\r
   ASSERT_EFI_ERROR (Status);\r
   Status = EfiBootManagerAddKeyOptionVariable (\r
-             NULL, (UINT16) BootOption.OptionNumber, 0, &F2, NULL\r
+             NULL,\r
+             (UINT16)BootOption.OptionNumber,\r
+             0,\r
+             &F2,\r
+             NULL\r
              );\r
   ASSERT (Status == EFI_SUCCESS || Status == EFI_ALREADY_STARTED);\r
   Status = EfiBootManagerAddKeyOptionVariable (\r
-             NULL, (UINT16) BootOption.OptionNumber, 0, &Esc, NULL\r
+             NULL,\r
+             (UINT16)BootOption.OptionNumber,\r
+             0,\r
+             &Esc,\r
+             NULL\r
              );\r
   ASSERT (Status == EFI_SUCCESS || Status == EFI_ALREADY_STARTED);\r
 }\r
@@ -318,9 +348,9 @@ STATIC
 EFI_STATUS\r
 EFIAPI\r
 ConnectVirtioPciRng (\r
-  IN EFI_HANDLE Handle,\r
-  IN VOID       *Instance,\r
-  IN VOID       *Context\r
+  IN EFI_HANDLE  Handle,\r
+  IN VOID        *Instance,\r
+  IN VOID        *Context\r
   );\r
 \r
 STATIC\r
@@ -332,6 +362,7 @@ SaveS3BootScript (
 //\r
 // BDS Platform Functions\r
 //\r
+\r
 /**\r
   Do the platform init, can be customized by OEM/IBV\r
 \r
@@ -351,15 +382,19 @@ PlatformBootManagerBeforeConsole (
   VOID\r
   )\r
 {\r
-  EFI_HANDLE    Handle;\r
-  EFI_STATUS    Status;\r
-  RETURN_STATUS PcdStatus;\r
+  EFI_HANDLE     Handle;\r
+  EFI_STATUS     Status;\r
+  UINT16         FrontPageTimeout;\r
+  RETURN_STATUS  PcdStatus;\r
 \r
-  DEBUG ((EFI_D_INFO, "PlatformBootManagerBeforeConsole\n"));\r
+  DEBUG ((DEBUG_INFO, "PlatformBootManagerBeforeConsole\n"));\r
   InstallDevicePathCallback ();\r
 \r
-  VisitAllInstancesOfProtocol (&gEfiPciRootBridgeIoProtocolGuid,\r
-    ConnectRootBridge, NULL);\r
+  VisitAllInstancesOfProtocol (\r
+    &gEfiPciRootBridgeIoProtocolGuid,\r
+    ConnectRootBridge,\r
+    NULL\r
+    );\r
 \r
   //\r
   // Signal the ACPI platform driver that it can download QEMU ACPI tables.\r
@@ -375,7 +410,7 @@ PlatformBootManagerBeforeConsole (
   //\r
   EfiEventGroupSignal (&gEfiEndOfDxeEventGroupGuid);\r
 \r
-  if (QemuFwCfgS3Enabled ()) {\r
+  if (PcdGetBool (PcdAcpiS3Enable)) {\r
     //\r
     // Save the boot script too. Note that this will require us to emit the\r
     // DxeSmmReadyToLock event just below, which in turn locks down SMM.\r
@@ -383,13 +418,34 @@ PlatformBootManagerBeforeConsole (
     SaveS3BootScript ();\r
   }\r
 \r
+  //\r
+  // We need to connect all trusted consoles for TCG PP. Here we treat all\r
+  // consoles in OVMF to be trusted consoles.\r
+  //\r
+  // Cloud Hypervisor doesn't emulate any LPC bridge, which is why it must\r
+  // rely on the serial I/O port to be connected as a console. It reuses the\r
+  // definition from Xen as it is very generic.\r
+  //\r
+  PlatformInitializeConsole (\r
+    (XenDetected () || PcdGet16 (PcdOvmfHostBridgePciDevId) == CLOUDHV_DEVICE_ID) ? gXenPlatformConsole : gPlatformConsole\r
+    );\r
+\r
+  //\r
+  // Process TPM PPI request; this may require keyboard input\r
+  //\r
+  Tcg2PhysicalPresenceLibProcessRequest (NULL);\r
+\r
   //\r
   // Prevent further changes to LockBoxes or SMRAM.\r
+  // Any TPM 2 Physical Presence Interface opcode must be handled before.\r
   //\r
   Handle = NULL;\r
-  Status = gBS->InstallProtocolInterface (&Handle,\r
-                  &gEfiDxeSmmReadyToLockProtocolGuid, EFI_NATIVE_INTERFACE,\r
-                  NULL);\r
+  Status = gBS->InstallProtocolInterface (\r
+                  &Handle,\r
+                  &gEfiDxeSmmReadyToLockProtocolGuid,\r
+                  EFI_NATIVE_INTERFACE,\r
+                  NULL\r
+                  );\r
   ASSERT_EFI_ERROR (Status);\r
 \r
   //\r
@@ -398,11 +454,36 @@ PlatformBootManagerBeforeConsole (
   //\r
   EfiBootManagerDispatchDeferredImages ();\r
 \r
+  //\r
+  // GPU passthrough only allows Console enablement after ROM image load\r
+  //\r
   PlatformInitializeConsole (\r
-    XenDetected() ? gXenPlatformConsole : gPlatformConsole);\r
-  PcdStatus = PcdSet16S (PcdPlatformBootTimeOut,\r
-                GetFrontPageTimeoutFromQemu ());\r
+    XenDetected () ? gXenPlatformConsole : gPlatformConsole\r
+    );\r
+\r
+  FrontPageTimeout = GetFrontPageTimeoutFromQemu ();\r
+  PcdStatus        = PcdSet16S (PcdPlatformBootTimeOut, FrontPageTimeout);\r
   ASSERT_RETURN_ERROR (PcdStatus);\r
+  //\r
+  // Reflect the PCD in the standard Timeout variable.\r
+  //\r
+  Status = gRT->SetVariable (\r
+                  EFI_TIME_OUT_VARIABLE_NAME,\r
+                  &gEfiGlobalVariableGuid,\r
+                  (EFI_VARIABLE_NON_VOLATILE |\r
+                   EFI_VARIABLE_BOOTSERVICE_ACCESS |\r
+                   EFI_VARIABLE_RUNTIME_ACCESS),\r
+                  sizeof FrontPageTimeout,\r
+                  &FrontPageTimeout\r
+                  );\r
+  DEBUG ((\r
+    EFI_ERROR (Status) ? DEBUG_ERROR : DEBUG_VERBOSE,\r
+    "%a: SetVariable(%s, %u): %r\n",\r
+    __FUNCTION__,\r
+    EFI_TIME_OUT_VARIABLE_NAME,\r
+    FrontPageTimeout,\r
+    Status\r
+    ));\r
 \r
   PlatformRegisterOptionsAndKeys ();\r
 \r
@@ -410,11 +491,13 @@ PlatformBootManagerBeforeConsole (
   // Install both VIRTIO_DEVICE_PROTOCOL and (dependent) EFI_RNG_PROTOCOL\r
   // instances on Virtio PCI RNG devices.\r
   //\r
-  VisitAllInstancesOfProtocol (&gEfiPciIoProtocolGuid, ConnectVirtioPciRng,\r
-    NULL);\r
+  VisitAllInstancesOfProtocol (\r
+    &gEfiPciIoProtocolGuid,\r
+    ConnectVirtioPciRng,\r
+    NULL\r
+    );\r
 }\r
 \r
-\r
 EFI_STATUS\r
 EFIAPI\r
 ConnectRootBridge (\r
@@ -423,7 +506,7 @@ ConnectRootBridge (
   IN VOID        *Context\r
   )\r
 {\r
-  EFI_STATUS Status;\r
+  EFI_STATUS  Status;\r
 \r
   //\r
   // Make the PCI bus driver connect the root bridge, non-recursively. This\r
@@ -439,34 +522,39 @@ ConnectRootBridge (
   return Status;\r
 }\r
 \r
-\r
 STATIC\r
 EFI_STATUS\r
 EFIAPI\r
 ConnectVirtioPciRng (\r
-  IN EFI_HANDLE Handle,\r
-  IN VOID       *Instance,\r
-  IN VOID       *Context\r
+  IN EFI_HANDLE  Handle,\r
+  IN VOID        *Instance,\r
+  IN VOID        *Context\r
   )\r
 {\r
-  EFI_PCI_IO_PROTOCOL *PciIo;\r
-  EFI_STATUS          Status;\r
-  UINT16              VendorId;\r
-  UINT16              DeviceId;\r
-  UINT8               RevisionId;\r
-  BOOLEAN             Virtio10;\r
-  UINT16              SubsystemId;\r
+  EFI_PCI_IO_PROTOCOL  *PciIo;\r
+  EFI_STATUS           Status;\r
+  UINT16               VendorId;\r
+  UINT16               DeviceId;\r
+  UINT8                RevisionId;\r
+  BOOLEAN              Virtio10;\r
+  UINT16               SubsystemId;\r
 \r
   PciIo = Instance;\r
 \r
   //\r
   // Read and check VendorId.\r
   //\r
-  Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint16, PCI_VENDOR_ID_OFFSET,\r
-                        1, &VendorId);\r
+  Status = PciIo->Pci.Read (\r
+                        PciIo,\r
+                        EfiPciIoWidthUint16,\r
+                        PCI_VENDOR_ID_OFFSET,\r
+                        1,\r
+                        &VendorId\r
+                        );\r
   if (EFI_ERROR (Status)) {\r
     goto Error;\r
   }\r
+\r
   if (VendorId != VIRTIO_VENDOR_ID) {\r
     return EFI_SUCCESS;\r
   }\r
@@ -474,13 +562,24 @@ ConnectVirtioPciRng (
   //\r
   // Read DeviceId and RevisionId.\r
   //\r
-  Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint16, PCI_DEVICE_ID_OFFSET,\r
-                        1, &DeviceId);\r
+  Status = PciIo->Pci.Read (\r
+                        PciIo,\r
+                        EfiPciIoWidthUint16,\r
+                        PCI_DEVICE_ID_OFFSET,\r
+                        1,\r
+                        &DeviceId\r
+                        );\r
   if (EFI_ERROR (Status)) {\r
     goto Error;\r
   }\r
-  Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint8, PCI_REVISION_ID_OFFSET,\r
-                        1, &RevisionId);\r
+\r
+  Status = PciIo->Pci.Read (\r
+                        PciIo,\r
+                        EfiPciIoWidthUint8,\r
+                        PCI_REVISION_ID_OFFSET,\r
+                        1,\r
+                        &RevisionId\r
+                        );\r
   if (EFI_ERROR (Status)) {\r
     goto Error;\r
   }\r
@@ -492,10 +591,11 @@ ConnectVirtioPciRng (
   // SubsystemId will only play a sanity-check role. Otherwise, DeviceId can\r
   // only be sanity-checked, and SubsystemId will decide.\r
   //\r
-  if (DeviceId == 0x1040 + VIRTIO_SUBSYSTEM_ENTROPY_SOURCE &&\r
-      RevisionId >= 0x01) {\r
+  if ((DeviceId == 0x1040 + VIRTIO_SUBSYSTEM_ENTROPY_SOURCE) &&\r
+      (RevisionId >= 0x01))\r
+  {\r
     Virtio10 = TRUE;\r
-  } else if (DeviceId >= 0x1000 && DeviceId <= 0x103F && RevisionId == 0x00) {\r
+  } else if ((DeviceId >= 0x1000) && (DeviceId <= 0x103F) && (RevisionId == 0x00)) {\r
     Virtio10 = FALSE;\r
   } else {\r
     return EFI_SUCCESS;\r
@@ -504,13 +604,20 @@ ConnectVirtioPciRng (
   //\r
   // Read and check SubsystemId as dictated by Virtio10.\r
   //\r
-  Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint16,\r
-                        PCI_SUBSYSTEM_ID_OFFSET, 1, &SubsystemId);\r
+  Status = PciIo->Pci.Read (\r
+                        PciIo,\r
+                        EfiPciIoWidthUint16,\r
+                        PCI_SUBSYSTEM_ID_OFFSET,\r
+                        1,\r
+                        &SubsystemId\r
+                        );\r
   if (EFI_ERROR (Status)) {\r
     goto Error;\r
   }\r
-  if ((Virtio10 && SubsystemId >= 0x40) ||\r
-      (!Virtio10 && SubsystemId == VIRTIO_SUBSYSTEM_ENTROPY_SOURCE)) {\r
+\r
+  if ((Virtio10 && (SubsystemId >= 0x40)) ||\r
+      (!Virtio10 && (SubsystemId == VIRTIO_SUBSYSTEM_ENTROPY_SOURCE)))\r
+  {\r
     Status = gBS->ConnectController (\r
                     Handle, // ControllerHandle\r
                     NULL,   // DriverImageHandle -- connect all drivers\r
@@ -521,6 +628,7 @@ ConnectVirtioPciRng (
       goto Error;\r
     }\r
   }\r
+\r
   return EFI_SUCCESS;\r
 \r
 Error:\r
@@ -528,7 +636,6 @@ Error:
   return Status;\r
 }\r
 \r
-\r
 /**\r
   Add IsaKeyboard to ConIn; add IsaSerial to ConOut, ConIn, ErrOut.\r
 \r
@@ -542,7 +649,7 @@ Error:
 **/\r
 EFI_STATUS\r
 PrepareLpcBridgeDevicePath (\r
-  IN EFI_HANDLE                DeviceHandle\r
+  IN EFI_HANDLE  DeviceHandle\r
   )\r
 {\r
   EFI_STATUS                Status;\r
@@ -551,50 +658,59 @@ PrepareLpcBridgeDevicePath (
   CHAR16                    *DevPathStr;\r
 \r
   DevicePath = NULL;\r
-  Status = gBS->HandleProtocol (\r
-                  DeviceHandle,\r
-                  &gEfiDevicePathProtocolGuid,\r
-                  (VOID*)&DevicePath\r
-                  );\r
+  Status     = gBS->HandleProtocol (\r
+                      DeviceHandle,\r
+                      &gEfiDevicePathProtocolGuid,\r
+                      (VOID *)&DevicePath\r
+                      );\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
+\r
   TempDevicePath = DevicePath;\r
 \r
   //\r
   // Register Keyboard\r
   //\r
-  DevicePath = AppendDevicePathNode (DevicePath,\r
-                 (EFI_DEVICE_PATH_PROTOCOL *)&gPnpPs2KeyboardDeviceNode);\r
+  DevicePath = AppendDevicePathNode (\r
+                 DevicePath,\r
+                 (EFI_DEVICE_PATH_PROTOCOL *)&gPnpPs2KeyboardDeviceNode\r
+                 );\r
 \r
   EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL);\r
 \r
   //\r
   // Register COM1\r
   //\r
-  DevicePath = TempDevicePath;\r
+  DevicePath                     = TempDevicePath;\r
   gPnp16550ComPortDeviceNode.UID = 0;\r
 \r
-  DevicePath = AppendDevicePathNode (DevicePath,\r
-                 (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode);\r
-  DevicePath = AppendDevicePathNode (DevicePath,\r
-                 (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode);\r
-  DevicePath = AppendDevicePathNode (DevicePath,\r
-                 (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode);\r
+  DevicePath = AppendDevicePathNode (\r
+                 DevicePath,\r
+                 (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode\r
+                 );\r
+  DevicePath = AppendDevicePathNode (\r
+                 DevicePath,\r
+                 (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode\r
+                 );\r
+  DevicePath = AppendDevicePathNode (\r
+                 DevicePath,\r
+                 (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode\r
+                 );\r
 \r
   //\r
   // Print Device Path\r
   //\r
   DevPathStr = ConvertDevicePathToText (DevicePath, FALSE, FALSE);\r
   if (DevPathStr != NULL) {\r
-    DEBUG((\r
-      EFI_D_INFO,\r
+    DEBUG ((\r
+      DEBUG_INFO,\r
       "BdsPlatform.c+%d: COM%d DevPath: %s\n",\r
-      __LINE__,\r
+      DEBUG_LINE_NUMBER,\r
       gPnp16550ComPortDeviceNode.UID + 1,\r
       DevPathStr\r
       ));\r
-    FreePool(DevPathStr);\r
+    FreePool (DevPathStr);\r
   }\r
 \r
   EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL);\r
@@ -604,29 +720,35 @@ PrepareLpcBridgeDevicePath (
   //\r
   // Register COM2\r
   //\r
-  DevicePath = TempDevicePath;\r
+  DevicePath                     = TempDevicePath;\r
   gPnp16550ComPortDeviceNode.UID = 1;\r
 \r
-  DevicePath = AppendDevicePathNode (DevicePath,\r
-                 (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode);\r
-  DevicePath = AppendDevicePathNode (DevicePath,\r
-                 (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode);\r
-  DevicePath = AppendDevicePathNode (DevicePath,\r
-                 (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode);\r
+  DevicePath = AppendDevicePathNode (\r
+                 DevicePath,\r
+                 (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode\r
+                 );\r
+  DevicePath = AppendDevicePathNode (\r
+                 DevicePath,\r
+                 (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode\r
+                 );\r
+  DevicePath = AppendDevicePathNode (\r
+                 DevicePath,\r
+                 (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode\r
+                 );\r
 \r
   //\r
   // Print Device Path\r
   //\r
   DevPathStr = ConvertDevicePathToText (DevicePath, FALSE, FALSE);\r
   if (DevPathStr != NULL) {\r
-    DEBUG((\r
-      EFI_D_INFO,\r
+    DEBUG ((\r
+      DEBUG_INFO,\r
       "BdsPlatform.c+%d: COM%d DevPath: %s\n",\r
-      __LINE__,\r
+      DEBUG_LINE_NUMBER,\r
       gPnp16550ComPortDeviceNode.UID + 1,\r
       DevPathStr\r
       ));\r
-    FreePool(DevPathStr);\r
+    FreePool (DevPathStr);\r
   }\r
 \r
   EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL);\r
@@ -636,21 +758,64 @@ PrepareLpcBridgeDevicePath (
   return EFI_SUCCESS;\r
 }\r
 \r
+typedef struct {\r
+  VENDOR_DEVICE_PATH          Guid;\r
+  EFI_DEVICE_PATH_PROTOCOL    End;\r
+} SERIAL_DEVICE_PATH;\r
+\r
+SERIAL_DEVICE_PATH  serialDevicePath = {\r
+  {\r
+    { HARDWARE_DEVICE_PATH, HW_VENDOR_DP,                   { sizeof (VENDOR_DEVICE_PATH),       0 }\r
+    },\r
+    EDKII_SERIAL_PORT_LIB_VENDOR_GUID\r
+  },\r
+  { END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, { sizeof (EFI_DEVICE_PATH_PROTOCOL), 0 }\r
+  }\r
+};\r
+\r
+VOID\r
+PrepareMicrovmDevicePath (\r
+  VOID\r
+  )\r
+{\r
+  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
+  UINT16                    HostBridgeDevId;\r
+\r
+  HostBridgeDevId = PcdGet16 (PcdOvmfHostBridgePciDevId);\r
+  if (HostBridgeDevId != MICROVM_PSEUDO_DEVICE_ID) {\r
+    return;\r
+  }\r
+\r
+  DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)&serialDevicePath;\r
+  DevicePath = AppendDevicePathNode (\r
+                 DevicePath,\r
+                 (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode\r
+                 );\r
+  DevicePath = AppendDevicePathNode (\r
+                 DevicePath,\r
+                 (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode\r
+                 );\r
+\r
+  EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL);\r
+  EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL);\r
+  EfiBootManagerUpdateConsoleVariable (ErrOut, DevicePath, NULL);\r
+}\r
+\r
 EFI_STATUS\r
 GetGopDevicePath (\r
-   IN  EFI_DEVICE_PATH_PROTOCOL *PciDevicePath,\r
-   OUT EFI_DEVICE_PATH_PROTOCOL **GopDevicePath\r
-   )\r
+  IN  EFI_DEVICE_PATH_PROTOCOL  *PciDevicePath,\r
+  OUT EFI_DEVICE_PATH_PROTOCOL  **GopDevicePath\r
+  )\r
 {\r
-  UINTN                           Index;\r
-  EFI_STATUS                      Status;\r
-  EFI_HANDLE                      PciDeviceHandle;\r
-  EFI_DEVICE_PATH_PROTOCOL        *TempDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL        *TempPciDevicePath;\r
-  UINTN                           GopHandleCount;\r
-  EFI_HANDLE                      *GopHandleBuffer;\r
-\r
-  if (PciDevicePath == NULL || GopDevicePath == NULL) {\r
+  UINTN                     Index;\r
+  EFI_STATUS                Status;\r
+  EFI_HANDLE                PciDeviceHandle;\r
+  EFI_DEVICE_PATH_PROTOCOL  *TempDevicePath;\r
+  EFI_DEVICE_PATH_PROTOCOL  *TempPciDevicePath;\r
+  UINTN                     GopHandleCount;\r
+  EFI_HANDLE                *GopHandleBuffer;\r
+\r
+  if ((PciDevicePath == NULL) || (GopDevicePath == NULL)) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
@@ -689,16 +854,21 @@ GetGopDevicePath (
     // Add all the child handles as possible Console Device\r
     //\r
     for (Index = 0; Index < GopHandleCount; Index++) {\r
-      Status = gBS->HandleProtocol (GopHandleBuffer[Index],\r
-                      &gEfiDevicePathProtocolGuid, (VOID*)&TempDevicePath);\r
+      Status = gBS->HandleProtocol (\r
+                      GopHandleBuffer[Index],\r
+                      &gEfiDevicePathProtocolGuid,\r
+                      (VOID *)&TempDevicePath\r
+                      );\r
       if (EFI_ERROR (Status)) {\r
         continue;\r
       }\r
+\r
       if (CompareMem (\r
             PciDevicePath,\r
             TempDevicePath,\r
             GetDevicePathSize (PciDevicePath) - END_DEVICE_PATH_LENGTH\r
-            ) == 0) {\r
+            ) == 0)\r
+      {\r
         //\r
         // In current implementation, we only enable one of the child handles\r
         // as console device, i.e. sotre one of the child handle's device\r
@@ -716,6 +886,7 @@ GetGopDevicePath (
         EfiBootManagerUpdateConsoleVariable (ConOutDev, TempDevicePath, NULL);\r
       }\r
     }\r
+\r
     gBS->FreePool (GopHandleBuffer);\r
   }\r
 \r
@@ -734,7 +905,7 @@ GetGopDevicePath (
 **/\r
 EFI_STATUS\r
 PreparePciDisplayDevicePath (\r
-  IN EFI_HANDLE                DeviceHandle\r
+  IN EFI_HANDLE  DeviceHandle\r
   )\r
 {\r
   EFI_STATUS                Status;\r
@@ -743,11 +914,11 @@ PreparePciDisplayDevicePath (
 \r
   DevicePath    = NULL;\r
   GopDevicePath = NULL;\r
-  Status = gBS->HandleProtocol (\r
-                  DeviceHandle,\r
-                  &gEfiDevicePathProtocolGuid,\r
-                  (VOID*)&DevicePath\r
-                  );\r
+  Status        = gBS->HandleProtocol (\r
+                         DeviceHandle,\r
+                         &gEfiDevicePathProtocolGuid,\r
+                         (VOID *)&DevicePath\r
+                         );\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
@@ -773,26 +944,30 @@ PreparePciDisplayDevicePath (
 **/\r
 EFI_STATUS\r
 PreparePciSerialDevicePath (\r
-  IN EFI_HANDLE                DeviceHandle\r
+  IN EFI_HANDLE  DeviceHandle\r
   )\r
 {\r
   EFI_STATUS                Status;\r
   EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
 \r
   DevicePath = NULL;\r
-  Status = gBS->HandleProtocol (\r
-                  DeviceHandle,\r
-                  &gEfiDevicePathProtocolGuid,\r
-                  (VOID*)&DevicePath\r
-                  );\r
+  Status     = gBS->HandleProtocol (\r
+                      DeviceHandle,\r
+                      &gEfiDevicePathProtocolGuid,\r
+                      (VOID *)&DevicePath\r
+                      );\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
 \r
-  DevicePath = AppendDevicePathNode (DevicePath,\r
-                 (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode);\r
-  DevicePath = AppendDevicePathNode (DevicePath,\r
-                 (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode);\r
+  DevicePath = AppendDevicePathNode (\r
+                 DevicePath,\r
+                 (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode\r
+                 );\r
+  DevicePath = AppendDevicePathNode (\r
+                 DevicePath,\r
+                 (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode\r
+                 );\r
 \r
   EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL);\r
   EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL);\r
@@ -808,24 +983,24 @@ VisitAllInstancesOfProtocol (
   IN VOID                        *Context\r
   )\r
 {\r
-  EFI_STATUS                Status;\r
-  UINTN                     HandleCount;\r
-  EFI_HANDLE                *HandleBuffer;\r
-  UINTN                     Index;\r
-  VOID                      *Instance;\r
+  EFI_STATUS  Status;\r
+  UINTN       HandleCount;\r
+  EFI_HANDLE  *HandleBuffer;\r
+  UINTN       Index;\r
+  VOID        *Instance;\r
 \r
   //\r
   // Start to check all the PciIo to find all possible device\r
   //\r
-  HandleCount = 0;\r
+  HandleCount  = 0;\r
   HandleBuffer = NULL;\r
-  Status = gBS->LocateHandleBuffer (\r
-                  ByProtocol,\r
-                  Id,\r
-                  NULL,\r
-                  &HandleCount,\r
-                  &HandleBuffer\r
-                  );\r
+  Status       = gBS->LocateHandleBuffer (\r
+                        ByProtocol,\r
+                        Id,\r
+                        NULL,\r
+                        &HandleCount,\r
+                        &HandleBuffer\r
+                        );\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
@@ -836,11 +1011,11 @@ VisitAllInstancesOfProtocol (
       continue;\r
     }\r
 \r
-    Status = (*CallBackFunction) (\r
-               HandleBuffer[Index],\r
-               Instance,\r
-               Context\r
-               );\r
+    Status = (*CallBackFunction)(\r
+  HandleBuffer[Index],\r
+  Instance,\r
+  Context\r
+  );\r
   }\r
 \r
   gBS->FreePool (HandleBuffer);\r
@@ -848,7 +1023,6 @@ VisitAllInstancesOfProtocol (
   return EFI_SUCCESS;\r
 }\r
 \r
-\r
 EFI_STATUS\r
 EFIAPI\r
 VisitingAPciInstance (\r
@@ -857,49 +1031,45 @@ VisitingAPciInstance (
   IN VOID        *Context\r
   )\r
 {\r
-  EFI_STATUS                Status;\r
-  EFI_PCI_IO_PROTOCOL       *PciIo;\r
-  PCI_TYPE00                Pci;\r
+  EFI_STATUS           Status;\r
+  EFI_PCI_IO_PROTOCOL  *PciIo;\r
+  PCI_TYPE00           Pci;\r
 \r
-  PciIo = (EFI_PCI_IO_PROTOCOL*) Instance;\r
+  PciIo = (EFI_PCI_IO_PROTOCOL *)Instance;\r
 \r
   //\r
   // Check for all PCI device\r
   //\r
   Status = PciIo->Pci.Read (\r
-                    PciIo,\r
-                    EfiPciIoWidthUint32,\r
-                    0,\r
-                    sizeof (Pci) / sizeof (UINT32),\r
-                    &Pci\r
-                    );\r
+                        PciIo,\r
+                        EfiPciIoWidthUint32,\r
+                        0,\r
+                        sizeof (Pci) / sizeof (UINT32),\r
+                        &Pci\r
+                        );\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
 \r
-  return (*(VISIT_PCI_INSTANCE_CALLBACK)(UINTN) Context) (\r
-           Handle,\r
-           PciIo,\r
-           &Pci\r
-           );\r
-\r
+  return (*(VISIT_PCI_INSTANCE_CALLBACK)(UINTN)Context)(\r
+  Handle,\r
+  PciIo,\r
+  &Pci\r
+  );\r
 }\r
 \r
-\r
-\r
 EFI_STATUS\r
 VisitAllPciInstances (\r
-  IN VISIT_PCI_INSTANCE_CALLBACK CallBackFunction\r
+  IN VISIT_PCI_INSTANCE_CALLBACK  CallBackFunction\r
   )\r
 {\r
   return VisitAllInstancesOfProtocol (\r
            &gEfiPciIoProtocolGuid,\r
            VisitingAPciInstance,\r
-           (VOID*)(UINTN) CallBackFunction\r
+           (VOID *)(UINTN)CallBackFunction\r
            );\r
 }\r
 \r
-\r
 /**\r
   Do platform specific PCI Device check and add them to\r
   ConOut, ConIn, ErrOut.\r
@@ -921,14 +1091,14 @@ DetectAndPreparePlatformPciDevicePath (
   IN PCI_TYPE00           *Pci\r
   )\r
 {\r
-  EFI_STATUS                Status;\r
+  EFI_STATUS  Status;\r
 \r
   Status = PciIo->Attributes (\r
-    PciIo,\r
-    EfiPciIoAttributeOperationEnable,\r
-    EFI_PCI_DEVICE_ENABLE,\r
-    NULL\r
-    );\r
+                    PciIo,\r
+                    EfiPciIoAttributeOperationEnable,\r
+                    EFI_PCI_DEVICE_ENABLE,\r
+                    NULL\r
+                    );\r
   ASSERT_EFI_ERROR (Status);\r
 \r
   //\r
@@ -939,15 +1109,17 @@ DetectAndPreparePlatformPciDevicePath (
        (Pci->Hdr.VendorId == 0x8086) &&\r
        (Pci->Hdr.DeviceId == 0x7000)\r
       )\r
-     ) {\r
+      )\r
+  {\r
     //\r
     // Add IsaKeyboard to ConIn,\r
     // add IsaSerial to ConOut, ConIn, ErrOut\r
     //\r
-    DEBUG ((EFI_D_INFO, "Found LPC Bridge device\n"));\r
+    DEBUG ((DEBUG_INFO, "Found LPC Bridge device\n"));\r
     PrepareLpcBridgeDevicePath (Handle);\r
     return EFI_SUCCESS;\r
   }\r
+\r
   //\r
   // Here we decide which Serial device to enable in PCI bus\r
   //\r
@@ -955,7 +1127,7 @@ DetectAndPreparePlatformPciDevicePath (
     //\r
     // Add them to ConOut, ConIn, ErrOut.\r
     //\r
-    DEBUG ((EFI_D_INFO, "Found PCI 16550 SERIAL device\n"));\r
+    DEBUG ((DEBUG_INFO, "Found PCI 16550 SERIAL device\n"));\r
     PreparePciSerialDevicePath (Handle);\r
     return EFI_SUCCESS;\r
   }\r
@@ -967,7 +1139,7 @@ DetectAndPreparePlatformPciDevicePath (
     //\r
     // Add them to ConOut.\r
     //\r
-    DEBUG ((EFI_D_INFO, "Found PCI display device\n"));\r
+    DEBUG ((DEBUG_INFO, "Found PCI display device\n"));\r
     PreparePciDisplayDevicePath (Handle);\r
     return EFI_SUCCESS;\r
   }\r
@@ -975,7 +1147,6 @@ DetectAndPreparePlatformPciDevicePath (
   return Status;\r
 }\r
 \r
-\r
 /**\r
   Connect the predefined platform default console device.\r
 \r
@@ -985,10 +1156,10 @@ DetectAndPreparePlatformPciDevicePath (
 **/\r
 VOID\r
 PlatformInitializeConsole (\r
-  IN PLATFORM_CONSOLE_CONNECT_ENTRY   *PlatformConsole\r
+  IN PLATFORM_CONSOLE_CONNECT_ENTRY  *PlatformConsole\r
   )\r
 {\r
-  UINTN                              Index;\r
+  UINTN  Index;\r
 \r
   //\r
   // Do platform specific PCI Device check and add them to ConOut, ConIn,\r
@@ -996,6 +1167,8 @@ PlatformInitializeConsole (
   //\r
   VisitAllPciInstances (DetectAndPreparePlatformPciDevicePath);\r
 \r
+  PrepareMicrovmDevicePath ();\r
+\r
   //\r
   // Have chance to connect the platform default console,\r
   // the platform default console is the minimum device group\r
@@ -1006,21 +1179,31 @@ PlatformInitializeConsole (
     // Update the console variable with the connect type\r
     //\r
     if ((PlatformConsole[Index].ConnectType & CONSOLE_IN) == CONSOLE_IN) {\r
-      EfiBootManagerUpdateConsoleVariable (ConIn,\r
-        PlatformConsole[Index].DevicePath, NULL);\r
+      EfiBootManagerUpdateConsoleVariable (\r
+        ConIn,\r
+        PlatformConsole[Index].DevicePath,\r
+        NULL\r
+        );\r
     }\r
+\r
     if ((PlatformConsole[Index].ConnectType & CONSOLE_OUT) == CONSOLE_OUT) {\r
-      EfiBootManagerUpdateConsoleVariable (ConOut,\r
-        PlatformConsole[Index].DevicePath, NULL);\r
+      EfiBootManagerUpdateConsoleVariable (\r
+        ConOut,\r
+        PlatformConsole[Index].DevicePath,\r
+        NULL\r
+        );\r
     }\r
+\r
     if ((PlatformConsole[Index].ConnectType & STD_ERROR) == STD_ERROR) {\r
-      EfiBootManagerUpdateConsoleVariable (ErrOut,\r
-        PlatformConsole[Index].DevicePath, NULL);\r
+      EfiBootManagerUpdateConsoleVariable (\r
+        ErrOut,\r
+        PlatformConsole[Index].DevicePath,\r
+        NULL\r
+        );\r
     }\r
   }\r
 }\r
 \r
-\r
 /**\r
   Configure PCI Interrupt Line register for applicable devices\r
   Ported from SeaBIOS, src/fw/pciinit.c, *_pci_slot_get_irq()\r
@@ -1051,15 +1234,15 @@ SetPciIntLine (
   Status = EFI_SUCCESS;\r
 \r
   if (PciHdr->Device.InterruptPin != 0) {\r
-\r
     DevPathNode = DevicePathFromHandle (Handle);\r
     ASSERT (DevPathNode != NULL);\r
     DevPath = DevPathNode;\r
 \r
     RootBusNumber = 0;\r
-    if (DevicePathType (DevPathNode) == ACPI_DEVICE_PATH &&\r
-        DevicePathSubType (DevPathNode) == ACPI_DP &&\r
-        ((ACPI_HID_DEVICE_PATH *)DevPathNode)->HID == EISA_PNP_ID(0x0A03)) {\r
+    if ((DevicePathType (DevPathNode) == ACPI_DEVICE_PATH) &&\r
+        (DevicePathSubType (DevPathNode) == ACPI_DP) &&\r
+        (((ACPI_HID_DEVICE_PATH *)DevPathNode)->HID == EISA_PNP_ID (0x0A03)))\r
+    {\r
       RootBusNumber = ((ACPI_HID_DEVICE_PATH *)DevPathNode)->UID;\r
     }\r
 \r
@@ -1067,13 +1250,13 @@ SetPciIntLine (
     // Compute index into PciHostIrqs[] table by walking\r
     // the device path and adding up all device numbers\r
     //\r
-    Status = EFI_NOT_FOUND;\r
+    Status   = EFI_NOT_FOUND;\r
     RootSlot = 0;\r
-    Idx = PciHdr->Device.InterruptPin - 1;\r
+    Idx      = PciHdr->Device.InterruptPin - 1;\r
     while (!IsDevicePathEnd (DevPathNode)) {\r
-      if (DevicePathType (DevPathNode) == HARDWARE_DEVICE_PATH &&\r
-          DevicePathSubType (DevPathNode) == HW_PCI_DP) {\r
-\r
+      if ((DevicePathType (DevPathNode) == HARDWARE_DEVICE_PATH) &&\r
+          (DevicePathSubType (DevPathNode) == HW_PCI_DP))\r
+      {\r
         Idx += ((PCI_DEVICE_PATH *)DevPathNode)->Device;\r
 \r
         //\r
@@ -1084,19 +1267,21 @@ SetPciIntLine (
         // Q35 cases with more than 24 slots on the root bus.\r
         //\r
         if (Status != EFI_SUCCESS) {\r
-          Status = EFI_SUCCESS;\r
+          Status   = EFI_SUCCESS;\r
           RootSlot = ((PCI_DEVICE_PATH *)DevPathNode)->Device;\r
         }\r
       }\r
 \r
       DevPathNode = NextDevicePathNode (DevPathNode);\r
     }\r
+\r
     if (EFI_ERROR (Status)) {\r
       return Status;\r
     }\r
-    if (RootBusNumber == 0 && RootSlot == 0) {\r
-      DEBUG((\r
-        EFI_D_ERROR,\r
+\r
+    if ((RootBusNumber == 0) && (RootSlot == 0)) {\r
+      DEBUG ((\r
+        DEBUG_ERROR,\r
         "%a: PCI host bridge (00:00.0) should have no interrupts!\n",\r
         __FUNCTION__\r
         ));\r
@@ -1127,29 +1312,39 @@ SetPciIntLine (
           //\r
           Idx -= RootSlot;\r
         }\r
+\r
         break;\r
       default:\r
         ASSERT (FALSE); // should never get here\r
     }\r
-    Idx %= ARRAY_SIZE (PciHostIrqs);\r
+\r
+    Idx    %= ARRAY_SIZE (PciHostIrqs);\r
     IrqLine = PciHostIrqs[Idx];\r
 \r
     DEBUG_CODE_BEGIN ();\r
     {\r
-      CHAR16        *DevPathString;\r
-      STATIC CHAR16 Fallback[] = L"<failed to convert>";\r
-      UINTN         Segment, Bus, Device, Function;\r
+      CHAR16         *DevPathString;\r
+      STATIC CHAR16  Fallback[] = L"<failed to convert>";\r
+      UINTN          Segment, Bus, Device, Function;\r
 \r
       DevPathString = ConvertDevicePathToText (DevPath, FALSE, FALSE);\r
       if (DevPathString == NULL) {\r
         DevPathString = Fallback;\r
       }\r
+\r
       Status = PciIo->GetLocation (PciIo, &Segment, &Bus, &Device, &Function);\r
       ASSERT_EFI_ERROR (Status);\r
 \r
-      DEBUG ((EFI_D_VERBOSE, "%a: [%02x:%02x.%x] %s -> 0x%02x\n", __FUNCTION__,\r
-        (UINT32)Bus, (UINT32)Device, (UINT32)Function, DevPathString,\r
-        IrqLine));\r
+      DEBUG ((\r
+        DEBUG_VERBOSE,\r
+        "%a: [%02x:%02x.%x] %s -> 0x%02x\n",\r
+        __FUNCTION__,\r
+        (UINT32)Bus,\r
+        (UINT32)Device,\r
+        (UINT32)Function,\r
+        DevPathString,\r
+        IrqLine\r
+        ));\r
 \r
       if (DevPathString != Fallback) {\r
         FreePool (DevPathString);\r
@@ -1161,18 +1356,17 @@ SetPciIntLine (
     // Set PCI Interrupt Line register for this device to PciHostIrqs[Idx]\r
     //\r
     Status = PciIo->Pci.Write (\r
-               PciIo,\r
-               EfiPciIoWidthUint8,\r
-               PCI_INT_LINE_OFFSET,\r
-               1,\r
-               &IrqLine\r
-               );\r
+                          PciIo,\r
+                          EfiPciIoWidthUint8,\r
+                          PCI_INT_LINE_OFFSET,\r
+                          1,\r
+                          &IrqLine\r
+                          );\r
   }\r
 \r
   return Status;\r
 }\r
 \r
-\r
 VOID\r
 PciAcpiInitialization (\r
   )\r
@@ -1189,25 +1383,28 @@ PciAcpiInitialization (
       //\r
       // 00:01.0 ISA Bridge (PIIX4) LNK routing targets\r
       //\r
-      PciWrite8 (PCI_LIB_ADDRESS (0, 1, 0, 0x60), 0x0b); // A\r
-      PciWrite8 (PCI_LIB_ADDRESS (0, 1, 0, 0x61), 0x0b); // B\r
-      PciWrite8 (PCI_LIB_ADDRESS (0, 1, 0, 0x62), 0x0a); // C\r
-      PciWrite8 (PCI_LIB_ADDRESS (0, 1, 0, 0x63), 0x0a); // D\r
+      PciWrite8 (PCI_LIB_ADDRESS (0, 1, 0, 0x60), PciHostIrqs[0]); // A\r
+      PciWrite8 (PCI_LIB_ADDRESS (0, 1, 0, 0x61), PciHostIrqs[1]); // B\r
+      PciWrite8 (PCI_LIB_ADDRESS (0, 1, 0, 0x62), PciHostIrqs[2]); // C\r
+      PciWrite8 (PCI_LIB_ADDRESS (0, 1, 0, 0x63), PciHostIrqs[3]); // D\r
       break;\r
     case INTEL_Q35_MCH_DEVICE_ID:\r
       Pmba = POWER_MGMT_REGISTER_Q35 (ICH9_PMBASE);\r
       //\r
       // 00:1f.0 LPC Bridge (Q35) LNK routing targets\r
       //\r
-      PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x60), 0x0a); // A\r
-      PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x61), 0x0a); // B\r
-      PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x62), 0x0b); // C\r
-      PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x63), 0x0b); // D\r
-      PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x68), 0x0a); // E\r
-      PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x69), 0x0a); // F\r
-      PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x6a), 0x0b); // G\r
-      PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x6b), 0x0b); // H\r
+      PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x60), PciHostIrqs[0]); // A\r
+      PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x61), PciHostIrqs[1]); // B\r
+      PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x62), PciHostIrqs[2]); // C\r
+      PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x63), PciHostIrqs[3]); // D\r
+      PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x68), PciHostIrqs[0]); // E\r
+      PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x69), PciHostIrqs[1]); // F\r
+      PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x6a), PciHostIrqs[2]); // G\r
+      PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x6b), PciHostIrqs[3]); // H\r
       break;\r
+    case MICROVM_PSEUDO_DEVICE_ID:\r
+    case CLOUDHV_DEVICE_ID:\r
+      return;\r
     default:\r
       if (XenDetected ()) {\r
         //\r
@@ -1215,8 +1412,13 @@ PciAcpiInitialization (
         //\r
         return;\r
       }\r
-      DEBUG ((EFI_D_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n",\r
-        __FUNCTION__, mHostBridgeDevId));\r
+\r
+      DEBUG ((\r
+        DEBUG_ERROR,\r
+        "%a: Unknown Host Bridge Device ID: 0x%04x\n",\r
+        __FUNCTION__,\r
+        mHostBridgeDevId\r
+        ));\r
       ASSERT (FALSE);\r
       return;\r
   }\r
@@ -1248,13 +1450,14 @@ ConnectRecursivelyIfPciMassStorage (
   // Recognize PCI Mass Storage, and Xen PCI devices\r
   //\r
   if (IS_CLASS1 (PciHeader, PCI_CLASS_MASS_STORAGE) ||\r
-      (XenDetected() && IS_CLASS2 (PciHeader, 0xFF, 0x80))) {\r
+      (XenDetected () && IS_CLASS2 (PciHeader, 0xFF, 0x80)))\r
+  {\r
     DevicePath = NULL;\r
-    Status = gBS->HandleProtocol (\r
-                    Handle,\r
-                    &gEfiDevicePathProtocolGuid,\r
-                    (VOID*)&DevicePath\r
-                    );\r
+    Status     = gBS->HandleProtocol (\r
+                        Handle,\r
+                        &gEfiDevicePathProtocolGuid,\r
+                        (VOID *)&DevicePath\r
+                        );\r
     if (EFI_ERROR (Status)) {\r
       return Status;\r
     }\r
@@ -1264,29 +1467,27 @@ ConnectRecursivelyIfPciMassStorage (
     //\r
     DevPathStr = ConvertDevicePathToText (DevicePath, FALSE, FALSE);\r
     if (DevPathStr != NULL) {\r
-      DEBUG((\r
-        EFI_D_INFO,\r
+      DEBUG ((\r
+        DEBUG_INFO,\r
         "Found %s device: %s\n",\r
         (IS_CLASS1 (PciHeader, PCI_CLASS_MASS_STORAGE) ?\r
          L"Mass Storage" :\r
          L"Xen"\r
-         ),\r
+        ),\r
         DevPathStr\r
         ));\r
-      FreePool(DevPathStr);\r
+      FreePool (DevPathStr);\r
     }\r
 \r
     Status = gBS->ConnectController (Handle, NULL, NULL, TRUE);\r
     if (EFI_ERROR (Status)) {\r
       return Status;\r
     }\r
-\r
   }\r
 \r
   return EFI_SUCCESS;\r
 }\r
 \r
-\r
 /**\r
   This notification function is invoked when the\r
   EMU Variable FVB has been changed.\r
@@ -1298,15 +1499,14 @@ ConnectRecursivelyIfPciMassStorage (
 VOID\r
 EFIAPI\r
 EmuVariablesUpdatedCallback (\r
-  IN  EFI_EVENT Event,\r
-  IN  VOID      *Context\r
+  IN  EFI_EVENT  Event,\r
+  IN  VOID       *Context\r
   )\r
 {\r
-  DEBUG ((EFI_D_INFO, "EmuVariablesUpdatedCallback\n"));\r
+  DEBUG ((DEBUG_INFO, "EmuVariablesUpdatedCallback\n"));\r
   UpdateNvVarsOnFileSystem ();\r
 }\r
 \r
-\r
 EFI_STATUS\r
 EFIAPI\r
 VisitingFileSystemInstance (\r
@@ -1329,7 +1529,7 @@ VisitingFileSystemInstance (
   }\r
 \r
   ConnectedToFileSystem = TRUE;\r
-  mEmuVariableEvent =\r
+  mEmuVariableEvent     =\r
     EfiCreateProtocolNotifyEvent (\r
       &gEfiDevicePathProtocolGuid,\r
       TPL_CALLBACK,\r
@@ -1337,14 +1537,15 @@ VisitingFileSystemInstance (
       NULL,\r
       &mEmuVariableEventReg\r
       );\r
-  PcdStatus = PcdSet64S (PcdEmuVariableEvent,\r
-                (UINT64)(UINTN) mEmuVariableEvent);\r
+  PcdStatus = PcdSet64S (\r
+                PcdEmuVariableEvent,\r
+                (UINT64)(UINTN)mEmuVariableEvent\r
+                );\r
   ASSERT_RETURN_ERROR (PcdStatus);\r
 \r
   return EFI_SUCCESS;\r
 }\r
 \r
-\r
 VOID\r
 PlatformBdsRestoreNvVarsFromHardDisk (\r
   )\r
@@ -1355,7 +1556,6 @@ PlatformBdsRestoreNvVarsFromHardDisk (
     VisitingFileSystemInstance,\r
     NULL\r
     );\r
-\r
 }\r
 \r
 /**\r
@@ -1368,10 +1568,10 @@ PlatformBdsConnectSequence (
   VOID\r
   )\r
 {\r
-  UINTN         Index;\r
-  RETURN_STATUS Status;\r
+  UINTN          Index;\r
+  RETURN_STATUS  Status;\r
 \r
-  DEBUG ((EFI_D_INFO, "PlatformBdsConnectSequence\n"));\r
+  DEBUG ((DEBUG_INFO, "PlatformBdsConnectSequence\n"));\r
 \r
   Index = 0;\r
 \r
@@ -1410,12 +1610,15 @@ SaveS3BootScript (
   VOID\r
   )\r
 {\r
-  EFI_STATUS                 Status;\r
-  EFI_S3_SAVE_STATE_PROTOCOL *BootScript;\r
-  STATIC CONST UINT8         Info[] = { 0xDE, 0xAD, 0xBE, 0xEF };\r
+  EFI_STATUS                  Status;\r
+  EFI_S3_SAVE_STATE_PROTOCOL  *BootScript;\r
+  STATIC CONST UINT8          Info[] = { 0xDE, 0xAD, 0xBE, 0xEF };\r
 \r
-  Status = gBS->LocateProtocol (&gEfiS3SaveStateProtocolGuid, NULL,\r
-                  (VOID **) &BootScript);\r
+  Status = gBS->LocateProtocol (\r
+                  &gEfiS3SaveStateProtocolGuid,\r
+                  NULL,\r
+                  (VOID **)&BootScript\r
+                  );\r
   ASSERT_EFI_ERROR (Status);\r
 \r
   //\r
@@ -1423,13 +1626,15 @@ SaveS3BootScript (
   // implementation embeds a deep copy of the info in the boot script, rather\r
   // than storing just a pointer to runtime or NVS storage.\r
   //\r
-  Status = BootScript->Write(BootScript, EFI_BOOT_SCRIPT_INFORMATION_OPCODE,\r
-                         (UINT32) sizeof Info,\r
-                         (EFI_PHYSICAL_ADDRESS)(UINTN) &Info);\r
+  Status = BootScript->Write (\r
+                         BootScript,\r
+                         EFI_BOOT_SCRIPT_INFORMATION_OPCODE,\r
+                         (UINT32)sizeof Info,\r
+                         (EFI_PHYSICAL_ADDRESS)(UINTN)&Info\r
+                         );\r
   ASSERT_EFI_ERROR (Status);\r
 }\r
 \r
-\r
 /**\r
   Do the platform specific action after the console is ready\r
 \r
@@ -1449,13 +1654,16 @@ PlatformBootManagerAfterConsole (
   VOID\r
   )\r
 {\r
-  EFI_BOOT_MODE                      BootMode;\r
+  EFI_BOOT_MODE  BootMode;\r
 \r
-  DEBUG ((EFI_D_INFO, "PlatformBootManagerAfterConsole\n"));\r
+  DEBUG ((DEBUG_INFO, "PlatformBootManagerAfterConsole\n"));\r
 \r
   if (PcdGetBool (PcdOvmfFlashVariablesEnable)) {\r
-    DEBUG ((EFI_D_INFO, "PlatformBdsPolicyBehavior: not restoring NvVars "\r
-      "from disk since flash variables appear to be supported.\n"));\r
+    DEBUG ((\r
+      DEBUG_INFO,\r
+      "PlatformBdsPolicyBehavior: not restoring NvVars "\r
+      "from disk since flash variables appear to be supported.\n"\r
+      ));\r
   } else {\r
     //\r
     // Try to restore variables from the hard disk early so\r
@@ -1487,9 +1695,9 @@ PlatformBootManagerAfterConsole (
   PciAcpiInitialization ();\r
 \r
   //\r
-  // Process TPM PPI request\r
+  // Write qemu bootorder to efi variables\r
   //\r
-  Tcg2PhysicalPresenceLibProcessRequest (NULL);\r
+  StoreQemuBootOrder ();\r
 \r
   //\r
   // Process QEMU's -kernel command line option\r
@@ -1507,7 +1715,9 @@ PlatformBootManagerAfterConsole (
   // Register UEFI Shell\r
   //\r
   PlatformRegisterFvBootOption (\r
-    &gUefiShellFileGuid, L"EFI Internal Shell", LOAD_OPTION_ACTIVE\r
+    &gUefiShellFileGuid,\r
+    L"EFI Internal Shell",\r
+    LOAD_OPTION_ACTIVE\r
     );\r
 \r
   RemoveStaleFvFileOptions ();\r
@@ -1527,31 +1737,31 @@ PlatformBootManagerAfterConsole (
 VOID\r
 EFIAPI\r
 NotifyDevPath (\r
-  IN  EFI_EVENT Event,\r
-  IN  VOID      *Context\r
+  IN  EFI_EVENT  Event,\r
+  IN  VOID       *Context\r
   )\r
 {\r
-  EFI_HANDLE                            Handle;\r
-  EFI_STATUS                            Status;\r
-  UINTN                                 BufferSize;\r
-  EFI_DEVICE_PATH_PROTOCOL             *DevPathNode;\r
-  ATAPI_DEVICE_PATH                    *Atapi;\r
+  EFI_HANDLE                Handle;\r
+  EFI_STATUS                Status;\r
+  UINTN                     BufferSize;\r
+  EFI_DEVICE_PATH_PROTOCOL  *DevPathNode;\r
+  ATAPI_DEVICE_PATH         *Atapi;\r
 \r
   //\r
   // Examine all new handles\r
   //\r
-  for (;;) {\r
+  for ( ; ;) {\r
     //\r
     // Get the next handle\r
     //\r
     BufferSize = sizeof (Handle);\r
-    Status = gBS->LocateHandle (\r
-              ByRegisterNotify,\r
-              NULL,\r
-              mEfiDevPathNotifyReg,\r
-              &BufferSize,\r
-              &Handle\r
-              );\r
+    Status     = gBS->LocateHandle (\r
+                        ByRegisterNotify,\r
+                        NULL,\r
+                        mEfiDevPathNotifyReg,\r
+                        &BufferSize,\r
+                        &Handle\r
+                        );\r
 \r
     //\r
     // If not found, we're done\r
@@ -1567,8 +1777,11 @@ NotifyDevPath (
     //\r
     // Get the DevicePath protocol on that handle\r
     //\r
-    Status = gBS->HandleProtocol (Handle, &gEfiDevicePathProtocolGuid,\r
-                    (VOID **)&DevPathNode);\r
+    Status = gBS->HandleProtocol (\r
+                    Handle,\r
+                    &gEfiDevicePathProtocolGuid,\r
+                    (VOID **)&DevPathNode\r
+                    );\r
     ASSERT_EFI_ERROR (Status);\r
 \r
     while (!IsDevicePathEnd (DevPathNode)) {\r
@@ -1576,16 +1789,17 @@ NotifyDevPath (
       // Find the handler to dump this device path node\r
       //\r
       if (\r
-           (DevicePathType(DevPathNode) == MESSAGING_DEVICE_PATH) &&\r
-           (DevicePathSubType(DevPathNode) == MSG_ATAPI_DP)\r
-         ) {\r
-        Atapi = (ATAPI_DEVICE_PATH*) DevPathNode;\r
+          (DevicePathType (DevPathNode) == MESSAGING_DEVICE_PATH) &&\r
+          (DevicePathSubType (DevPathNode) == MSG_ATAPI_DP)\r
+          )\r
+      {\r
+        Atapi = (ATAPI_DEVICE_PATH *)DevPathNode;\r
         PciOr16 (\r
           PCI_LIB_ADDRESS (\r
             0,\r
             1,\r
             1,\r
-            (Atapi->PrimarySecondary == 1) ? 0x42: 0x40\r
+            (Atapi->PrimarySecondary == 1) ? 0x42 : 0x40\r
             ),\r
           BIT15\r
           );\r
@@ -1601,20 +1815,19 @@ NotifyDevPath (
   return;\r
 }\r
 \r
-\r
 VOID\r
 InstallDevicePathCallback (\r
   VOID\r
   )\r
 {\r
-  DEBUG ((EFI_D_INFO, "Registered NotifyDevPath Event\n"));\r
+  DEBUG ((DEBUG_INFO, "Registered NotifyDevPath Event\n"));\r
   mEfiDevPathEvent = EfiCreateProtocolNotifyEvent (\r
-                          &gEfiDevicePathProtocolGuid,\r
-                          TPL_CALLBACK,\r
-                          NotifyDevPath,\r
-                          NULL,\r
-                          &mEfiDevPathNotifyReg\r
-                          );\r
+                       &gEfiDevicePathProtocolGuid,\r
+                       TPL_CALLBACK,\r
+                       NotifyDevPath,\r
+                       NULL,\r
+                       &mEfiDevPathNotifyReg\r
+                       );\r
 }\r
 \r
 /**\r
@@ -1626,12 +1839,12 @@ InstallDevicePathCallback (
 VOID\r
 EFIAPI\r
 PlatformBootManagerWaitCallback (\r
-  UINT16          TimeoutRemain\r
+  UINT16  TimeoutRemain\r
   )\r
 {\r
-  EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION Black;\r
-  EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION White;\r
-  UINT16                              TimeoutInitial;\r
+  EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION  Black;\r
+  EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION  White;\r
+  UINT16                               TimeoutInitial;\r
 \r
   TimeoutInitial = PcdGet16 (PcdPlatformBootTimeOut);\r
 \r
@@ -1670,10 +1883,10 @@ PlatformBootManagerUnableToBoot (
   VOID\r
   )\r
 {\r
-  EFI_STATUS                   Status;\r
-  EFI_INPUT_KEY                Key;\r
-  EFI_BOOT_MANAGER_LOAD_OPTION BootManagerMenu;\r
-  UINTN                        Index;\r
+  EFI_STATUS                    Status;\r
+  EFI_INPUT_KEY                 Key;\r
+  EFI_BOOT_MANAGER_LOAD_OPTION  BootManagerMenu;\r
+  UINTN                         Index;\r
 \r
   //\r
   // BootManagerMenu doesn't contain the correct information when return status\r
@@ -1683,6 +1896,7 @@ PlatformBootManagerUnableToBoot (
   if (EFI_ERROR (Status)) {\r
     return;\r
   }\r
+\r
   //\r
   // Normally BdsDxe does not print anything to the system console, but this is\r
   // a last resort -- the end-user will likely not see any DEBUG messages\r
@@ -1712,7 +1926,7 @@ PlatformBootManagerUnableToBoot (
     }\r
   }\r
 \r
-  for (;;) {\r
+  for ( ; ;) {\r
     EfiBootManagerBoot (&BootManagerMenu);\r
   }\r
 }\r