mirror of
https://github.com/tianocore/edk2.git
synced 2025-08-26 22:07:55 +00:00

This update refactors QemuFlashFvbServicesRuntimeDxe to abstract out direct calls to SMM and DXE specific functions. Specifically, dynamic PCD usage and gBS references have been moved to SMM specific files. The constructor functionality has been relocated to a common implementation and is invoked from their respective entry points. These changes lay the groundwork for supporting a Standalone MM-based solution in the future. Signed-off-by: Kun Qin <kun.qin@microsoft.com>
98 lines
2.1 KiB
C
98 lines
2.1 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>
|
|
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
**/
|
|
|
|
#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 ((DEBUG_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;
|
|
}
|
|
|
|
VOID
|
|
SetPcdFlashNvStorageBaseAddresses (
|
|
VOID
|
|
)
|
|
{
|
|
//
|
|
// Do nothing.
|
|
//
|
|
}
|
|
|
|
VOID
|
|
UpdateQemuFlashVariablesEnable (
|
|
VOID
|
|
)
|
|
{
|
|
RETURN_STATUS PcdStatus;
|
|
|
|
PcdStatus = PcdSetBoolS (PcdOvmfFlashVariablesEnable, TRUE);
|
|
ASSERT_RETURN_ERROR (PcdStatus);
|
|
}
|