From f9f4164af9cdf01765ee1c7b5bf369d29d7e5da1 Mon Sep 17 00:00:00 2001 From: Ard Biesheuvel Date: Fri, 15 Nov 2024 11:15:17 +0100 Subject: ArmVirtPkg: Rename ArmVirtQemuMonitorLib to ArmVirtMonitorLib The implementation of ArmMonitorLib that selects the conduit (SMC or HVC) based on the PSCI FDT node is suitable for other VMMs as well, so rename it more appropriately. Signed-off-by: Ard Biesheuvel --- ArmVirtPkg/ArmVirtQemu.dsc | 4 +- ArmVirtPkg/ArmVirtQemuKernel.dsc | 2 +- .../Library/ArmVirtMonitorLib/ArmVirtMonitorLib.c | 95 +++++++++++++++ .../ArmVirtMonitorLib/ArmVirtMonitorLib.inf | 39 +++++++ .../ArmVirtMonitorPeiLib/ArmVirtMonitorPeiLib.c | 128 +++++++++++++++++++++ .../ArmVirtMonitorPeiLib/ArmVirtMonitorPeiLib.inf | 35 ++++++ .../ArmVirtQemuMonitorLib/ArmVirtQemuMonitorLib.c | 95 --------------- .../ArmVirtQemuMonitorLib.inf | 39 ------- .../ArmVirtQemuMonitorPeiLib.c | 128 --------------------- .../ArmVirtQemuMonitorPeiLib.inf | 35 ------ 10 files changed, 300 insertions(+), 300 deletions(-) create mode 100644 ArmVirtPkg/Library/ArmVirtMonitorLib/ArmVirtMonitorLib.c create mode 100644 ArmVirtPkg/Library/ArmVirtMonitorLib/ArmVirtMonitorLib.inf create mode 100644 ArmVirtPkg/Library/ArmVirtMonitorPeiLib/ArmVirtMonitorPeiLib.c create mode 100644 ArmVirtPkg/Library/ArmVirtMonitorPeiLib/ArmVirtMonitorPeiLib.inf delete mode 100644 ArmVirtPkg/Library/ArmVirtQemuMonitorLib/ArmVirtQemuMonitorLib.c delete mode 100644 ArmVirtPkg/Library/ArmVirtQemuMonitorLib/ArmVirtQemuMonitorLib.inf delete mode 100644 ArmVirtPkg/Library/ArmVirtQemuMonitorPeiLib/ArmVirtQemuMonitorPeiLib.c delete mode 100644 ArmVirtPkg/Library/ArmVirtQemuMonitorPeiLib/ArmVirtQemuMonitorPeiLib.inf diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc index 1ba63d2e16..16bec9785e 100644 --- a/ArmVirtPkg/ArmVirtQemu.dsc +++ b/ArmVirtPkg/ArmVirtQemu.dsc @@ -92,7 +92,7 @@ TpmPlatformHierarchyLib|SecurityPkg/Library/PeiDxeTpmPlatformHierarchyLibNull/PeiDxeTpmPlatformHierarchyLib.inf !endif - ArmMonitorLib|ArmVirtPkg/Library/ArmVirtQemuMonitorLib/ArmVirtQemuMonitorLib.inf + ArmMonitorLib|ArmVirtPkg/Library/ArmVirtMonitorLib/ArmVirtMonitorLib.inf [LibraryClasses.AARCH64] ArmPlatformLib|ArmVirtPkg/Library/ArmPlatformLibQemu/ArmPlatformLibQemu.inf @@ -102,7 +102,7 @@ [LibraryClasses.common.PEIM] ArmVirtMemInfoLib|ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoPeiLib.inf - ArmMonitorLib|ArmVirtPkg/Library/ArmVirtQemuMonitorPeiLib/ArmVirtQemuMonitorPeiLib.inf + ArmMonitorLib|ArmVirtPkg/Library/ArmVirtMonitorPeiLib/ArmVirtMonitorPeiLib.inf FdtLib|MdePkg/Library/BaseFdtLib/BaseFdtLib.inf Tpm2DeviceLib|SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2DeviceLibDTpm.inf diff --git a/ArmVirtPkg/ArmVirtQemuKernel.dsc b/ArmVirtPkg/ArmVirtQemuKernel.dsc index 9927bdae0e..84b4f71f29 100644 --- a/ArmVirtPkg/ArmVirtQemuKernel.dsc +++ b/ArmVirtPkg/ArmVirtQemuKernel.dsc @@ -82,7 +82,7 @@ TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.inf TpmPlatformHierarchyLib|SecurityPkg/Library/PeiDxeTpmPlatformHierarchyLibNull/PeiDxeTpmPlatformHierarchyLib.inf - ArmMonitorLib|ArmVirtPkg/Library/ArmVirtQemuMonitorLib/ArmVirtQemuMonitorLib.inf + ArmMonitorLib|ArmVirtPkg/Library/ArmVirtMonitorLib/ArmVirtMonitorLib.inf [LibraryClasses.common.DXE_DRIVER] AcpiPlatformLib|OvmfPkg/Library/AcpiPlatformLib/DxeAcpiPlatformLib.inf diff --git a/ArmVirtPkg/Library/ArmVirtMonitorLib/ArmVirtMonitorLib.c b/ArmVirtPkg/Library/ArmVirtMonitorLib/ArmVirtMonitorLib.c new file mode 100644 index 0000000000..15171ef51b --- /dev/null +++ b/ArmVirtPkg/Library/ArmVirtMonitorLib/ArmVirtMonitorLib.c @@ -0,0 +1,95 @@ +/** @file + Arm Monitor Library that chooses the conduit based on the PSCI node in the + device tree provided by the VMM. + + Copyright (c) 2022, Arm Limited. All rights reserved.
+ Copyright (c) 2024, Google LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include + +#include +#include +#include +#include +#include +#include + +#include + +STATIC UINT32 mArmSmcccMethod; + +/** Library constructor. + + Assign the global variable mArmSmcccMethod based on the PSCI node in the + device tree. +**/ +RETURN_STATUS +EFIAPI +ArmVirtMonitorLibConstructor ( + VOID + ) +{ + EFI_STATUS Status; + FDT_CLIENT_PROTOCOL *FdtClient; + CONST VOID *Prop; + + Status = gBS->LocateProtocol ( + &gFdtClientProtocolGuid, + NULL, + (VOID **)&FdtClient + ); + ASSERT_EFI_ERROR (Status); + + Status = FdtClient->FindCompatibleNodeProperty ( + FdtClient, + "arm,psci-0.2", + "method", + &Prop, + NULL + ); + if (EFI_ERROR (Status)) { + return Status; + } + + if (AsciiStrnCmp (Prop, "hvc", 3) == 0) { + mArmSmcccMethod = 1; + } else if (AsciiStrnCmp (Prop, "smc", 3) == 0) { + mArmSmcccMethod = 2; + } else { + DEBUG (( + DEBUG_ERROR, + "%a: Unknown SMCCC method \"%a\"\n", + __func__, + Prop + )); + return EFI_NOT_FOUND; + } + + return EFI_SUCCESS; +} + +/** Monitor call. + + An HyperVisor Call (HVC) or System Monitor Call (SMC) will be issued + depending on the default conduit. + + @param [in,out] Args Arguments for the HVC/SMC. +**/ +VOID +EFIAPI +ArmMonitorCall ( + IN OUT ARM_MONITOR_ARGS *Args + ) +{ + if (mArmSmcccMethod == 1) { + ArmCallHvc ((ARM_HVC_ARGS *)Args); + } else if (mArmSmcccMethod == 2) { + ArmCallSmc ((ARM_SMC_ARGS *)Args); + } else { + ASSERT ((mArmSmcccMethod == 1) || (mArmSmcccMethod == 2)); + } +} diff --git a/ArmVirtPkg/Library/ArmVirtMonitorLib/ArmVirtMonitorLib.inf b/ArmVirtPkg/Library/ArmVirtMonitorLib/ArmVirtMonitorLib.inf new file mode 100644 index 0000000000..fe6098aea3 --- /dev/null +++ b/ArmVirtPkg/Library/ArmVirtMonitorLib/ArmVirtMonitorLib.inf @@ -0,0 +1,39 @@ +## @file +# Arm Monitor Library that chooses the conduit based on the PSCI node in the +# device tree provided by the VMM +# +# Copyright (c) 2022, Arm Limited. All rights reserved.
+# Copyright (c) 2024, Google LLC. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION = 1.29 + BASE_NAME = ArmVirtMonitorLib + FILE_GUID = 09f50ee5-2aa2-42b9-a2a0-090faeefed2b + MODULE_TYPE = BASE + VERSION_STRING = 1.0 + LIBRARY_CLASS = ArmMonitorLib|DXE_DRIVER DXE_RUNTIME_DRIVER + CONSTRUCTOR = ArmVirtMonitorLibConstructor + +[Sources] + ArmVirtMonitorLib.c + +[Packages] + ArmPkg/ArmPkg.dec + EmbeddedPkg/EmbeddedPkg.dec + MdePkg/MdePkg.dec + +[LibraryClasses] + ArmHvcLib + ArmSmcLib + BaseLib + DebugLib + UefiBootServicesTableLib + +[Protocols] + gFdtClientProtocolGuid ## CONSUMES + +[Depex] + gFdtClientProtocolGuid diff --git a/ArmVirtPkg/Library/ArmVirtMonitorPeiLib/ArmVirtMonitorPeiLib.c b/ArmVirtPkg/Library/ArmVirtMonitorPeiLib/ArmVirtMonitorPeiLib.c new file mode 100644 index 0000000000..7b0ba6262b --- /dev/null +++ b/ArmVirtPkg/Library/ArmVirtMonitorPeiLib/ArmVirtMonitorPeiLib.c @@ -0,0 +1,128 @@ +/** @file + Arm Monitor Library that chooses the conduit based on the PSCI node in the + device tree provided by the VMM. + + Copyright (c) 2022, Arm Limited. All rights reserved.
+ Copyright (c) 2024, Google LLC. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include + +#include +#include +#include +#include +#include +#include + +typedef enum { + SmcccConduitUnknown, + SmcccConduitSmc, + SmcccConduitHvc, +} SMCCC_CONDUIT; + +/** + Discover the SMCCC conduit by parsing the PSCI device tree node. + + @return the discovered SMCCC conduit +**/ +STATIC +SMCCC_CONDUIT +DiscoverSmcccConduit ( + VOID + ) +{ + VOID *DeviceTreeBase; + INT32 Node, Prev; + INT32 Len; + CONST FDT_PROPERTY *Compatible; + CONST CHAR8 *CompatibleItem; + CONST FDT_PROPERTY *Prop; + + DeviceTreeBase = (VOID *)(UINTN)PcdGet64 (PcdDeviceTreeInitialBaseAddress); + ASSERT (FdtCheckHeader (DeviceTreeBase) == 0); + + // + // Enumerate all FDT nodes looking for the PSCI node and capture the conduit + // + for (Prev = 0; ; Prev = Node) { + Node = FdtNextNode (DeviceTreeBase, Prev, NULL); + if (Node < 0) { + break; + } + + Compatible = FdtGetProperty (DeviceTreeBase, Node, "compatible", &Len); + if (Compatible == NULL) { + continue; + } + + // + // Iterate over the NULL-separated items in the compatible string + // + for (CompatibleItem = Compatible->Data; CompatibleItem < Compatible->Data + Len; + CompatibleItem += 1 + AsciiStrLen (CompatibleItem)) + { + if (AsciiStrCmp (CompatibleItem, "arm,psci-0.2") != 0) { + continue; + } + + Prop = FdtGetProperty (DeviceTreeBase, Node, "method", NULL); + if (Prop == NULL) { + DEBUG (( + DEBUG_ERROR, + "%a: Missing PSCI method property\n", + __func__ + )); + + return SmcccConduitUnknown; + } + + if (AsciiStrnCmp (Prop->Data, "hvc", 3) == 0) { + return SmcccConduitHvc; + } else if (AsciiStrnCmp (Prop->Data, "smc", 3) == 0) { + return SmcccConduitSmc; + } else { + DEBUG (( + DEBUG_ERROR, + "%a: Unknown PSCI method \"%a\"\n", + __func__, + Prop + )); + + return SmcccConduitUnknown; + } + } + } + + return SmcccConduitUnknown; +} + +/** Monitor call. + + An HyperVisor Call (HVC) or System Monitor Call (SMC) will be issued + depending on the default conduit. + + @param [in,out] Args Arguments for the HVC/SMC. +**/ +VOID +EFIAPI +ArmMonitorCall ( + IN OUT ARM_MONITOR_ARGS *Args + ) +{ + switch (DiscoverSmcccConduit ()) { + case SmcccConduitHvc: + ArmCallHvc ((ARM_HVC_ARGS *)Args); + break; + + case SmcccConduitSmc: + ArmCallSmc ((ARM_SMC_ARGS *)Args); + break; + + default: + ASSERT (FALSE); + } +} diff --git a/ArmVirtPkg/Library/ArmVirtMonitorPeiLib/ArmVirtMonitorPeiLib.inf b/ArmVirtPkg/Library/ArmVirtMonitorPeiLib/ArmVirtMonitorPeiLib.inf new file mode 100644 index 0000000000..a337428be4 --- /dev/null +++ b/ArmVirtPkg/Library/ArmVirtMonitorPeiLib/ArmVirtMonitorPeiLib.inf @@ -0,0 +1,35 @@ +## @file +# Arm Monitor Library that chooses the conduit based on the PSCI node in the +# device tree provided by the VMM. +# +# Copyright (c) 2022, Arm Limited. All rights reserved.
+# Copyright (c) 2024, Google LLC. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION = 1.29 + BASE_NAME = ArmVirtMonitorPeiLib + FILE_GUID = c610e0dc-dd7a-47c8-8fea-26c4710709ff + MODULE_TYPE = BASE + VERSION_STRING = 1.0 + LIBRARY_CLASS = ArmMonitorLib|PEIM + +[Sources] + ArmVirtMonitorPeiLib.c + +[Packages] + ArmPkg/ArmPkg.dec + MdePkg/MdePkg.dec + OvmfPkg/OvmfPkg.dec + +[LibraryClasses] + ArmHvcLib + ArmSmcLib + BaseLib + DebugLib + FdtLib + +[Pcd] + gUefiOvmfPkgTokenSpaceGuid.PcdDeviceTreeInitialBaseAddress diff --git a/ArmVirtPkg/Library/ArmVirtQemuMonitorLib/ArmVirtQemuMonitorLib.c b/ArmVirtPkg/Library/ArmVirtQemuMonitorLib/ArmVirtQemuMonitorLib.c deleted file mode 100644 index 1c8b18d5e5..0000000000 --- a/ArmVirtPkg/Library/ArmVirtQemuMonitorLib/ArmVirtQemuMonitorLib.c +++ /dev/null @@ -1,95 +0,0 @@ -/** @file - Arm Monitor Library that chooses the conduit based on the PSCI node in the - device tree provided by QEMU - - Copyright (c) 2022, Arm Limited. All rights reserved.
- Copyright (c) 2024, Google LLC. All rights reserved.
- - SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#include - -#include -#include -#include -#include -#include -#include - -#include - -STATIC UINT32 mArmSmcccMethod; - -/** Library constructor. - - Assign the global variable mArmSmcccMethod based on the PSCI node in the - device tree. -**/ -RETURN_STATUS -EFIAPI -ArmVirtQemuMonitorLibConstructor ( - VOID - ) -{ - EFI_STATUS Status; - FDT_CLIENT_PROTOCOL *FdtClient; - CONST VOID *Prop; - - Status = gBS->LocateProtocol ( - &gFdtClientProtocolGuid, - NULL, - (VOID **)&FdtClient - ); - ASSERT_EFI_ERROR (Status); - - Status = FdtClient->FindCompatibleNodeProperty ( - FdtClient, - "arm,psci-0.2", - "method", - &Prop, - NULL - ); - if (EFI_ERROR (Status)) { - return Status; - } - - if (AsciiStrnCmp (Prop, "hvc", 3) == 0) { - mArmSmcccMethod = 1; - } else if (AsciiStrnCmp (Prop, "smc", 3) == 0) { - mArmSmcccMethod = 2; - } else { - DEBUG (( - DEBUG_ERROR, - "%a: Unknown SMCCC method \"%a\"\n", - __func__, - Prop - )); - return EFI_NOT_FOUND; - } - - return EFI_SUCCESS; -} - -/** Monitor call. - - An HyperVisor Call (HVC) or System Monitor Call (SMC) will be issued - depending on the default conduit. - - @param [in,out] Args Arguments for the HVC/SMC. -**/ -VOID -EFIAPI -ArmMonitorCall ( - IN OUT ARM_MONITOR_ARGS *Args - ) -{ - if (mArmSmcccMethod == 1) { - ArmCallHvc ((ARM_HVC_ARGS *)Args); - } else if (mArmSmcccMethod == 2) { - ArmCallSmc ((ARM_SMC_ARGS *)Args); - } else { - ASSERT ((mArmSmcccMethod == 1) || (mArmSmcccMethod == 2)); - } -} diff --git a/ArmVirtPkg/Library/ArmVirtQemuMonitorLib/ArmVirtQemuMonitorLib.inf b/ArmVirtPkg/Library/ArmVirtQemuMonitorLib/ArmVirtQemuMonitorLib.inf deleted file mode 100644 index e43ba215c2..0000000000 --- a/ArmVirtPkg/Library/ArmVirtQemuMonitorLib/ArmVirtQemuMonitorLib.inf +++ /dev/null @@ -1,39 +0,0 @@ -## @file -# Arm Monitor Library that chooses the conduit based on the PSCI node in the -# device tree provided by QEMU -# -# Copyright (c) 2022, Arm Limited. All rights reserved.
-# Copyright (c) 2024, Google LLC. All rights reserved.
-# -# SPDX-License-Identifier: BSD-2-Clause-Patent -## - -[Defines] - INF_VERSION = 1.29 - BASE_NAME = ArmVirtQemuMonitorLib - FILE_GUID = 09f50ee5-2aa2-42b9-a2a0-090faeefed2b - MODULE_TYPE = BASE - VERSION_STRING = 1.0 - LIBRARY_CLASS = ArmMonitorLib|DXE_DRIVER DXE_RUNTIME_DRIVER - CONSTRUCTOR = ArmVirtQemuMonitorLibConstructor - -[Sources] - ArmVirtQemuMonitorLib.c - -[Packages] - ArmPkg/ArmPkg.dec - EmbeddedPkg/EmbeddedPkg.dec - MdePkg/MdePkg.dec - -[LibraryClasses] - ArmHvcLib - ArmSmcLib - BaseLib - DebugLib - UefiBootServicesTableLib - -[Protocols] - gFdtClientProtocolGuid ## CONSUMES - -[Depex] - gFdtClientProtocolGuid diff --git a/ArmVirtPkg/Library/ArmVirtQemuMonitorPeiLib/ArmVirtQemuMonitorPeiLib.c b/ArmVirtPkg/Library/ArmVirtQemuMonitorPeiLib/ArmVirtQemuMonitorPeiLib.c deleted file mode 100644 index aa8d5d6082..0000000000 --- a/ArmVirtPkg/Library/ArmVirtQemuMonitorPeiLib/ArmVirtQemuMonitorPeiLib.c +++ /dev/null @@ -1,128 +0,0 @@ -/** @file - Arm Monitor Library that chooses the conduit based on the PSCI node in the - device tree provided by QEMU. - - Copyright (c) 2022, Arm Limited. All rights reserved.
- Copyright (c) 2024, Google LLC. All rights reserved.
- - SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#include - -#include -#include -#include -#include -#include -#include - -typedef enum { - SmcccConduitUnknown, - SmcccConduitSmc, - SmcccConduitHvc, -} SMCCC_CONDUIT; - -/** - Discover the SMCCC conduit by parsing the PSCI device tree node. - - @return the discovered SMCCC conduit -**/ -STATIC -SMCCC_CONDUIT -DiscoverSmcccConduit ( - VOID - ) -{ - VOID *DeviceTreeBase; - INT32 Node, Prev; - INT32 Len; - CONST FDT_PROPERTY *Compatible; - CONST CHAR8 *CompatibleItem; - CONST FDT_PROPERTY *Prop; - - DeviceTreeBase = (VOID *)(UINTN)PcdGet64 (PcdDeviceTreeInitialBaseAddress); - ASSERT (FdtCheckHeader (DeviceTreeBase) == 0); - - // - // Enumerate all FDT nodes looking for the PSCI node and capture the conduit - // - for (Prev = 0; ; Prev = Node) { - Node = FdtNextNode (DeviceTreeBase, Prev, NULL); - if (Node < 0) { - break; - } - - Compatible = FdtGetProperty (DeviceTreeBase, Node, "compatible", &Len); - if (Compatible == NULL) { - continue; - } - - // - // Iterate over the NULL-separated items in the compatible string - // - for (CompatibleItem = Compatible->Data; CompatibleItem < Compatible->Data + Len; - CompatibleItem += 1 + AsciiStrLen (CompatibleItem)) - { - if (AsciiStrCmp (CompatibleItem, "arm,psci-0.2") != 0) { - continue; - } - - Prop = FdtGetProperty (DeviceTreeBase, Node, "method", NULL); - if (Prop == NULL) { - DEBUG (( - DEBUG_ERROR, - "%a: Missing PSCI method property\n", - __func__ - )); - - return SmcccConduitUnknown; - } - - if (AsciiStrnCmp (Prop->Data, "hvc", 3) == 0) { - return SmcccConduitHvc; - } else if (AsciiStrnCmp (Prop->Data, "smc", 3) == 0) { - return SmcccConduitSmc; - } else { - DEBUG (( - DEBUG_ERROR, - "%a: Unknown PSCI method \"%a\"\n", - __func__, - Prop - )); - - return SmcccConduitUnknown; - } - } - } - - return SmcccConduitUnknown; -} - -/** Monitor call. - - An HyperVisor Call (HVC) or System Monitor Call (SMC) will be issued - depending on the default conduit. - - @param [in,out] Args Arguments for the HVC/SMC. -**/ -VOID -EFIAPI -ArmMonitorCall ( - IN OUT ARM_MONITOR_ARGS *Args - ) -{ - switch (DiscoverSmcccConduit ()) { - case SmcccConduitHvc: - ArmCallHvc ((ARM_HVC_ARGS *)Args); - break; - - case SmcccConduitSmc: - ArmCallSmc ((ARM_SMC_ARGS *)Args); - break; - - default: - ASSERT (FALSE); - } -} diff --git a/ArmVirtPkg/Library/ArmVirtQemuMonitorPeiLib/ArmVirtQemuMonitorPeiLib.inf b/ArmVirtPkg/Library/ArmVirtQemuMonitorPeiLib/ArmVirtQemuMonitorPeiLib.inf deleted file mode 100644 index cd850f342d..0000000000 --- a/ArmVirtPkg/Library/ArmVirtQemuMonitorPeiLib/ArmVirtQemuMonitorPeiLib.inf +++ /dev/null @@ -1,35 +0,0 @@ -## @file -# Arm Monitor Library that chooses the conduit based on the PSCI node in the -# device tree provided by QEMU. -# -# Copyright (c) 2022, Arm Limited. All rights reserved.
-# Copyright (c) 2024, Google LLC. All rights reserved.
-# -# SPDX-License-Identifier: BSD-2-Clause-Patent -## - -[Defines] - INF_VERSION = 1.29 - BASE_NAME = ArmVirtQemuMonitorPeiLib - FILE_GUID = c610e0dc-dd7a-47c8-8fea-26c4710709ff - MODULE_TYPE = BASE - VERSION_STRING = 1.0 - LIBRARY_CLASS = ArmMonitorLib|PEIM - -[Sources] - ArmVirtQemuMonitorPeiLib.c - -[Packages] - ArmPkg/ArmPkg.dec - MdePkg/MdePkg.dec - OvmfPkg/OvmfPkg.dec - -[LibraryClasses] - ArmHvcLib - ArmSmcLib - BaseLib - DebugLib - FdtLib - -[Pcd] - gUefiOvmfPkgTokenSpaceGuid.PcdDeviceTreeInitialBaseAddress -- cgit