Remove global variables, store the state in PlatformInfoHob instead. Probing for fw_cfg happens on first use, at library initialization time the Hob might not be present yet.
Signed-off-by: Gerd Hoffmann <kra...@redhat.com> --- .../Library/QemuFwCfgLib/QemuFwCfgPeiLib.inf | 4 ++ OvmfPkg/Include/Library/PlatformInitLib.h | 4 ++ OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPei.c | 44 ++++++++++++++++--- 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPeiLib.inf b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPeiLib.inf index 1d7543a7d40f..b1f548febcf7 100644 --- a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPeiLib.inf +++ b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPeiLib.inf @@ -39,8 +39,12 @@ [LibraryClasses] BaseLib BaseMemoryLib DebugLib + HobLib IoLib MemoryAllocationLib +[Guids] + gUefiOvmfPkgPlatformInfoGuid + [Pcd] gUefiOvmfPkgTokenSpaceGuid.PcdOvmfWorkAreaBase diff --git a/OvmfPkg/Include/Library/PlatformInitLib.h b/OvmfPkg/Include/Library/PlatformInitLib.h index da7ed76041d2..bf6f90a5761c 100644 --- a/OvmfPkg/Include/Library/PlatformInitLib.h +++ b/OvmfPkg/Include/Library/PlatformInitLib.h @@ -50,6 +50,10 @@ typedef struct { UINT32 S3AcpiReservedMemorySize; UINT64 FeatureControlValue; + + BOOLEAN QemuFwCfgChecked; + BOOLEAN QemuFwCfgSupported; + BOOLEAN QemuFwCfgDmaSupported; } EFI_HOB_PLATFORM_INFO; #pragma pack() diff --git a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPei.c b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPei.c index a936fd103955..da86a3c84c02 100644 --- a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPei.c +++ b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPei.c @@ -9,17 +9,17 @@ SPDX-License-Identifier: BSD-2-Clause-Patent **/ +#include <PiPei.h> #include <Library/BaseLib.h> -#include <Library/IoLib.h> #include <Library/DebugLib.h> +#include <Library/HobLib.h> +#include <Library/IoLib.h> +#include <Library/PlatformInitLib.h> #include <Library/QemuFwCfgLib.h> #include <WorkArea.h> #include "QemuFwCfgLibInternal.h" -STATIC BOOLEAN mQemuFwCfgSupported = FALSE; -STATIC BOOLEAN mQemuFwCfgDmaSupported; - /** Check if it is Tdx guest @@ -93,13 +93,39 @@ QemuFwCfgProbe ( )); } +STATIC +EFI_HOB_PLATFORM_INFO * +QemuFwCfgGetPlatformInfo ( + VOID + ) +{ + EFI_HOB_PLATFORM_INFO *PlatformInfoHob; + EFI_HOB_GUID_TYPE *GuidHob; + + GuidHob = GetFirstGuidHob (&gUefiOvmfPkgPlatformInfoGuid); + if (GuidHob == NULL) { + return NULL; + } + + PlatformInfoHob = (EFI_HOB_PLATFORM_INFO *)GET_GUID_HOB_DATA (GuidHob); + + if (!PlatformInfoHob->QemuFwCfgChecked) { + QemuFwCfgProbe ( + &PlatformInfoHob->QemuFwCfgSupported, + &PlatformInfoHob->QemuFwCfgDmaSupported + ); + PlatformInfoHob->QemuFwCfgChecked = TRUE; + } + + return PlatformInfoHob; +} + RETURN_STATUS EFIAPI QemuFwCfgInitialize ( VOID ) { - QemuFwCfgProbe (&mQemuFwCfgSupported, &mQemuFwCfgDmaSupported); return RETURN_SUCCESS; } @@ -117,7 +143,9 @@ InternalQemuFwCfgIsAvailable ( VOID ) { - return mQemuFwCfgSupported; + EFI_HOB_PLATFORM_INFO *PlatformInfoHob = QemuFwCfgGetPlatformInfo (); + + return PlatformInfoHob->QemuFwCfgSupported; } /** @@ -132,7 +160,9 @@ InternalQemuFwCfgDmaIsAvailable ( VOID ) { - return mQemuFwCfgDmaSupported; + EFI_HOB_PLATFORM_INFO *PlatformInfoHob = QemuFwCfgGetPlatformInfo (); + + return PlatformInfoHob->QemuFwCfgDmaSupported; } /** -- 2.38.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#96913): https://edk2.groups.io/g/devel/message/96913 Mute This Topic: https://groups.io/mt/95405219/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-