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>
		
			
				
	
	
		
			140 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   SMM Firmware Volume Block Driver.
 | |
| 
 | |
|   Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.<BR>
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #include <PiSmm.h>
 | |
| #include <Library/SmmServicesTableLib.h>
 | |
| #include "FvbSmmCommon.h"
 | |
| #include "FvbService.h"
 | |
| 
 | |
| /**
 | |
|   The function installs EFI_SMM_FIRMWARE_VOLUME_BLOCK protocol
 | |
|   for each FV in the system.
 | |
| 
 | |
|   @param[in]  FwhInstance   The pointer to a FW volume instance structure,
 | |
|                             which contains the information about one FV.
 | |
|   @param[in]  InstanceNum   The instance number which can be used as a ID
 | |
|                             to locate this FwhInstance in other functions.
 | |
| 
 | |
|   @retval     EFI_SUCESS    Installed successfully.
 | |
|   @retval     Else          Did not install successfully.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| InstallFvbProtocol (
 | |
|   IN  EFI_FW_VOL_INSTANCE  *FwhInstance,
 | |
|   IN  UINTN                InstanceNum
 | |
|   )
 | |
| {
 | |
|   EFI_FW_VOL_BLOCK_DEVICE     *FvbDevice;
 | |
|   EFI_FIRMWARE_VOLUME_HEADER  *FwVolHeader;
 | |
|   EFI_STATUS                  Status;
 | |
|   EFI_HANDLE                  FvbHandle;
 | |
|   FV_MEMMAP_DEVICE_PATH       *FvDevicePath;
 | |
|   VOID                        *TempPtr;
 | |
| 
 | |
|   FvbDevice = (EFI_FW_VOL_BLOCK_DEVICE *)AllocateRuntimeCopyPool (
 | |
|                                            sizeof (EFI_FW_VOL_BLOCK_DEVICE),
 | |
|                                            &mFvbDeviceTemplate
 | |
|                                            );
 | |
|   if (FvbDevice == NULL) {
 | |
|     return EFI_OUT_OF_RESOURCES;
 | |
|   }
 | |
| 
 | |
|   FvbDevice->Instance = InstanceNum;
 | |
|   FwVolHeader         = &FwhInstance->VolumeHeader;
 | |
| 
 | |
|   //
 | |
|   // Set up the devicepath
 | |
|   //
 | |
|   if (FwVolHeader->ExtHeaderOffset == 0) {
 | |
|     //
 | |
|     // FV does not contains extension header, then produce MEMMAP_DEVICE_PATH
 | |
|     //
 | |
|     TempPtr               = AllocateRuntimeCopyPool (sizeof (FV_MEMMAP_DEVICE_PATH), &mFvMemmapDevicePathTemplate);
 | |
|     FvbDevice->DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)TempPtr;
 | |
|     if (FvbDevice->DevicePath == NULL) {
 | |
|       ASSERT (FALSE);
 | |
|       return EFI_OUT_OF_RESOURCES;
 | |
|     }
 | |
| 
 | |
|     FvDevicePath                                = (FV_MEMMAP_DEVICE_PATH *)FvbDevice->DevicePath;
 | |
|     FvDevicePath->MemMapDevPath.StartingAddress = FwhInstance->FvBase;
 | |
|     FvDevicePath->MemMapDevPath.EndingAddress   = FwhInstance->FvBase + FwVolHeader->FvLength - 1;
 | |
|   } else {
 | |
|     TempPtr               = AllocateRuntimeCopyPool (sizeof (FV_PIWG_DEVICE_PATH), &mFvPIWGDevicePathTemplate);
 | |
|     FvbDevice->DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)TempPtr;
 | |
|     if (FvbDevice->DevicePath == NULL) {
 | |
|       ASSERT (FALSE);
 | |
|       return EFI_OUT_OF_RESOURCES;
 | |
|     }
 | |
| 
 | |
|     CopyGuid (
 | |
|       &((FV_PIWG_DEVICE_PATH *)FvbDevice->DevicePath)->FvDevPath.FvName,
 | |
|       (GUID *)(UINTN)(FwhInstance->FvBase + FwVolHeader->ExtHeaderOffset)
 | |
|       );
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Install the SMM Firmware Volume Block Protocol and Device Path Protocol
 | |
|   //
 | |
|   FvbHandle = NULL;
 | |
|   Status    = gSmst->SmmInstallProtocolInterface (
 | |
|                        &FvbHandle,
 | |
|                        &gEfiSmmFirmwareVolumeBlockProtocolGuid,
 | |
|                        EFI_NATIVE_INTERFACE,
 | |
|                        &FvbDevice->FwVolBlockInstance
 | |
|                        );
 | |
|   ASSERT_EFI_ERROR (Status);
 | |
| 
 | |
|   Status = gSmst->SmmInstallProtocolInterface (
 | |
|                     &FvbHandle,
 | |
|                     &gEfiDevicePathProtocolGuid,
 | |
|                     EFI_NATIVE_INTERFACE,
 | |
|                     FvbDevice->DevicePath
 | |
|                     );
 | |
|   ASSERT_EFI_ERROR (Status);
 | |
| 
 | |
|   //
 | |
|   // Notify the Fvb wrapper driver SMM fvb is ready
 | |
|   //
 | |
|   FvbHandle = NULL;
 | |
|   Status    = gBS->InstallProtocolInterface (
 | |
|                      &FvbHandle,
 | |
|                      &gEfiSmmFirmwareVolumeBlockProtocolGuid,
 | |
|                      EFI_NATIVE_INTERFACE,
 | |
|                      &FvbDevice->FwVolBlockInstance
 | |
|                      );
 | |
| 
 | |
|   return Status;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   The driver entry point for SMM Firmware Volume Block Driver.
 | |
| 
 | |
|   The function does the necessary initialization work
 | |
|   Firmware Volume Block Driver.
 | |
| 
 | |
|   @param[in]  ImageHandle       The firmware allocated handle for the UEFI image.
 | |
|   @param[in]  SystemTable       A pointer to the EFI system table.
 | |
| 
 | |
|   @retval     EFI_SUCCESS       This funtion always return EFI_SUCCESS.
 | |
|                                 It will ASSERT on errors.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| FvbSmmInitialize (
 | |
|   IN EFI_HANDLE        ImageHandle,
 | |
|   IN EFI_SYSTEM_TABLE  *SystemTable
 | |
|   )
 | |
| {
 | |
|   FvbInitialize ();
 | |
| 
 | |
|   return EFI_SUCCESS;
 | |
| }
 |