]> git.proxmox.com Git - mirror_edk2.git/blob - ArmVirtPkg/XenPlatformHasAcpiDtDxe/XenPlatformHasAcpiDtDxe.c
BaseTools/BinToPcd: Fix Python 2.7.x compatibility issue
[mirror_edk2.git] / ArmVirtPkg / XenPlatformHasAcpiDtDxe / XenPlatformHasAcpiDtDxe.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/UefiBootServicesTableLib.h>
21
22 EFI_STATUS
23 EFIAPI
24 XenPlatformHasAcpiDt (
25 IN EFI_HANDLE ImageHandle,
26 IN EFI_SYSTEM_TABLE *SystemTable
27 )
28 {
29 EFI_STATUS Status;
30
31 //
32 // If we fail to install any of the necessary protocols below, the OS will be
33 // unbootable anyway (due to lacking hardware description), so tolerate no
34 // errors here.
35 //
36 // Always make ACPI available on 64-bit systems.
37 //
38 if (MAX_UINTN == MAX_UINT64) {
39 Status = gBS->InstallProtocolInterface (
40 &ImageHandle,
41 &gEdkiiPlatformHasAcpiGuid,
42 EFI_NATIVE_INTERFACE,
43 NULL
44 );
45 if (EFI_ERROR (Status)) {
46 goto Failed;
47 }
48 }
49
50 //
51 // Expose the Device Tree unconditionally.
52 //
53 Status = gBS->InstallProtocolInterface (
54 &ImageHandle,
55 &gEdkiiPlatformHasDeviceTreeGuid,
56 EFI_NATIVE_INTERFACE,
57 NULL
58 );
59 if (EFI_ERROR (Status)) {
60 goto Failed;
61 }
62
63 return Status;
64
65 Failed:
66 ASSERT_EFI_ERROR (Status);
67 CpuDeadLoop ();
68 //
69 // Keep compilers happy.
70 //
71 return Status;
72 }