In the SMM build, only an SMM driver is using the address range hence we do not need to expose the flash MMIO range in EFI runtime mapping. Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> Cc: Anthony Perard <anthony.perard@citrix.com> Cc: Julien Grall <julien.grall@linaro.org> Cc: Justen Jordan L <jordan.l.justen@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Brijesh Singh <brijesh.singh@amd.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Regression-tested-by: Laszlo Ersek <lersek@redhat.com>
		
			
				
	
	
		
			83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/**@file
 | 
						|
  Functions related to the Firmware Volume Block service whose
 | 
						|
  implementation is specific to the SMM driver build.
 | 
						|
 | 
						|
  Copyright (C) 2015, Red Hat, Inc.
 | 
						|
  Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
 | 
						|
 | 
						|
  This program and the accompanying materials are licensed and made available
 | 
						|
  under the terms and conditions of the BSD License which accompanies this
 | 
						|
  distribution.  The full text of the license may be found at
 | 
						|
  http://opensource.org/licenses/bsd-license.php
 | 
						|
 | 
						|
  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | 
						|
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | 
						|
**/
 | 
						|
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include <Library/PcdLib.h>
 | 
						|
#include <Library/SmmServicesTableLib.h>
 | 
						|
#include <Protocol/DevicePath.h>
 | 
						|
#include <Protocol/SmmFirmwareVolumeBlock.h>
 | 
						|
 | 
						|
#include "FwBlockService.h"
 | 
						|
 | 
						|
VOID
 | 
						|
InstallProtocolInterfaces (
 | 
						|
  IN EFI_FW_VOL_BLOCK_DEVICE *FvbDevice
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_HANDLE FvbHandle;
 | 
						|
  EFI_STATUS Status;
 | 
						|
 | 
						|
  ASSERT (FeaturePcdGet (PcdSmmSmramRequire));
 | 
						|
 | 
						|
  //
 | 
						|
  // There is no SMM service that can install multiple protocols in the SMM
 | 
						|
  // protocol database in one go.
 | 
						|
  //
 | 
						|
  // The SMM Firmware Volume Block protocol structure is the same as the
 | 
						|
  // Firmware Volume Block protocol structure.
 | 
						|
  //
 | 
						|
  FvbHandle = NULL;
 | 
						|
  DEBUG ((EFI_D_INFO, "Installing QEMU flash SMM FVB\n"));
 | 
						|
  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);
 | 
						|
}
 | 
						|
 | 
						|
VOID
 | 
						|
InstallVirtualAddressChangeHandler (
 | 
						|
  VOID
 | 
						|
  )
 | 
						|
{
 | 
						|
  //
 | 
						|
  // Nothing.
 | 
						|
  //
 | 
						|
}
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
MarkIoMemoryRangeForRuntimeAccess (
 | 
						|
  IN EFI_PHYSICAL_ADDRESS                BaseAddress,
 | 
						|
  IN UINTN                               Length
 | 
						|
  )
 | 
						|
{
 | 
						|
  //
 | 
						|
  // Nothing
 | 
						|
  //
 | 
						|
 | 
						|
  return EFI_SUCCESS;
 | 
						|
}
 |