OvmfPkg/QemuFwCfgLib: remove mQemuFwCfgSupported + mQemuFwCfgDmaSupported

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 <kraxel@redhat.com>
Tested-by: Tom Lendacky <thomas.lendacky@amd.com>
Acked-by: Ard Biesheuvel <ardb@kernel.org>
This commit is contained in:
Gerd Hoffmann 2022-12-02 14:10:09 +01:00 committed by mergify[bot]
parent 81bbc1452c
commit cda98df162
3 changed files with 45 additions and 7 deletions

View File

@ -50,6 +50,10 @@ typedef struct {
UINT32 S3AcpiReservedMemorySize;
UINT64 FeatureControlValue;
BOOLEAN QemuFwCfgChecked;
BOOLEAN QemuFwCfgSupported;
BOOLEAN QemuFwCfgDmaSupported;
} EFI_HOB_PLATFORM_INFO;
#pragma pack()

View File

@ -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;
}
/**

View File

@ -39,8 +39,12 @@
BaseLib
BaseMemoryLib
DebugLib
HobLib
IoLib
MemoryAllocationLib
[Guids]
gUefiOvmfPkgPlatformInfoGuid
[Pcd]
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfWorkAreaBase