/** @file
|
Driver for BIOS Info support.
|
|
@copyright
|
Copyright 2011 - 2021 Intel Corporation.
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
**/
|
|
#include <PiPei.h>
|
#include <BiosInfo.h>
|
#include <Library/PeiServicesLib.h>
|
#include <Library/BaseMemoryLib.h>
|
#include <Library/DebugLib.h>
|
#include <Library/HobLib.h>
|
#include <Library/PcdLib.h>
|
#include <IndustryStandard/FirmwareInterfaceTable.h>
|
|
GLOBAL_REMOVE_IF_UNREFERENCED BIOS_INFO mBiosInfo = {
|
{
|
BIOS_INFO_SIGNATURE,
|
BIOS_INFO_STRUCT_SIZE,
|
0,
|
},
|
{
|
{
|
FIT_TYPE_07_BIOS_STARTUP_MODULE,
|
BIOS_INFO_STRUCT_ATTRIBUTE_GENERAL_EXCLUDE_FROM_FIT,
|
0x0100,
|
FixedPcdGet32 (PcdFlashNvStorageVariableSize) + FixedPcdGet32 (PcdFlashNvStorageFtwWorkingSize) + FixedPcdGet32 (PcdFlashNvStorageFtwSpareSize),
|
FixedPcdGet32 (PcdFlashNvStorageVariableBase)
|
},
|
{
|
FIT_TYPE_07_BIOS_STARTUP_MODULE,
|
0,
|
0x0100,
|
FixedPcdGet32 (PcdFlashFvPreMemorySize),
|
FixedPcdGet32 (PcdFlashFvPreMemoryBase)
|
},
|
{
|
FIT_TYPE_07_BIOS_STARTUP_MODULE,
|
0,
|
0x0100,
|
FixedPcdGet32 (PcdFlashFvFspMSize),
|
FixedPcdGet32 (PcdFlashFvFspMBase)
|
},
|
{
|
FIT_TYPE_01_MICROCODE,
|
BIOS_INFO_STRUCT_ATTRIBUTE_MICROCODE_WHOLE_REGION,
|
0x0100,
|
FixedPcdGet32 (PcdFlashNvStorageMicrocodeSize),
|
FixedPcdGet32 (PcdFlashNvStorageMicrocodeBase)
|
},
|
|
}
|
};
|
|
GLOBAL_REMOVE_IF_UNREFERENCED EFI_PEI_PPI_DESCRIPTOR mBiosInfoPpiList = {
|
EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
|
&gBiosInfoGuid,
|
&mBiosInfo
|
};
|
|
/**
|
Installs BiosInfo Ppi.
|
|
@param FileHandle Handle of the file being invoked.
|
@param PeiServices Describes the list of possible PEI Services.
|
|
@retval EFI_SUCCESS Install the BiosInfo Ppi successfully.
|
|
**/
|
EFI_STATUS
|
EFIAPI
|
BiosInfoEntryPoint (
|
IN EFI_PEI_FILE_HANDLE FileHandle,
|
IN CONST EFI_PEI_SERVICES **PeiServices
|
)
|
{
|
EFI_STATUS Status;
|
VOID *HobData;
|
|
//
|
// Install PPI, so that other PEI module can add dependency.
|
//
|
Status = PeiServicesInstallPpi (&mBiosInfoPpiList);
|
ASSERT_EFI_ERROR (Status);
|
if (EFI_ERROR(Status)) {
|
return Status;
|
}
|
|
//
|
// Build hob, so that DXE module can also get the data.
|
//
|
HobData = BuildGuidHob (&gBiosInfoGuid, sizeof (BIOS_INFO));
|
ASSERT (HobData != NULL);
|
|
if (HobData == NULL) {
|
return EFI_OUT_OF_RESOURCES;
|
}
|
CopyMem (HobData, &mBiosInfo, sizeof (BIOS_INFO));
|
|
return EFI_SUCCESS;
|
}
|