mirror of https://github.com/acidanthera/audk.git
ArmVirtPkg: Add PlatformHasAcpiDtDxe for Cloud Hypervisor
The ArmVirtPkg\PlatformHasAcpiDtDxe implementation is not common and is specific for Qemu. So add a Cloud Hypervisor specific version that decides whether the firmware should expose an ACPI based or a Device Tree based hardware description to an operating system. Cc: Laszlo Ersek <lersek@redhat.com> Cc: Sami Mujawar <sami.mujawar@arm.com> Signed-off-by: Jianyong Wu <jianyong.wu@arm.com> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
This commit is contained in:
parent
4c051c2c65
commit
31fcee6d99
|
@ -0,0 +1,79 @@
|
||||||
|
/** @file
|
||||||
|
Decide whether the firmware should expose an ACPI- and/or a Device Tree-based
|
||||||
|
hardware description to the operating system.
|
||||||
|
|
||||||
|
Copyright (c) 2021, Arm Limited. All rights reserved.<BR>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include <Guid/PlatformHasAcpi.h>
|
||||||
|
#include <Guid/PlatformHasDeviceTree.h>
|
||||||
|
#include <Library/BaseLib.h>
|
||||||
|
#include <Library/DebugLib.h>
|
||||||
|
#include <Library/PcdLib.h>
|
||||||
|
#include <Library/UefiBootServicesTableLib.h>
|
||||||
|
|
||||||
|
/** Entry point for the Cloud Hypervisor PlatformHasAcpiDtDxe.
|
||||||
|
|
||||||
|
@param [in] ImageHandle Handle for this image.
|
||||||
|
@param [in] SystemTable Pointer to the EFI system table.
|
||||||
|
|
||||||
|
@return EFI_SUCCESS If ACPI or Device Tree based hardware
|
||||||
|
description protocol was installed.
|
||||||
|
@return EFI_INVALID_PARAMETER A parameter was invalid.
|
||||||
|
@return EFI_OUT_OF_RESOURCES Insufficient resources exist to complete
|
||||||
|
the request.
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
PlatformHasAcpiDt (
|
||||||
|
IN EFI_HANDLE ImageHandle,
|
||||||
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
|
||||||
|
//
|
||||||
|
// 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.
|
||||||
|
//
|
||||||
|
if (MAX_UINTN == MAX_UINT64 &&
|
||||||
|
!PcdGetBool (PcdForceNoAcpi)) {
|
||||||
|
Status = gBS->InstallProtocolInterface (
|
||||||
|
&ImageHandle,
|
||||||
|
&gEdkiiPlatformHasAcpiGuid,
|
||||||
|
EFI_NATIVE_INTERFACE,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
goto Failed;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Expose the Device Tree otherwise.
|
||||||
|
//
|
||||||
|
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;
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
## @file
|
||||||
|
# Decide whether the firmware should expose an ACPI- and/or a Device Tree-based
|
||||||
|
# hardware description to the operating system.
|
||||||
|
#
|
||||||
|
# Copyright (c) 2021, Arm Limited. All rights reserved.<BR>
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
##
|
||||||
|
|
||||||
|
[Defines]
|
||||||
|
INF_VERSION = 0x0001001B
|
||||||
|
BASE_NAME = CloudHvPlatformHasAcpiDtDxe
|
||||||
|
FILE_GUID = 71fe72f9-6dc1-199d-5054-13b4200ee88d
|
||||||
|
MODULE_TYPE = DXE_DRIVER
|
||||||
|
VERSION_STRING = 1.0
|
||||||
|
ENTRY_POINT = PlatformHasAcpiDt
|
||||||
|
|
||||||
|
[Sources]
|
||||||
|
CloudHvHasAcpiDtDxe.c
|
||||||
|
|
||||||
|
[Packages]
|
||||||
|
ArmVirtPkg/ArmVirtPkg.dec
|
||||||
|
EmbeddedPkg/EmbeddedPkg.dec
|
||||||
|
MdeModulePkg/MdeModulePkg.dec
|
||||||
|
MdePkg/MdePkg.dec
|
||||||
|
|
||||||
|
[LibraryClasses]
|
||||||
|
BaseLib
|
||||||
|
DebugLib
|
||||||
|
PcdLib
|
||||||
|
UefiBootServicesTableLib
|
||||||
|
UefiDriverEntryPoint
|
||||||
|
|
||||||
|
[Guids]
|
||||||
|
gEdkiiPlatformHasAcpiGuid ## SOMETIMES_PRODUCES ## PROTOCOL
|
||||||
|
gEdkiiPlatformHasDeviceTreeGuid ## SOMETIMES_PRODUCES ## PROTOCOL
|
||||||
|
|
||||||
|
[Pcd]
|
||||||
|
gArmVirtTokenSpaceGuid.PcdForceNoAcpi
|
||||||
|
|
||||||
|
[Depex]
|
||||||
|
gEfiVariableArchProtocolGuid
|
Loading…
Reference in New Issue