REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the UefiPayloadPkg 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: Ray Ni <ray.ni@intel.com>
		
			
				
	
	
		
			292 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			292 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   This library will parse the Slim Bootloader to get required information.
 | |
| 
 | |
|   Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.<BR>
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #include <PiDxe.h>
 | |
| #include <Library/BaseLib.h>
 | |
| #include <Library/BaseMemoryLib.h>
 | |
| #include <Library/DebugLib.h>
 | |
| #include <Library/PcdLib.h>
 | |
| #include <Library/IoLib.h>
 | |
| #include <Library/HobLib.h>
 | |
| #include <Library/BlParseLib.h>
 | |
| #include <IndustryStandard/Acpi.h>
 | |
| #include <UniversalPayload/PciRootBridges.h>
 | |
| 
 | |
| /**
 | |
|   This function retrieves the parameter base address from boot loader.
 | |
| 
 | |
|   This function will get bootloader specific parameter address for UEFI payload.
 | |
|   e.g. HobList pointer for Slim Bootloader, and coreboot table header for Coreboot.
 | |
| 
 | |
|   @retval NULL            Failed to find the GUID HOB.
 | |
|   @retval others          GUIDed HOB data pointer.
 | |
| 
 | |
| **/
 | |
| VOID *
 | |
| EFIAPI
 | |
| GetParameterBase (
 | |
|   VOID
 | |
|   )
 | |
