123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- /** @file
- Driver for BIOS Info support.
- Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #include <PiPei.h>
- #include <Guid/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>
- #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;
- }
|