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",
51 Status
= gDS
->AllocateMemorySpace (
52 EfiGcdAllocateAddress
,
61 Status
= gDS
->AddIoSpace (
66 if (EFI_ERROR (Status
)) {
69 "Failed to add IO space :0x%lx 0x%lx\n",
75 Status
= gDS
->AllocateIoSpace (
76 EfiGcdAllocateAddress
,
90 Main entry for the bootloader support DXE module.
92 @param[in] ImageHandle The firmware allocated handle for the EFI image.
93 @param[in] SystemTable A pointer to the EFI System Table.
95 @retval EFI_SUCCESS The entry point is executed successfully.
96 @retval other Some error occurs when executing this entry point.
102 IN EFI_HANDLE ImageHandle
,
103 IN EFI_SYSTEM_TABLE
*SystemTable
107 EFI_HOB_GUID_TYPE
*GuidHob
;
108 EFI_PEI_GRAPHICS_INFO_HOB
*GfxInfo
;
109 ACPI_BOARD_INFO
*AcpiBoardInfo
;
111 Status
= EFI_SUCCESS
;
113 // Report MMIO/IO Resources
115 ReserveResourceInGcd (TRUE
, EfiGcdMemoryTypeMemoryMappedIo
, 0xFEC00000, SIZE_4KB
, 0, ImageHandle
); // IOAPIC
117 ReserveResourceInGcd (TRUE
, EfiGcdMemoryTypeMemoryMappedIo
, 0xFED00000, SIZE_1KB
, 0, ImageHandle
); // HPET
120 // Find the frame buffer information and update PCDs
122 GuidHob
= GetFirstGuidHob (&gEfiGraphicsInfoHobGuid
);
123 if (GuidHob
!= NULL
) {
124 GfxInfo
= (EFI_PEI_GRAPHICS_INFO_HOB
*)GET_GUID_HOB_DATA (GuidHob
);
125 Status
= PcdSet32S (PcdVideoHorizontalResolution
, GfxInfo
->GraphicsMode
.HorizontalResolution
);
126 ASSERT_EFI_ERROR (Status
);
127 Status
= PcdSet32S (PcdVideoVerticalResolution
, GfxInfo
->GraphicsMode
.VerticalResolution
);
128 ASSERT_EFI_ERROR (Status
);
129 Status
= PcdSet32S (PcdSetupVideoHorizontalResolution
, GfxInfo
->GraphicsMode
.HorizontalResolution
);
130 ASSERT_EFI_ERROR (Status
);
131 Status
= PcdSet32S (PcdSetupVideoVerticalResolution
, GfxInfo
->GraphicsMode
.VerticalResolution
);
132 ASSERT_EFI_ERROR (Status
);
136 // Set PcdPciExpressBaseAddress and PcdPciExpressBaseSize by HOB info
138 GuidHob
= GetFirstGuidHob (&gUefiAcpiBoardInfoGuid
);
139 if (GuidHob
!= NULL
) {
140 AcpiBoardInfo
= (ACPI_BOARD_INFO
*)GET_GUID_HOB_DATA (GuidHob
);
141 Status
= PcdSet64S (PcdPciExpressBaseAddress
, AcpiBoardInfo
->PcieBaseAddress
);
142 ASSERT_EFI_ERROR (Status
);
143 Status
= PcdSet64S (PcdPciExpressBaseSize
, AcpiBoardInfo
->PcieBaseSize
);
144 ASSERT_EFI_ERROR (Status
);