| {
 | |
|   EFI_HOB_HANDOFF_INFO_TABLE  *HandoffTable;
 | |
| 
 | |
|   HandoffTable = (EFI_HOB_HANDOFF_INFO_TABLE *)(UINTN)GET_BOOTLOADER_PARAMETER ();
 | |
|   if ((HandoffTable->Header.HobType == EFI_HOB_TYPE_HANDOFF) &&
 | |
|       (HandoffTable->Header.HobLength == sizeof (EFI_HOB_HANDOFF_INFO_TABLE)) &&
 | |
|       (HandoffTable->Header.Reserved == 0))
 | |
|   {
 | |
|     return (VOID *)HandoffTable;
 | |
|   }
 | |
| 
 | |
|   return NULL;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   This function retrieves a GUIDed HOB data from Slim Bootloader.
 | |
| 
 | |
|   This function will search SBL HOB list to find the first GUIDed HOB that
 | |
|   its GUID matches Guid.
 | |
| 
 | |
|   @param[in]  Guid        A pointer to HOB GUID to search.
 | |
| 
 | |
|   @retval NULL            Failed to find the GUID HOB.
 | |
|   @retval others          GUIDed HOB data pointer.
 | |
| 
 | |
| **/
 | |
| VOID *
 | |
| GetGuidHobDataFromSbl (
 | |
|   IN       EFI_GUID  *Guid
 | |
|   )
 | |
| {
 | |
|   UINT8       *GuidHob;
 | |
|   CONST VOID  *HobList;
 | |
| 
 | |
|   HobList = GetParameterBase ();
 | |
|   ASSERT (HobList != NULL);
 | |
|   GuidHob = GetNextGuidHob (Guid, HobList);
 | |
|   if (GuidHob != NULL) {
 | |
|     return GET_GUID_HOB_DATA (GuidHob);
 | |
|   }
 | |
| 
 | |
|   return NULL;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Acquire the memory map information.
 | |
| 
 | |
|   @param  MemInfoCallback     The callback routine
 | |
|   @param  Params              Pointer to the callback routine parameter
 | |
| 
 | |
|   @retval RETURN_SUCCESS     Successfully find out the memory information.
 | |
|   @retval RETURN_NOT_FOUND   Failed to find the memory information.
 | |
| 
 | |
| **/
 | |
| RETURN_STATUS
 | |
| EFIAPI
 | |
| ParseMemoryInfo (
 | |
|   IN  BL_MEM_INFO_CALLBACK  MemInfoCallback,
 | |
|   IN  VOID                  *Params
 | |
|   )
 | |
| {
 | |
|   MEMORY_MAP_INFO  *MemoryMapInfo;
 | |
|   UINTN            Idx;
 | |
| 
 | |
|   MemoryMapInfo = (MEMORY_MAP_INFO *)GetGuidHobDataFromSbl (&gLoaderMemoryMapInfoGuid);
 | |
|   if (MemoryMapInfo == NULL) {
 | |
|     ASSERT (FALSE);
 | |
|     return RETURN_NOT_FOUND;
 | |
|   }
 | |
| 
 | |
|   for (Idx = 0; Idx < MemoryMapInfo->Count; Idx++) {
 | |
|     MemInfoCallback (&MemoryMapInfo->Entry[Idx], Params);
 | |
|   }
 | |
| 
 | |
|   return RETURN_SUCCESS;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Acquire SMBIOS table from slim bootloader.
 | |
| 
 | |
|   @param  SmbiosTable           Pointer to the SMBIOS table info.
 | |
| 
 | |
|   @retval RETURN_SUCCESS            Successfully find out the tables.
 | |
|   @retval RETURN_NOT_FOUND          Failed to find the tables.
 | |
| 
 | |
| **/
 | |
| RETURN_STATUS
 | |
| EFIAPI
 | |
| ParseSmbiosTable (
 | |
|   OUT UNIVERSAL_PAYLOAD_SMBIOS_TABLE  *SmbiosTable
 | |
|   )
 | |
| {
 | |
|   UNIVERSAL_PAYLOAD_SMBIOS_TABLE  *TableInfo;
 | |
| 
 | |
|   TableInfo = (UNIVERSAL_PAYLOAD_SMBIOS_TABLE *)GetGuidHobDataFromSbl (&gUniversalPayloadSmbiosTableGuid);
 | |
|   if (TableInfo == NULL) {
 | |
|     ASSERT (FALSE);
 | |
|     return RETURN_NOT_FOUND;
 | |
|   }
 | |
| 
 | |
|   SmbiosTable->SmBiosEntryPoint = TableInfo->SmBiosEntryPoint;
 | |
| 
 | |
|   return RETURN_SUCCESS;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Acquire ACPI table from slim bootloader.
 | |
| 
 | |
|   @param  AcpiTableHob              Pointer to the ACPI table info.
 | |
| 
 | |
|   @retval RETURN_SUCCESS            Successfully find out the tables.
 | |
|   @retval RETURN_NOT_FOUND          Failed to find the tables.
 | |
| 
 | |
| **/
 | |
| RETURN_STATUS
 | |
| EFIAPI
 | |
| ParseAcpiTableInfo (
 | |
|   OUT UNIVERSAL_PAYLOAD_ACPI_TABLE  *AcpiTableHob
 | |
|   )
 | |
| {
 | |
|   UNIVERSAL_PAYLOAD_ACPI_TABLE  *TableInfo;
 | |
| 
 | |
|   TableInfo = (UNIVERSAL_PAYLOAD_ACPI_TABLE *)GetGuidHobDataFromSbl (&gUniversalPayloadAcpiTableGuid);
 | |
|   if (TableInfo == NULL) {
 | |
|     ASSERT (FALSE);
 | |
|     return RETURN_NOT_FOUND;
 | |
|   }
 | |
| 
 | |
|   AcpiTableHob->Rsdp = TableInfo->Rsdp;
 | |
| 
 | |
|   return RETURN_SUCCESS;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Find the serial port information
 | |
| 
 | |
|   @param[out]  SerialPortInfo     Pointer to serial port info structure
 | |
| 
 | |
|   @retval RETURN_SUCCESS     Successfully find the serial port information.
 | |
|   @retval RETURN_NOT_FOUND   Failed to find the serial port information .
 | |
| 
 | |
| **/
 | |
| RETURN_STATUS
 | |
| EFIAPI
 | |
| ParseSerialInfo (
 | |
|   OUT SERIAL_PORT_INFO  *SerialPortInfo
 | |
|   )
 | |
| {
 | |
|   SERIAL_PORT_INFO  *BlSerialInfo;
 | |
| 
 | |
|   BlSerialInfo = (SERIAL_PORT_INFO *)GetGuidHobDataFromSbl (&gUefiSerialPortInfoGuid);
 | |
|   if (BlSerialInfo == NULL) {
 | |
|     ASSERT (FALSE);
 | |
|     return RETURN_NOT_FOUND;
 | |
|   }
 | |
| 
 | |
|   CopyMem (SerialPortInfo, BlSerialInfo, sizeof (SERIAL_PORT_INFO));
 | |
| 
 | |
|   return RETURN_SUCCESS;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Find the video frame buffer information
 | |
| 
 | |
|   @param  GfxInfo             Pointer to the EFI_PEI_GRAPHICS_INFO_HOB structure
 | |
| 
 | |
|   @retval RETURN_SUCCESS     Successfully find the video frame buffer information.
 | |
|   @retval RETURN_NOT_FOUND   Failed to find the video frame buffer information .
 | |
| 
 | |
| **/
 | |
| RETURN_STATUS
 | |
| EFIAPI
 | |
| ParseGfxInfo (
 | |
|   OUT EFI_PEI_GRAPHICS_INFO_HOB  *GfxInfo
 | |
|   )
 | |
| {
 | |
|   EFI_PEI_GRAPHICS_INFO_HOB  *BlGfxInfo;
 | |
| 
 | |
|   BlGfxInfo = (EFI_PEI_GRAPHICS_INFO_HOB *)GetGuidHobDataFromSbl (&gEfiGraphicsInfoHobGuid);
 | |
|   if (BlGfxInfo == NULL) {
 | |
|     return RETURN_NOT_FOUND;
 | |
|   }
 | |
| 
 | |
|   CopyMem (GfxInfo, BlGfxInfo, sizeof (EFI_PEI_GRAPHICS_INFO_HOB));
 | |
| 
 | |
|   return RETURN_SUCCESS;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Find the video frame buffer device information
 | |
| 
 | |
|   @param  GfxDeviceInfo      Pointer to the EFI_PEI_GRAPHICS_DEVICE_INFO_HOB structure
 | |
| 
 | |
|   @retval RETURN_SUCCESS     Successfully find the video frame buffer information.
 | |
|   @retval RETURN_NOT_FOUND   Failed to find the video frame buffer information.
 | |
| 
 | |
| **/
 | |
| RETURN_STATUS
 | |
| EFIAPI
 | |
| ParseGfxDeviceInfo (
 | |
|   OUT EFI_PEI_GRAPHICS_DEVICE_INFO_HOB  *GfxDeviceInfo
 | |
|   )
 | |
| {
 | |
|   EFI_PEI_GRAPHICS_DEVICE_INFO_HOB  *BlGfxDeviceInfo;
 | |
| 
 | |
|   BlGfxDeviceInfo = (EFI_PEI_GRAPHICS_DEVICE_INFO_HOB *)GetGuidHobDataFromSbl (&gEfiGraphicsDeviceInfoHobGuid);
 | |
|   if (BlGfxDeviceInfo == NULL) {
 | |
|     return RETURN_NOT_FOUND;
 | |
|   }
 | |
| 
 | |
|   CopyMem (GfxDeviceInfo, BlGfxDeviceInfo, sizeof (EFI_PEI_GRAPHICS_DEVICE_INFO_HOB));
 | |
| 
 | |
|   return RETURN_SUCCESS;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Parse and handle the misc info provided by bootloader
 | |
| 
 | |
|   @retval RETURN_SUCCESS           The misc information was parsed successfully.
 | |
|   @retval RETURN_NOT_FOUND         Could not find required misc info.
 | |
|   @retval RETURN_OUT_OF_RESOURCES  Insufficant memory space.
 | |
| 
 | |
| **/
 | |
| RETURN_STATUS
 | |
| EFIAPI
 | |
| ParseMiscInfo (
 | |
|   VOID
 | |
|   )
 | |
| {
 | |
|   RETURN_STATUS                       Status;
 | |
|   UNIVERSAL_PAYLOAD_PCI_ROOT_BRIDGES  *BlRootBridgesHob;
 | |
|   UNIVERSAL_PAYLOAD_PCI_ROOT_BRIDGES  *PldRootBridgesHob;
 | |
| 
 | |
|   Status           = RETURN_NOT_FOUND;
 | |
|   BlRootBridgesHob = (UNIVERSAL_PAYLOAD_PCI_ROOT_BRIDGES *)GetGuidHobDataFromSbl (
 | |
|                                                              &gUniversalPayloadPciRootBridgeInfoGuid
 | |
|                                                              );
 | |
|   if (BlRootBridgesHob != NULL) {
 | |
|     //
 | |
|     // Migrate bootloader root bridge info hob from bootloader to payload.
 | |
|     //
 | |
|     PldRootBridgesHob = BuildGuidHob (
 | |
|                           &gUniversalPayloadPciRootBridgeInfoGuid,
 | |
|                           BlRootBridgesHob->Header.Length
 | |
|                           );
 | |
|     ASSERT (PldRootBridgesHob != NULL);
 | |
|     if (PldRootBridgesHob != NULL) {
 | |
|       CopyMem (PldRootBridgesHob, BlRootBridgesHob, BlRootBridgesHob->Header.Length);
 | |
|       DEBUG ((DEBUG_INFO, "Create PCI root bridge info guid hob\n"));
 | |
|       Status = RETURN_SUCCESS;
 | |
|     } else {
 | |
|       Status = RETURN_OUT_OF_RESOURCES;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return Status;
 | |
| }
 |