BiosInfo.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /** @file
  2. Driver for BIOS Info support.
  3. Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #include <PiPei.h>
  7. #include <Guid/BiosInfo.h>
  8. #include <Library/PeiServicesLib.h>
  9. #include <Library/BaseMemoryLib.h>
  10. #include <Library/DebugLib.h>
  11. #include <Library/HobLib.h>
  12. #include <Library/PcdLib.h>
  13. #include <IndustryStandard/FirmwareInterfaceTable.h>
  14. #define INDEXPORT_TO_ADDRESS(x) (x)
  15. #define DATAPORT_TO_ADDRESS(x) ((x) << 16)
  16. #define PORTWIDTH_TO_ADDRESS(x) ((x) << 32)
  17. #define PORTBITNUMBER_TO_ADDRESS(x) ((x) << 40)
  18. #define PORTINDEXNUMBER_TO_ADDRESS(x) ((x) << 48)
  19. //
  20. // Internal
  21. //
  22. #pragma pack (1)
  23. typedef struct {
  24. BIOS_INFO_HEADER Header;
  25. BIOS_INFO_STRUCT Entry[1];
  26. } BIOS_INFO;
  27. #pragma pack ()
  28. GLOBAL_REMOVE_IF_UNREFERENCED BIOS_INFO mBiosInfo = {
  29. {
  30. BIOS_INFO_SIGNATURE,
  31. 1,
  32. 0,
  33. },
  34. {
  35. {
  36. FIT_TYPE_01_MICROCODE,
  37. BIOS_INFO_STRUCT_ATTRIBUTE_MICROCODE_WHOLE_REGION,
  38. 0x0100,
  39. FixedPcdGet32 (PcdFlashMicrocodeFvSize),
  40. FixedPcdGet32 (PcdFlashMicrocodeFvBase)
  41. }
  42. }
  43. };
  44. GLOBAL_REMOVE_IF_UNREFERENCED EFI_PEI_PPI_DESCRIPTOR mBiosInfoPpiList = {
  45. EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
  46. &gBiosInfoGuid,
  47. &mBiosInfo
  48. };
  49. /**
  50. Installs BiosInfo Ppi and builds BiosInfo HOB .
  51. @param FileHandle Handle of the file being invoked.
  52. @param PeiServices Describes the list of possible PEI Services.
  53. @retval EFI_SUCCESS Install the BiosInfo Ppi and HOB successfully.
  54. **/
  55. EFI_STATUS
  56. EFIAPI
  57. BiosInfoEntryPoint (
  58. IN EFI_PEI_FILE_HANDLE FileHandle,
  59. IN CONST EFI_PEI_SERVICES **PeiServices
  60. )
  61. {
  62. EFI_STATUS Status;
  63. VOID *HobData;
  64. //
  65. // Install PPI, so that other PEI module can add dependency.
  66. //
  67. Status = PeiServicesInstallPpi (&mBiosInfoPpiList);
  68. ASSERT_EFI_ERROR (Status);
  69. //
  70. // Build hob, so that DXE module can also get the data.
  71. //
  72. HobData = BuildGuidHob (&gBiosInfoGuid, sizeof (mBiosInfo));
  73. ASSERT (HobData != NULL);
  74. if (HobData == NULL) {
  75. return EFI_OUT_OF_RESOURCES;
  76. }
  77. CopyMem (HobData, &mBiosInfo, sizeof (mBiosInfo));
  78. return EFI_SUCCESS;
  79. }