X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=Nt32Pkg%2FLibrary%2FPlatformBootManagerLib%2FPlatformBootManager.c;fp=Nt32Pkg%2FLibrary%2FPlatformBootManagerLib%2FPlatformBootManager.c;h=0000000000000000000000000000000000000000;hp=5967db1391833f94a8b56e5b86b982cccab6d5a5;hb=7afa0cea8f2ccedc231f1208609148a38c958a64;hpb=4d5d7812786db947e476b4d850698b465d0e2d99 diff --git a/Nt32Pkg/Library/PlatformBootManagerLib/PlatformBootManager.c b/Nt32Pkg/Library/PlatformBootManagerLib/PlatformBootManager.c deleted file mode 100644 index 5967db1391..0000000000 --- a/Nt32Pkg/Library/PlatformBootManagerLib/PlatformBootManager.c +++ /dev/null @@ -1,416 +0,0 @@ -/** @file - This file include all platform action which can be customized - by IBV/OEM. - -Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.
-(C) Copyright 2016 Hewlett Packard Enterprise Development LP
-SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#include "PlatformBootManager.h" - -EFI_GUID mBootMenuFile = { - 0xEEC25BDC, 0x67F2, 0x4D95, { 0xB1, 0xD5, 0xF8, 0x1B, 0x20, 0x39, 0xD1, 0x1D } -}; - -/** - Perform the platform diagnostic, such like test memory. OEM/IBV also - can customize this function to support specific platform diagnostic. - - @param MemoryTestLevel The memory test intensive level - @param QuietBoot Indicate if need to enable the quiet boot - -**/ -VOID -PlatformBootManagerDiagnostics ( - IN EXTENDMEM_COVERAGE_LEVEL MemoryTestLevel, - IN BOOLEAN QuietBoot - ) -{ - EFI_STATUS Status; - - // - // Here we can decide if we need to show - // the diagnostics screen - // Notes: this quiet boot code should be remove - // from the graphic lib - // - if (QuietBoot) { - BootLogoEnableLogo (); - - // - // Perform system diagnostic - // - Status = PlatformBootManagerMemoryTest (MemoryTestLevel); - if (EFI_ERROR (Status)) { - BootLogoDisableLogo (); - } - - return; - } - - // - // Perform system diagnostic - // - Status = PlatformBootManagerMemoryTest (MemoryTestLevel); -} - -/** - Do the platform specific action before the console is connected. - - Such as: - Update console variable; - Register new Driver#### or Boot####; - Signal ReadyToLock event. -**/ -VOID -EFIAPI -PlatformBootManagerBeforeConsole ( - VOID - ) -{ - UINTN Index; - EFI_STATUS Status; - WIN_NT_SYSTEM_CONFIGURATION *Configuration; - - GetVariable2 (L"Setup", &gEfiWinNtSystemConfigGuid, (VOID **) &Configuration, NULL); - if (Configuration != NULL) { - // - // SetupVariable is corrupt - // - Configuration->ConOutRow = PcdGet32 (PcdConOutColumn); - Configuration->ConOutColumn = PcdGet32 (PcdConOutRow); - - Status = gRT->SetVariable ( - L"Setup", - &gEfiWinNtSystemConfigGuid, - EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS, - sizeof (WIN_NT_SYSTEM_CONFIGURATION), - Configuration - ); - if (EFI_ERROR (Status)) { - DEBUG ((EFI_D_ERROR, "Failed to save Setup Variable to non-volatile storage, Status = %r\n", Status)); - } - FreePool (Configuration); - } - - // - // Update the ocnsole variables. - // - for (Index = 0; gPlatformConsole[Index].DevicePath != NULL; Index++) { - if ((gPlatformConsole[Index].ConnectType & CONSOLE_IN) == CONSOLE_IN) { - EfiBootManagerUpdateConsoleVariable (ConIn, gPlatformConsole[Index].DevicePath, NULL); - } - - if ((gPlatformConsole[Index].ConnectType & CONSOLE_OUT) == CONSOLE_OUT) { - EfiBootManagerUpdateConsoleVariable (ConOut, gPlatformConsole[Index].DevicePath, NULL); - } - - if ((gPlatformConsole[Index].ConnectType & STD_ERROR) == STD_ERROR) { - EfiBootManagerUpdateConsoleVariable (ErrOut, gPlatformConsole[Index].DevicePath, NULL); - } - } - - // - // From PI spec vol2: - // Prior to invoking any UEFI drivers, applications, or connecting consoles, - // the platform should signal the event EFI_END_OF_DXE_EVENT_GUID - // - EfiEventGroupSignal (&gEfiEndOfDxeEventGroupGuid); - - // - // Dispatch deferred images after EndOfDxe event. - // - EfiBootManagerDispatchDeferredImages (); -} - -/** - Returns the priority number. - - @param BootOption -**/ -UINTN -BootOptionPriority ( - CONST EFI_BOOT_MANAGER_LOAD_OPTION *BootOption - ) -{ - // - // Make sure Shell is first - // - if (StrCmp (BootOption->Description, L"UEFI Shell") == 0) { - return 0; - } - return 100; -} - -INTN -EFIAPI -CompareBootOption ( - CONST EFI_BOOT_MANAGER_LOAD_OPTION *Left, - CONST EFI_BOOT_MANAGER_LOAD_OPTION *Right - ) -{ - return BootOptionPriority (Left) - BootOptionPriority (Right); -} - -/** - Generate device path include the input file guid info. - - @param FileGuid Input file guid for the BootManagerMenuApp. - - @retval DevicePath for BootManagerMenuApp. -**/ -EFI_DEVICE_PATH * -FvFilePath ( - EFI_GUID *FileGuid - ) -{ - - EFI_STATUS Status; - EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; - MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileNode; - - EfiInitializeFwVolDevicepathNode (&FileNode, FileGuid); - - Status = gBS->HandleProtocol ( - gImageHandle, - &gEfiLoadedImageProtocolGuid, - (VOID **) &LoadedImage - ); - ASSERT_EFI_ERROR (Status); - - return AppendDevicePathNode ( - DevicePathFromHandle (LoadedImage->DeviceHandle), - (EFI_DEVICE_PATH_PROTOCOL *) &FileNode - ); -} - -/** - Create one boot option for BootManagerMenuApp. - - @param FileGuid Input file guid for the BootManagerMenuApp. - @param Description Description of the BootManagerMenuApp boot option. - @param Position Position of the new load option to put in the ****Order variable. - @param IsBootCategory Whether this is a boot category. - - - @retval OptionNumber Return the option number info. - -**/ -UINTN -RegisterBootManagerMenuAppBootOption ( - EFI_GUID *FileGuid, - CHAR16 *Description, - UINTN Position, - BOOLEAN IsBootCategory - ) -{ - EFI_STATUS Status; - EFI_BOOT_MANAGER_LOAD_OPTION NewOption; - EFI_DEVICE_PATH_PROTOCOL *DevicePath; - UINTN OptionNumber; - - DevicePath = FvFilePath (FileGuid); - Status = EfiBootManagerInitializeLoadOption ( - &NewOption, - LoadOptionNumberUnassigned, - LoadOptionTypeBoot, - IsBootCategory ? LOAD_OPTION_ACTIVE : LOAD_OPTION_CATEGORY_APP, - Description, - DevicePath, - NULL, - 0 - ); - ASSERT_EFI_ERROR (Status); - FreePool (DevicePath); - - Status = EfiBootManagerAddLoadOptionVariable (&NewOption, Position); - ASSERT_EFI_ERROR (Status); - - OptionNumber = NewOption.OptionNumber; - - EfiBootManagerFreeLoadOption (&NewOption); - - return OptionNumber; -} - -/** - Check if it's a Device Path pointing to BootManagerMenuApp. - - @param DevicePath Input device path. - - @retval TRUE The device path is BootManagerMenuApp File Device Path. - @retval FALSE The device path is NOT BootManagerMenuApp File Device Path. -**/ -BOOLEAN -IsBootManagerMenuAppFilePath ( - EFI_DEVICE_PATH_PROTOCOL *DevicePath -) -{ - EFI_HANDLE FvHandle; - VOID *NameGuid; - EFI_STATUS Status; - - Status = gBS->LocateDevicePath (&gEfiFirmwareVolume2ProtocolGuid, &DevicePath, &FvHandle); - if (!EFI_ERROR (Status)) { - NameGuid = EfiGetNameGuidFromFwVolDevicePathNode ((CONST MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) DevicePath); - if (NameGuid != NULL) { - return CompareGuid (NameGuid, &mBootMenuFile); - } - } - - return FALSE; -} - -/** - Return the boot option number to the BootManagerMenuApp. - - If not found it in the current boot option, create a new one. - - @retval OptionNumber Return the boot option number to the BootManagerMenuApp. - -**/ -UINTN -GetBootManagerMenuAppOption ( - VOID - ) -{ - UINTN BootOptionCount; - EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; - UINTN Index; - UINTN OptionNumber; - - OptionNumber = 0; - - BootOptions = EfiBootManagerGetLoadOptions (&BootOptionCount, LoadOptionTypeBoot); - - for (Index = 0; Index < BootOptionCount; Index++) { - if (IsBootManagerMenuAppFilePath (BootOptions[Index].FilePath)) { - OptionNumber = BootOptions[Index].OptionNumber; - break; - } - } - - EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount); - - if (Index >= BootOptionCount) { - // - // If not found the BootManagerMenuApp, create it. - // - OptionNumber = (UINT16) RegisterBootManagerMenuAppBootOption (&mBootMenuFile, L"UEFI BootManagerMenuApp", (UINTN) -1, FALSE); - } - - return OptionNumber; -} - -/** - Do the platform specific action after the console is connected. - - Such as: - Dynamically switch output mode; - Signal console ready platform customized event; - Run diagnostics like memory testing; - Connect certain devices; - Dispatch aditional option roms. -**/ -VOID -EFIAPI -PlatformBootManagerAfterConsole ( - VOID - ) -{ - EFI_GRAPHICS_OUTPUT_BLT_PIXEL Black; - EFI_GRAPHICS_OUTPUT_BLT_PIXEL White; - EFI_INPUT_KEY Enter; - EFI_INPUT_KEY F2; - EFI_INPUT_KEY F7; - EFI_BOOT_MANAGER_LOAD_OPTION BootOption; - UINTN OptionNumber; - - Black.Blue = Black.Green = Black.Red = Black.Reserved = 0; - White.Blue = White.Green = White.Red = White.Reserved = 0xFF; - - EfiBootManagerConnectAll (); - EfiBootManagerRefreshAllBootOption (); - - // - // Register ENTER as CONTINUE key - // - Enter.ScanCode = SCAN_NULL; - Enter.UnicodeChar = CHAR_CARRIAGE_RETURN; - EfiBootManagerRegisterContinueKeyOption (0, &Enter, NULL); - // - // Map F2 to Boot Manager Menu - // - F2.ScanCode = SCAN_F2; - F2.UnicodeChar = CHAR_NULL; - EfiBootManagerGetBootManagerMenu (&BootOption); - EfiBootManagerAddKeyOptionVariable (NULL, (UINT16) BootOption.OptionNumber, 0, &F2, NULL); - - // - // 3. Boot Device List menu - // - F7.ScanCode = SCAN_F7; - F7.UnicodeChar = CHAR_NULL; - OptionNumber = GetBootManagerMenuAppOption (); - EfiBootManagerAddKeyOptionVariable (NULL, (UINT16)OptionNumber, 0, &F7, NULL); - - // - // Make Shell as the first boot option - // - EfiBootManagerSortLoadOptionVariable (LoadOptionTypeBoot, (SORT_COMPARE) CompareBootOption); - - PlatformBootManagerDiagnostics (QUICK, TRUE); - - PrintXY (10, 10, &White, &Black, L"F2 to enter Setup. "); - PrintXY (10, 30, &White, &Black, L"F7 to enter Boot Manager Menu."); - PrintXY (10, 50, &White, &Black, L"Enter to boot directly."); -} - -/** - This function is called each second during the boot manager waits the timeout. - - @param TimeoutRemain The remaining timeout. -**/ -VOID -EFIAPI -PlatformBootManagerWaitCallback ( - UINT16 TimeoutRemain - ) -{ - EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION Black; - EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION White; - UINT16 Timeout; - - Timeout = PcdGet16 (PcdPlatformBootTimeOut); - - Black.Raw = 0x00000000; - White.Raw = 0x00FFFFFF; - - BootLogoUpdateProgress ( - White.Pixel, - Black.Pixel, - L"Start boot option", - White.Pixel, - (Timeout - TimeoutRemain) * 100 / Timeout, - 0 - ); -} - -/** - The function is called when no boot option could be launched, - including platform recovery options and options pointing to applications - built into firmware volumes. - - If this function returns, BDS attempts to enter an infinite loop. -**/ -VOID -EFIAPI -PlatformBootManagerUnableToBoot ( - VOID - ) -{ - return; -} -