2 This driver will report some MMIO/IO resources to dxe core, extract smbios and acpi
3 tables from bootloader.
5 Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.<BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
9 #include "BlSupportDxe.h"
12 Reserve MMIO/IO resource in GCD
14 @param IsMMIO Flag of whether it is mmio resource or io resource.
15 @param GcdType Type of the space.
16 @param BaseAddress Base address of the space.
17 @param Length Length of the space.
18 @param Alignment Align with 2^Alignment
19 @param ImageHandle Handle for the image of this driver.
21 @retval EFI_SUCCESS Reserve successful
24 ReserveResourceInGcd (
27 IN EFI_PHYSICAL_ADDRESS BaseAddress
,
30 IN EFI_HANDLE ImageHandle
36 Status
= gDS
->AddMemorySpace (
42 if (EFI_ERROR (Status
)) {
45 "Failed to add memory space :0x%lx 0x%lx\n",
50 Status
= gDS
->AllocateMemorySpace (
51 EfiGcdAllocateAddress
,
60 Status
= gDS
->AddIoSpace (
65 if (EFI_ERROR (Status
)) {
68 "Failed to add IO space :0x%lx 0x%lx\n",
73 Status
= gDS
->AllocateIoSpace (
74 EfiGcdAllocateAddress
,
88 Main entry for the bootloader support DXE module.
90 @param[in] ImageHandle The firmware allocated handle for the EFI image.
91 @param[in] SystemTable A pointer to the EFI System Table.
93 @retval EFI_SUCCESS The entry point is executed successfully.
94 @retval other Some error occurs when executing this entry point.
100 IN EFI_HANDLE ImageHandle
,
101 IN EFI_SYSTEM_TABLE
*SystemTable
105 EFI_HOB_GUID_TYPE
*GuidHob
;
106 EFI_PEI_GRAPHICS_INFO_HOB
*GfxInfo
;
107 ACPI_BOARD_INFO
*AcpiBoardInfo
;
109 Status
= EFI_SUCCESS
;
111 // Report MMIO/IO Resources
113 ReserveResourceInGcd (TRUE
, EfiGcdMemoryTypeMemoryMappedIo
, 0xFEC00000, SIZE_4KB
, 0, ImageHandle
); // IOAPIC
115 ReserveResourceInGcd (TRUE
, EfiGcdMemoryTypeMemoryMappedIo
, 0xFED00000, SIZE_1KB
, 0, ImageHandle
); // HPET
118 // Find the frame buffer information and update PCDs
120 GuidHob
= GetFirstGuidHob (&gEfiGraphicsInfoHobGuid
);
121 if (GuidHob
!= NULL
) {
122 GfxInfo
= (EFI_PEI_GRAPHICS_INFO_HOB
*)GET_GUID_HOB_DATA (GuidHob
);
123 Status
= PcdSet32S (PcdVideoHorizontalResolution
, GfxInfo
->GraphicsMode
.HorizontalResolution
);
124 ASSERT_EFI_ERROR (Status
);
125 Status
= PcdSet32S (PcdVideoVerticalResolution
, GfxInfo
->GraphicsMode
.VerticalResolution
);
126 ASSERT_EFI_ERROR (Status
);
127 Status
= PcdSet32S (PcdSetupVideoHorizontalResolution
, GfxInfo
->GraphicsMode
.HorizontalResolution
);
128 ASSERT_EFI_ERROR (Status
);
129 Status
= PcdSet32S (PcdSetupVideoVerticalResolution
, GfxInfo
->GraphicsMode
.VerticalResolution
);
130 ASSERT_EFI_ERROR (Status
);
134 // Set PcdPciExpressBaseAddress and PcdPciExpressBaseSize by HOB info
136 GuidHob
= GetFirstGuidHob (&gUefiAcpiBoardInfoGuid
);
137 if (GuidHob
!= NULL
) {
138 AcpiBoardInfo
= (ACPI_BOARD_INFO
*)GET_GUID_HOB_DATA (GuidHob
);
139 Status
= PcdSet64S (PcdPciExpressBaseAddress
, AcpiBoardInfo
->PcieBaseAddress
);
140 ASSERT_EFI_ERROR (Status
);
141 Status
= PcdSet64S (PcdPciExpressBaseSize
, AcpiBoardInfo
->PcieBaseSize
);
142 ASSERT_EFI_ERROR (Status
);