#include <Library/PcdLib.h>\r
#include <Library/PlatformBmPrintScLib.h>\r
#include <Library/QemuBootOrderLib.h>\r
+#include <Library/TpmPlatformHierarchyLib.h>\r
#include <Library/UefiBootManagerLib.h>\r
#include <Protocol/DevicePath.h>\r
#include <Protocol/FirmwareVolume2.h>\r
#include <Protocol/PciRootBridgeIo.h>\r
#include <Protocol/VirtioDevice.h>\r
#include <Guid/EventGroup.h>\r
+#include <Guid/GlobalVariable.h>\r
#include <Guid/RootBridgesConnectedEventGroup.h>\r
#include <Guid/SerialPortLibVendor.h>\r
\r
#include "PlatformBm.h"\r
\r
-#define DP_NODE_LEN(Type) { (UINT8)sizeof (Type), (UINT8)(sizeof (Type) >> 8) }\r
-\r
+#define DP_NODE_LEN(Type) { (UINT8)sizeof (Type), (UINT8)(sizeof (Type) >> 8) }\r
\r
#pragma pack (1)\r
typedef struct {\r
- VENDOR_DEVICE_PATH SerialDxe;\r
- UART_DEVICE_PATH Uart;\r
- VENDOR_DEFINED_DEVICE_PATH TermType;\r
- EFI_DEVICE_PATH_PROTOCOL End;\r
+ VENDOR_DEVICE_PATH SerialDxe;\r
+ UART_DEVICE_PATH Uart;\r
+ VENDOR_DEFINED_DEVICE_PATH TermType;\r
+ EFI_DEVICE_PATH_PROTOCOL End;\r
} PLATFORM_SERIAL_CONSOLE;\r
#pragma pack ()\r
\r
-STATIC PLATFORM_SERIAL_CONSOLE mSerialConsole = {\r
+STATIC PLATFORM_SERIAL_CONSOLE mSerialConsole = {\r
//\r
// VENDOR_DEVICE_PATH SerialDxe\r
//\r
{\r
- { HARDWARE_DEVICE_PATH, HW_VENDOR_DP, DP_NODE_LEN (VENDOR_DEVICE_PATH) },\r
+ { HARDWARE_DEVICE_PATH, HW_VENDOR_DP, DP_NODE_LEN (VENDOR_DEVICE_PATH) },\r
EDKII_SERIAL_PORT_LIB_VENDOR_GUID\r
},\r
\r
// UART_DEVICE_PATH Uart\r
//\r
{\r
- { MESSAGING_DEVICE_PATH, MSG_UART_DP, DP_NODE_LEN (UART_DEVICE_PATH) },\r
+ { MESSAGING_DEVICE_PATH, MSG_UART_DP, DP_NODE_LEN (UART_DEVICE_PATH) },\r
0, // Reserved\r
FixedPcdGet64 (PcdUartDefaultBaudRate), // BaudRate\r
FixedPcdGet8 (PcdUartDefaultDataBits), // DataBits\r
}\r
};\r
\r
-\r
#pragma pack (1)\r
typedef struct {\r
- USB_CLASS_DEVICE_PATH Keyboard;\r
- EFI_DEVICE_PATH_PROTOCOL End;\r
+ USB_CLASS_DEVICE_PATH Keyboard;\r
+ EFI_DEVICE_PATH_PROTOCOL End;\r
} PLATFORM_USB_KEYBOARD;\r
#pragma pack ()\r
\r
-STATIC PLATFORM_USB_KEYBOARD mUsbKeyboard = {\r
+STATIC PLATFORM_USB_KEYBOARD mUsbKeyboard = {\r
//\r
// USB_CLASS_DEVICE_PATH Keyboard\r
//\r
}\r
};\r
\r
-\r
/**\r
Check if the handle satisfies a particular condition.\r
\r
**/\r
typedef\r
BOOLEAN\r
-(EFIAPI *FILTER_FUNCTION) (\r
+(EFIAPI *FILTER_FUNCTION)(\r
IN EFI_HANDLE Handle,\r
IN CONST CHAR16 *ReportText\r
);\r
\r
-\r
/**\r
Process a handle.\r
\r
**/\r
typedef\r
VOID\r
-(EFIAPI *CALLBACK_FUNCTION) (\r
+(EFIAPI *CALLBACK_FUNCTION)(\r
IN EFI_HANDLE Handle,\r
IN CONST CHAR16 *ReportText\r
);\r
STATIC\r
VOID\r
FilterAndProcess (\r
- IN EFI_GUID *ProtocolGuid,\r
- IN FILTER_FUNCTION Filter OPTIONAL,\r
- IN CALLBACK_FUNCTION Process\r
+ IN EFI_GUID *ProtocolGuid,\r
+ IN FILTER_FUNCTION Filter OPTIONAL,\r
+ IN CALLBACK_FUNCTION Process\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_HANDLE *Handles;\r
- UINTN NoHandles;\r
- UINTN Idx;\r
-\r
- Status = gBS->LocateHandleBuffer (ByProtocol, ProtocolGuid,\r
- NULL /* SearchKey */, &NoHandles, &Handles);\r
+ EFI_STATUS Status;\r
+ EFI_HANDLE *Handles;\r
+ UINTN NoHandles;\r
+ UINTN Idx;\r
+\r
+ Status = gBS->LocateHandleBuffer (\r
+ ByProtocol,\r
+ ProtocolGuid,\r
+ NULL /* SearchKey */,\r
+ &NoHandles,\r
+ &Handles\r
+ );\r
if (EFI_ERROR (Status)) {\r
//\r
// This is not an error, just an informative condition.\r
//\r
- DEBUG ((EFI_D_VERBOSE, "%a: %g: %r\n", __FUNCTION__, ProtocolGuid,\r
- Status));\r
+ DEBUG ((\r
+ DEBUG_VERBOSE,\r
+ "%a: %g: %r\n",\r
+ __FUNCTION__,\r
+ ProtocolGuid,\r
+ Status\r
+ ));\r
return;\r
}\r
\r
ASSERT (NoHandles > 0);\r
for (Idx = 0; Idx < NoHandles; ++Idx) {\r
- CHAR16 *DevicePathText;\r
- STATIC CHAR16 Fallback[] = L"<device path unavailable>";\r
+ CHAR16 *DevicePathText;\r
+ STATIC CHAR16 Fallback[] = L"<device path unavailable>";\r
\r
//\r
// The ConvertDevicePathToText() function handles NULL input transparently.\r
DevicePathText = Fallback;\r
}\r
\r
- if (Filter == NULL || Filter (Handles[Idx], DevicePathText)) {\r
+ if ((Filter == NULL) || Filter (Handles[Idx], DevicePathText)) {\r
Process (Handles[Idx], DevicePathText);\r
}\r
\r
FreePool (DevicePathText);\r
}\r
}\r
+\r
gBS->FreePool (Handles);\r
}\r
\r
-\r
/**\r
This FILTER_FUNCTION checks if a handle corresponds to a PCI display device.\r
**/\r
BOOLEAN\r
EFIAPI\r
IsPciDisplay (\r
- IN EFI_HANDLE Handle,\r
- IN CONST CHAR16 *ReportText\r
+ IN EFI_HANDLE Handle,\r
+ IN CONST CHAR16 *ReportText\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
- Status = gBS->HandleProtocol (Handle, &gEfiPciIoProtocolGuid,\r
- (VOID**)&PciIo);\r
+ Status = gBS->HandleProtocol (\r
+ Handle,\r
+ &gEfiPciIoProtocolGuid,\r
+ (VOID **)&PciIo\r
+ );\r
if (EFI_ERROR (Status)) {\r
//\r
// This is not an error worth reporting.\r
return FALSE;\r
}\r
\r
- Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint32, 0 /* Offset */,\r
- sizeof Pci / sizeof (UINT32), &Pci);\r
+ Status = PciIo->Pci.Read (\r
+ PciIo,\r
+ EfiPciIoWidthUint32,\r
+ 0 /* Offset */,\r
+ sizeof Pci / sizeof (UINT32),\r
+ &Pci\r
+ );\r
if (EFI_ERROR (Status)) {\r
- DEBUG ((EFI_D_ERROR, "%a: %s: %r\n", __FUNCTION__, ReportText, Status));\r
+ DEBUG ((DEBUG_ERROR, "%a: %s: %r\n", __FUNCTION__, ReportText, Status));\r
return FALSE;\r
}\r
\r
return IS_PCI_DISPLAY (&Pci);\r
}\r
\r
-\r
/**\r
This FILTER_FUNCTION checks if a handle corresponds to a Virtio RNG device at\r
the VIRTIO_DEVICE_PROTOCOL level.\r
BOOLEAN\r
EFIAPI\r
IsVirtioRng (\r
- IN EFI_HANDLE Handle,\r
- IN CONST CHAR16 *ReportText\r
+ IN EFI_HANDLE Handle,\r
+ IN CONST CHAR16 *ReportText\r
)\r
{\r
- EFI_STATUS Status;\r
- VIRTIO_DEVICE_PROTOCOL *VirtIo;\r
+ EFI_STATUS Status;\r
+ VIRTIO_DEVICE_PROTOCOL *VirtIo;\r
\r
- Status = gBS->HandleProtocol (Handle, &gVirtioDeviceProtocolGuid,\r
- (VOID**)&VirtIo);\r
+ Status = gBS->HandleProtocol (\r
+ Handle,\r
+ &gVirtioDeviceProtocolGuid,\r
+ (VOID **)&VirtIo\r
+ );\r
if (EFI_ERROR (Status)) {\r
return FALSE;\r
}\r
+\r
return (BOOLEAN)(VirtIo->SubSystemDeviceId ==\r
VIRTIO_SUBSYSTEM_ENTROPY_SOURCE);\r
}\r
\r
-\r
/**\r
This FILTER_FUNCTION checks if a handle corresponds to a Virtio RNG device at\r
the EFI_PCI_IO_PROTOCOL level.\r
BOOLEAN\r
EFIAPI\r
IsVirtioPciRng (\r
- IN EFI_HANDLE Handle,\r
- IN CONST CHAR16 *ReportText\r
+ IN EFI_HANDLE Handle,\r
+ IN CONST CHAR16 *ReportText\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_PCI_IO_PROTOCOL *PciIo;\r
- UINT16 VendorId;\r
- UINT16 DeviceId;\r
- UINT8 RevisionId;\r
- BOOLEAN Virtio10;\r
- UINT16 SubsystemId;\r
-\r
- Status = gBS->HandleProtocol (Handle, &gEfiPciIoProtocolGuid,\r
- (VOID**)&PciIo);\r
+ EFI_STATUS Status;\r
+ EFI_PCI_IO_PROTOCOL *PciIo;\r
+ UINT16 VendorId;\r
+ UINT16 DeviceId;\r
+ UINT8 RevisionId;\r
+ BOOLEAN Virtio10;\r
+ UINT16 SubsystemId;\r
+\r
+ Status = gBS->HandleProtocol (\r
+ Handle,\r
+ &gEfiPciIoProtocolGuid,\r
+ (VOID **)&PciIo\r
+ );\r
if (EFI_ERROR (Status)) {\r
return FALSE;\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 PciError;\r
}\r
+\r
if (VendorId != VIRTIO_VENDOR_ID) {\r
return FALSE;\r
}\r
//\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 PciError;\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 PciError;\r
}\r
// 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 FALSE;\r
//\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 PciError;\r
}\r
- if (Virtio10 && SubsystemId >= 0x40) {\r
+\r
+ if (Virtio10 && (SubsystemId >= 0x40)) {\r
return TRUE;\r
}\r
- if (!Virtio10 && SubsystemId == VIRTIO_SUBSYSTEM_ENTROPY_SOURCE) {\r
+\r
+ if (!Virtio10 && (SubsystemId == VIRTIO_SUBSYSTEM_ENTROPY_SOURCE)) {\r
return TRUE;\r
}\r
+\r
return FALSE;\r
\r
PciError:\r
return FALSE;\r
}\r
\r
-\r
/**\r
This CALLBACK_FUNCTION attempts to connect a handle non-recursively, asking\r
the matching driver to produce all first-level child handles.\r
VOID\r
EFIAPI\r
Connect (\r
- IN EFI_HANDLE Handle,\r
- IN CONST CHAR16 *ReportText\r
+ IN EFI_HANDLE Handle,\r
+ IN CONST CHAR16 *ReportText\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
Status = gBS->ConnectController (\r
Handle, // ControllerHandle\r
NULL, // RemainingDevicePath -- produce all children\r
FALSE // Recursive\r
);\r
- DEBUG ((EFI_ERROR (Status) ? EFI_D_ERROR : EFI_D_VERBOSE, "%a: %s: %r\n",\r
- __FUNCTION__, ReportText, Status));\r
+ DEBUG ((\r
+ EFI_ERROR (Status) ? DEBUG_ERROR : DEBUG_VERBOSE,\r
+ "%a: %s: %r\n",\r
+ __FUNCTION__,\r
+ ReportText,\r
+ Status\r
+ ));\r
}\r
\r
-\r
/**\r
This CALLBACK_FUNCTION retrieves the EFI_DEVICE_PATH_PROTOCOL from the\r
handle, and adds it to ConOut and ErrOut.\r
VOID\r
EFIAPI\r
AddOutput (\r
- IN EFI_HANDLE Handle,\r
- IN CONST CHAR16 *ReportText\r
+ IN EFI_HANDLE Handle,\r
+ IN CONST CHAR16 *ReportText\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
+ EFI_STATUS Status;\r
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
\r
DevicePath = DevicePathFromHandle (Handle);\r
if (DevicePath == NULL) {\r
- DEBUG ((EFI_D_ERROR, "%a: %s: handle %p: device path not found\n",\r
- __FUNCTION__, ReportText, Handle));\r
+ DEBUG ((\r
+ DEBUG_ERROR,\r
+ "%a: %s: handle %p: device path not found\n",\r
+ __FUNCTION__,\r
+ ReportText,\r
+ Handle\r
+ ));\r
return;\r
}\r
\r
Status = EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL);\r
if (EFI_ERROR (Status)) {\r
- DEBUG ((EFI_D_ERROR, "%a: %s: adding to ConOut: %r\n", __FUNCTION__,\r
- ReportText, Status));\r
+ DEBUG ((\r
+ DEBUG_ERROR,\r
+ "%a: %s: adding to ConOut: %r\n",\r
+ __FUNCTION__,\r
+ ReportText,\r
+ Status\r
+ ));\r
return;\r
}\r
\r
Status = EfiBootManagerUpdateConsoleVariable (ErrOut, DevicePath, NULL);\r
if (EFI_ERROR (Status)) {\r
- DEBUG ((EFI_D_ERROR, "%a: %s: adding to ErrOut: %r\n", __FUNCTION__,\r
- ReportText, Status));\r
+ DEBUG ((\r
+ DEBUG_ERROR,\r
+ "%a: %s: adding to ErrOut: %r\n",\r
+ __FUNCTION__,\r
+ ReportText,\r
+ Status\r
+ ));\r
return;\r
}\r
\r
- DEBUG ((EFI_D_VERBOSE, "%a: %s: added to ConOut and ErrOut\n", __FUNCTION__,\r
- ReportText));\r
+ DEBUG ((\r
+ DEBUG_VERBOSE,\r
+ "%a: %s: added to ConOut and ErrOut\n",\r
+ __FUNCTION__,\r
+ ReportText\r
+ ));\r
}\r
\r
STATIC\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
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
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
\r
-\r
/**\r
Remove all MemoryMapped(...)/FvFile(...) and Fv(...)/FvFile(...) boot options\r
whose device paths do not resolve exactly to an FvFile in the system.\r
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
// 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
// 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
// Delete the boot option.\r
//\r
Status = EfiBootManagerDeleteLoadOptionVariable (\r
- BootOptions[Index].OptionNumber, LoadOptionTypeBoot);\r
- DEBUG_CODE (\r
- CHAR16 *DevicePathString;\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
+ 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
+ DEBUG_CODE_END ();\r
}\r
\r
EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount);\r
}\r
\r
-\r
STATIC\r
VOID\r
PlatformRegisterOptionsAndKeys (\r
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
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
\r
-\r
//\r
// BDS Platform Functions\r
//\r
+\r
/**\r
Do the platform init, can be customized by OEM/IBV\r
Possible things that can be done in PlatformBootManagerBeforeConsole:\r
VOID\r
)\r
{\r
- RETURN_STATUS PcdStatus;\r
+ UINT16 FrontPageTimeout;\r
+ RETURN_STATUS PcdStatus;\r
+ EFI_STATUS Status;\r
\r
//\r
// Signal EndOfDxe PI Event\r
//\r
EfiEventGroupSignal (&gEfiEndOfDxeEventGroupGuid);\r
\r
+ //\r
+ // Disable the TPM 2 platform hierarchy\r
+ //\r
+ ConfigureTpmPlatformHierarchy ();\r
+\r
//\r
// Dispatch deferred images after EndOfDxe event.\r
//\r
//\r
// Add the hardcoded short-form USB keyboard device path to ConIn.\r
//\r
- EfiBootManagerUpdateConsoleVariable (ConIn,\r
- (EFI_DEVICE_PATH_PROTOCOL *)&mUsbKeyboard, NULL);\r
+ EfiBootManagerUpdateConsoleVariable (\r
+ ConIn,\r
+ (EFI_DEVICE_PATH_PROTOCOL *)&mUsbKeyboard,\r
+ NULL\r
+ );\r
\r
//\r
// Add the hardcoded serial console device path to ConIn, ConOut, ErrOut.\r
//\r
- CopyGuid (&mSerialConsole.TermType.Guid,\r
- PcdGetPtr (PcdTerminalTypeGuidBuffer));\r
- EfiBootManagerUpdateConsoleVariable (ConIn,\r
- (EFI_DEVICE_PATH_PROTOCOL *)&mSerialConsole, NULL);\r
- EfiBootManagerUpdateConsoleVariable (ConOut,\r
- (EFI_DEVICE_PATH_PROTOCOL *)&mSerialConsole, NULL);\r
- EfiBootManagerUpdateConsoleVariable (ErrOut,\r
- (EFI_DEVICE_PATH_PROTOCOL *)&mSerialConsole, NULL);\r
+ CopyGuid (\r
+ &mSerialConsole.TermType.Guid,\r
+ PcdGetPtr (PcdTerminalTypeGuidBuffer)\r
+ );\r
+ EfiBootManagerUpdateConsoleVariable (\r
+ ConIn,\r
+ (EFI_DEVICE_PATH_PROTOCOL *)&mSerialConsole,\r
+ NULL\r
+ );\r
+ EfiBootManagerUpdateConsoleVariable (\r
+ ConOut,\r
+ (EFI_DEVICE_PATH_PROTOCOL *)&mSerialConsole,\r
+ NULL\r
+ );\r
+ EfiBootManagerUpdateConsoleVariable (\r
+ ErrOut,\r
+ (EFI_DEVICE_PATH_PROTOCOL *)&mSerialConsole,\r
+ NULL\r
+ );\r
\r
//\r
// Set the front page timeout from the QEMU configuration.\r
//\r
- PcdStatus = PcdSet16S (PcdPlatformBootTimeOut,\r
- GetFrontPageTimeoutFromQemu ());\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
//\r
// Register platform-specific boot options and keyboard shortcuts.\r
VOID\r
)\r
{\r
- RETURN_STATUS Status;\r
+ RETURN_STATUS Status;\r
\r
//\r
// Show the splash screen.\r
// 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
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
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
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
}\r
}\r
\r
- for (;;) {\r
+ for ( ; ;) {\r
EfiBootManagerBoot (&BootManagerMenu);\r
}\r
}\r