From ac36ad4d62798a4a9e2275040c0c8d1133e9dd80 Mon Sep 17 00:00:00 2001 From: Laszlo Ersek Date: Wed, 29 Mar 2017 12:26:19 +0200 Subject: [PATCH 07/11] ArmVirtPkg: add PlatformHasAcpiDtDxe Message-id: <20170329102623.11570-8-lersek@redhat.com> Patchwork-id: 74576 O-Subject: [RHEL-7.4 ovmf PATCH 07/11] ArmVirtPkg: add PlatformHasAcpiDtDxe Bugzilla: 1430262 Acked-by: Andrew Jones Acked-by: Al Stone Acked-by: Vitaly Kuznetsov This driver produces the EDKII Platform Has ACPI and Platform Has Device Tree protocols, exactly matching the current ACPI / DT exposure on QEMU, according to ARM vs. AARCH64, and (in the latter case) to PcdPureAcpiBoot. Cc: Ard Biesheuvel Cc: Leif Lindholm Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek Reviewed-by: Ard Biesheuvel (cherry picked from commit 2558bfe3e907c6607991b50300cba9eeb04e6f43) --- .../PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.c | 77 ++++++++++++++++++++++ .../PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.inf | 47 +++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 ArmVirtPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.c create mode 100644 ArmVirtPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.inf diff --git a/ArmVirtPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.c b/ArmVirtPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.c new file mode 100644 index 0000000..a718ce1 --- /dev/null +++ b/ArmVirtPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.c @@ -0,0 +1,77 @@ +/** @file + Decide whether the firmware should expose an ACPI- and/or a Device Tree-based + hardware description to the operating system. + + Copyright (c) 2017, Red Hat, Inc. + + This program and the accompanying materials are licensed and made available + under the terms and conditions of the BSD License which accompanies this + distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT + WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +**/ + +#include +#include +#include +#include +#include +#include + +EFI_STATUS +EFIAPI +PlatformHasAcpiDt ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + + Status = EFI_SUCCESS; + + // + // If we fail to install any of the necessary protocols below, the OS will be + // unbootable anyway (due to lacking hardware description), so tolerate no + // errors here. + // + // Always make ACPI available on 64-bit systems. + // + if (MAX_UINTN == MAX_UINT64) { + Status = gBS->InstallProtocolInterface ( + &ImageHandle, + &gEdkiiPlatformHasAcpiGuid, + EFI_NATIVE_INTERFACE, + NULL + ); + if (EFI_ERROR (Status)) { + goto Failed; + } + } + + // + // Expose the Device Tree unless PcdPureAcpiBoot is set. + // + if (!FeaturePcdGet (PcdPureAcpiBoot)) { + Status = gBS->InstallProtocolInterface ( + &ImageHandle, + &gEdkiiPlatformHasDeviceTreeGuid, + EFI_NATIVE_INTERFACE, + NULL + ); + if (EFI_ERROR (Status)) { + goto Failed; + } + } + + return Status; + +Failed: + ASSERT_EFI_ERROR (Status); + CpuDeadLoop (); + // + // Keep compilers happy. + // + return Status; +} diff --git a/ArmVirtPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.inf b/ArmVirtPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.inf new file mode 100644 index 0000000..2450500 --- /dev/null +++ b/ArmVirtPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.inf @@ -0,0 +1,47 @@ +## @file +# Decide whether the firmware should expose an ACPI- and/or a Device Tree-based +# hardware description to the operating system. +# +# Copyright (c) 2017, Red Hat, Inc. +# +# This program and the accompanying materials are licensed and made available +# under the terms and conditions of the BSD License which accompanies this +# distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT +# WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +## + +[Defines] + INF_VERSION = 1.25 + BASE_NAME = PlatformHasAcpiDtDxe + FILE_GUID = 9d1dd27f-6d7f-427b-aec4-b62f6279c2f1 + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + ENTRY_POINT = PlatformHasAcpiDt + +[Sources] + PlatformHasAcpiDtDxe.c + +[Packages] + ArmVirtPkg/ArmVirtPkg.dec + EmbeddedPkg/EmbeddedPkg.dec + MdePkg/MdePkg.dec + +[LibraryClasses] + BaseLib + DebugLib + PcdLib + UefiBootServicesTableLib + UefiDriverEntryPoint + +[Guids] + gEdkiiPlatformHasAcpiGuid ## SOMETIMES_PRODUCES ## PROTOCOL + gEdkiiPlatformHasDeviceTreeGuid ## SOMETIMES_PRODUCES ## PROTOCOL + +[FeaturePcd] + gArmVirtTokenSpaceGuid.PcdPureAcpiBoot ## CONSUMES + +[Depex] + TRUE -- 1.8.3.1