2 Decide whether the firmware should expose an ACPI- and/or a Device Tree-based
3 hardware description to the operating system.
5 Copyright (c) 2017, Red Hat, Inc.
7 This program and the accompanying materials are licensed and made available
8 under the terms and conditions of the BSD License which accompanies this
9 distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
13 WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 #include <Guid/PlatformHasAcpi.h>
17 #include <Guid/PlatformHasDeviceTree.h>
18 #include <Library/BaseLib.h>
19 #include <Library/DebugLib.h>
20 #include <Library/PcdLib.h>
21 #include <Library/QemuFwCfgLib.h>
22 #include <Library/UefiBootServicesTableLib.h>
27 IN EFI_HANDLE ImageHandle
,
28 IN EFI_SYSTEM_TABLE
*SystemTable
32 FIRMWARE_CONFIG_ITEM FwCfgItem
;
36 // If we fail to install any of the necessary protocols below, the OS will be
37 // unbootable anyway (due to lacking hardware description), so tolerate no
40 if (MAX_UINTN
== MAX_UINT64
&&
41 !PcdGetBool (PcdForceNoAcpi
) &&
50 // Only make ACPI available on 64-bit systems, and only if QEMU generates
51 // (a subset of) the ACPI tables.
53 Status
= gBS
->InstallProtocolInterface (
55 &gEdkiiPlatformHasAcpiGuid
,
59 if (EFI_ERROR (Status
)) {
67 // Expose the Device Tree otherwise.
69 Status
= gBS
->InstallProtocolInterface (
71 &gEdkiiPlatformHasDeviceTreeGuid
,
75 if (EFI_ERROR (Status
)) {
82 ASSERT_EFI_ERROR (Status
);
85 // Keep compilers happy.