/** @file
Driver for BIOS Info support.
Copyright (c) 2019, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include
#include
#include
#include
#include
#include
#include
#include
#define INDEXPORT_TO_ADDRESS(x) (x)
#define DATAPORT_TO_ADDRESS(x) ((x) << 16)
#define PORTWIDTH_TO_ADDRESS(x) ((x) << 32)
#define PORTBITNUMBER_TO_ADDRESS(x) ((x) << 40)
#define PORTINDEXNUMBER_TO_ADDRESS(x) ((x) << 48)
//
// Internal
//
#pragma pack (1)
typedef struct {
BIOS_INFO_HEADER Header;
BIOS_INFO_STRUCT Entry[1];
} BIOS_INFO;
#pragma pack ()
GLOBAL_REMOVE_IF_UNREFERENCED BIOS_INFO mBiosInfo = {
{
BIOS_INFO_SIGNATURE,
1,
0,
},
{
{
FIT_TYPE_01_MICROCODE,
BIOS_INFO_STRUCT_ATTRIBUTE_MICROCODE_WHOLE_REGION,
0x0100,
FixedPcdGet32 (PcdFlashMicrocodeFvSize),
FixedPcdGet32 (PcdFlashMicrocodeFvBase)
}
}
};
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 and builds BiosInfo HOB .
@param FileHandle Handle of the file being invoked.
@param PeiServices Describes the list of possible PEI Services.
@retval EFI_SUCCESS Install the BiosInfo Ppi and HOB 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);
//
// Build hob, so that DXE module can also get the data.
//
HobData = BuildGuidHob (&gBiosInfoGuid, sizeof (mBiosInfo));
ASSERT (HobData != NULL);
if (HobData == NULL) {
return EFI_OUT_OF_RESOURCES;
}
CopyMem (HobData, &mBiosInfo, sizeof (mBiosInfo));
return EFI_SUCCESS;
}