]> git.proxmox.com Git - mirror_edk2.git/blob - ArmVirtPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.c
ArmVirtPkg: add PlatformHasAcpiDtDxe
[mirror_edk2.git] / ArmVirtPkg / PlatformHasAcpiDtDxe / PlatformHasAcpiDtDxe.c
1 /** @file
2 Decide whether the firmware should expose an ACPI- and/or a Device Tree-based
3 hardware description to the operating system.
4
5 Copyright (c) 2017, Red Hat, Inc.
6
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
11
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.
14 **/
15
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/UefiBootServicesTableLib.h>
22
23 EFI_STATUS
24 EFIAPI
25 PlatformHasAcpiDt (
26 IN EFI_HANDLE ImageHandle,
27 IN EFI_SYSTEM_TABLE *SystemTable
28 )
29 {
30 EFI_STATUS Status;
31
32 Status = EFI_SUCCESS;
33
34 //
35 // If we fail to install any of the necessary protocols below, the OS will be
36 // unbootable anyway (due to lacking hardware description), so tolerate no
37 // errors here.
38 //
39 // Always make ACPI available on 64-bit systems.
40 //
41 if (MAX_UINTN == MAX_UINT64) {
42 Status = gBS->InstallProtocolInterface (
43 &ImageHandle,
44 &gEdkiiPlatformHasAcpiGuid,
45 EFI_NATIVE_INTERFACE,
46 NULL
47 );
48 if (EFI_ERROR (Status)) {
49 goto Failed;
50 }
51 }
52
53 //
54 // Expose the Device Tree unless PcdPureAcpiBoot is set.
55 //
56 if (!FeaturePcdGet (PcdPureAcpiBoot)) {
57 Status = gBS->InstallProtocolInterface (
58 &ImageHandle,
59 &gEdkiiPlatformHasDeviceTreeGuid,
60 EFI_NATIVE_INTERFACE,
61 NULL
62 );
63 if (EFI_ERROR (Status)) {
64 goto Failed;
65 }
66 }
67
68 return Status;
69
70 Failed:
71 ASSERT_EFI_ERROR (Status);
72 CpuDeadLoop ();
73 //
74 // Keep compilers happy.
75 //
76 return Status;
77 }