/** @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; }