REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the ArmPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Andrew Fish <afish@apple.com>
		
			
				
	
	
		
			188 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Implementation for PlatformBootManagerLib library class interfaces.
 | 
						|
 | 
						|
  Copyright (C) 2015-2016, Red Hat, Inc.
 | 
						|
  Copyright (c) 2014 - 2019, ARM Ltd. All rights reserved.<BR>
 | 
						|
  Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
 | 
						|
  Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
 | 
						|
  Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved.<BR>
 | 
						|
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#include <Uefi.h>
 | 
						|
 | 
						|
#include <Guid/EventGroup.h>
 | 
						|
#include <Library/BaseLib.h>
 | 
						|
#include <Library/BaseMemoryLib.h>
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include <Library/DevicePathLib.h>
 | 
						|
#include <Library/MemoryAllocationLib.h>
 | 
						|
#include <Library/PcdLib.h>
 | 
						|
#include <Library/UefiBootManagerLib.h>
 | 
						|
#include <Library/UefiBootServicesTableLib.h>
 | 
						|
#include <Library/UefiLib.h>
 | 
						|
#include <Library/UefiRuntimeServicesTableLib.h>
 | 
						|
#include <Protocol/LoadedImage.h>
 | 
						|
#include <Protocol/PlatformBootManager.h>
 | 
						|
 | 
						|
/**
 | 
						|
  Register a boot option using a file GUID in the FV.
 | 
						|
 | 
						|
  @param  FileGuid     The file GUID name in the FV.
 | 
						|
  @param  Description  The description of the boot option.
 | 
						|
  @param  Attributes   The attributes of the boot option.
 | 
						|
 | 
						|
**/
 | 
						|
STATIC
 | 
						|
VOID
 | 
						|
PlatformRegisterFvBootOption (
 | 
						|
  CONST EFI_GUID  *FileGuid,
 | 
						|
  CHAR16          *Description,
 | 
						|
  UINT32          Attributes
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS                         Status;
 | 
						|
  INTN                               OptionIndex;
 | 
						|
  EFI_BOOT_MANAGER_LOAD_OPTION       NewOption;
 | 
						|
  EFI_BOOT_MANAGER_LOAD_OPTION       *BootOptions;
 | 
						|
  UINTN                              BootOptionCount;
 | 
						|
  MEDIA_FW_VOL_FILEPATH_DEVICE_PATH  FileNode;
 | 
						|
  EFI_LOADED_IMAGE_PROTOCOL          *LoadedImage;
 | 
						|
  EFI_DEVICE_PATH_PROTOCOL           *DevicePath;
 | 
						|
 | 
						|
  Status = gBS->HandleProtocol (
 | 
						|
                  gImageHandle,
 | 
						|
                  &gEfiLoadedImageProtocolGuid,
 | 
						|
                  (VOID **)&LoadedImage
 | 
						|
                  );
 | 
						|
  ASSERT_EFI_ERROR (Status);
 | 
						|
 | 
						|
  EfiInitializeFwVolDevicepathNode (&FileNode, FileGuid);
 | 
						|
  DevicePath = DevicePathFromHandle (LoadedImage->DeviceHandle);
 | 
						|
  ASSERT (DevicePath != NULL);
 | 
						|
  DevicePath = AppendDevicePathNode (
 | 
						|
                 DevicePath,
 | 
						|
                 (EFI_DEVICE_PATH_PROTOCOL *)&FileNode
 | 
						|
                 );
 | 
						|
  ASSERT (DevicePath != NULL);
 | 
						|
 | 
						|
  Status = EfiBootManagerInitializeLoadOption (
 | 
						|
             &NewOption,
 | 
						|
             LoadOptionNumberUnassigned,
 | 
						|
             LoadOptionTypeBoot,
 | 
						|
             Attributes,
 | 
						|
             Description,
 | 
						|
             DevicePath,
 | 
						|
             NULL,
 | 
						|
             0
 | 
						|
             );
 | 
						|
  ASSERT_EFI_ERROR (Status);
 | 
						|
  FreePool (DevicePath);
 | 
						|
 | 
						|
  BootOptions = EfiBootManagerGetLoadOptions (
 | 
						|
                  &BootOptionCount,
 | 
						|
                  LoadOptionTypeBoot
 | 
						|
                  );
 | 
						|
 | 
						|
  OptionIndex = EfiBootManagerFindLoadOption (
 | 
						|
                  &NewOption,
 | 
						|
                  BootOptions,
 | 
						|
                  BootOptionCount
 | 
						|
                  );
 | 
						|
 | 
						|
  if (OptionIndex == -1) {
 | 
						|
    Status = EfiBootManagerAddLoadOptionVariable (&NewOption, MAX_UINTN);
 | 
						|
    ASSERT_EFI_ERROR (Status);
 | 
						|
  }
 | 
						|
 | 
						|
  EfiBootManagerFreeLoadOption (&NewOption);
 | 
						|
  EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  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
 | 
						|
  )
 | 
						|
{
 | 
						|
  //
 | 
						|
  // Signal EndOfDxe PI Event
 | 
						|
  //
 | 
						|
  EfiEventGroupSignal (&gEfiEndOfDxeEventGroupGuid);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  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 additional option roms.
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
PlatformBootManagerAfterConsole (
 | 
						|
  VOID
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_GUID  LinuxBootFileGuid;
 | 
						|
 | 
						|
  CopyGuid (&LinuxBootFileGuid, PcdGetPtr (PcdLinuxBootFileGuid));
 | 
						|
 | 
						|
  if (!CompareGuid (&LinuxBootFileGuid, &gZeroGuid)) {
 | 
						|
    //
 | 
						|
    // Register LinuxBoot
 | 
						|
    //
 | 
						|
    PlatformRegisterFvBootOption (
 | 
						|
      &LinuxBootFileGuid,
 | 
						|
      L"LinuxBoot",
 | 
						|
      LOAD_OPTION_ACTIVE
 | 
						|
      );
 | 
						|
  } else {
 | 
						|
    DEBUG ((DEBUG_ERROR, "%a: PcdLinuxBootFileGuid was not set!\n", __FUNCTION__));
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  This function is called each second during the boot manager waits the
 | 
						|
  timeout.
 | 
						|
 | 
						|
  @param TimeoutRemain  The remaining timeout.
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
PlatformBootManagerWaitCallback (
 | 
						|
  UINT16  TimeoutRemain
 | 
						|
  )
 | 
						|
{
 | 
						|
  return;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  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;
 | 
						|
}
 |